U
    ZhV                     @   sR   d Z ddlmZ ddlZddlmZmZ ddlmZ ee	Z
G dd deZdS )zN
Fixed Developer Discovery that includes developers from the developers table
    )DeveloperDiscoveryN)datetimetimezone)textc                       s8   e Zd ZdZdd Zd	eeeeed fddZ  ZS )
FixedDeveloperDiscoveryzAExtended DeveloperDiscovery that also checks the developers tablec           
      C   s  | j s
g S z@td}| j |}g }|D ]}d}d}z8td}| j |d|ji }|rn|jpfd}|j}W n: tk
r }	 zt	d|j
 d|	  W 5 d}	~	X Y nX ||jpd|j |j
d	d
|j
|jpd|j d| d|r| n|jr|j nd|dd|j|jr"|j ndddd q*tdt| d |W S  tk
r }	 ztd|	  g  W Y S d}	~	X Y nX dS )z(Get developers from the developers tableaQ  
                SELECT 
                    id,
                    developer_id,
                    name,
                    email,
                    active,
                    api_token,
                    created_at,
                    last_sync
                FROM developers
                WHERE active = true
            r   Na  
                        SELECT 
                            COUNT(*) as count,
                            MAX(timestamp) as last_activity
                        FROM activity_records 
                        WHERE developer_id = :dev_id
                    dev_idzError counting activities for z: Zdev_unknowni  zRegistered developer (z activities)Zdevelopers_table
registeredzN/A)idnamehostporthostname	device_iddescription	last_seenactivity_countsourcestatusemail
created_atversionbucket_countzFound z developers in developers tablez)Error discovering from developers table: )
db_sessionr   executedeveloper_idfetchonecountlast_activity	Exceptionloggerwarningr   appendr
   	isoformatr   r   infolenerror)
selfqueryresult
developersrowr   r   Zcount_queryZcount_resulte r-   </var/www/html/timesheet/backend/fixed_developer_discovery.pydiscover_from_developers_table   sT    
 


*
 
z6FixedDeveloperDiscovery.discover_from_developers_tableFT)scan_network
scan_localscan_databaseinclude_developers_tablereturnc                    s   t  |||}|rtd |  }dd |D }|D ]~}|d |krT|| q8t|D ]X\}	}
|
d |d kr\|
ds|d|
d< |dd|
ddkr|d |
d<  q8q\q8tdt|  |S )	z1Extended discovery that includes developers tablez/Discovering developers from developers table...c                 S   s   h | ]}|d  qS )r
   r-   ).0devr-   r-   r.   	<setcomp>c   s     zBFixedDeveloperDiscovery.discover_all_developers.<locals>.<setcomp>r
   r   r   r   z3Total developers after including developers table: )	superdiscover_all_developersr    r$   r/   r"   	enumerategetr%   )r'   r0   r1   r2   r3   all_developersZ
table_devsZexisting_idsr6   iexisting	__class__r-   r.   r9   W   s"    

z/FixedDeveloperDiscovery.discover_all_developers)FTTT)	__name__
__module____qualname____doc__r/   boollistr9   __classcell__r-   r-   r?   r.   r      s   G      r   )rD   developer_discoveryr   loggingr   r   
sqlalchemyr   	getLoggerrA   r    r   r-   r-   r-   r.   <module>   s   
