Warning: Cannot modify header information - headers already sent by (output started at /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp:1) in /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325

Warning: Cannot modify header information - headers already sent by (output started at /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp:1) in /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325

Warning: Cannot modify header information - headers already sent by (output started at /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp:1) in /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325

Warning: Cannot modify header information - headers already sent by (output started at /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp:1) in /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325

Warning: Cannot modify header information - headers already sent by (output started at /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp:1) in /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325

Warning: Cannot modify header information - headers already sent by (output started at /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp:1) in /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325

Warning: Cannot modify header information - headers already sent by (output started at /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp:1) in /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325
3 1S¨jøÈã8@sLddlmZmZddlmZmZddlmZmZmZddl m Z m Z ddl m Z mZddlmZmZddlmZddlmZmZmZmZmZdd lmZdd lmZdd lmZdd lm Z dd l!m"Z"ddl#m$Z$ddl%m&Z&y ddl'Z'Wnddl(Z'YnXddl)Z)ddl*Z*ddl+Z+ddl,Z,ddl-Z-ddl.Z.ddl/Z/ddl0Z0ddl1Z1ddl2Z1ddl3Z3ddl4Z4ddl5Z5ddl6Z6ddl7Z7ddl%Z%ddl8Z8ddl9Z9ddl:Z:ddl;Z;ddlZ>Wn Gdd„dƒZ?e?ƒZ>YnXy ddl@ZAWnddlAZAYnXy ddlBZBWn>eCk �rHy ddlDZBWneCk �rBdZBYnXYnXyddlEZEeEjFZGWnddlHZHeHjIZGYnXdeJe7ƒk�r”dd„ZKeKe7_Ly ddlMZMWn ddlNjOZMddlPjQZRYnXddlSZSy ddlTZTWn eCk �röddlUjVZTYnXdZWdZXGdd„deYƒZZdd„Z[dd„Z\dd „Z]d!d"„Z^d#d$„Z_Gd%d&„d&e`ƒZadS)'é)Úexecute_commandÚwhich)ÚdatetimeÚ timedelta)Ú InspectorÚget_fqdnÚget_server_name)Ú DEMClientÚ IPCClient)ÚNoAgentSectionHeaderExceptionÚNoManifestFileException)ÚForticlientHelperÚcalculate_customer_key)ÚProcessManager)ÚbasenameÚexistsÚisdirÚisfileÚjoin)ÚPickleDatabase)Ú PluginManager)Úpprint)ÚProgressPrinter)Ú ResultQueue)ÚSchedule)ÚexitN)ÚPluginBlacklisterc@seZdZdZdS)ÚSixTN)Ú__name__Ú __module__Ú __qualname__ÚPY2©r"r"ú"/usr/lib/fm-agent/library/agent.pyr0srÚ check_outputcOs>d|krtdƒ‚tj|dtji|—Ž}|jƒ\}}|jƒ}|S)NÚstdoutz3stdout argument not allowed, it will be overridden.)Ú ValueErrorÚ subprocessÚPopenÚPIPEÚ communicateÚpoll)Ú popenargsÚkwargsÚprocessÚoutputZ unused_errÚretcoder"r"r#ÚfTs  r1zhttps://global.fortimonitor.comz9/usr/local/FortiMonitor/agent/data/fm_agent_install_blockc@s eZdZdS)ÚExceptionMediatorN)rrr r"r"r"r#r2rsr2cCs|r|tjƒkrdSdS)z§ Return wheter the installation should be delayed or not. An installation is delayed if there is a timestamp and our current time is less than that value. TF)Útime)Útimeoutr"r"r#Údefer_installationvsr5cCs.|sd}|stjƒ}t|ddƒ}|||fS)zÉ Calculate the next wait period until the installation can be attempted again, is the last timestamp plus the last seconds we waited times 2, until a maximum of 12 hours have been reached. ééiÀ¨)r3Úmin)Ú timestampZwaitedZnext_wait_secsr"r"r#Úget_next_wait_period€s r:c CsZtjjtƒsdSd\}}ttƒ�,}|jƒ}|jdƒ\}}t|ƒ}t|ƒ}WdQRX||fS)zŠ Load the file that contains the time to wait until trying the next install, and the amount of seconds we have waited so far. Nçrú;)NN)r;r) ÚosÚpathrÚAGENT_INSTALL_BLOCKÚopenÚreadÚsplitÚfloatÚint)r9ÚsecondsÚopenedÚdatar"r"r#Úload_failed_tries_file�s  rHc Cs.ttdƒ�}|j|›d|›�ƒWdQRXdS)z‡ Save a file containing the next time the install is allowed to proceed and the seconds we are waiting for that timestamp. zw+r<N)r@r?Úwrite)r9rErFr"r"r#Úsave_failed_tries_file�s rJc Csàtjjdƒr:tddƒ�}|jƒjƒ}|jdƒ}WdQRXnt}dj|ƒ}|j dƒrb|j dƒd}n|j dƒr||j dƒd}n|}d}t j |d t jƒd �}|jd |ƒ|jƒ}|jd krÆ|jƒjd ƒ}ntd|›d|j›�ƒ‚|S)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_urlÚrbÚ Nz/aggregator_url/{}zhttps://ézhttp://é )Úhostr4ÚcontextÚGETéÈzutf-8z*Failed to grab agg url using customer key z. éÿÿÿÿrS)r=r>rr@rAÚdecodeÚstripÚDEFAULT_MEDIATOR_URLÚformatÚ startswithrBÚhttplibZHTTPSConnectionÚsslZ_create_unverified_contextÚrequestZ getresponseÚstatusr2)Ú customer_keyrFZ mediator_urlZuriZbase_urlÚaggregator_urlZ connectionZrespr"r"r#Úget_regional_agg_url¦s*        r_c@s~eZdZdZdZdZd`dd„Zd d „Zd d „Zdadd„Z dd„Z dd„Z dd„Z dbdd„Z dd„Zdd„Zdcdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zdddd?„Z dfd@dA„Z!dBdC„Z"dDdE„Z#dFdG„Z$dHdI„Z%dJdK„Z&dLdM„Z'dNdO„Z(dPdQ„Z)dRdS„Z*dTdU„Z+dVdW„Z,dXdY„Z-dZd[„Z.d\d]„Z/d^d_„Z0d;S)gÚAgentZcustomÚINFOér7rNécCsVtjj|jƒs|jjdƒdSy0t|jƒjƒjƒj dƒ\}}t |ƒ}t |ƒ}Wn|jj dt j ƒƒdSytj|ƒWntk r�dSXyhddl}|jtjd|ƒjƒd}td|ƒd jƒ}||jksìd |ksìd |j|k�rø|jƒdSWn YnX|�rDtjƒ|d |k�rD|jj d |ƒtj|dƒdStjƒ} |j| ƒ\} } | j�rð|jdk�rð|jj d|jƒy^tƒ} | j tj!dƒƒ} | j"| |jƒ} |jj ddj#| ƒƒx| D]}tjt |ƒdƒ�qÂWWn YnXdS|dk�r>|j$d7_$|d 8}|jj d|||fƒtj%|ƒ|j&||d�S|jj d|ƒdSdS)z/Check to see if it's safe to start up the agentz-No existing PID file found, proceeding to runTú:z#Error reading existing PID file: %srNz/proc/%dz ps -o cmd= %drMÚpythonz%s_agentgN@z&Found stale agent process %s - killingé Úrootz7Uninstalling. Killing all process from the username %s z/proczFound pids %s ú rNz]Found existing agent process %s, sleeping for %s and checking %s more times if safe to start.)ÚcounterzAFound existing agent process %s, exiting to wait for it to finishF)'r=r>rÚpid_fileÚlogÚdebugr@rArUrBrDÚcriticalÚ tracebackÚ format_excÚgetpgidÚOSErrorÚpwdÚgetpwuidÚstatÚst_uidrÚlowerÚuserÚbrandÚremove_pid_filer3ÚkillÚoptparseÚ OptionParserÚparse_argumentsÚ uninstallrZfilter_non_pid_processÚlistdirZget_process_from_userrÚcurrent_agent_delayÚsleepÚsafe_to_start_agent)Úselfr4Z sleep_timeriÚpidr9rrZusernameZpsoutÚparserÚoptionsÚargsZmanagerZpidsr"r"r#r‚Òsr        zAgent.safe_to_start_agentcCs6tjƒ}ttjƒƒ}t|jdƒ}|jd||fƒdS)z+Create a new PID file to track our instanceÚwz%s:%sN)r=ÚgetpidrDr3r@rjrI)rƒr„Únowr1r"r"r#Úwrite_pid_file's  zAgent.write_pid_filecCstjj|jƒrtj|jƒdS)z1Remove an old PID file to clean up on the way outN)r=r>rrjÚremove)rƒr"r"r#ry.szAgent.remove_pid_fileFcCs¦d}td|j|d�}|j|ƒ}|r.|jƒn |jdƒtjdkr”td|j|d�}tjd|j |j|j fƒ|jƒd}td|j d d �}|jƒt d |j ƒdS) NrMzNotifying %s of uninstall)ÚindentzERROR CONNECTINGÚdarwinzremoving %r directoryzrm -rf %s %s %sz uninstalling %s T)Úsectionz Uninstall of %s complete ) rrxZnotify_of_uninstallÚfinishÚsysÚplatformÚlog_dirr=ÚsystemÚdb_dirÚ config_dirÚpkg_dirÚprint)rƒÚaggregator_clientÚremove_instancer�ÚppÚsuccessr"r"r#r~5s    zAgent.uninstallc Csätjƒ}y.|j|jƒ}|s"tdƒ‚|jdƒs4tdƒ‚Wn¨tjtfk r¸|jj t t j ƒƒƒt jddkrŠtjdt|jdƒjƒƒ}n tjdt|jdƒjƒjdƒƒ}|j|ƒYn(tk rÞ|jjt t j ƒƒƒYnX|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 foundÚagentzÿUsing 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 rrcz[agent] Úrzutf-8)Ú configparserÚ ConfigParserrAÚ manifest_filer Ú has_sectionr ZMissingSectionHeaderErrorrkÚwarningÚstrrnror‘Ú version_infoÚStringIOr@rTZreadfpÚinfo)rƒÚmanifestr¡Zamended_manifest_filer"r"r#Ú get_manifestJs&   zAgent.get_manifestc Csxtjƒ}d}tjj|jƒrb|jjdƒt|jdƒ}|j ƒ}|j ƒtjƒ}|j |jƒ|j ||ƒ}|j ||ƒ}|j dƒs‚|jdƒ|jddƒsž|jdd|jƒ|jdd|jƒd|jdƒkrÊ|jddƒ}ng}|jj|ƒ}|rì|jdd|ƒtjƒ}|j dƒ �r¼|�r¼|jddƒ} yttj| ƒ} | j�r0| j} n| j} tj| ƒ�s†|jdƒx8dD]0} |j| dƒ} | dk �rR|jd| | jd ƒƒ�qRWWn2tjƒd }t |ƒ}|jj!d j"|ƒƒYnXt|jdƒ}|j#|ƒ|j ƒtj$d|jƒ|dk �rdt%j&ƒ}|j'|t|jdƒj ƒƒ}t(|ƒ}dd„|Dƒ}t)|ƒ�rV|jjdƒ|jj*ddj+|ƒƒn |jjdƒn|jjd|jƒ|S)zo Create/update the config file with the settings from the manifest. Return the config. NzExisting config file foundrKr�r^ÚversionZplugin_blacklistÚ agent_proxyÚhttpsÚhttpú/rMzInstall proxy error: {}rˆz chmod 640 %sržcSs$g|]}|jdƒs|jdƒr|‘qS)z+ z- )rX)Ú.0Úliner"r"r#ú ·sz&Agent.write_config..zConfig file overwrittenzConfig diff: %sÚzNo change to config filezCreated new config file: %s)r¬r­),rŸr r=r>rÚ config_filerkr§r@Ú readlinesÚcloserAÚcopy_config_settingsr¢Ú add_sectionÚ has_optionÚsetÚagg_urlrªr†ÚgetÚ _blacklisterZ update_listÚ urlrequestZ getproxiesÚurlparseÚschemeÚhostnameZ proxy_bypassrUr‘Úexc_infor¤ÚerrorrWrIr”ÚdifflibZDifferZcompareÚlistÚlenrlr)rƒr¨Z new_configZold_config_linesZold_config_fileZ old_configZoriginal_pluginsZupdated_pluginsZproxiesrºZagg_url_optionZ agg_hostnameÚkeyZp_urlÚerrrÂZnew_config_fileZdifferZ diff_linesZchangesr"r"r#Ú write_configpsr                      zAgent.write_configcCsPxJ|jƒD]>}|j|ƒs"|j|ƒx$|j|ƒD]\}}|j|||ƒq.Wq W|S)z‡ Copy settings from the original to the destination, overwriting destination's settings if they already exist. )Zsectionsr¢r·Úitemsr¹)rƒZoriginalZ destinationr�ÚoptionÚvaluer"r"r#r¶Ås   zAgent.copy_config_settingscCs&|jjdƒtƒ\}}t|ƒrTtj|p,tjƒƒ}|jjdt›d|›d�ƒt j d@ƒ|j rz|dkrzt dƒ|jjdƒdS|j |j|j|jf} tjd| ƒ|jjd | ƒ|jƒ} |j| ƒ} i} | jd ƒrÔ| d } tj||||| d �} td d „| jdƒDƒƒ}| jd ƒ�r| d | _td|jdd�}|jddƒjƒ}|dk�r†y2| jddƒ}t d|ƒ|jjd|ƒ|| _Wn YnX�n|dk�rŽyš|j ƒ}||d<|d}|d}t!||ƒ}||d<t"|ƒ}t#jd|›d|›�ƒ|| _||d<| j$dd|ƒ| j%t&|j'dƒƒtj(j)tƒ�r(tj*tƒWn`t+k �rŠ}zBt,||ƒ\}}t-||ƒ|jj.d|›d|›d�ƒt j dAƒWYdd}~XnXnt/d |›d!�ƒ‚| jd"ƒ�rÄtd#d „| jd"ƒDƒƒ}ni}y | j0|j1ƒ||ƒ\}}}}}Wndt d$ƒt d%ƒx*|j2d&ƒD]}t d'tj(j3|d(ƒƒ�q W|jjd)t4j5ƒƒt j ƒYnX| �s^| �r‚t d*|ƒ|jjd*|ƒt j ƒ|jj6d+|||||fƒ|�r¬||j7d,<d-| j8dƒk�r*| jdd-ƒjƒd.k�r*d/| j8dƒk�r*xF| jdd/ƒj2d&ƒD]0}t9j:t j;tj(j3|jƒn|jj?d4|ƒ|j>d5|ƒ|�rî|�rî| j$dd6|ƒ| j%t&|j'dƒƒ|�rªt d7|j@|jfƒ|jjd8ƒnBtAdBtB|ƒd:ƒ}d;||}t d<|j@|j|fƒ|jjCd=ƒn,t d>|j@||j@|j|jDfƒ|jj?d?|ƒ|jEƒdS)CNzBegining installationz"Agent installation block found at z. Preventing install until Ú.rcFzAgent already installedzmkdir -p %s %s %s %sz Created directories: %s %s %s %sr«)Ú proxy_configcss |]\}}||jdƒfVqdS)z'"N)rU)r¯rÊrËr"r"r#ú ósz Agent.install..r�z Handshaking with %s serversrM)r�Úhandshake_typeZstandardÚ forticlientr^z8Using manifest file aggregator for initial handshake: %sZforticlient_metadataÚ ems_serialÚforticlient_environmentr]zOverwriting agg url with z for customer key rˆz Mediator error grabbing agg url z". Blocking agent installation for zUnexpected handshake type z. Aborting handshakeZ attributescss|]\}}||fVqdS)Nr")r¯rÊrËr"r"r#rÎ/szI 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%s, %s, %s, %s, %sÚ log_levelÚenable_countermeasuresÚtrueÚcountermeasures_remote_pluginszcountermeasure.pyZinstall_pluginsz--url)ÚshellzInstallation failed: %szERROR CONNECTING: %sÚ server_keyzxInstallation of %s complete. Your server will now sync automatically with the %s ControlPanel. z-Agent will automatically sync with aggregatoréPr7rhzŽ Installation of %s complete. Please copy and paste the following server key into the %s ControlPanel for your server: %sz^The server key must be manually entered into the Control Panel before agent will begin syncingz  Installation of %s had an error (%s). The %s is installed but it cannot sync correctly. Please contact %s and send them the log file at %s zAggregator sync failed: %séýÿÿÿrÛgD@)Frkr§rHr5rZ fromtimestampr3rÂr?r‘rÚ is_installedr˜r“r•r–Úcustom_plugin_dirr=r”r©rÈr¢Ú aggregatorÚClientÚdictrÉrÍrrxr»rvrºÚget_fortisase_attributesrr_Úloggingr¹rIr@r³r>rrŒÚ Exceptionr:rJÚ exceptionr&Z handshakeÚ get_all_ipsrBrrnrorlÚdbr†r'ÚrunÚ executableÚbin_dirrUr�rmr—rDrÅr£Úlog_fileÚmigrate_config)rƒrºrªrÙr]ÚforceZ block_foundZ waited_forZuntilÚdirsr¨ÚconfigrÍr™Zagent_settingsr›rÏÚhandshake_datarÑÚ environmentZexpected_customer_keyrÇZ block_untilrEZserver_attributesrœÚ found_serverrÂrÔÚurlZpaddingr"r"r#ÚinstallÒsô                      z Agent.installc Csg}tdƒ}|}dtjks$dtjkr,|d}dtjkr¤tdƒ}|r¢td|ƒ\}}|dkr¢xÚ|jd ƒD]8}|jƒjd ƒsf| sf|d krˆqf|jƒ}|j|d ƒqfWn’|o°dtjk�rt|ƒ\}}|dk�r6tjdkrðtj d|ƒ}dd„|Dƒ}ndd„tj d|ƒDƒ}n.tdƒ} td| ƒ\}}dd„tj d|ƒDƒ}dd„|Dƒ}dd„|Dƒ}d|k�rjd||j dƒ<|�sÜ|j j dƒt j|j|j|jd�} y| jƒg}Wn:tk �rÚ} z|j jdj| ƒƒg}WYdd} ~ XnX|�sð|j jdƒn|j jd|ƒ|S) NZifconfigÚsunosÚaixz -azhp-uxÚnetstatz%s -inrrLÚnamer²rcÚfreebsdrŽzinet6? (.+?)\scSsg|]}|jƒjdƒd‘qS)ú%r)rUrB)r¯Úipr"r"r#r±®sz%Agent.get_all_ips..cSsg|]}|jdƒ‘qS)zaddr:)rU)r¯Úxr"r"r#r±±srúz %s addr showcSsg|]}|‘qSr"r")r¯rûr"r"r#r±¶scSsg|] }|r|‘qSr"r")r¯rûr"r"r#r±¸scSs(g|] }|jƒjdƒdjdƒd‘qS)r®rrù)rUrB)r¯rúr"r"r#r±¼sÚ1z::1z@Unable to retrieve IP address(es) locally, contacting aggregator)rÍzIP address lookup failure: {}z"Unable to determine IP address(es)zIP addresses: %s)rørŽ)rr‘r’rrBrvrXÚappendÚreÚfindallÚindexrkr£rÞrßrºrªrÍZ get_local_iprãrÂrWrl) rƒZipsZ ifconfig_pathZ ifconfig_cmdröÚcoder/Úlr°Z ip_addr_pathr™Úer"r"r#rå•sV      zAgent.get_all_ipsc CsPtjj|ƒsiSy(t|ƒjƒjƒjdƒ}tdd„|DƒƒStdƒiSdS)NrLcSs"g|]}tttj|jdƒƒƒ‘qS)ú=)rÄÚmapr¤rUrB)r¯r°r"r"r#r±Ýsz9Agent.get_old_style_config_properties..zError reading manifest file) r=r>rr@rArUrBràr˜)rƒÚmanfileZmfr"r"r#Úget_old_style_config_propertiesÖs z%Agent.get_old_style_config_propertiesúr+c Cszt||ƒ}d}xFtdƒD]:}ytj|tjtjBƒd}PWqtjdƒYqXqW|rv|jj d|ƒ|j ƒdS|S)NTrNFgð?zCould not acquire lock on %s) r@ÚrangeÚfcntlÚflockZLOCK_EXZLOCK_NBr3r�rkrärµ)rƒÚfnameÚmodeZofileÚlockedÚir"r"r#Ú _open_fileâs zAgent._open_filec Cs0t|jƒ�r(|j|jƒ}|s iSi}y\tj|ƒ}xL|D]D\}}}tj|dƒ}t|ƒ}||tj |j ƒƒg|d||j dƒf<q6WWn|j j dƒi}YnXt|jƒƒ}|jdd„d�i}x<|D]4\}}}||kræ||gg||<qÄ||j||gƒqÄW|jdƒ|jƒtj|tjƒ|jƒ|SiSdS) Nz%Y-%m-%d %H:%M:%Sz%s:%sz %Y%m%d%H%Mz"Unable to parse custom metric filecSs|dS)Nr7r")Úvr"r"r#Ú sz)Agent.get_metric_values..)rÆr)rÚ report_filerÚcsvÚreaderrÚstrptimerCr3ÚmktimeÚ timetupleÚstrftimerkrÂrÄÚvaluesÚsortrýÚseekÚtruncater r ÚLOCK_UNrµ)rƒÚcsvfileZ unique_valuesZ csv_readerÚtextkeyrËr9Z custom_valuesr"r"r#Úget_metric_valuesõs6    .    zAgent.get_metric_valuesc Cs˜t|jƒr�|j|jƒ}|siStj|ƒ}ytdd„|Dƒƒ}Wn$tk rb|jjdƒi}YnX|j dƒ|j ƒt j |t j ƒ|jƒ|SiSdS)NcSsg|]}|d|df‘qS)rrMr")r¯Úrowr"r"r#r±&sz0Agent.get_registered_metrics..z)Error reading custom metric register filer)rÚ register_filerrrràrãrkrärrr r rrµ)rƒrZ csvreaderÚmetricsr"r"r#Úget_registered_metricss       zAgent.get_registered_metricscCsJg}x@t|jdjƒƒD]*\}}d|j|jf}||kr|j|ƒqW|S)NÚ schedulesz%s.%s)rÄrærÉÚplugin_textkeyÚresource_textkeyrý)rƒZexisting_tkeysÚsr_idÚscheduleÚtkeyr"r"r#Úget_existing_metrics7s zAgent.get_existing_metricscCs|dkr|jdƒrdSdS)Nzcom.pnp-hcl.dominostatszMem.PID.TF)rX)rƒr'r(r"r"r#Ú ignore_metric?s zAgent.ignore_metriccCs(ddg}ddddg}ddddg}|jƒ}|jjd ƒi}i}g}|jg} |jd d ƒr`|jd d ƒpbd} | rx| j| jd ƒƒ|j} |jd d ƒr–|jd d ƒp˜d} | r¦t | ƒ} g} xr| D]j}t |ƒs¾q°t | ƒ| krÌP|jjd|ƒx>t j |ƒD]0}t | ƒ| krøPtt||ƒƒræ| jt||ƒƒqæWq°W�xü| D�]ò}t|ƒ}t j|t jƒ�sV|jjd|ƒ�q&t|dƒ}�y0|jjd|ƒtj|jƒƒ}|jƒx2|D]*}|t|jƒƒk�rŽtjd||ƒ�qŽ�qŽW|jdgƒ}�xŒ|D�]‚}x8|D]0}|t|jƒƒk�rÜtjd|ƒt|ƒ�qÜ�qÜW|j|d|dƒ�r*�qÐyJyt |dƒ}Wn4tk �rpt j!|ddƒ}t"j#|j$ƒƒ}YnXWn2tk �r¦|jjd|d|dƒ�wÐYnX|d|f}d|d|df}||k�r@||k�rô||j%dgƒj|ƒnJ|jddƒ}|dk�r|d}|d|d|d||jddƒ|gdœ||<n|j%|gƒj|ƒ�qÐW|jdgƒ}�x|D�]}x8|D]0}|t|jƒƒk�rxtjd|ƒt|ƒ�qx�qxWyJyt |dƒ}Wn4tk �ròt j!|ddƒ}t"j#|j$ƒƒ}YnXWn2tk �r(|jjd|d|dƒ�wlYnX|d|d||d|ddœ}d|k�r`|d|d<d |k�rv|d |d <|j|ƒ�qlWt j&|ƒWn„tk �r|j'�r¸t||j(ƒ}|jjd!|ƒ|j)d"ƒ|jj|jƒƒ|jjt*j+ƒƒ|jjd#ƒ|jƒt j&|ƒ�w&YnX�q&W|||fS)$Nr'Zplugin_category_namer rËÚunitr9Ú descriptionÚactionz Processing incoming import filesr�Zmetric_incoming_directoryrÓZmax_incoming_files_overridez Looking in %sz&Can not delete %s so will not process.zr+z Processing %sz1Can not process file %s! Missing required key: %sr$z0Can not process metric! Missing required key: %sz%Y-%m-%d %H:%M:%Sz,Could not process timestamp %s for metric %sz%s.%sÚ first_valuesÚlabel)r'Z plugin_namer(r2r.r1Ú incidentsz2Can not process incident! Missing required key: %sz.Could not process timestamp %s for incident %s)r'r(r9r/r0Z match_keyÚmetadatazError processing %s:rz Deleting file),r,rkr§Úcustom_import_dirr¸r»ÚextendrBÚMAX_IMPORT_FILESrDrrÅr=rrrrýrÚaccessÚW_OKrÂr@ÚjsonÚloadsrArµrÄÚkeysrârr-rãrrÚcalendarZtimegmrÚ setdefaultrŒÚclosedr rrnro)rƒrîZ req_top_keysZreq_metric_keysZreq_incident_keysZexisting_metricsZ new_metricsZ new_valuesÚcustom_incidentsZ import_dirsZadditional_dirsZ max_filesZ max_overrideÚfilesÚ directoryr1Ú full_pathr ÚjZreqr$ÚmZunix_timestampr9Z new_valuer+r2r3ZincidentÚobjr"r"r#Úprocess_importsEs                                         zAgent.process_importsc Cs¢dtƒi}tjj|jƒr‚|j|jƒ}|s,|S|j|jƒ}|jdƒ|jƒt j |t j ƒ|j ƒytj |jƒWn YnX|S|jrštƒ}|rš||d<|SdS)NZfqdnrÚ server_name)rr=r>rÚupdate_config_filerrrrr r rrµrŒÚis_fortisase_installr)rƒrîrZ propertiesrHr"r"r#Úget_update_configås(    zAgent.get_update_configcCsÄ||_||_||_||_||_||_||_tjƒ|_ d|_ t j ƒdkpPt j ƒdk|_| |_t jj| |jƒ|_t|jd|jƒ|_t jj| |jƒ|_t|jd|jƒ|_x*tjD] }d|kr®t jj|jdƒ|_Pq®Wt jj| |jƒ|_t|jd|jƒ|_t jj| |jƒ|_t jj|jdƒ|_t jj|jd ƒ|_t jj| d |jƒ|_t jj| |jƒ}t jj|d ƒ|_t jj| |jd ƒ|_d tj j!ƒk�rªt jj|dƒ|_"t jj|dƒ|_#n^dtj j!ƒk�ràt jj|jdƒ|_"t jj|jdƒ|_#n(t jj| |jdƒ|_"t jj| |jdƒ|_#d|_$d|_%d|_&d|_'d|_(d|_)d|_*d|_+d|_,d|_-�y¸t.|jƒ�s\t/dƒ‚t jj.|jƒ�s|t/dj0|jƒƒ‚t1j2ƒ}|j3|jƒ|j4dƒ�r¦|d|_-tj d/k�râ|j5ddƒ�rÖ|j6ddƒj!ƒdk|_%|j5ddƒ�rò|j6ddƒ|_&|j5dd ƒ�r|j6dd ƒ|_'|j5dd!ƒ�r*|j6dd!ƒ|_(dtj k�râ|j5dd"ƒ�rZ|j6dd"ƒj!ƒdk|_)|j5dd#ƒ�rœy|j7dd#ƒ|_+Wn t8k �ršt9j:d$ƒYnX|j5dd%ƒ�r¸|j6dd%ƒ|_*|j5dd&ƒ�râd'|j6dd&ƒj!ƒk�râd|_,|j6dd(ƒ}|�süt/d)ƒ‚WnLt/k �rJ}z.t9j;d*|›�ƒtjƒk�r`d-t_ d|_?|j@ƒt9jA|jBjCƒ|_DytE|j6dd.ƒƒ|_FWnt/k �r°||_FYnXd|_GtHƒ|_IdS)0Nirz%s.dbz%s.logz--power-statuszpower_status.logz %s_agent.cfgÚcountermeasuresZincomingz%s-agent-manifestz agent.pidz update-configrøÚregisterZreportrŽTFZ demserviceZ updateservicez/tmp/com.fortinet.fortimonitorézNo bin directoryzNo config file {}r«ÚlinuxZdemZenabledrÖZ server_portr�zupdateservice.portZipc_pathÚ auto_updateÚinterpreter_update_periodzrr•Údb_filer“rêr‘Úargvr–r³rÝÚ!countermeasures_custom_plugin_dirr5r¡rjrIr’rvr#rrÜÚhas_demÚdem_portÚupdate_service_portÚipcPathrPrRrQrJrÍrrãrWrŸr rAr¢r¸r»Zgetintr&râr£räÚstderrrIÚunamer€Úset_up_loggingÚ getLoggerÚ __class__rrkrCr4rærr¼)rƒrxrºrªrwrérSr—r4Zbase_config_dirZbase_custom_plugin_dirZ base_data_dirZ base_log_dirrZZargumentZdata_dirr³rÙrr"r"r#Ú__init__sÎ               zAgent.__init__cCsÜ|jdr|jjdƒdStjƒ}|j|jƒrØd}|jdƒsV|jdƒd}|jjdƒ|jdƒr¬x0|j dƒD]"\}}|d kr€d }|j d||ƒqlW|j dƒd}|jjd ƒ|rÎt |jd ƒ}|j |ƒ|jƒd|jd<dS) 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 formatNFr�TzAdded [agent] section to configZ AgentConfigrºr^zMCopied deprecated [AgentConfig] section to [agent] and removed it from configrˆ)rærkr§rŸr rAr³r¢r·rÉr¹Zremove_sectionr@rIrµ)rƒrîZconfig_has_changedrÊrËr³r"r"r#rë�s0          zAgent.migrate_configcCs |jƒdS)N)ry)rƒr"r"r#Ú__del__Ász Agent.__del__cCstjƒ}tjj|jƒs(tjdj|jƒƒyt|j dƒ}Wn>t k rvt d|j t t jƒƒfƒt dƒtjƒ}Yn X|jƒtjj|j dd dd�}|jtjd ƒƒ|j|ƒ|jtjƒ|jƒ}ytt|d jƒƒ}Wntt|jƒ}YnX|j|ƒdS) Nz mkdir -p {}ÚazCannot open log file %s: "%s"zLogging to stderr insteadéir7)ZmaxBytesZ backupCountzA%(process)d) %(asctime)s - %(name)s - %(levelname)s - %(message)srÔiiP)rârer=r>rr“r”rWr@rêÚIOErrorr˜r¤rnroZ StreamHandlerrµZhandlersZRotatingFileHandlerZ setFormatterZ FormatterZ addHandlerÚsetLevelZNOTSETÚopen_dbÚgetattrÚupperÚDEFAULT_LOG_LEVEL)rƒZ root_loggerrêÚhandlerrærÔr"r"r#rdÄs2  zAgent.set_up_loggingcCs|jr(|jdddd�|jddddd �|jd dd dd �|jd dd dd �|jddddd �|jdddd�|jddddd�|jddddd�|jddddd�|jddddd�|jddddd�|jd ddd!d�|jd"ddd#d�|jd$d%ddd&�|jƒ\}}||fS)'zJ Return the options and arguments parsed from the parser. z --server-keyrÙZstore)Údestr0z--rebuild-metadataÚ store_trueÚrebuild_metadataF)r0rsÚdefaultz--statusr\z--statsÚstatsz --from-cronÚ from_cronz --aggregatorrÞ)r0rsz --installró)r0rvrsz --uninstallr~z--remove-instanceršz--customer-keyNr])rvr0rsz --unpauseÚunpausez--list-containersÚlist_containersz--rebuild-container-metadataÚrebuild_container_metadataz--power-statusÚsystem_power_status)rsr0rv)rÜZ add_optionÚ parse_args)rƒr…r†r‡r"r"r#r}ísN zAgent.parse_argumentscŠ`sJtjƒ}d}tjƒ}|jˆjƒyt|jddƒƒ}Wnd}YnXˆjr¶|gkr¶y|jddƒ}Wnd}YnXy|jddƒpˆˆj ˆ_ Wndˆ_ YnXdˆj |ˆj f}n dˆj f}t j |d�}ˆj |ƒ\}}|j�rLyRˆjjd j|jtjƒtjƒƒƒtjˆj ˆj|ˆjd �} d |ji} | jd | ƒWn YnXtd ƒˆjˆj|d��s‚‡fdd„ˆ_ˆjjdƒtjdƒˆj ƒd} ˆj!ƒˆ_"ˆj�r¦ˆj"} ˆj#ƒˆjjdƒ|j$�rðt%| ˆjt&ˆj'dƒˆj(ƒ} t)j$ˆ|| d| ƒ|j*�rt)j*| d| d| dƒ|j+�rFtjˆj ˆj|ˆjd �} ˆj+| |j,ƒtƒˆj �sX|j-�rL|j�rh|jˆ_ |j.�prd} dtj/j0ƒk�r4ˆj1dfˆj2dfˆj(dfˆj3dfˆj4dfg}x4|D],\}}tj5dj|ƒƒ|�r¶tj6||ƒ�q¶WxLˆj7ˆj8gD]<}t9|dƒ�}WdQRXtj:j;|ƒ�sôˆjjdj|ƒƒ�qôWˆj-ˆj ˆj|| ƒdSddd dd!d"d#g}d}x"|D]}t<||dƒ�rhd$}P�qhW|�sºd%ˆj=ˆj|ˆj f}t>|ƒˆjj|ƒdS|j?�rÞt>d&ƒd| d'<| j@ƒdS|jA�r~d(| k�sþ| d(ik�r t>d)ƒdS| d(}t>d*ƒt>d+ƒxV|jBƒD]J\}}|jd,d-ƒ}|jd.d-ƒ}|jd/d-ƒ}t>d0|||dd1…|fƒ�q,WdS|jC�r¦d$| d#<t>d2ƒˆjjd3ƒdSd}�y2d}|jD�rÞd$}|jD}t>d4|ƒ|jEdd|ƒ|j�r d$}|j} t>d5| ƒ|jEdd| ƒ|�r*|jFt9ˆjd6ƒƒtd ƒˆjG�rT|jH �rTˆjjId7ƒt>d7ƒdS|jddƒ}tjˆj ˆj|ˆjd �} |�sŽt>d8ƒtdƒˆjJ�røyTd}!tKˆjLˆjMƒ}"|"jNd9ƒ}#|#dk�sÈd:|#k�rÌd$}!|!�sÞˆjO| ƒ�rèˆjP| ƒWn YnXt%| ˆjt&ˆj'dƒˆj(ƒ} tKˆjLƒ}"|"jQƒ}$|$�r4| jR|$ƒd;|jSdƒk�r8|jdd;ƒj0ƒd|jSdƒk�r8t|jdd>ƒƒd?}%d@| k�s®tTjTƒ| d@|%k�r xL|jdd=ƒjUdAƒD]6}&ˆjjdB|&ƒdCtjVˆjW|&jXƒf}'tj5|'ƒ�qÂWtTjTƒ| d@<n.d@| k�r8ˆjjdD| d@|%tTjTƒdEƒtjƒ}(g})ˆjYƒ}*ˆjZ|ƒ\}+},}-dF| k�st| dFdk�r|i| dF<�x6t[| djBƒƒD�] \}.}/dG|/j\|/j]f}0dH}1|/j\ˆj^k�rú|/j]|*k�rú|0|,k�rú|/j_|(t`|1dI�k�rúˆjjdJ|/ƒ�q�t`|/jadI�}2t`ˆjbdI�}3|(|2|3|/__|0|,k�r�| jcj|0iƒjdKdLƒ}4xJ|,|0D]>\}5}6|5dk �rd|5|49}5|5dk�rr�qJ|)jd|.|6|5fƒi}7�qJW�q�|/j\ˆj^k� r|/j]|*k�r®�q�| jcj|/j\iƒjdKdLƒ}4xè|*|/j]D]>\}5}6|5dk �rì|5|49}5|5dk�rú�qÒ|)jd|.|6|5fƒi}7�qÒWnš|/j\| jek� r8ˆjjdM|0ƒ�q�nxtjƒ}8tTjTƒ}9|/jf| | dFj|/jgiƒƒ\}5}7tTjTƒ}:ˆjjhdN|/|5|:|9fƒ|5dk� r–�q�|)jd|.tTji|8jjƒƒ|5fƒ�q�WˆjjdOtjƒ|(ƒ| dPjk|)ƒ| d'� rFtTjTƒ| d'k� r&| j@ƒ| d'tTjTƒdQ};ˆjjdR|;ƒdSd| d'<| j@ƒˆjjdSƒdStTjTƒ}d}?tljmd dTƒd k}@d}AdU| k� r„d | dU<tTjTƒ| dUˆjnk� r d$}A|jH� r¬d$}AdV| k� rÂtTjTƒ| dV<tj:joˆjƒ}B|B| dVk� râd$}A|B| dV<|A�rvˆjjdWƒtTjTƒ| dU<dX|jSdƒk� r*| jp|jddXƒƒ| jqƒ}C|C� sR|jH� sR|@� sR| dY � r¬| jr}|C� rlˆjjdZƒn@|jH� r‚ˆjjd[ƒn*|@� r–ˆjjd\ƒn| dY� s¬ˆjjd]ƒtsˆƒjt|$ƒ}?ˆjuƒ}=g}>d;|jSdƒk�r|jdd;ƒj0ƒdjd|Jj‡|Jjˆ|Jj‰|G|JjŠdfœƒWn YnX� qW|Ejxdgƒ� r:yt9tj:j&|D|Eƒƒ}KWn:ˆjjIdhtj:j&|D|EƒƒˆjjIt‹jŒƒƒ� w:YnX|Kjƒ}Lt}�rt}|Lj€dbƒƒj�ƒ}Gndc}G|Kj�ƒytŽj�|Lƒ}MWn:t�k �rbˆjjIdi|EƒˆjjIt‹jŒƒƒ� w:YnXdjdkdldmg}N|Mj‘ƒ}Od$}Px@|ND]8}||Ok�sž|Mj|ƒ �r‚ˆjjIdn||Efƒd}PP�q‚W|P�sÈ� q:|Mjdkƒ}Q|>jd|Q|Mjdjƒ|Mjdmƒ|G|Mjdoƒdfœƒ� q:W� qWdp| k�s| dp �rZt’j“ƒ}R|Rdqk�rDd$| dp<ˆjjdrƒn|Rdsk�rZˆjjdtƒdp| k�rv| dp�rvd$| d#<i}Si}Tdu| k�r¢| du�r¢t”| duƒ|Tdu<dv| k�rÆ| dv�rÆt”| dvƒ|Tdv<dw| k�rê| dw�rêt”| dwƒ|Tdw<dx| k�r| dx�rt”| dxƒ|Tdx<g}Udy| k�r$| dy}U�yÎg}Vˆjjdzt•|)ƒt•|Vƒƒ|�rrt–d{d|„t[|jBƒƒDƒƒ}Wˆjjhd}|Wƒd}X| dd k�s’| dik�r–d$}X|A�s¦| d~�rªd$}Xtljmdˆj—�pºdƒ}YtTj˜|Yƒ| d�rtTjTƒ| dk�rü| dPj™t•| dƒƒ}Znd| d<| dPj™ƒ}Zn | dPj™ƒ}Zg}[g}\d1}]d€| k�rj| d€}^x,tšt›t•|^ƒ|]ƒƒD]}_|[jd|^jœd ƒƒ�qPWd�| k�r¤| d�}`x&tšt•|`ƒƒD]}_|\jd|`jœd ƒƒ�qŠWˆj�| ƒ}ayÐd t_žt[|+jŸƒƒ}+|�rn| j |Z|V||>|?|[|\ˆj¡ƒ|+|-ˆj¢ƒˆj£ƒ|U|X|TˆjJ|a|=d‚�}Sd| du<d| dv<d| dw<d| dx<g| dy<d| d~<|Sjdƒiƒ|Sjd„iƒ|Sjd…gƒ|Sjd†iƒd‡œ}bˆj¤|bƒn ˆjjdˆƒW�n:tj¥k �r}czhˆjjd‰|c›�ƒˆjuƒ}d|d�rè|ddŠ}e|dd‹}ft¦|e|fƒ} ˆj-ˆj ˆj|| d$dŒ�nt§jd�|d›�ƒdSd}c~cXn´tj¨k �rV}cz2ˆjjdŽ|c›d��ƒtTjTƒtt”|cƒƒˆj"d'<dSd}c~cXnd| dPjk|Zƒx(|aj‘ƒD]}g| |g}h|hjk|a|gƒ�qtWˆjj|d�ƒˆjjhd‘|Zƒ| j@ƒdS|Sjd’dƒ�rÐd$| dY<| dd7<tjƒj©d“ƒ| d<Wnˆjj|d”ƒYn.X|A�r | jªƒ| d•<ˆjjd–tTjTƒ|<|Yƒd;|jSdƒk�r„|jdd;ƒj0ƒddš|G}mtj:j&ˆj«|mƒ}lt9|ld›ƒ}n|njFtŽj¬|kƒƒ|nj�ƒWn:t�k �rˆjjIdœ|G|jfƒˆjjIt‹jŒƒƒYnXˆjjd�|G|jfƒ|j�rptjVtj:j&ˆjWdžƒdŸd |Ggd¡d¢„|jDƒ}|l�rp|d£|lg7}t­j®|dd¤��qpWˆj¯|Sjdgƒƒ|Sjd¥gƒ�rΈjjd¦t•t[|Sd¥j‘ƒƒƒƒd'|Sd¥k�rì|Sd¥d'}otTjTƒ|o| d'<d|Sd¥k�r|Sd¥d}otTjTƒ|o| d<du|Sd¥k�rX|Sd¥du}pt­j°d§d¨t”t|pƒƒˆj±gdd¤�}q|q| du<d©|Sd¥k�r||Sd¥d©}r|r| dP_²dª|Sd¥k�r |Sd¥dª}s|s| dP_³dw|Sd¥k�r*yb|Sd¥jdwƒ}|jd«ƒ}t|tdk�rÖd¬}tt|tƒ}td­}ut´d«ƒ�rød®|t|uf}ut­j°|ud$d¤�}v|v| dw<Wnt‹jŒƒ| dw<YnXdx|Sd¥k�röy¤|Sd¥jdxƒ}|jd¯ƒ}w|jd«ƒ}t|tdk�rjd¬}tt|tƒ}t|wdk�rªtµjµˆj ƒ}x|xj¶dk�r¤tµjµd°ˆj ƒ}x|xj¶}wdxd±d²d³d´t”|wƒg}yt­j°|ydt­j·|tdµ�}z|z| dx<Wnt‹jŒƒ| dx<YnX|Sd¥jd¶ƒ}{|{dk �rv|{j¸ƒ}{y,t|jSdƒk�rfxL|jdd=ƒjUdAƒD]6}&ˆjjdB|&ƒdCtjVˆjW|&jXƒf}'tj5|'ƒ�q WtTjTƒ| d@<d#|Sd¥k�r|d$| d#<d»|Sd¥k�rŽd$}d~|Sd¥k�r¤d$| d~<d¼|Sd¥k�rÎyˆj¾|ƒWn YnXˆjG�rîˆjjd½ƒt>d½ƒ�nädp| k�rÒ| dp�rÒd(| k�ri| d(<d}d#| k�r0| d#�r0d$}d| d#<| d(}€t[|€j‘ƒƒ}�yt’j¿|| |€|d¾�}‚WnFt�k �r¨tjÀƒddd…\}ƒ}„ˆjjI|„ƒˆjjId¿ƒd}‚YnX|‚�rÒdÀd¢„|‚Dƒ}…g}†xd|‚D]\}‡|‡dÁddÂ…}ˆ|‡|€|ˆ<|�sô|ˆ|�k�rþ|†jd|‡ƒdÃ|‡k�rÈ|‡dÃ�rÈ|‡dÃ=|†jd|‡ƒ�qÈWg}\x*|€jBƒD]\}ˆ}‡|ˆ|…k�r6|\jd|ˆƒ�q6Wx|\D] }ˆ|€|ˆ=�q^Wd€| k�r€g| d€<d�| k�r’g| d�<| d€jÁ|†ƒ| d�jÁ|\ƒˆjjdÄt•|†ƒƒˆjjdÅt•|\ƒƒˆjÂ|ƒWnˆjj|dƃYnXˆjÃ| || |dÇ�}‰|‰�s ˆjÄ| || dÈ�| j@ƒˆjjdÉjtjƒ|jŃƒƒdS)ËNr�Ú safe_counterrcrÙr^z]%%prog [options] %s, server key: %s, aggregator endpoint: %s zRsudo python %%prog --install [--customer-key=YOUR_CUSTOMER_KEY] %s)Úusagez!Power status -> {} UID {} EUID {})rÍÚreasonZagent_power_changer)rics ˆjjdƒS)NzPreventing pid file removal)rkr£r")rƒr"r#r_szAgent.main..z=Exiting without running - other agent process already runningrMFzActivity startedÚpluginsr&Ú num_syncsÚ last_syncrŽiÿz mkdir -p {}za+zInstaller did not create {}rxrÞruryrzr{Tz5%s Agent v%s, server key: %s, aggregator endpoint: %sz.Unpausing agent, will run as usual on next runÚpauseZdocker_containerszNo monitored containerszMonitored Containers: z$CONTAINER ID IMAGE COMMAND STATUSZImageú?ZCommandZStatusz %s %s "%s" %srbzMetadata queued for rebuildz!Container metadata rebuild queuedzSetting server key to %sz!Setting aggregator endpoint to %sÚwbz.Linux agent should not run if executed as rootz1No server key found, please re-install the agent.zschedules-initÚnorÕrÖr×Zcountermeasures_refresh_pluginsiZcountermeasures_last_refreshrÓz*Refreshing CounterMeasures plugins from %sz2%s %s/countermeasure.py install_plugins --url %s &z+Waiting to refresh CM plugins in %d minutesé<Ú anomaliesz%s.%srk)rEz%r too early to checkÚscalegð?z No custom value or plugin for %sz%r returned %s in %.2f secondszRunning all plugins took %sÚ result_queuegN@zPPause command received. Processing stopped. Process will resume in %.2f minutes.z=Pause duration exceeded, unpausing the agent for the next runi Zlast_metadata_timeÚlast_config_file_timezRebuilding plugin metadataZcustom_plugin_urlÚhas_connected_with_aggregatorzmetadata changedzrebuilding metadataz!randomly forcing metadata rebuildz%we've never pushed up metadata beforerLz.pyÚ__zUnable to import module %szutf-8r²r7ZCountermeasure)r r÷ÚauthorÚhashr/z.jsonzUnable to open %sz+%s file is not a valid json file to be readr÷r Zcommandr�z7%s is missing from the countermeasure declaration in %sr/Zdocker_supportedrœzDocker supportedz no-permissionz*Missing permission to access Docker socketZ log_requestÚ diagnosticsÚ socket_statsZmtrÚauto_topo_scansz1Syncing with aggregator: %d results, %d anomaliescss*|]"\}\}}|tt|jƒƒƒfVqdS)N)rÅrÄr<)r¯Z plugin_keyÚ_Zplugin_metadatar"r"r#rÎŒszAgent.main..zMetadata summary: %rÚsync_schedulesÚ single_resultÚdiscovered_containersÚdeleted_containers)Z dem_enabledZdem_service_resultsÚfortisase_attributesÚicmp_server_resourcesÚmonitor_schedulesÚ traceroutesÚtraceroute_checks)ršr›rœr�z"No server_key found, skipping synczFReceived a request tor reinstall the agent due to a existing conflict rÑrÒ)rìzKReinstall request received, forticlient data not available. Please verify. zNReceived an unauthorized response from the agg. Pausing execution of agent by z secondszCould not sync with aggregatorzSaving results locally: %rrñz%m/%d/%Y %H:%MzError syncing with aggregatorÚ last_metadatazsyncing took %.2f secondsr�Útextkeysr4zcountermeasure-metadata-%s.jsonrˆz1Failed parsing countermeasure metadata for %s: %sz#Queueing countermeasures for %s: %szcountermeasure.pyZexecutez --hash=%scSsg|] }d|‘qS)z --textkeys=%sr")r¯Ztkr"r"r#r±@szAgent.main..z--metadata-file=%s)rØZcommandszgot %d agent commandsÚtailz-nÚqueue_batch_sizeÚqueue_max_resultsr4rNzss -t -u -r 2>&1z timeout %d %srOzhttp://z--csvz-crüz--)rØrbr4rÔzSet log level to "%s"zInvalid log level command: "%s"Zmetadata_resyncZrefresh_countermeasuresZ update_agentZget_logsz9Linux agent running as root, skipping container discovery)ZrebuildzŒDocker 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`cSsg|]}|ddd…‘qS)ÚIdNé r")r¯Úcr"r"r#r±øsr£r¤Úupdatedz$Discovered %d new/updated containersz!Found %d newly deleted containerszError in main loop)rærÙÚ agg_clientrì)rærÙr§zActivity finished in {}srÛ)ÆrrŠrŸZRawConfigParserrAr³rDr»rÜrºr—r{r|r}r|rkr§rWr=rWrXrÞrßrªrÍÚcallrr‚r4rir£r‘r‹rnrærër\rrrSrÝÚdisplayrwr~ršrór]r’rvr•r–r]r5r”Úchmodr#rr@r>rrorxr˜ryÚsaverzrÉr{rÙr¹rIrYrurÂr^r r_raÚ send_receiveÚ_agent_version_updatedÚ_init_dem_schedulesZget_dem_wifi_infoZadd_dem_wifi_resultsr†r3rBrèrérUr!rGrÄr'r(ÚCUSTOMZnext_check_timerÚ frequencyr€rîrýr�ÚcheckÚidrlrrÚupdateÚrandomZrandintrVÚgetmtimeZinstall_remote_pluginsZis_metadata_staler4rZ get_all_factsrárrÚendswithrXÚ p_importlibZ import_moduleräÚsha_funcÚsixr!ÚencodeZ hexdigestÚ__dict__r¥ÚtypeÚtypesZ ClassTyper r÷r�r/rnrorµr:r;rãr<Úcontainer_discoveryZ check_accessr¤rÅràrZr�Ú pop_resultsr r8ÚpopÚ_getDemResultsÚtracebacklimitrÚsyncr%rKråÚ_updateDEMServiceSchedulesZReinstallResponserrâZUnauthorizedResponserZhashed_metadatarUÚdumpsr'r(Úupdate_schedulesr$rêr¡r¢rr¾rÀÚSTDOUTrprmraÚAttributeErrorZWARNINGÚbuild_diagnosticsÚ upload_logsZdiscover_docker_containersrÁr6Úrun_auto_topo_scansÚcheckForUpdateÚcheckForInterpreterUpdateÚ total_seconds)ŠrƒZ activityStartrÙrîr~rr…r†r‡r™rGrær�r]Zdirs_to_createÚdirZpermsZrfileZrfZ valid_optionsZ option_givenZ valid_optionÚmsgZ containersZshort_idr4Z cont_imageZ cont_commandZ cont_statusZrequested_auto_updateZjust_set_option_and_quitrÆZaggZneeds_schedulesÚ dem_clientZschedules_receivedZ wifi_infoZ refresh_cycleròÚcmdZall_plugins_start_timeZresults_to_sendZcustom_metricsZnew_import_metricsZnew_import_valuesr@r)r*Z schedule_tkeyZ leeway_timer°r€rŠrËr9r‰Zplugin_start_timeZt0Zt1Z time_leftZ start_timer™Zcountermeasures_metadataZfactsZ lucky_dayrurŒZstalerBZmod_nameÚmodr�r÷rFZpluginZ json_counterZ file_contentZ counter_dataZrequired_fieldsZ existing_keysrœr Zcan_access_dockerÚresponseZcommand_resultsr“Zanomalies_to_reportZmetadata_summaryZforce_send_schedulesÚdelayZ result_datar—r˜ZMAX_CONTAINERS_SYNCZcontainer_queuerZdeleted_container_queueZ dem_resultsZ dem_updatesrÇrïrÑrðZdemKeyÚqZcountermeasurerŸZ cm_metadataZ metadata_filer r1rEÚlinesZ log_outputr¡r¢r4Úss_cmdr’rOZ parsed_urlZmtr_cmdZ mtr_outputZ log_level_keyrÔÚlevelÚmessager{Zexisting_containersZexisting_container_idsZfound_containersÚtrZfound_container_idsZnew_containersZ containerZ container_idÚupdate_startedr")rƒr#Úmain$sÌ                                                                                                                                                z Agent.maincCs>ytƒ}|jƒStk r8}ztj|ƒiSd}~XnXdS)N)r Zget_handshake_datarãrâr£)rƒZhelperrÇr"r"r#rá8 s  zAgent.get_fortisase_attributesc Cs ddl}ddl}|jƒ�è}|j|j|dd�tjƒ}dj|jdƒƒ}t j j |dƒ}t j |ƒ|j t j j d|ƒd|ƒ}zny:dj|jƒ} d j||| ƒ} t j| ƒ|jjd j|ƒƒWn.tk rÞ} z|jj| ƒWYdd} ~ XnXWdt j j|ƒrút j|ƒXWdQRXdS) NrT)Z dirs_exist_okz agent-logs-{}z %Y%m%d%H%M%SÚzipz/tmpz{}/v2/agent_logszHcurl -F file=@{} -H "Accept: application/json" -H "Authorization: {}" {}zUploaded log file {})ÚshutilrTZTemporaryDirectoryZcopytreer“rrŠrWrr=r>rÚmkdirZ make_archiverºr”rkr§rãrärrŒ) rƒrÙrßrTZ tmpdirnamerŠZzip_file_prefixZ zip_outputZzip_nameÚendpointZccrr"r"r#rÊ@ s(     " zAgent.upload_logsNcCs|r|jjdƒ|j|dd�Sd}|js>||kr:|j|ƒdSd}|sV|jjdƒdS|srtj|j|j ||j d�}d}�yht dd�}||k�rz|j dkrÌd d l m}|t|jƒƒƒ} tjƒt | d �||<n”yV|j jd ƒ\} } tjƒ} t| j| j| jt| ƒt| ƒd �} | | k�r| |} | ||<Wn<tk �r^}z|jjdj|j t|ƒƒƒdSd}~XnX|jjdj||ƒƒdS||}| �s˜tjƒ|k�rÞ|j|dd�}|dk�r¸tjƒ}||||<|jjdj||ƒƒ|SWn6tk �r}z|jjdj|ƒƒWYdd}~XnXdS)NzAdmin update requestÚ interpreter)r§Úexclude_componentsÚnext_update_checkzcheckForUpdate: no server key)rÍrM)Zdaysr)Ú randrange)rErd)ÚyearÚmonthÚdayZhourZminutez%Could not calculate next check {}: {}zNext update check at {})rãzcheckForUpdates problem: {})râ)râ)rkr§Ú_onCheckUpdatesrPrÀr£rÞrßrºrªrÍrrRr´rårDrÎrrŠrBrærçrèrãrÂrWr¤)rƒrærÙr§rìÚdb_keyräÚ update_periodråZ randomSecÚhrEZrnZctrrÜr"r"r#rÌZ sl              zAgent.checkForUpdatec Csdtjks|jdkrdS|s,|jjdƒdS|sHtj|j|j||j d�}d}yzt |jd�}||krj||nd}| s€t j ƒ|krÄ|jj dƒ|j|d d �}t j ƒ|||<|jj d j||ƒƒ|SWn6tk �rü}z|jjd j|ƒƒWYdd}~XnXdS) NrŽrz(checkForInterpreterUpdate: no server key)rÍZnext_interpreter_update_check)Zhoursz Checking for interpreter updatesrâ)Úinclude_componentsz#Next interpreter update check at {}z%checkForInterpreterUpdate problem: {})râ)r‘r’rQrkr£rÞrßrºrªrÍrrrŠr§rérWrãrÂ) rƒrærÙr§rêrërärÜrr"r"r#rÍš s,    zAgent.checkForInterpreterUpdatec sÆ|jjdƒy€dj|jƒ}|j|dd�}ˆr>‡fdd„|Dƒ}ˆrT‡fdd„|Dƒ}t|ƒdkrŠt|j|jƒ}|j d t j |ƒd �}|d kSWn4t k rÀ}z|jj d j|ƒƒWYdd}~XnXd S)NzPerforming updates check...zagent_update_info/darwin/{}rQ)Úmethodcsg|]}|jdƒˆkr|‘qS)r÷)r»)r¯r³)rír"r#r±Ã sz)Agent._onCheckUpdates..csg|]}|jdƒˆkr|‘qS)r÷)r»)r¯r³)rãr"r#r±É srÚupdates)ÚpayloadZackzUpdate check failure: {}F)rkr§rWrªr¨rÅr r`rar¬r:rÅrãrä) rƒr§rírãrárïÚclientrÔrr")rãrír#réµ s$      $zAgent._onCheckUpdatescCsX|jjdƒg}g}xðt|jdjƒƒD]Ú\}}|jdj|ƒ}|sR|jd|=q(x®t|jƒƒD]ž\}}|jjd|ƒ|j r¼|j|j ƒr¼|j ||t j |j jƒƒdfƒd|_|jjd|ƒ|j oÊ|jƒr`|j ||t j |j jƒƒdfƒd|_|jjd|ƒq`Wq(W|jjd t|ƒƒ|jjd |ƒ|jjd t|ƒƒ|jjd |ƒ|jjƒ||S) NzGathering reportable anomaliesr‰r&z Threshold %sFTzCleared anomaly: %szLengthy anomaly: %sz$Found %d anomalies that have clearedzCleared anomalies: %rz5Found %d anomalies that exceed the threshold durationzLengthy anomalies: %r)rkr§rÄrærÉr»rlÚreported_as_clearedZ has_clearedZnumber_of_checksrýr3rZtime_last_detectedrZreported_as_exceeded_durationZexceeds_durationrÅr«)rƒZcleared_anomaliesZlengthy_anomaliesÚ schedule_idr‰r*Ú threshold_idÚanomalyr"r"r#Úget_reportable_anomalies× sH     zAgent.get_reportable_anomaliescCs¦|jjdƒxvt|jdjƒƒD]`\}}xBt|jƒƒD]2\}}|jr6|j|ƒ}|jjdƒ|jjd|ƒq6W|s |jdj|ƒq W|jjd|jdƒ|jjƒdS)Nz'Checking for reported cleared anomaliesr‰z Removed reported cleared anomalyz Anomaly: %szRemaining anomalies: %s) rkr§rÄrærÉròrÀrlr«)rƒrór‰rôrõr"r"r#Ú!remove_reported_cleared_anomalies s   z'Agent.remove_reported_cleared_anomaliesc Cs4|gks|dkr |jjdƒdS|jd}i|jd<xÌ|D]Ä}|d}|jjd|ƒ|j|dƒ}y`|r~|j|ƒ||j=d}n|sŽt|ƒ}d}||jd|j<|jjd||jƒ|jjd|ƒWq:tk rüt j ƒd }t |ƒ}|jj d j ||ƒƒYq:Xq:W|jjƒ|jjd t|ƒƒ|jjd t|ƒƒdS) Nz,No schedule changes received from aggregatorr&r²z$Received schedule %s from aggregatorZEditedZCreatedz%s schedule %s locallyzSchedule data: %rrMzInvalid schedule {} data: {}zCreated/updated %d scheduleszDeleted %d schedules)rkr§rær»r³r²rrlrãr‘rÁr¤rÂrWr«rÅ) rƒZ new_schedulesZexisting_schedulesZnew_schedule_dataZnew_schedule_idr*r0rÇrÂr"r"r#rÆ s8        zAgent.update_schedulescCsÒd}|d|j7}|dtjddd�7}dtjkrJ|dtjd dd�7}n|dtjd dd�7}|d tjd dd�7}dtjkrœ|d tjd|jdd�7}|dtjddd�7}|dtj|jd|j d�7}|S)zVFunction to build a string of diagnostics data to send back to the aggregator.zAGENT DIAGNOSTICS zAgent version: %s zAgent server hostname: %srÀT)rØrŽ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 r7)r�rv) rªr'r$r‘r’rxr:rÅrGÚ defaultprint)rƒrærªrxÚstringr"r"r#rÉC s"  zAgent.build_diagnosticscCst|tƒr|jƒSdSdS)N)Ú isinstancerÚ__repr__)rƒrFr"r"r#røa s zAgent.defaultprintcCs´tjj|jƒs tjdj|jƒƒyt|jƒ}Wn dSiddddd|jddt ƒiddt ddd�t ddd�t ddd�t ddd�d œ}x(t |j ƒƒD]\}}||kr”|||<q”W|S) Nz mkdir -p {}Frièé2)r¢r¡édrk)r‰rhr‘r�ržrƒrÔr‚r„r‹r&r–r•Z check_resultsZserver_resource_levelsrœr�) r=r>rr•r”rWrr[rqrrÄrÉ)rƒræZdefaultsrÆrvr"r"r#rng s8   z Agent.open_dbc Cs y|jddƒdkSdSdS)NÚtopoZ auto_scanrüF)r»)rƒrîr"r"r#Úshould_run_auto_topo_scans” sz Agent.should_run_auto_topo_scansc Cs yt|jddƒƒSdSdS)NrþZscans_per_syncr)rDr»)rƒrîr"r"r#Úget_num_topo_scansš szAgent.get_num_topo_scansc Cs yt|jddƒƒSdSdS)NrþÚ scan_sleeprM)rDr»)rƒrîr"r"r#Úget_topo_scan_sleep  szAgent.get_topo_scan_sleepc Cshd}d}tjƒ}|jjdƒyttj|dd�ƒ}Wntjƒ}YnXtjƒ|}|jjd|ƒ|S)Nzss -t -u -r 2>&1r²zStarting topo scanT)rØz.Topo scan complete. Elapsed time: %.2f seconds)r3rkr§r¤r'r$rnro)rƒrØÚresultrÛÚelapsedr"r"r#Ú run_topo_scan¦ s  zAgent.run_topo_scancCsz|j|ƒsdS|j|ƒ}|j|ƒ}d|jkr6g|jd<x>t|ƒD]2}tjƒ}|jƒ}|jdj||fƒtj|ƒq@WdS)Nr“) rÿrrrær r3rrýr�)rƒrîÚnrrrÛÚscanr"r"r#r˵ s     zAgent.run_auto_topo_scansc CsÆi}|js|St|j|jƒ}|jdƒ}|dkr2|Stj|ƒ}x„|jƒD]x}y<||}|jƒrj||||<n|j ||ƒ|j ƒ||<WqFt k r¼}z|j j dj|ƒƒwFWYdd}~XqFXqFW|S)NZcollectz_getDemResults: {})r^r r_rar¬r:r;r<ZisEmptyr³r¿rãrkrÂrW) rƒræZrvrñrÔZ latestResultsrÆrÖrr"r"r#rÁÅ s&  zAgent._getDemResultscCsDd}d|kr2|dr2|d|jkr@|j|d<d}n|j|d<d}|S)NFZlast_ran_versionT)rª)rƒræZ has_updater"r"r#r­Ý s  zAgent._agent_version_updatedcCs”yX|jddd�}|jdgƒ|jdgƒ|jdgƒdœ}t|j|jƒ}|jdtj|ƒd �Wn6tk rŽ}zt j d j t |ƒƒƒWYdd}~XnXdS) Nr&rQ)rîršr›r�)ršr›r�Z initSchedules)rðz/schedules error: {}) r¨r»r r_rar¬r:rÅrãrârÂrWr¤)rƒrñrÔr&rÑZaggExr"r"r#r®é s  &zAgent._init_dem_schedulescCs0|js dSt|j|jƒ}|jdtj|ƒd�}dS)Nzupdate-schedules)rð)r^r r_rar¬r:rÅ)rƒZ newSchedulesrñr”r"r"r#rÄø sz Agent._updateDEMServiceSchedules)r7rNrc)F)F)r)NNF)NN)NN)1rrr r¯rqr7r‚r‹ryr~r©rÈr¶rórårrr!r%r,r-rGrKrgrërirdr}rÝrárÊrÌrÍrérör÷rÆrÉrørnrÿrrrrËrÁr­r®rÄr"r"r"r#r`Ísr U &U DA )!$)7 @  !9%- r`)bZ agent_utilrrrrZ inspectorrrrZ ipc_clientr r Zagent_exceptionsr r Zforticlient_helperr rZprocess_managerrZos.pathrrrrrZpickle_databaserZplugin_managerrrZprogress_printerrr‹rr*rr‘rr¦ÚiorÞr=r¾rrÃr©r r·râZlogging.handlersr{r=r´rþr'rTr3rnr½Z blacklisterrr¹rr rŸr:Ú ImportErrorZ simplejsonZhashlibZsha1r¸ZshaÚnewrÏr1r$r¾Z urllib.parseÚparseZurllib.requestr[r½rZrYZ http.clientrñrVr?rãr2r5r:rHrJr_Úobjectr`r"r"r"r#Ús¦                       '