ÿØÿà JFIF    ÿÛ „ !.%+&8&+/1555$;@;4?.451 4,$,44444444444414444444444444444444444444444444444444ÿÀ  á á" ÿÄ     ÿÄ ?    !1AQaq"2‘¡±ÁðBRbrÑá#‚’¢²3S CñÿÄ   ÿÄ !    !1QAa‘2ÿÚ   ? 5˜Z¯V¦cø)›t/? z¨±>Õ5€¶‹Á¤·¼z¼Ü¬+ñ®v¤¨_ˆR­BFn©—˜ý®ç̝P8gýt·ÉSTŦˆìät?þé¼íìN/Þa)ì–í6ô… Ï¿øÃj´¿KÇü]ÿ ªô¹-eKànëÕHTx}ýSÜ›ÿ ”7Ø×&µ<¦  ¥ÑO¶[Ù¯ä¨ÞÃÿ PZ-¬;#õ|•oaÿ ©CìÞz3˜öː/¤­ñTûIØ}š^ mÓ%ªxˆ¥ÉŸu=Z+ISe¿45™¼u;ú&WØ÷€æßQ™®{|íx*TC“#ZŠìZ§²‹ 6pv…³¿¡äª*áZÐ%ÒOáˆo"x«OHk w±æ+¬V(kMúŸ5Vö«$ ÁrÏbàb57/luR ¸ÑÛj Òµì`Мq­û žICÀÊ•©4€Âcà¨Ï€O´<èÐ:›ù(Ë^L8þ‘ÍÌ#¸Ð_Ì©ÙK(Öz 4¬û+¸;ü’V’84‘¬ÃŽ:[â‡ÔÌáõp¢~§ªlæ£ö{®G>J¼"°‡7¯ÆÉèßû ‹É‹§ÁòÃýâßî ^ƾÙõ‹×óH#«LP½ïX=xÑÍ$|W?•~• îëÔ©ª‹ {ÝT…Kÿ ”hûâá)J*ö˜–ÔU;iÇ€/ ÆþjóZ\ýwØ=Ìm ºèËL9 ýèÆð/¨’¥öo=nË.%Îì ŽÕ¯È|{Oj²ƒE6e/ßdÄõ²Ìâ1O®ò×TsəԸhOMýíMˆ¿¼H˜l²,7Â¥#MF/Úf°Ö½± ¸–dr‹NýÊ íjqx{œÉ ä-È ¦ øÄër¨q°ð †nцýÑÄÆ’mä…n<0È™;ÁÝá¯ÁZƒ7FÀmì­ É&9ˆîéi¶ùN§Y• ÃZãAâ?•‡©‰ , ó¾IŸŠc1 4â&y­&pŠ­6;M À 0¹qç»p.á …ŸÅáK@%6·y6ƒ‰3?”úºŽ‰éX5ªPT §µ!=Mž«Ú½‹ÅgÂSâÉaþÓoö–¯ÁÔìR>5éÿ üs¶ÆUcÌ kÇR ]ÿ ù¬¼«VŽ;Â|‡~¢¦”ÏŰæ {L™Õ°Óv¹ò¸írޡעCÃ!íVÕ {¶»sŒNPg/ "uÕbkm²“$ďå¿é¹§°½æz¯6 †s¿!s–wÚÝ“™Œ °.ûj>·+™Òa…©Œ&rÝÎtÛë긪Ît’LAVp%c Úý[ÄzJ¾ÇàXXç@˜ó<êL]·T˜¾¥1Ó©V‡g´æ½¦Ý@¹óø!_@´ÞâSÁ —S3™•& ]@JHÚý©ZŽ €×æÔr»Áf!‡yÞ4Mv*èÓã_{‘åóUuљØ«Oïé*®EvÑ Œ÷‡U \"㪒ÍK+À 4“M¡ï:0¥5í!'<@î´”>Ç»&Z–ïCCV˜Ì5Šo&îhè.žû |ÓK©h$s6KìŒëã)¹hI¦GïOåóI;ììü#É$Š0…Ææ¥TØ.5­¾gn´ “ÂÖ\:hœ89G)J@„}œ:’Ò{/Š"¦_Æ×7Æ3VÇŠÊa]ÚŒÙ€Ä–=®uÁßâACZƒ§§£ Qnâ:«,×{tyø¬iÛcœÜÄ€H½ÄÍCk´÷šß .W'b¤Íåh]÷€=,Žv×cÚEÚHXJX¶îo¨FÒtèöŸ>ªª6[J®Fµ£sGÁeqõfe\íjÒÐïÄÐGˆe1Ø‹.Ø”‘Ëuø Y­ˆÜ ŽG|zùªüMpDnQWÄ”%JŠ™)â*p@Örš«ÕT2Ð%ˆG#ª„ ·¤!°ŸOTÂT¸aÚ%4&h™LµšØüÐ.F¿²ÐÞ_Ç‚¾ÅÃaÜ÷09Æ q€öy˜v‡85õN÷]¬äѼóS{°_MެúÔ#°Ç¸0åÞè2ëôPcvÆw9®ií1Ä8F™˜à‰´+‰Ik1òÝ7“Ñ×ÒsÝ\x‚h`ÞÑ`ó"|µEcý£n˜h`}GÞ !±ù²Ápü²ß6 0ïi󜵩SÈÇ7˜-ÕURO˜¦´f$ªž-Í6(œ}<„ éc øs]ŽŽ„*—¾ ìdŽ„)méª\¿êÎIg¾ØÞ~I#C/¼¼´EÁÈŽi8“©õådô·>euä ƒ'Ê×लR1ÉJE1ÐAát`t;ÇР%Ý<‡¥„ÍÆ`×Oyó)õiI€ñQaŸ4Ûù\áàaÃÔ¹HÃu¹*k€¦<„e S‡&õÏ B!ŽhüÞ`yj}mªf×\¿ Ç~æ­9‡û\՞Ǖg²1Žû5V7 !àöšm° c`ܬøÇìµÒ'P"?…´Ö,"§^•õލsÔ)6˜sæéÍR¼ ò|Sl”‹7 nPW Gòú÷½§O¯‡„l¡kSÞŒr½PÊ@æ¢pŽ-mÿ #Ÿ˜Àº¶Áä¦;ïÔæ$1££`“Õ>„—·ž)ßð³ñ#Ï Ô$¶œ‰ÊE‹À;÷º ¯«P:Ñ”8–IÊtpÞ3ª“>ê“þës4ò2OÏÕ­±zô†Õ§‰.÷ä¸;¿˜“'œ›žª}«Œ{ª±Ì 9ÔóÞÕ‡0 $íWV3Üì¬ —@kÝ4@¿r¼±½¬™›?øØæ´'Áé®CË3-g$˜ö‡×auÚi´Žp/êÛ æF›Ú2v‹ã¿¿,nB1̨ƃqÞa5͝@&Æû“él÷ \C²½UÍc ¯k×¢U ÖéQå™—-r wô ÞÏ<Ò=&=ÿ Ôê Òêˈt,i—;LîÜ á¸*ÚÃ1$êL•LÍ <É)ýÐà’ ;F™{ƒ™˜€&'}‚ãÄK`¡ÞT@I;®žZóè‚s’7®°›+§O­Åq©é»²9<Ô J ¼9O’HL»Ùïì¸rk¼Ž_ý‘TŸu[²ßÚŒ·ü÷B%¯E ŸÔX5êO´ Ç•€’I0 ÉJX` ñ¹õ%;µŸD‘«´€àwÒ™U ûئžÖö\×®×´8 ½‡ºÐÆÓ§?Àkmœ=;d5*@-ì0F Rªýš[Ü6âö̃ڸr*KA9· u*µæ£?U¸Âêí†8@¦X4 e-ò„0s{ HâUpU?¼mñRa°®a%Ð'tÉ×’\¾ÊÉ]t›h>·(Ë@R¼¡Ãt h}’O÷au<+nT…Ö…MӐ??Óe95 q>í/;&JSû °¯ÊéÞ øƒ*Ã2½Ài&:nôUl=¾¿5eˆ3”ñc|Ú2V”>„»&eE;«ÚäC p¢Û úy 9š[ŒÌx¼擼A&DåÒ¯ˆ¤ÀÌ;"˜ ÏQä¸åhÊ}Ûq«Û0WžÒ|»€ø®öCm5•\ÇÀ§Pe3£]0ÃàLDÉ‰1øªxjgwT‚÷¿LΨK‹›ùs—xˆÜ±µ kæ¸f‰‰ÜGk/LÛØ6d9ò¶ùA{ƒA3š/¬D¬khÓk‰`˜"㯒r¿±Óã jx‡°e}<Ñø\3y:'À•/h½Í€Ç4~g ?Û(¼]v‘ªlKÎâ~?O‚W%{Ì:“'©úNq¾›úo(X’¥¯ˆ nFê{Ç€ü?º'ë ø‹ì Þ09ŒÌç9Æ —ËC`j@ÓÄ(+a‹un¸#ÂꟋ{K`‘ÑÍÍ'à´»/Û,KW;Þ4²þð ï Nm|~fGÏ(…³Ã)«1ö­Õ ¥‡¨©ƒÃ™ü-s=à=U66Ï«Ýc蓦W¹íž®›nÔ%êÇìŒ<#Ü×84ån®Ð ÒåOC` ñânÑs‡¢ç 1õ%Îhì½Ã½® e:ݼUZo™`  ÅZŸŒÊ«ê1ÏÄo$q¹Þ€©ˆhÐÉä¯ñ[!…Ú˜àJ:x2$Íß&PåT£6ç— ‡Í*4Ýšçjÿ ‰É nófÐ ó(L5C•åÆ\rMÒ@ò }y-W}™üýVù—ú¢=Ù”c®‘< M ž ´Phr ¦©TD ‘ù.$´÷O‡‘V2Æò.=IUŒ=ž‡â¬i™aþÓåÙ?òUø'ØÖ•.~* šTŒ!•-×áºTâ®ä#õü'´ eýlYÅÓeÕKÂrT"CÚ@u!Óxƒ{š3€}1¿(r}%«nËamjÑ%ÑNEò v ˜à  σöK³,*º.àzù¨™Ó ÚçâU¦*¿ 9{%Ö¹ njûdaXöb) kÛÆ±ûÓ\°M7ˆÂ=û›ç¿Ã‚­V»Cg–8ÙêE- j)k$º`Ã-ùEýeBÆÇ]c¡°ñty&Òd0nõ'¡W+ƒ*|–øµFa\GQªEAÔp5\Ǽ·¼Ç8·õ -â§Ú[ ‡ uZeÖ 3}×d'+¹:ð+K†Û®s!Ï$úe€<Û”x)1»a­¡LC]¸µík…ÚàA»AYº{†ªS[¦5HÒ7ù --,ísòDØ€èk ÞÀîÜ ò@â( ËNˆë›4ô½•/¦o‡€Û7 ê•ÆêòðÜy'Án½µ á˜ݦ ndeo…[ì¶Ê,¥R³Ä=À±—–ß;£™´ñSâ*g§”ïaið‘Jå~™ÓÞ ß³Õ¢»8x埒²52>AÊb&-÷\7´éÄù€T˜,w;3{ï˜k…à¹ÄqÀ«œ{€\ ˆ¾[´¨јr &Úé„Ívˆ±8†¿]|¬ņ4I×pÞS1ÈÖz‰#Ìv‡G!YNògñ:màTz¢Ý1ô©^O=~ë|5Bã™ç•¼µõ•bÆ@úÕS¬ÈŒ#¬zünrŸ û” Z²•èðV"ÁHÚý©wÝ €7¼Ìu1hÑa3Éä û f$o¿É ™Ú›ÝçnpÒ3äÌ3†Í§,Äï]$‰/pê †«À¼¸e9­Æê_C]žƒ·ý·frÁN«, E=›Çq -‰öŒ:aÏ¿±í&£Í:-} 84‘ÿ eƒQÑeëSsuiA ³g㟥ú£?ÿ ʼn*”“÷aühe:ÊWa@ÒÞk±eØ] F Ô—r.åä˜ @ö¥ªZoÐýYL·¥S²G/‡ñ <~*ZÆ´è>JlòàÛÆ½ÿ 窘ìGN¢:I®KšJp/`íIÁÀõ#Ä-€ö­šµŒoF4|ÆQØÆ@Ì|£Ô…¢À{9˜è½Üó›€ôYÒÎYsið;ís¤€à²ˆ‚4qÉVŒI$ ‰"° æµ8cXGjœˏ¡Aâý•ËÜ¢ûï e·çLx']á"oÅÎê3¯Ç—¹”ó0nå‚âg{Œñ> S´˜îè°g238‚ãköÝfÚd´6Ò€;ò÷±¢™¼›º ¢Æ'¥Ðx'e¬ç ]bÈÆV¢ó‹kýBO ðÊâ$Ÿ!×T 3Mýמ žìٍàÌü‘8÷€àæØ8æ©6‰©L´«…oãpð„~Çk‰!ñ;‹”ÛžÍ àž±z Ÿôû øŸÝužÏ;ÿ #|u6™Þ¬ÚˆÐõA4¶â|ôl|Ê2ŽÇ¤ÝÅÇY.<#Aí.k§hóF‚”Y; M½Ö4hŸ4&›­¿tès´%FìL¥£Ãk‰ÇT¤haÁ¤ÚxfÉ`ÑìË›>i 3t‚:,–+^÷´–{Û–Nxi"x‘Ûg î¨>¥Õ܁ùZH,2Û“:8xÊ¢Çí9.É-Ìâã-=çjwµS˜dütžçwýGòú®®ûº_ˆýx$–¡ãøO EÚÛÏ÷R„×w+3£Á£öUMyR²¹âŒ°š›¸Ñãò9§Ó_Dl+Ùßc›úšGÅÌc†Ž!Ko=¶.‘Îÿ c²(2®V mª.ÿ ¹B›¹å ù„öŸSV>™ü¯$y:G¢Z×àøúdî¹û­·ýÇ´:•c LÍõi_‹ö+ÎæGÊè>OŠ•äž´§Þ{X}¨1ÚTc›»Qþ•êô°t¿OP?eæ~É{5]•ÙR£r5†nZ\ã@ &îJõ ¾àC°þV>fé¥/ü5ñÊIº_é5 ;e­h<@ Ä&æÃëE%;X,ÒãÆÞ`Oò¦kŸm#˜!ÀyÄ¢| óLšò¥Ä` ¶R=|ÈCâh5ò3DˆïF†ðÒ#ÅìÛœ?¸yhBãœí ZxßÎÄhºRK„`Þödvײ™ÀÈÑÒgŒuY w³%†ƒÓzõ ÖÏp‚dH®¦A´ù§»ÓÇMæ~)ˆð‡û:ù&Ä •vGD´À n ݇¼Ö8Fö óáà£~Ë¥x`oK|Ä?fxiØü%pìR>éò+Û±éÎ>núlFŤ'tq8LZÏvÃ?„¡ß±È⽆¯³íü@x|PöUäèØã¡ð‚ŒAìÏ"vÍwóŸÍ{ ý0.z È•Ö{,N¡£¡ŸKÕÙž>Ýœþ ÍÀ°<×EA!Å‚D™IúOÍ¡>ôG}Â` ÍßkÜL™Ž Þð™ {IøF²¹òQ3&!ÃÂÞz.d&Ï-sH¸,Ôõ˜ŽP€ 77ˆÝ¼ÊëÜw =cÕ Ú,ØÐ5ÎYÐ)ì´öœgŒ[¤ßv㙑8心>h]§µháYš£²ºÑ.{Ï7Sð•?´~×SÃKýJÛ˜ ™Íäiúu<µX¶1õ^kâçIÑ£sZ4h>j*ÔšD:4­¿_ ÷¸ Õxæÿ ¸?Mù _•­ÊÐ ä ÷ý ÑwL œ­ïnTkÛUÍN©ë:¦fV ¶ÜÔÜMªÅâA½–¿R×TXš-%iTÊT•‡Ù‚JôϐZxWÑè‰f‰òG º ×Õû2aZ7OU3[“×AT–ÞŒ…-‘¤”Ì ì&(ˆ¿­•ƒkï’:ðY¦W‘ Å)“†‘˜³Åtcø˜ñTÂwÚÇ4|üLÇªí–v- qˆèU qPE.†â‘˜µ Æ,ÐÅs]8¾„oúÑ i>ÜxxÈó)ƒ ´æÁâØ$À‰vžŸf$Ž |ãw;ÀÁIJ»b` {¦Ó¤Ú$©YÀ‘n@Óïž«9J¼êG m¤ ܯ¹ÌW4€ÐÒÅÛ‡#褕Ÿn-?í|с¥÷Ú¹¬'´ÞÜ9ÓK `hê£SÄSà?7—Wí_´…óB›»:=Ãïq`<8ñÓŒÑlú2d¬ê³£hÖ[l|$vÝro~'R®‰§°ñmY ͧäP |PUª¹·:3Œ[Û{Xÿ ºâ@‚W–Äé u‚ ¯´*=íή.pûÒdt @G‰¬ s¸ ëÉücr ÞæÑ¨Ê@>¤¢Ö±. Þ'¯°ÌME[YéïĵÂCå½ Ué©Áû'Ê9%eÔðNU”ë‘ÌsD3/®+UI˜9h.WC”빓$#:pz:YÓ ¿xž* ³$Í +$kñAŠ‹†¢ Uê>¸)_š¬÷©ßAÂÔb9ÇU ¯¾á•9¯ÏÏ÷O÷¼¼Fähal1‰3Ì[Ïr•´UCksNÐ] R‘¸¥H+§Šé†c©vÖÞ0iÓ76s†î!§=ß ¼~Ô'°Ãmäoäš³ªøi1úÉ)³yV8 CLÄØÁ‘WYïi€H6ÖÑiámø^ÈY´°Ñ7¥Û*—Ñ©L«Qƒï—Ùrÿ ›£Ð*š¸ˆL©ˆ$ˆ ÷¾D§9È®«qbqC)–ˆïv´çñsÑVT­Ø, <àïºÀO«Jý·õ àfPìð .wFšir´þ’2_Y *Æ€x\« ì€9š@ Ž|F⇥ˆkZ@hÖÄ0t¿-<“‹qµ¾*ZL¤Ú)&BJpÓF5=$„at*Zš$’ÑtdûÝRI1 2މ$€$I$#‰SÞ’Hë¬ï;Á$¡t$’`<(ñÇt)$‡Ð.Êf¢X’Kt=Éé$‚ˆªè¢oÝëòI%Rgcª÷ŠyI%¡‰ÿ !ñ)´õ $¤ Ô’IIGÿÙ 뛰hٳhddlmZmZddlmZmZddlmZmZmZddl m Z m Z ddl m Z mZddlmZmZddlmZddlmZmZmZmZmZdd lmZdd lmZdd lmZdd lm Z dd l!m"Z"ddl#m$Z$ddl%m&Z& ddl'Z'n #ddl(Z'YnxYwddl)Z)ddl*Z*ddl+Z+ddl,Z,ddl-Z-ddl.Z.ddl/Z/ddl0Z0ddl1Z1ddl2Z1ddl3Z3ddl4Z4ddl5Z5ddl6Z6ddl7Z7ddl%Z%ddl8Z8ddl9Z9ddl:Z:ddl;Z;ddlZ> ddl?Z?n#GddZ@e@Z?YnxYw ddlAZBn #ddlBZBYnxYw ddlCZCn#eD$r ddlEZCn #eD$rdZCYnwxYwYnwxYw ddlFZFeFjGZHn#ddlIZIeIjJZHYnxYwdeKe7vr dZLeLe7_M ddlNZNn#ddlOmPZNddlQmRZSYnxYwddlTZT ddlUZUn#eD$r ddlVmWZUYnwxYwdZXdZYGddeZZ[dS))execute_commandwhich)datetime timedelta) Inspectorget_fqdnget_server_name) DEMClient IPCClient)NoAgentSectionHeaderExceptionNoManifestFileException)ForticlientHelpercalculate_customer_key)ProcessManager)basenameexistsisdirisfilejoin)PickleDatabase) PluginManager)pprint)ProgressPrinter) ResultQueue)Schedule)exitN)PluginBlacklisterceZdZdZdS)SixTN)__name__ __module__ __qualname__PY2"/usr/lib/fm-agent/library/agent.pyrr1sr%r check_outputcd|vrtdtj|dtji|}|\}}|}|S)Nstdoutz3stdout argument not allowed, it will be overridden.) ValueError subprocessPopenPIPE communicatepoll) popenargskwargsprocessoutput unused_errretcodes r&fr6Us` v  RSS S"IP*/PPP$0022 ,,.. r%zhttps://global.fortimonitor.comctjdrdtdd5}|}|d}dddn #1swxYwYnt}d|}| dr| dd}n3| dr| dd}n|} tj |d tj }|d ||}|jd kr't%d |j|dS#t$$r:}t'dt)|Yd}~dSd}~wwxYw)a Pull out the URL for the customer from the global mediator api to use instead of the default. Args: customer_key: identifier for the customer to pull a single regional CP url. Returns: regional_agg_url: URL for the aggregator that the customer should use. z/etc/fm_mediator_urlrb Nz/aggregator_url/{}zhttps://http:// )hosttimeoutcontextGETzHttps status {}utf-8z*Unable to retrieve the regional CP URL: {})ospathropenreaddecodestripDEFAULT_MEDIATOR_URLformat startswithsplithttplibHTTPSConnectionssl_create_unverified_contextrequest getresponsestatus Exceptionprintstr) customer_keyopened mediator_urluribase_url connectionrespes r&get_regional_agg_urlr_rs w~~,--, ($ / / 46!;;==//11L'--d33L 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4,  % %l 3 3Cz** %%j11"5   + + %%i004 ,2s/M/O/O    5#&&&%%'' ;#  -44T[AABB Byy{{!!'***  :AA#a&&IIJJJttttts* sleep_timerqrupid timestampr}usernamepsoutparseroptionsargsmanagerpidss r&rzAgent.safe_to_start_agents ++w~~dm,,  HNNJ K K K4 !$-005577==??EEcJJNCc((CIII  H  5 8L8N8NN   44  JsOOOO   44   JJJ||BGJ,<$=$=$DEEaHH#Oc$9::1=CCEEEDI%%5((+E99$$&&&t:  D   i/47'AA H  FL M M M GCOOO4&((,,V44    f!4!4 H  IDIU    (**55bj6I6IJJ44T49EE!!"2SXXd^^"CDDD))CGCHHa(((() 4 a<<  $ $ * $ $ qLG H   33 GGG-    Jz " " "++GW+EE E H  S   5s9A,C0C6:D DD!BF66F:0B'LLctj}ttj}t |jd}||d|dS)z+Create a new PID file to track our instancewriN)rCgetpidrwrrErtwrite)rrnowr6s r&write_pid_filezAgent.write_pid_filesTikk$)++  $ $ 333$%%%%%r%ctj|jrtj|jdSdS)z1Remove an old PID file to clean up on the way outN)rCrDrrtremovers r&rzAgent.remove_pid_files> 7>>$- ( ( % Idm $ $ $ $ $ % %r%Fcd}td|jz|}||}|r|n|dtd|jz|}t jd|jd|jd|j|d}td|j zd |td |j zdS) NrjzNotifying %s of uninstallindentzERROR CONNECTINGzRemoving %r directoryzrm -rf roz Uninstalling %s T)sectionz Uninstall of %s complete ) rrnotify_of_uninstallfinishlog_dirrCsystemdb_dir config_dirpkg_dirrU)raggregator_clientremove_instancerppsuccesss r&rzAgent.uninstalls 84:Ef U U U#77HH  * IIKKKK II( ) ) )4t|CF S S S t{{{DLLL$//RSSS /$,>MMMM  - <>>>>>r%cltj} ||j}|st d|dst dnN#tjt f$r|j ttj tjddkr=tjdt!|jdz}nOtjdt!|jddz}||YnGt$r;|jttj YnwxYw|S) z Get the manifest configuration if it exists. Also, throw a deprecation warning if the the manifest does not conform to the new-style format (It must have an [agent] section heading). zNo manifest file foundagentzUsing a manifest file without the section heading "[agent]" is deprecated; please add this heading to the file. Example: [agent] customer_key = customerkey server_group = 123 rrfz[agent] rrB) configparser ConfigParserrF manifest_filer has_sectionr MissingSectionHeaderErrorruwarnrVryrzsys version_infoStringIOrErGreadfpinfo)rmanifestramended_manifest_files r& get_manifestzAgent.get_manifests  ,.. 7$MM$*<==M  H-.FGGG''00 3    68UV 3 3 3 HMM#i24455 6 6 6"a''(0(9$t'93"?"?"D"D"F"FF))%%)1(9$t'93"?"?"D"D"F"F"M"Mg"V"VV))% OO1 2 2 2 2 2& 7 7 7 HMM#i24455 6 6 6 6 6 7sAA&&DF1-AF10F1ctj}d}tj|jr|jdt|jd}| }| tj}| |j| ||}| ||}| ds|d|dds|dd|j|dd|jd|dvr|dd}ng}|j|}|r|dd|t/j}| ds|r|dd} t3j| } | jr| j} n| j} t/j| s\|dd D]D} || d} | *|d| | d En\#t=jd }tA|}|j!d "|YnxYwt|jd }|#|| tj$d|jz|tKj&}|'|t|jd }tQ|}d|D}tS|rI|jd|j*dd+|n;|jdn |jd|j|S)zo Create/update the config file with the settings from the manifest. Return the config. NzExisting config file foundr8raggregator_urlversionplugin_blacklist agent_proxy)httpshttp/rjzInstall proxy error: {}rz chmod 640 %srcfg|].}|ds|d,|/S)z+ z- rK.0lines r& z&Agent.write_config..sP??4((-1OOD,A,Ar%zConfig file overwrittenzConfig diff: %szNo change to config filezCreated new config file: %s),rrrCrDr config_filerurrE readlinescloserFcopy_config_settingsr add_section has_optionsetagg_urlrrget _blacklister update_list urlrequest getproxiesurlparseschemehostname proxy_bypassrHrexc_inforVerrorrJrrdifflibDiffercomparelistlenrvr)rr new_configold_config_linesold_config_file old_configoriginal_pluginsupdated_pluginsproxiesragg_url_option agg_hostnamekeyp_urlerrrnew_config_filediffer diff_lineschangess r& write_configzAgent.write_config<s1 ".00   7>>$* + + K HMM6 7 7 7"4#3T::O.88::   ! ! # # #&244J OOD, - - -22:zJJJ..xDD %%g.. ,  " "7 + + +$$W.>?? D NN7$4dl C C Cw 4<888 !3!3G!??G H!)!27!;!;!(7#1#:LL#1#6L!.|<<Q**=9990QQ ' C 6 6 ,&NN=#u{{3?O?OPPP HlnnQ'C8??FFGGGGGt/55))) .4#33444  '^%%F $t'7"="="G"G"I"IJj))J&G 7|| : 78881277:3F3FGGGG 89999 HMM79I J J JsBJ##AK<c|D]^}||s||||D]\}}||||_|S)z Copy settings from the original to the destination, overwriting destination's settings if they already exist. )sectionsrritemsr)roriginal destinationroptionvalues r&rzAgent.copy_config_settingss  ((** 8 8G**733 1''000!)!8!8 8 8 7777 8r%c 0|jd|jr/|dur+td|jddS|j|j|j|jf}tj d|z|jd|z| }| |}i} | dr|d} tj||||| } td|d D} | dr |d| _t%d |jzd } | d d} | dkrW |d d}td|z|jd|z|| _n=#Yn8xYw| dkr |}|| d<|d}|d}t1||}|| d<t3|}|rzt5jdt5jd|d||| _|| d<|d d||t;|jdnt?d|nQ#t@$r1|j!dtEj#dYnwxYwt?d| d| dr-td |dD}ni} | $|%| |\}}}}}n#td!td"|&d#D]2}td$tj'(|d%z3|j)d&tUj+ztEj#YnxYw|r|sBtd'|z|j)d'|ztEj#|j,|d(|d(|d(|d(| |r ||j-d)<d*|.d vr|d d*d+krd,|.d vrk|d d,&d#D]A}tDj/d-|j0d.|1}tj |B|r| 2n3|j3d/|| 2d0|z|r|r|d d1||t;|jd|r;td2|j4d3|jd4|jd5ntkd6tm|d7z z }d-|z|z}td8|j4d9|jd:||j7d;nNtd8|j4d<|d=|j4d>|jd?|j8d- |j3d@||9dS)ANzBegining installationFzAgent already installedzmkdir -p %s %s %s %sz Created directories: %s %s %s %sr proxy_configc3JK|]\}}||dfVdS)z'"NrHrrrs r& z Agent.install..sH  -:VUVU[['' (      r%rz Handshaking with %s serversrjrhandshake_typestandard forticlientrz8Using manifest file aggregator for initial handshake: %sforticlient_metadata ems_serialforticlient_environmentrWzMFortiSase install detected. Calculating customer key and pulling regional aggzOverwriting agg url with z for customer key rz/Unable to find aggregator url for customer key zHandshake errorzUnexpected handshake type z. Aborting handshake attributesc3$K|] \}}||fV dSNr$r s r&r z Agent.install..s;%%$1FE%%%%%%r%zI There was an error in the initial handshake with the aggregator, pleasezIcheck your aggregator URL, and ensure you have connectivity to retrieve: ,z %s zv2/hellozError in initial handshake: %szHandshake failed: %sz, log_levelenable_countermeasurestruecountermeasures_remote_pluginsro)/countermeasure.py install_plugins --url zInstallation failed: %szERROR CONNECTING: %s server_keyzInstallation of z= complete. Your server will now sync automatically with the z' ControlPanel. z-Agent will automatically sync with aggregatorgD@rez Installation of zX complete. Please copy and paste the following server key into the z ControlPanel for your server: z^The server key must be manually entered into the Control Panel before agent will begin syncingz had an error (z). The zN is installed but it cannot sync correctly. Please contact z and send them the log file at zAggregator sync failed: %s):rur is_installedrUrrrcustom_plugin_dirrCrrrr aggregatorClientdictrrrrrrrget_fortisase_attributesrr_rrrrrErr*rT exceptionrr handshake get_all_ipsrLrDrrryrzrvdbr executablebin_dirrHrrxrrwrrlog_filemigrate_config)rrrrrWforcedirsrconfigrragent_settingsrr handshake_datar environmentexpected_customer_keyserver_attributesr found_serverrrurlcmdpaddings r&installz Agent.installs  -...   % + , , , HMM3 4 4 4 F dk4?DDll7>S>S        m , , C-3M-B  * ??R!"  NQXX-4!))  } , , !%!>!>!@!@9G56+L9 ,-FG (>z;(W(W%1F~../DEELgLfGffOdff18%-7>N#34JJw(8'BBBLLd&6!    ""#4555  Q^QQQ    l + + # $%%5;\\,5O5O%%%!!  !#  !++$$&&8I @GZuii  ]    \   }}S)) E E{RW\\#z%B%BBDDDD HNN;i>R>T>TT U U U HJJJJJ   (50 1 1 1 HNN1E9 : : : HJJJ $+GGZZZuuuii X     -#,DGK  %w(?(? ? ? 7$<==CCEEOO0FNN74K4KKKzz'+KLLRRSVWW  NNNLLLIIKKK  #  6 IIKKKK H  8% @ @ @ II,u4 5 5 5 $ Dz$ D JJw j 9 9 9 LLd.44 5 5 5  <<<5 MNNNNfJ!(;<==!Gmz9  <<<ZZA D E|||UUUDLLL$***dmmmU    H  ;U C C C s-A G$$G)4CK8L  L &/NB)Qc^g}td}|}dtjvsdtjvr|dz}dtjvrtd}|rtd|z\}}|dkrw|d D]a}|d s|r|d kr2|}||d bn|rvdtjvrht|\}}|dkrOtjd vr"tj d|}d|D}ncdtj d|D}nCtd} td| z\}}dtj d|D}d|D}d|D}d|vrd|| d<|s|j dtj|j|j|j} | g}nF#t&$r9} |j d| g}Yd} ~ nd} ~ wwxYw|s|j dn|j d||S)Nifconfigsunosaixz -azhp-uxnetstatz%s -inrr9namerrf)freebsddarwinzinet6? (.+?)\schg|]/}|dd0S)%rrHrLrips r&rz%Agent.get_all_ips..ns3BBB288::++C003BBBr%c8g|]}|dS)zaddr:rrxs r&rz%Agent.get_all_ips..ps1-.((r%rCz %s addr showcg|]}|Sr$r$rEs r&rz%Agent.get_all_ips..vsDDD1DDDr%cg|]}||Sr$r$rEs r&rz%Agent.get_all_ips..xs###Q#q###r%cg|]H}|ddddIS)rrr@rArBs r&rz%Agent.get_all_ips..|sFDDD"rxxzz$$Q'--c2215DDDr%1z::1z@Unable to retrieve IP address(es) locally, contacting aggregatorrzIP address lookup failure: {}z"Unable to determine IP address(es)zIP addresses: %s)rrplatformrrLrrKappendrefindallindexruwarningrrrrr get_local_iprTrrJrv) rips ifconfig_path ifconfig_cmdr;coder3lr ip_addr_pathrr^s r&r$zAgent.get_all_ipsUsj)) $ cl " "es|&;&;(50L cl " "I&&G ,.x'/ABB f199#\\$//,,7799//77%q%AGG$ wwyy 47++++  Ewcl::*<88LD&qyy<#888*%6??CBBcBBBCC24*=NPV2W2WC!;;L*>L+HIILD&DDbj):FCCDDDC######EDDDD #::"'C #   H  R   !+ 1 dl9J!!!  (55778   >EEaHHIII  4 HNN? @ @ @ @ HNN-s 3 3 3 sH// I29/I--I2c4tj|siS t|d}td|DS#tdicYSxYw)Nr9c g|]<}tttj|d=S)=)rmaprVrHrLrs r&rz9Agent.get_old_style_config_properties..s6NNN4c#)TZZ__==>>NNNr%zError reading manifest file) rCrDrrErFrHrLr rU)rmanfilemfs r&get_old_style_config_propertiesz%Agent.get_old_style_config_propertiessw~~g&& I g##%%++--33D99BNN2NNNOO O  / 0 0 0IIIs ABBr+cNt||}d}tdD]M} tj|tjtjzd}n#t jdYKxYw|r3|j d|z| dS|S)NTr<F?zCould not acquire lock on %s) rErangefcntlflockLOCK_EXLOCK_NBrrrur"r)rfnamemodeofilelockedis r& _open_filezAgent._open_filesUD!!r  A  E5=5=#@AAA  3   H  =E F F F KKMMM4 s .AA-cZt|jr||j}|siSi} tj|}|D]n\}}}t j|d}t|}||tj | g||d| d<on##|j di}YnxYwt|}|di}|D]0\}}}||vr ||gg||<||||g1|d|t)j|t(j||SiS)N%Y-%m-%d %H:%M:%Sriz %Y%m%d%H%Mz"Unable to parse custom metric filec|dS)Nrer$)vs r&z)Agent.get_metric_values..s QqTr%)rr)r report_filerlcsvreaderrstrptimefloatrmktime timetuplestrftimerurrvaluessortrLseektruncatercrdLOCK_UNr)rcsvfile unique_values csv_readertextkeyrr custom_valuess r&get_metric_valueszAgent.get_metric_valuess $" # #& ood&677G  M # Z00 1;MM-GUI ( 1)=P Q QI!%LLE!%Y5H5H5J5J)K)KL"#*77I,>,>|,L,L,LMM  #CDDD "  !5!5!7!788M   >>  2 2 2M-: F F) -///4i.@-AM'**!'*115)2DEEEE LLOOO       K / / / MMOOO Is BB==Cct|jr||j}|siStj|} t d|D}n,#t $r|jdi}YnwxYw| d| tj |tj ||SiS)Nc.g|]}|d|dfS)rrjr$)rrows r&rz0Agent.get_registered_metrics..s%FFFSQQ 0FFFr%z)Error reading custom metric register filer)r register_filerlrsrtr rTrur"r|r}rcrdr~r)rr csvreadermetricss r&get_registered_metricszAgent.get_registered_metricss $$ % % ood&899G   7++I FFIFFFGG   ""#NOOO  LLOOO       K / / / MMOOONIsA""&B  B cg}t|jdD]/\}}|jd|j}||vr||0|S)N schedules.)rr%rplugin_textkeyresource_textkeyrL)rexisting_tkeyssr_idscheduletkeys r&get_existing_metricszAgent.get_existing_metricsst#DGK$8$>$>$@$@AA , ,OE8&555x7P7PQD>))%%d+++r%c@|dkr|drdSdS)Nzcom.pnp-hcl.dominostatszMem.PID.TFr)rrrs r& ignore_metriczAgent.ignore_metrics. 6 6 6**:66 tur%c ddg}gd}gd}|}|jdi}i}g}|jg} |ddr|ddpd} | r(| | d|j} |dd r|dd pd} | rt| } g} | D]}t|st| | krn|jd |tj |D]W}t| | krnAtt||r#| t||X| D]_}t#|}tj|tjs|jd |Mt+|d } |jd |t-j|}||D]<}|t5|vrt9jd||<=|dg}|D]}|D]J}|t5|vr%t9jd|t;|JK||d|drs t|d}nQ#t>$rDtAj!|dd}tEj#|$}YnwxYwn9#t>$r,|jd|d|dYwxYw|d|f}|dd|d}||vr||vr1||%dg|l|dd}||d}|d|d|d||dd|gd||<|%|g||dg}|D]E}|D]J}|t5|vr%t9jd|t;|JK t|d}nQ#t>$rDtAj!|dd}tEj#|$}YnwxYwn8#t>$r+|jd|d|dYwxYw|d|d||d|dd }d!|vr |d!|d!<d"|vr |d"|d"<||Gtj&|k#t>$r|j'rt+||j(}|jd#||)d$|j||jtUj+|jd%|tj&|Y]wxYw|||fS)&Nrplugin_category_name)rrunitr)r descriptionactionrz Processing incoming import filesrmetric_incoming_directoryrmax_incoming_files_overridez Looking in %sz&Can not delete %s so will not process.r_z Processing %sz1Can not process file %s! Missing required key: %srz0Can not process metric! Missing required key: %srrrnz,Could not process timestamp %s for metric %srr first_valueslabelr)r plugin_namerrrr incidentsz2Can not process incident! Missing required key: %sz.Could not process timestamp %s for incident %srr)rrrrr match_keymetadatazError processing %s:rz Deleting file),rrurcustom_import_dirrrextendrLMAX_IMPORT_FILESrwrrrCrrrrLraccessW_OKrrEjsonloadsrFrrkeysrrrrrTrrucalendartimegmrx setdefaultrclosedrhr|ryrz)rr, req_top_keysreq_metric_keysreq_incident_keysexisting_metrics new_metrics new_valuescustom_incidents import_dirsadditional_dirs max_files max_overridefiles directoryr6 full_pathrgjreqrmunix_timestampr new_valuerrrincidentobjs r&process_importszAgent.process_importss(*@A CCCMMM4466  8999  -.   g'B C C A 7$?@@    ;   44S99 : : :)   g'D E E C 7$ABB    *L))I$ 5 5I## 5zzY&& HMM/9 5 5 5Z ** 5 5u::**E$y!,,--5LLi!3!3444w w IY''E9Y00 GSSSY%%Ap  oy999Jqvvxx(( '!!C$qvvxx..00 O! !1%% 2.. /J/JA.%%d16688nn44#M RTW#1III$ 5))!,<*=q|LL! !T-0;-@-@NN(TTT(0(9 !+0C))I.6_Y=P=P=R=R-S-SNNN T %!!!JkNiL ! !"#7^ >yIIIIEE+r22 )#1#1H0%%d8==??&;&;;;#M T ##8,,,$ <!T-0+1F-G-GNN(TTT(0(9 ( 57J))I.6_Y=P=P=R=R-S-SNNN T %!!!L$[1$Y/ ! !+,,<*=,4Y,?%3'/ '>"*8"4 C#h..+3K+@K(!X--*2:*>J$++C0000 )$$$$   80Y//A5u===q  affhh'''y355666///  )$$$ J(888s:DXL10N1A M?<N>M??NX2N95X8N99EX<TU$A U U$U  U$#X$2VXVA,XC/[:9[:cdti}tj|jr||j}|s|S||j}|d|tj |tj |  tj |jn#YnxYw|S|jrt}|r||d<|S)Nfqdnr server_name)rrCrDrupdate_config_filerlr^r|r}rcrdr~rris_fortisase_installr )rr,r\ propertiesrs r&get_update_configzAgent.get_update_configs(**% 7>>$1 2 2 ood&=>>G  ==d>UVVJ LLOOO       K / / / MMOOO  $12222  ( 8-// 8,7F=)Ms C$$C(c||_||_||_||_||_||_||_tj|_ d|_ tj dkptj dk|_| |_tj| |j|_t#|jd|jz|_tj| |j|_t#|jd|jz|_t-t.jdkr@t.jddkr*tj|jd|_tj| |j|_t#|jd|jz|_tj| |j|_tj|jd |_tj|jd |_tj| d |jz|_tj| |j}tj|d |_tj| |jd |_ dt.j!"vrKtj|d|_#tj|d|_$ndt.j!"krUtj|jd|_#tj|jd|_$nVtj| |jd|_#tj| |jd|_$d|_%d|_&d|_'d|_(d|_)d|_*d|_+d|_,d|_- t]|jst_dtj.|js't_d0|jtcj2}|3|j|4dr |d|_-t.j!dvr|5ddr1|6dd"dk|_&|5ddr|6dd|_'|5dd r|6dd |_(|5dd!r|6dd!|_)dt.j!kr|5dd"r1|6dd""dk|_*|5dd#r|6dd#|_+|5dd$r3d%|6dd$"krd|_,|6dd&}|st_d'nP#t^$rC}t.j78d(0|d|_%Yd}~nd}~wwxYwd)tj9vr d*t._!d|_:|;tyj=|j>j?|_@ t|6dd+|_Bn#t^$r ||_BYnwxYwd|_Ct|_EdS),Nrz%s.dbz%s.logrj--power-statuszpower_status.logz %s_agent.cfgcountermeasuresincomingz%s-agent-manifestz agent.pidz update-configr=registerreportr>TF demservice updateservicez/tmp/com.fortinet.fortimonitorzNo bin directoryzNo config file {}r)r>linuxdemenabledr server_portrzupdateservice.portipc_path auto_updatescheduled_updater r rzMissing server keyzInitialize exception: {}VMkernelvmwarestartup_timeout)Frrrrlib_dirr'rtempfile gettempdirtmp_dirmetadata_rebuild_freqrCgetuidgeteuidis_rootacceptable_sync_delayrDrrdb_filerr(rrargvrrr!countermeasures_custom_plugin_dirrrrtrrKrrrrrhas_demdem_portupdate_service_portipcPathrrrrrrTrJrrrFrrrstderrrunamerset_up_loggingrrrs __class__r rurvr>r%rr)rrrrrr'rrr>base_config_dirbase_custom_plugin_dir base_data_dir base_log_dirrdata_dirrrr^s r&__init__zAgent.__init__s        *,,   "y{{a'<2:<<1+< %:" gll=$,?? DK4<)?@@ w||L$,?? T\8dl+BCC sx==1  !0@!@!@GLL7IJJDM',, EE$*1LMM!#.Ddl!S!S13  "$52 2 ."$d.Dj!Q!QW\\ 04:=  7<< t|<< X{;; "$',, 4<# #   **,, , ,!#gz!B!BD !w||GX>>D   ++-- - -!#d.Dj!Q!QD !w||D,BHMMD  !#mT\:!V!VD !w||M4<RRD ! $ #2 7   $$)! + &$,'' 4 23337>>$"233 N 3 : :4;K L LMMM&355K   T- . . .&&}55 ?$/ $>!|222))%;;W#.??5)#D#D#J#J#L#LPV#VDL))%??J$/OOE=$I$IDM))'3GHH/:!500D,))':>>H#.??7J#G#GDLs|++"--g}EE'OOG]CCIIKKvU(#--g7IJJ0;#%711-#--g7GHH=)*w8HIIOOQQRR9=D5$,??J 6 4555 6 & & & J  7>>qAA B B B %D       &  # ##CL$%  $T^%<== # :K!L!LMMDLL # # #"DLLL #-//s+$J\ ] 9]  ]3(__0/_0c|jdr|jddStj}||jrd}|ds1|dd}|jd|drk| dD]$\}}|d krd }| d||%| dd}|jd |r>t|jd }| ||d|jd<dSdS) z Update agent configs to use "[agent]" instead of "[AgentConfig]" as the main heading and "aggregator_url" instead of "agg_url" (in order to match the option in the manifest file). config_migratedzConfig is in the correct formatNFrTzAdded [agent] section to config AgentConfigrrzMCopied deprecated [AgentConfig] section to [agent] and removed it from configr)r%rurrrrFrrrrrremove_sectionrErr)rr,config_has_changedrrrs r&r)zAgent.migrate_configPs 7$ %  HMM; < < < F*,, ;;t' ( ( .!& %%g.. A""7+++%)" ?@@@!!-00 %+\\-%@%@77MFE**!1JJw6666%%m444%)" c" $"4#3S99  [)))!!###)-DG% & & &/ . .r%c.|dSr)rrs r&__del__z Agent.__del__ts r%c tj}tj|js,tjd|j t|j d}| tj |j ddd}nk#t$r^td|j dtt!jdtd tj}YnwxYw|tjd |||tj|} t3t|d }n!#t3t|j}YnxYw||dS) N mkdir -p {}aiP)maxBytes backupCountzCannot open log file z: ""zLogging to stderr insteadzA%(process)d) %(asctime)s - %(name)s - %(levelname)s - %(message)sr)rrrsrCrDrrrrJrEr(rhandlersRotatingFileHandlerIOErrorrUrVryrz StreamHandler setFormatter Formatter addHandlersetLevelNOTSETopen_dbgetattrupperDEFAULT_LOG_LEVEL)r root_loggerr(handlerr%rs r&rzAgent.set_up_loggingws')) w}}T\** : Im**4<88 9 9 9 DM3//H NN   &:: s[a;GG . . . E}}}c)*>*@*@&A&A&A&AC    - . . .+--GGG .   S     w''' W^,,, \\^^ AK)>)>)@)@AAII A)?@@IIIY'''''s%B77A%DD-GGc|jr1|ddd|dddd |d dd d |d dd d |dddd |ddd|dddd|dddd|dddd|dddd|dddd|d ddd!|d"ddd#|d$d%dd&|\}}||fS)'zJ Return the options and arguments parsed from the parser. z --server-keyrstore)destrz--rebuild-metadata store_truerebuild_metadataF)rrdefaultz--statusrSz--statsstatsz --from-cron from_cronz --aggregatorr)rrz --installr6)rrrz --uninstallrz--remove-instancerz--customer-keyNrW)rrrz --unpauseunpausez--list-containerslist_containersz--rebuild-container-metadatarebuild_container_metadatarsystem_power_status)rrr)r add_option parse_args)rrrrs r&rzAgent.parse_argumentss>      n<  P P P   $#'     *\RWXXX)LwPUVVV ,[%     .|LLL  e)      ,K      "     d7      l      "     *-     #8RV    ))++ }r%cNtj}d}tj}|j t |dd}n #d}YnxYwjrp|gkrj |dd}n #d}YnxYw |ddpj _ n#d_ YnxYwdj d|dj d }n d j }tj | } |\}}|jr jd |jt%jt%jt+jj j|j } d|ji} | d| n#YnxYwt5dj|s8fd_jdt?jd d} !_"jrj"} #jd|j$rLtK| jtMj'dj(} tSj$|| d| |j*r(tSj*| d| d| d|j+rPt+jj j|j } +| |j,t5jr|j-rX|jr |j_ |j.pd} dt>j/0krj1dfj2dfj(dfj3dfj4dfg}|D]C\}}t%j5d||rt%j6||Dj7j8fD]w}ts|d5} dddn #1swxYwYt$j:;|s-jd|x-j j|| dSgd }d}|D]}ty||drd!}n|sGj=d"jd|dj }t}|j|dS|j?r*t}d#d| d$<| @dS|jArd%| vs | d%ikrt}d&dS| d%}t}d't}d(|BD]i\}}|d)d*}|d+d*}|d,d*}t}|d-|d.|dd/d0|jdS|jCr0d!| d1<t}d2jd3dSd} d}|jDr2d!}|jD}t}d4|z|Edd||jr2d!}|j} t}d5| z|Edd| |r7|Ftsjd6t5djGr2|jHs+jId7t}d7dS|dd}t+jj j|j } |st}d8t5djJrp d}!tjLjM}"|"Nd9}#|#d:|#krd!}!|!sO| rP| n#YnxYwtK| jtMj'dj(} tjL}"|"Q}$|$r| R|$d;|Sdvr|dd;0d|Sdvr+t |dd>d?z}%d@| vs tjT| d@z |%kr|dd=UdAD]_}&jdB|&zt>jVdCjWdD|&XdE}'t%j5|'`tjT| d@<nAd@| vr=jdF| d@|%ztjTz dGz ztj}(g})Y}*Z|\}+},}-dH| vs | dHdkri| dH<t| dBD]\}.}/|/j\dI|/j]}0dJ}1|/j\j^krE|/j]|*vr<|0|,vr8|/j_|(t|1KzkrjdL|/nt|/jaK}2tjbK}3|(|2z|3z |/__|0|,vrc| jc|0idMdN}4|,|0D])\}5}6|5|5|4z}5|5|)d|.|6|5fi}7* |/j\j^krx|/j]|*vr'| jc|/j\idMdN}4|*|/j]D])\}5}6|5|5|4z}5|5|)d|.|6|5fi}7*|/j\| jevrjdO|0tj}8tjT}9|/f| | dH|/jgi\}5}7tjT}:jhdP|/|5|:|9z fz|5W|)d|.tji|8j|5fjdQtj|(z | dRk|)| d$rtjT| d$krR| @| d$tjTz dSz };jdT|;zdSd| d$<| @jdUdStjT}d}?tjmddVdk}@d}AdW| vrd| dW<tjT| dWz jnkrd!}A|jHrd!}AdX| vrtjT| dX<t$j:oj}B|B| dXkrd!}A|B| dX<|Ar*jdYtjT| dW<dZ|Sdvr)| p|ddZ| q}C|Cs|jHs |@s| d[s| jr}|Crjd\na|jHrjd]n?|@rjd^n"| d[sjd_tt|$}?u}=g}>d;|SdvrG|dd;0dj:d|Dt%jw|DD]}E|Exdar&|Eydbs tj{|Eddc}Fn$#j|dd|EzYnxYwtrtjr_ttst$j:&|D|E}Gntttst$j:&|D|Ede}Gndf}Gt|FjBD]\}H}It>jddkrt |Itks5t>jddgkrvt |It jkrW|HxdhrB |I}J|>d|Jj|Jj|Jj|G|Jjdi#YxYw|Exdjr> tst$j:&|D|E}Kno#jIdkt$j:&|D|EzjItjYxYw|K}Ltr5t|Lde}Gndf}G|K tj|L}Mn[#t $rMjIdl|EzjItjYwxYwgdm}N|M}Od!}P|ND]>}||Ovs|M|s#jI|dn|Ed}Pn?|Ps*|Mdo}Q|>d|Q|Mdp|Mdq|G|Mdrdids| vs| dssZt%j}R|Rdtkr d!| ds<jdun |Rdvkrjdwds| vr | dsrd!| d1<i}Si}Tdx| vr!| dxrt)| dx|Tdx<dy| vr!| dyrt)| dy|Tdy<dz| vr!| dzrt)| dz|Tdz<d{| vr!| d{rt)| d{|Td{<g}Ud|| vr| d|}U g}Vjd}t+|)t+|V|rTt-d~t|BD}Wjhd|Wd}X| ddks | dikrd!}X|As| drd!}Xtjmdjpd}Ytj|Y| drmtjT| dkr0| dRt+| d}Zn:d| d<| dR}Zn| dR}Zg}[g}\d/}]d| vr`| d}^t5t7t+|^|]D]*}_|[d|^d+d| vrQ| d}`t5t+|`D]*}_|\d|`d+| }a dt>_t|+}+|r| |Z|V||>|?|[|\|+|-|U|X|TjJ|a|=}Sd| dx<d| dy<d| dz<d| d{<g| d|<d| d<|Sdi|Sdi|Sdg|Sdid}b|bnjdn#t*j$r}cjd|cu}d|drF|dd}e|dd}ftM|e|f} -j j|| d!ntOjd|dYd}c~cdSd}c~cwt*j$rb}cjd|cdtjTt t)|czj"d$<Yd}c~cdSd}c~cw| dRk|Z|aD]%}g| |g}h|hk|a|g&j|djhd|Z| @YdSxYw|Sddrd!| d[<| dxxdz cc<tjd| d<|Ar| | d<jdtjT|jVdCjWd|GddC&|j}'|lr|'d|lzz }'t%jt$jt>jV|'U|Sdg|SdgrAjdt+t|Sdd$|Sdvr'|Sdd$}otjT|oz| d$<d|Sdvr'|Sdd}otjT|oz| d<dx|Sdvr4|Sddx}ptajd|pjfzd!}q|q| dx<d|Sdvr|Sdd}r|r| dR_d|Sdvr|Sdd}s|s| dR_dz|Sdvr |Sddz}|d}t|td}tt |t}td}utkdrd|t|ufz}utaj|ud!}v|v| dz<n#tj| dz<YnxYwd{|Sdvr |Sdd{}|d}w|d}t|td}tt |t}t|wEtmjj }x|xjtmjdj z}x|xj}wd}y|y|wz}ytkdrd|t|yfz}ytaj|yd!}z|z| d{<n#tj| d{<YnxYw|Sdd}{|{|{}{ tytN|{}||{| d<j||tNj}}d}~n #tv$rtNj}}d}~YnwxYwj|}|~|{zdy|Sdvr$| jj=| dy<d|Sdvr d| dW<d| d<d|Sdvrd;|Sdvr|dd;0d|Sdvr|dd=UdAD]_}&jdB|&zt>jVdCjWdD|&XdE}'t%j5|'`tjT| d@<d1|Sdvrd!| d1<d|Sdvrd!}d|Sdvrd!| d<d|Sdvr |n#YnxYwjGr+jdt}dnds| vr| dsrd%| vri| d%<d}d1| vr | d1rd!}d| d1<| d%}t|} t%j|| ||}ne#t $rWt?jddg\}}jI|jIdd}YnwxYw|r>d|D}g}|D]V}|ddd}|||<|s||vr|d|d|vr |dr|d=|d|Wg}\|BD]\}}||vr|\d||\D]}||=d| vrg| d<d| vrg| d<| d|| d|\jdt+|jdt+|\|n!#j|dYnxYw| || |¦| @jdàtj|z dS)Nr safe_counterrfrrz %prog [options] z, server key: z, aggregator endpoint: z zOsudo python %prog --install [--customer-key=YOUR_CUSTOMER_KEY] )usagez!Power status -> {} UID {} EUID {}rreasonagent_power_changerrpc8jdS)NzPreventing pid file removal)rurPrsr&rqzAgent.main..s48#3#34Q#R#Rr%z=Exiting without running - other agent process already runningrjFzActivity startedpluginsr num_syncs last_syncr>irza+zInstaller did not create {})rrrrr r!r"Tz Agent vz.Unpausing agent, will run as usual on next runpausedocker_containerszNo monitored containerszMonitored Containers: z$CONTAINER ID IMAGE COMMAND STATUSImage?CommandStatus z "rdz" r"zMetadata queued for rebuildz!Container metadata rebuild queuedzSetting server key to %sz!Setting aggregator endpoint to %swbz.Linux agent should not run if executed as rootz1No server key found, please re-install the agent.zschedules-initnorrrcountermeasures_refresh_pluginsrcountermeasures_last_refreshrz*Refreshing CounterMeasures plugins from %srorz &z+Waiting to refresh CM plugins in %d minutes< anomaliesrrsecondsz%r too early to checkscaleraz No custom value or plugin for %sz%r returned %s in %.2f secondszRunning all plugins took %s result_queuerlzPPause command received. Processing stopped. Process will resume in %.2f minutes.z=Pause duration exceeded, unpausing the agent for the next runilast_metadata_timelast_config_file_timezRebuilding plugin metadatacustom_plugin_urlhas_connected_with_aggregatorzmetadata changedzrebuilding metadataz!randomly forcing metadata rebuildz%we've never pushed up metadata beforerz.py__rzUnable to import module %srBrreCountermeasure)rr<authorhashrz.jsonzUnable to open %sz+%s file is not a valid json file to be read)r<rcommandrFz3 is missing from the countermeasure declaration in rr<rFrdocker_supportedrzDocker supportedz no-permissionz*Missing permission to access Docker socket log_request diagnostics socket_statsmtrauto_topo_scansz1Syncing with aggregator: %d results, %d anomaliesc3K|]:\}\}}|tt|fV;dSr)rrr)r plugin_key_plugin_metadatas r&r zAgent.main..:s`,,r<ss -t -u -r 2>&1z timeout %d %sr=r;zmtr --csv -c 1 %s 2>&1rzSet log level to "%s"zInvalid log level command: "%s"metadata_resyncrefresh_countermeasures update_agentget_logsz9Linux agent running as root, skipping container discovery)rebuildzDocker has been enabled but the fm-agent user needs to be added to the docker group. You can do so with `sudo usermod -a -G docker fm-agent`c.g|]}|dddS)IdN r$)rcs r&rzAgent.main..s$.V.V.Vqwss|.V.V.Vr%rlrmupdatedz$Discovered %d new/updated containersz!Found %d newly deleted containerszError in main loop)r%r agg_clientr*zActivity finished in {}s)rrrRawConfigParserrFrrwrrrrrrrr#rurrJrCrrrrrrcallrrr>rrPrrrr%r)rSrrrrdisplayrrrr6rWrKrrrrrrchmodrrrrErDrrrrUr saver!rr"rrrrrrrr rr send_receive_agent_version_updated_init_dem_schedulesget_dem_wifi_infoadd_dem_wifi_resultsrrrLr&r'rHrrrrrCUSTOMnext_check_timer frequencyrr,rLr,checkidrvrwrxupdaterandomrandintrgetmtimeinstall_remote_pluginsis_metadata_stalerr get_all_factsr!rrendswithrK p_importlib import_moduler"sha_funcsixr# hexdigestencode__dict__rtypetypes ClassTyperr<rFrryrzrrrrTrcontainer_discovery check_accessrVrr rr pop_resultsrbminpop_getDemResultstracebacklimitrzsyncrrr$_updateDEMServiceSchedulesReinstallResponserrrUnauthorizedResponseryhashed_metadatardumpsspawnvpP_NOWAITupdate_schedulesr+r'r(rcrdrrrrrrcAttributeErrorWARNINGbuild_diagnostics upload_logsdiscover_docker_containersrrrun_auto_topo_scanscheckForUpdate total_seconds)r activityStartrr,r'r(rrrrdatar%r,rWdirs_to_createdirpermsrfilerf valid_options option_given valid_optionmsg containersshort_idr cont_image cont_command cont_statusrequested_auto_updatejust_set_option_and_quitraggneeds_schedules dem_clientschedules_received wifi_info refresh_cycler3r4all_plugins_start_timeresults_to_sendcustom_metricsnew_import_metricsnew_import_valuesrrr schedule_tkey leeway_timer}rr>rrr;plugin_start_timet0t1 time_left start_timerYcountermeasures_metadatafacts lucky_dayrrAstalermod_namemodrGr<rplugin json_counter file_content counter_datarequired_fields existing_keysrrcan_access_dockerresponsecommand_resultsrNanomalies_to_reportmetadata_summaryforce_send_schedulesdelay result_datarUrVMAX_CONTAINERS_SYNCcontainer_queuerkdeleted_container_queue dem_results dem_updatesrr.rr/demKeyqcountermeasurer_ cm_metadata metadata_filergr6r=lines log_outputrcrdr>ss_cmdrLr= parsed_urlmtr_cmd mtr_output log_level_keyrlevelmessager"existing_containersexisting_container_idsfound_containerstr^found_container_idsnew_containers container container_ids` r&mainz Agent.mains,   -// D$%%% vzz'>BBCCLL LLL   (2 "#ZZ>>  "!  $%zz'3CDDT   $# |||ZZZ?EE(E&U333,,V44   &   7>>3RY[["*,, %/$5LL!%!2 %%%! !'"=>!&&';TBBBB  GGG'' l'KK RRRRDL H  O    HQKKK  ,,..   B   ())) > G# T\9--& G N4R _g F F F = M M"[/2k?B{O L L L    * 1 dlJTEV!!!  NN,g.E F F F FFF  GO ! 2&1 "/74L3<--////[$'_d++U3;UC+U3 "#1--JCIm22377888-e,,,"0$2BCVVEeT**b7>>%00V(()F)M)Me)T)TUUU LLt|Z N N N F    )  Lw d33 #       C #JJJ HMM#    F ?  B C C CBwK GGIII F  " "",,3F0G20M0M/000/0J + , , , > ? ? ?&0&6&6&8&8  "(%\\'377 '||Is;; &ll8S99 xx\#2#->->-> M F  - /3B+ , / 0 0 0 HMM= > > > F % 5', $! 7+/((1C7999 7L#666! ;+/((:S@BBB 7$4c:::'  T$"2D99:::Q| G$< OPPPFGGGG\::J * 1 dlJTEV!!!   IJJJQ|  &+O!*4=$,!G!GJ)3)@)@AQ)R)R&)1T=O5O5O*.&D$*E*Eb*I*ID001BCCCD# T\9--& G #4=11J"4466I 8,,Y777)FNN7,C,CCCJJw(@AAGGIIVSS4w8O8OOO59P9PPP 7,MNNOORVV3"<<y{{R(F%GG-WW%zz!A  eCjj ' ' H3N NNN LLLIIKKKK  #9=B5663r99HMME!##A B"/!0"&)++!.! !   &.\^^ " O!3355N$$V,, D  13C "$$;4(?(?"$;#';(=(=(?(?#@#@C C x+++--!  +t{:: 1GG%->>> 0- +0N0N0NNPPHMM"98DDD%h.@AAA &/8P&Q&Q&Q#+Y69LL(!$555#N..}bAAEEgsSSE,=m,L''(y ,!UNE =$'..y%/HIII$& ', ;;0FF #N..x/FKKOOE-;8;T,U''(y ,!UNE =$'..y%/HIII$& ',GOCCHMM"DmTTT(0 %B'/~~K!4!4X["!E!E(($E9BHNN8HeRRTW;UU} #** ,=,G,G,I,I J JER HMM-x|~~@V/V    ~  % %o 6 6 6'{ 9;;G,,GGIII!#Gty{{!:d BIHMMj#$F#'BwKGGIIIHMMWFJH#% ') $Eq$//14I % #2--+,'(y{{R 4558RRR#' ' (#' &b00.2ikk*+$&G$4$4T5E$F$F !$r*A'BBB#' *?B& 'd < :;;;+/9;;'(&&..*A*AAA22 7,?@@ 1133O/O!O=> O '/HO &89999 1O &;<<<<"O &IJJJJ ?@O &MNNN"$55i@@'+'D'D'F'F$ ,.(,w0G0GGG 7,DEEKKMMQWWW T\3DiPP>&s"s"  "w~~i88%$ 222(* 9(=(=l"l"H'007701@S@S $AA01!-*5*CHSbSM*R*RCC!-$(H$6$6(Dx(O%&%&%&%-H$,!.'*w %6/7,002 Y0Q0Q-.-..2dff0*0*+4)++ )- 08,0i1R1R,S,S-1TVV-3VG__0*0*+4)++ )- ,.D15cl6H6H6J6J1K1K!1!1ID#),)9!)<)A)Ad3iiSWFWFW,/,Dm<@CICU 1212-.-.-.-.)1,0D'0099:" !-37(* Y(I(I4&4&LL!-$(HNN(;*,',,y(*K*K)L%&%&%&%)HNN93G3I3I$J$J$J$,H/;/@/@/B/B #+!.+3(4(;(;G(D(D,&,&&/ikk%)D,.D , 2 2 4 4 4!-37:l3K3KLL'0!-!-!-$(HNN(U*2)3%&%&%&%)HNN93G3I3I$J$J$J$,H !-3"3"3" 1=0A0A0C0C *.+: !. !.C'*-'?'?|GWGW(+H&H&'?)-/2ssHH->)*)*)*38(-(@(/!-$,*6*:*:9*E*E 8 ? ?3:0<0@0@0H0H2>2B2B82L2L047C7G7G 7V7V %&%&!"!"!"Il"^&R//r:L7M/(;(H(J(J%(I5515-. &89999*o== &RSSS%++3E0F+7;B34H O""r-'8"14R 5F1G1G .""r-'8"14R 5F1G1G .##>(:#25b6H2I2I/{{r%y{),RY& O B&&"$%6"7X &(# G((+,, M'+,,@DX^^EUEU@V@V,,,(($HNN#9;KLLL',$k?a''2k?b+@+@+/(#0r*:';0+/( q$*D*IJJ 5!!! o& Cy{{R%888&(&8&D&D;00'' /3?+&(&8&D&D&F&F #%^"4"@"@"B"BK)+%%'"&(#*b00&()@&AO"3s?';';=P#Q#QRRMM-44_5H5H5K5KLLLL'2--.01E.F+"3'>#?#?@@RR*112I2M2Ma2P2PQQQQ"11"55 R)*C&)-.@.G.G.I.I)J)J&!%L#4#9#9'/$4!1. 7799., 2244 ,,..+0+(, 0;1E%$:$$(-1=),0=)-1>*$(5 02,-/3+,5=\\ 7662:>QSU1V1V+3<< r+J+J19>QSU1V1V '' 77 DDDD &JKKK!3H$$fadff&*%B%B%D%DN%%3L%A &45N&O '=j+'V'V   L L&("& % zjxzzFFFFF!6H$$vilvvv(,y{{SS]]'BDGG$FFFFF ~&--k:::"-"2"2"4"466vJV!45555H&&'GHHHHNN#?MMMGGIIIFF<<66?:>B67;1$"*,.."9"9:J"K"K; $D*1*A*A*C*CB' /z1IE1Q  D""#BCCCCC)FNN7,C,CCCJJw(@AAGGIIVSS&.ll3Db&I&IMMN)--f55D-11*bAAH"0"4"4Z"D"DK$&M ? AD H(* T\5(I(I  44 ; 7 7888 $???#ttXX/y';'='=>>>>> ?HMMMAExxP M #~~~t|||TTT388HCUCUCUW)I#8=#HHC 2; LLL  ! !(,,{B"?"? @ @ @||J++C  +Shz6J6O6O6Q6Q1R1R-S-Shz222&z27;G"&)++"7BwK"hz&:::&z2?CG*.)++*?B' HZ$888$Z0%E",!8% (>>d"""J)3B}%%*)==='/ ';>>(0(<=P(Q%;LB~&8!Xj%999D' 377GG"&((9"5"5"?&(G"%g,,!3 ++I%47H%HF'1'>vT'R'R'R -9>**D-6-A-C-C>***HZ000;' 377>>#xx//"&((9"5"5"?&(G"%g,,<)1):4<)H)HJ)2:-5->y4(>DL$*))B}%%(<<JJJ/0778JKKK BCDWDW ?EWAXAX  $ $V , , , , 5 H  3 4 4 4 4 4 !('        & - --/>>@@       s#A))A/BB!"C C(BGG QQ" %Q" >(++(Ih'''7>>(++(Ih''''(' ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (sOCG9A2E F3 E<E72F37E<<F3?4G936G))G99G=G=Nc |r2|jd||dSd}|js||vr||dSd}|s|jddS|s't j|j|j ||j }d} td}||vrk|j Xdd l m}|t|} t#jt| z||<n |j d \} } t#j} t#| j| j| jt| t|  } | | kr| |z} | ||<nX#t.$rK}|jd |j t5|Yd}~dSd}~wwxYw|jd||dS||}|rt#j|krg|||t#j}||z||<|jd||dSdS#t.$r8}|jd|Yd}~dSd}~wwxYw)NzAdmin update request)rpnext_update_checkzcheckForUpdate: no server keyrrj)daysr) randranger<ri)yearmonthdayhourminutez%Could not calculate next check {}: {}zNext update check at {}zcheckForUpdates problem: {})rur_onCheckUpdatesrrrrrrrrrrrrrwrrrrLrrrrTrrJrV)rr%rrpr*db_keyr update_periodr randomSechrrnctr^s r&rzAgent.checkForUpdatesB   HMM0 1 1 1  J 7 7 7 F$ ||v F   HMM9 : : : F #* dlJTEVJ%' D%1---MR(0000000 ) #m.I.I.K.K*L*L M MI!))I2N2N2N!NBvJJ#4::3??1%\^^%!#"$( "!$Q#&q66 77!#m!3B%'6 $CJJ $ 5s1vv   7>>r&zJJKKK "6 $ L 9J(J(J$$Z000$,(0 %.>6  7>>r&zJJKKKKK )K(J  D D D HNN8??BB C C C C C C C C C DsL%A4J/A=FJ/ G-"AG("J/(G--6J/%BJ// K19-K,,K1c|jd d|j}||d}t |dkrEt |j|j}| dtj |dSdS#t$r8}|j d|Yd}~dSd}~wwxYw) NzPerforming updates check...zagent_update_info/darwin/{}r@methodrupdatespayloadzUpdate check failure: {})rurrJrrrrr rrrvrrrTr")rrpr r"clientr^s r&rzAgent._onCheckUpdates; s  3444  E4;;DLIIH oohuo==G7||a"4#;T\JJ##Itz'7J7J#KKKKK  E E E H  9@@CC D D D D D D D D D EsBB'' C)1-C$$C)c |jdg}g}t|jdD]\}}|jd|}|s|jd|=7t|D]%\}}|jd||js~||j rd| ||tj |j dfd|_|jd||jsx|rd| ||tj |j dfd|_|jd|'|jd t#||jd ||jd t#||jd ||j||zS) NzGathering reportable anomaliesr;rz Threshold %sFTzCleared anomaly: %szLengthy anomaly: %sz$Found %d anomalies that have clearedzCleared anomalies: %rz5Found %d anomalies that exceed the threshold durationzLengthy anomalies: %r)rurrr%rrrvreported_as_cleared has_clearednumber_of_checksrLrrwtime_last_detectedrxreported_as_exceeded_durationexceeds_durationrru)rcleared_anomalieslengthy_anomalies schedule_idr;r threshold_idanomalys r&get_reportable_anomalieszAgent.get_reportable_anomaliesK s}  6777&*47;+?+E+E+G+G&H&H$ C$ C "Kw{+// <T>TUUU .0ABBB  C ! " "    .0ABBB   #444r%cP|jdt|jdD]\}}t|D]V\}}|jrJ||}|jd|jd|W|s |jd||jd|jd|jdS)Nz'Checking for reported cleared anomaliesr;z Removed reported cleared anomalyz Anomaly: %szRemaining anomalies: %s) rurrr%rr'rrvru)rr/r;r0r1s r&!remove_reported_cleared_anomaliesz'Agent.remove_reported_cleared_anomalies s   ?@@@&*47;+?+E+E+G+G&H&H 6 6 "K)-ioo.?.?)@)@ ; ;% g.;'mmL99GHMM"DEEEHNN='::: 6 $((555 0$'+2FGGG  r%c|gks|dkr|jddS|jd}i|jd<|D])}|d}|jd|||d} |r ||||j=d}n|st |}d}||jd|j<|jd||j|jd|#t$rZtj d }t|}|j d ||Y'wxYw|j|jd t||jd t|dS) Nz,No schedule changes received from aggregatorrrz$Received schedule %s from aggregatorEditedCreatedz%s schedule %s locallyzSchedule data: %rrjzInvalid schedule {} data: {}zCreated/updated %d scheduleszDeleted %d schedules)rurr%rrrrrvrTrrrVrrJrur) r new_schedulesexisting_schedulesnew_schedule_datanew_schedule_idrrrrs r&rzAgent.update_schedules s B  -4"7"7 HMMH I I I F!W[1! !.   /5O HMM@/ R R R)--otDDH 'OO$5666*8;7%FF!''(9::H&F4< $X[1 6 LLL24EFFFF   lnnQ'C299/5QQ     4c-6H6HIII  ,c2D.E.EFFFFFs?BDA E*)E*cd}|d|jzz }|dtjddzz }dtjkr|dtjd dzz }n|dtjd dzz }|d tjd dzz }dtjkr$|d tjd|jzdzz }|dtjddzz }|dt j|jd|j zz }|S)zVFunction to build a string of diagnostics data to send back to the aggregator.zAGENT DIAGNOSTICS zAgent version: %s zAgent server hostname: %srTrar>z Agent OS: %szsw_vers | grep ProductVersionz%cat /etc/*-release | grep PRETTY_NAMEzuname output: %szuname -azPackage information: %s zapt-cache show %s-agent || truez ip output: %sz ip addr showz!Local agent pickle file data: %s re)rr) rr+r'rrKrrrr defaultprint)rr%rrstrings r&rzAgent.build_diagnostics sl''$,66- 0G d1 1 1    s| # # nz'>/t((( FF nz'>7t((( F $z'>zQU'V'V'VVV s| # # 1J4K1DJ>d555 F "Z%<^SW%X%X%XXX 7$* GAt'8; ; ;    r%cXt|tr|SdSr) isinstancer__repr__)rrs r&r=zAgent.defaultprint s' c8 $ $ <<>> !4r%cFtj|js,tjd|j t |j}n#YdSxYwididdddddddddd |jd d d dd tdidddddtdddtdddtdddtdd}t| D]\}}||vr|||<|S)Nrr;rFrKrCr^r.rr-rr/r?rrTrS check_resultsi2)rdrcserver_resource_levelsr\drr]) rCrDrrrrJrrrrrr)rr%defaultsrrs r&rz Agent.open_db sw}}T[)) 9 Im**4;77 8 8 8  --BB 44   u  4  ,U  T    /    T KMM! " # $ T% & d' ( [4RTUUU) * %k"&'''+ 0 ;qQQQ1 2 rTU!V!V!V3 6!!1!122 " "LC"}}!3 s A''A,cH |dddkS#YdSxYw)Ntopo auto_scanrJF)rrr,s r&should_run_auto_topo_scansz Agent.should_run_auto_topo_scans s0 ::fk22c9 9 55s!cZ t|ddS#YdSxYw)NrIscans_per_syncrrwrrKs r&get_num_topo_scanszAgent.get_num_topo_scans s4 vzz&*:;;<< < 11"%*cZ t|ddS#YdSxYw)NrI scan_sleeprjrOrKs r&get_topo_scan_sleepzAgent.get_topo_scan_sleep s3 vzz&,7788 8 11rQcLd}d}tj}|jd tt j|d}n#t j}YnxYwtj|z }|jd|z|S)NrerzStarting topo scanTraz.Topo scan complete. Elapsed time: %.2f seconds)rrurrVr+r'ryrz)rrresultrelapseds r& run_topo_scanzAgent.run_topo_scan s# IKK  *+++ ,0tDDDEEFF ,)++FFF)++/  FPQQQ s #AA.c||sdS||}||}d|jvr g|jd<t |D]_}t j}|}|jd||ft j|`dS)NrN) rLrPrTr%rbrrXrLr)rr,nrSrkrscans r&rzAgent.run_auto_topo_scans) s..v66  F  # #F + +--f55 DG + +)+DG% &q # #A A%%''D G% & - -q$i 8 8 8 Jz " " " "  # #r%ci}|js|St|j|j}|d}||St j|}|D]} ||}|r ||||<n2| ||| ||<^#t$r7}|j d|Yd}~d}~wwxYw|S)Ncollectz_getDemResults: {})rr rrrvrrrisEmptyrrrTrurrJ) rr%rvr%r latestResultsrrr^s r&rzAgent._getDemResults9 s | I4=$,77&&y11  I 8,,  %%''  C sG99;;.+C0BsGGHH]3/000mmooBsG   3::1==>>>  s*AC D-DDcvd}d|vr&|dr|d|jkr |j|d<d}n |j|d<d}|S)NFlast_ran_versionT)r)rr% has_updates r&rwzAgent._agent_version_updatedQ s[  # #+=(> #$%55)-%&! %)\B! "Jr%c |dd}|dg|dg|dgd}t|j|j}|dt j| nK#t$r>}tj d t|Yd}~nd}~wwxYwdS) Nrr@r rZr[r])rZr[r] initSchedulesr#z/schedules error: {}) rrrr rrrvrrrTrrrrJrV)rr%rrraggExs r&rxzAgent._init_dem_schedules] s E{{;u{==H)16Mr)R)R%-\\2Er%J%J%-\\2Er%J%JI #4=$,??J  # #OTZ =R=R # S S S S E E E M077E CC D D D D D D D D E sBB C')4C""C'c|jsdSt|j|j}|dt j|}dS)Nzupdate-schedulesr#)rr rrrvrr)r newSchedulesr%rQs r&rz Agent._updateDEMServiceSchedulesl sK|  F4=$,77    2DJ|rs--------((((((((::::::::::++++++++SSSSSSSSHHHHHHHH******99999999999999******((((((,,,,,,$$$$$$OOOO      ))))))JJJJ #%%CCC''''' KKKK!!!!! NNN|HHJJJwHHHZ(( J(OOOO(######'''''''' "NNNN"""!!!!!!!!"9###LX'VX'VX'VX'VX'VFX'VX'VX'VX'VX'Vs2A77A?C""C=DDDD2D"!D2"D,)D2+D,,D21D26 E E,E11F F FF