+
    -iH                        ^ RI t ^ RIHtHt ^ RIHtHtHtHt ^ RIH	t	 ^RI
HtHtHt ^RIHt ^RIHt ^RIHtHtHt ^R	IHtHtHtHtHtHtHt ^R
IHtH t  ]! RR.R7      t!R R lt"]!PG                  R]R7      ]! ]4      3R R ll4       t$]!PG                  R]R7      ]! ]4      ]! ]4      3R R ll4       t%]!PG                  R4      ]! ]4      ]! ]4      3R R ll4       t&R# )    N)datetimetimezone)	APIRouterDependsHTTPExceptionstatus)Session)generate_token
hash_tokenrequire_agent)settings)get_db)AgentEnrollmentTokenTask)CheckinRequestCheckinResponseEnrollRequestEnrollResponse
SystemInfoTaskOutTaskResultRequest)awaretruncate_outputz/api/agentsagents)prefixtagsc                4    V ^8  d   QhR\         R\        RR/# )   agentinforeturnN)r   r   )formats   "server/app/api_agents.py__annotate__r%      s!     1 1e 1: 1$ 1    c                    VP                   '       d   VP                   V n         VP                  V n        VP                  V n        VP                  V n        VP                  V n        VP
                  V n        VP                  V n        VP                  V n        VP                  V n        VP                  V n	        VP                  V n
        VP                  V n        VP                  V n        VP                  V n        VP                  V n        VP                  V n        \         P"                  ! \$        P&                  4      V n        R # )N)hostnameos_name
os_versionkernelarch	cpu_model	cpu_corescpu_percentmem_total_mbmem_used_mbdisk_total_gbdisk_used_gbuptime_seconds
ip_addressagent_versionlogged_in_userr   nowr   utc	last_seen)r    r!   s   &&r$   _apply_system_infor;      s    }}}LLEME;;ELEJnnEOnnEO((E**E((E,,E**E..EE,,E..Ell8<<0EOr&   z/enroll)response_modelc                <    V ^8  d   QhR\         R\        R\        /# )r   reqdbr"   )r   r	   r   )r#   s   "r$   r%   r%   /   s!       7  r&   c                    VP                  \        4      P                  \        P                  V P                  8H  4      P                  4       pV'       d   VP                  '       d   \        \        P                  R R7      h\        VP                  4      pV'       dE   V\        P                  ! \        P                  4      8  d   \        \        P                  RR7      h\         P"                  ! 4       P$                  p\'        4       p\)        T\+        V4      V P,                  P.                  ;'       g    RR7      p\1        W`P,                  4       VP3                  V4       VP5                  4        VP6                  '       d&   VP8                  P;                  VP<                  4       VP?                  4        \A        VV\B        PD                  R7      # )zInvalid enrollment tokenstatus_codedetailzEnrollment token expiredunknown)agent_id
token_hashr(   )rE   tokencheckin_interval_seconds)#queryr   filterrG   enrollment_tokenfirstrevokedr   r   HTTP_403_FORBIDDENr   
expires_atr   r8   r   r9   uuiduuid4hexr
   r   r   system_infor(   r;   addflushdefault_group_idgroupsappenddefault_groupcommitr   r   rH   )r>   r?   
enrollmentrO   	public_idrG   r    s   &&     r$   enrollr]   .   sD    	!	%%)=)==	>	 
 +++(A(AJdeez,,-Jj8<<#==(A(AJdee

  IEe$))66YE
 uoo.FF5MHHJ"""J445IIK!)!B!B r&   z/checkinc                H    V ^8  d   QhR\         R\        R\        R\        /# )r   r>   r    r?   r"   )r   r   r	   r   )r#   s   "r$   r%   r%   P   s6     b b	bb 	b 	br&   c           	         \        WP                  4       VP                  \        4      P	                  \        P
                  VP                  8H  \        P                  R 8H  4      P                  \        P                  P                  4       4      P                  4       p\        P                  ! \        P                  4      p. pV FU  pRVn        WFn        TP!                  \#        VP                  VP$                  VP&                  ;'       g    / R7      4       KW  	  VP)                  4        \+        V\,        P.                  R7      # )pendingrunning)idtypepayload)tasksrH   )r;   rS   rI   r   rJ   agent_pkrb   r   order_byascallr   r8   r   r9   dispatched_atrX   r   rc   rd   rZ   r   r   rH   )r>   r    r?   r`   r8   outts   &&&    r$   checkinrm   O   s     uoo. 		)4;;)+C	D	$''++-	 		  ,,x||
$CC

7addbIJ  IIKx?`?`aar&   z/tasks/{task_id}/resultc          
      T    V ^8  d   QhR\         R\        R\        R\        R\        /# )r   task_idr>   r    r?   r"   )intr   r   r	   dict)r#   s   "r$   r%   r%   h   s:      	  		
 
r&   c                    VP                  \        V 4      pV'       d   VP                  VP                  8w  d   \	        \
        P                  R R7      hVP                  Vn        \        VP                  4      Vn	        \        VP                  4      Vn
        VP                  ^ 8X  d   RMRVn        \        P                  ! \        P                  4      Vn        VP!                  4        RR/# )zTask not foundrA   completefailedokT)getr   rf   rb   r   r   HTTP_404_NOT_FOUND	exit_coder   stdoutstderrr   r8   r   r9   completed_atrZ   )ro   r>   r    r?   tasks   &&&& r$   task_resultr}   g   s     66$ D4==EHH,(A(AJZ[[]]DN!#**-DK!#**-DK # 2*DK X\\2DIIK$<r&   )'rP   r   r   fastapir   r   r   r   sqlalchemy.ormr	   authr
   r   r   configr   r?   r   modelsr   r   r   schemasr   r   r   r   r   r   r   utilsr   r   routerr;   postr]   rm   r}    r&   r$   <module>r      s     ' = = " ; ;   0 0   *	-xj	91* Y~6-4V_  7@ Z8 =)&/b 9b. &' =)&/	 (r&   