Ë
    GKÕiU  ã                   ó  — d dl Z d dlZd dlZd dlmZmZmZmZmZ d dl	mZ
 d dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZ  ej.                   ej0                  e«      «      Zg d	¢Zd
Zdedefd„Zdefd„Z deddfd„Z!y)é    N)Ú
exceptionsÚlockÚmessagesÚsystemÚutil)r   )ÚFullAutoAttachOptionsÚfull_auto_attach)Ú_is_attached)ÚUAConfig)ÚAUTO_ATTACH_STATUS_MOTD_FILE)ÚnoticesÚstate_files)é„  r   i  i  i   i@8  é€p  r   é€Q r   é £ r   é€ô r   é F r   é€— r   z./run/ubuntu-advantage/flags/auto-attach-failedÚeÚreturnc                 ó’  — t        | t        j                  «      r*t        j                  j                  | j                  ¬«      S t        | t        j                  «      rt        j                  S t        | t        j                  «      r*t        j                  j                  | j                  ¬«      S t        | t        j                  «      r*t        j                  j                  | j                  ¬«      S t        | t        j                  «      rOt        j                   j                  | j"                  ¬«      dj                  t%        | j&                  «      «      z   S t        | t        j(                  «      rdj                  | j*                  «      S t,        j/                  d| ¬«       t%        | «      xs t        j0                  S )	N)Údetail)Úpid)Ú	error_msg)Úurlz: "{}"z"{}"zUnexpected exception)Úexc_info)Ú
isinstanceÚapi_exceptionsÚInvalidProImager   Ú$RETRY_ERROR_DETAIL_INVALID_PRO_IMAGEÚformatr   ÚNonAutoAttachImageErrorÚ(RETRY_ERROR_DETAIL_NON_AUTO_ATTACH_IMAGEÚLockHeldErrorÚRETRY_ERROR_DETAIL_LOCK_HELDr   ÚContractAPIErrorÚ%RETRY_ERROR_DETAIL_CONTRACT_API_ERRORÚbodyÚConnectivityErrorÚ RETRY_ERROR_DETAIL_URL_ERROR_URLr   ÚstrÚcause_errorÚUbuntuProErrorÚmsgÚLOGÚerrorÚUNKNOWN_ERROR)r   s    úC/usr/lib/python3/dist-packages/uaclient/daemon/retry_auto_attach.pyÚ,full_auto_attach_exception_to_failure_reasonr4   )   sW  € Ü�!”^×3Ñ3Ô4Ü×<Ñ<×CÑCØ—;‘;ð Dó 
ð 	
ô 
�A”~×=Ñ=Ô	>Ü×@Ñ@Ð@Ü	�A”~×3Ñ3Ô	4Ü×4Ñ4×;Ñ;ÀÇÁÐ;ÓFÐFÜ	�A”~×6Ñ6Ô	7Ü×=Ñ=×DÑDØ—f‘fð Eó 
ð 	
ô 
�A”~×7Ñ7Ô	8Ü×8Ñ8×?Ñ?Ø—‘ð @ó 
à�O‰OœC §¡Ó.Ó/ñ0ð 	0ô 
�A”~×4Ñ4Ô	5Ø�}‰}˜QŸU™UÓ#Ð#ä�	‰	Ð(°1ˆ	Ô5Ü�1‹vÒ/œ×/Ñ/Ð/ó    Úcfgc                 ób  — t         j                  j                  «        t         j                  j                  «        t	        j
                  t        «       t        j                  t        j                  j                  «       t        j                  t        j                  j                  «       y )N)r   Úretry_auto_attach_state_fileÚdeleteÚretry_auto_attach_options_filer   Úensure_file_absentr   r   ÚremoveÚNoticeÚAUTO_ATTACH_RETRY_FULL_NOTICEÚAUTO_ATTACH_RETRY_TOTAL_FAILURE)r6   s    r3   Úcleanupr@   A   si   € Ü×,Ñ,×3Ñ3Ô5Ü×.Ñ.×5Ñ5Ô7Ü
×ÑÔ:Ô;Ü‡N�NÜ�‰×4Ñ4ôô ‡N�NÜ�‰×6Ñ6õr5   c           	      ó¦  — t        | «      j                  ry t        j                  j	                  «       }|�"|j
                  }t        |d  }|j                  }n
d}t        }d }t        |«      D �]  \  }}t        j                  j                  t        j                  j                  «      }|t        j                  |¬«      z   }|j                  dd¬«      }t        j                  j                  t        j                   ||z   |¬«      «       |}	|	€t"        j$                  }		 |j'                  «       }t"        j*                  j-                  ||z   dz   |	|j/                  «       ¬«      }
t1        j2                  t4        d|
z   dz   «       	 t7        j8                  d	¬
«      5  t;        j<                  t:        j>                  j@                  ||z   dz   |	|j/                  «       ¬«       d d d «       tG        jH                  |«       t        | «      j                  r n[	 t        jJ                  j	                  «       }tM        «       }|�"|jN                  |_'        |jP                  |_(        tS        |«        n tg        | «       t        | «      j                  sçt        j                  j                  t        j                   ti        t        «      |¬«      «       |}	|	€t"        j$                  }	t"        jj                  j-                  ti        t        «      dz   |	¬«      }
t1        j2                  t4        d|
z   dz   «       t;        j<                  t:        j>                  jl                  ti        t        «      dz   |	¬«       y y # t(        $ r Y �ŒVw xY w# 1 sw Y   �Œ©xY w# tB        jD                  $ r Y �ŒÂw xY w# tT        jV                  $ r tX        j[                  d«       Y  �ŒktT        j\                  $ r+}tX        j_                  |j`                  «       Y d }~ �Œ£d }~wt(        $ r+}tc        |«      }tX        je                  |«       Y d }~�ŒÝd }~ww xY w)Nr   )Úseconds)ÚsecondÚmicrosecond)Úinterval_indexÚfailure_reasoné   )Únum_attemptsÚreasonÚnext_run_datestringú
z

z+pro.daemon.retry_auto_attach.notice_updates)Úlock_holderz&already attached, ending retry service)rH   rI   )7r
   Úis_attachedr   r8   ÚreadrE   ÚRETRY_INTERVALSrF   Ú	enumerateÚdatetimeÚnowÚtimezoneÚutcÚ	timedeltaÚreplaceÚwriteÚRetryAutoAttachStater   r2   Ú
astimezoneÚ	ExceptionÚAUTO_ATTACH_RETRY_NOTICEr"   Ú	isoformatr   Ú
write_filer   r   Ú	RetryLockr   Úaddr=   r>   r   r%   ÚtimeÚsleepr:   r   ÚenableÚenable_betar	   r   ÚAlreadyAttachedErrorr0   ÚinfoÚEntitlementsNotEnabledErrorÚwarningr/   r4   r1   r@   ÚlenÚ&AUTO_ATTACH_RETRY_TOTAL_FAILURE_NOTICEr?   )r6   Úpersisted_stateÚoffsetÚ	intervalsrF   ÚindexÚintervalÚlast_attemptÚnext_attemptÚ
msg_reasonÚauto_attach_status_msgÚpersisted_optionsÚoptionsr   s                 r3   Úretry_auto_attachru   M   s¹  € ä�CÓ×$Ò$Øô "×>Ñ>×CÑCÓE€OØÐ"à ×/Ñ/ˆÜ# F GÐ,ˆ	Ø(×7Ñ7‰àˆÜ#ˆ	Øˆä$ YÓ/ó ?‰ˆˆxÜ×(Ñ(×,Ñ,¬X×->Ñ->×-BÑ-BÓCˆØ#¤h×&8Ñ&8ÀÔ&JÑJˆØ#×+Ñ+°1À!Ð+ÓDˆÜ×0Ñ0×6Ñ6Ü×,Ñ,Ø%¨™~Ø-ôô	
ð $ˆ
ØÐÜ!×/Ñ/ˆJð	Ø'×2Ñ2Ó4ˆLô "*×!BÑ!B×!IÑ!IØ %™¨!Ñ+ØØ ,× 6Ñ 6Ó 8ð "Jó "
Ðô
 	×ÑÜ(ØÐ)Ñ)¨FÑ2ô	
ð	Ü—‘ØIôñ ô —‘Ü—N‘N×@Ñ@Ø!'¨%¡°!Ñ!3Ø%Ø(4×(>Ñ(>Ó(@õ	÷ô 	�
‰
�8Ôä˜Ó×(Ò(áð	ä×:Ñ:×?Ñ?ÓAð ô ,Ó-ˆGØ Ð,Ø!2×!9Ñ!9�”Ø&7×&CÑ&C�Ô#Ü˜WÔ%Ùðm?ôB ˆC„Lä˜Ó×(Ò(ä×0Ñ0×6Ñ6Ü×,Ñ,Ü"¤?Ó3Ø-ôô	
ð $ˆ
ØÐÜ!×/Ñ/ˆJä×;Ñ;×BÑBÜ ¤Ó1°AÑ5¸jð Có ð 	ô
 	×ÑÜ(ØÐ)Ñ)¨FÑ2ô	
ô 	�‰Ü�N‰N×:Ñ:Üœ_Ó-°Ñ1Øö	
ð) )øôi ò 	Úð	ú÷ñ ûô ×'Ñ'ò 	Úð	ûô& ×2Ñ2ò 	Ü�H‰HÐ=Ô>ÛÜ×9Ñ9ò 	Ü�K‰K˜Ÿ™ÔÞûÜò 	ÜIÈ!ÓLˆNÜ�I‰I�a�LŠLûð	úsh   Ä$M>ÆNÆ!ANÇ'NÈAN5Í>	NÎ
NÎN	ÎNÎN2Î1N2Î5(QÏ!QÏ3PÐQÐ% QÑQ)"rQ   Úloggingr`   Úuaclientr   r   r   r   r   Úuaclient.apir   Ú2uaclient.api.u.pro.attach.auto.full_auto_attach.v1r   r	   Ú(uaclient.api.u.pro.status.is_attached.v1r
   Úuaclient.configr   Úuaclient.daemonr   Úuaclient.filesr   r   Ú	getLoggerÚreplace_top_level_logger_nameÚ__name__r0   rO   ÚFLAG_FILE_PATHrZ   r,   r4   r@   ru   © r5   r3   ú<module>rƒ      s�   ðÛ Û Û ç =Õ =Ý 5÷õ BÝ $Ý 8ß /à€g×ÑÐ:˜×:Ñ:¸8ÓDÓE€ò€ð( B€ð0°Ið 0À#ó 0ð0	�ó 	ðl
˜8ð l
¨ô l
r5   