def main(): #Global Variables definition waagent.LoggerInit('/var/log/waagent.log', '/dev/stdout') waagent.Log("%s started to handle." % (ExtensionShortName)) hutil = None try: for a in sys.argv[1:]: if re.match("^([-/]*)(disable)", a): dummy_command("Disable", "success", "Disable succeeded") elif re.match("^([-/]*)(uninstall)", a): dummy_command("Uninstall", "success", "Uninstall succeeded") elif re.match("^([-/]*)(install)", a): dummy_command("Install", "success", "Install succeeded") elif re.match("^([-/]*)(enable)", a): hutil = parse_context("Enable") enable(hutil) elif re.match("^([-/]*)(daemon)", a): hutil = parse_context("Executing") daemon(hutil) elif re.match("^([-/]*)(update)", a): dummy_command("Update", "success", "Update succeeded") except Exception as e: err_msg = "Failed with error: {0}, {1}".format(e, traceback.format_exc()) waagent.Error(err_msg) if hutil is not None: hutil.error(err_msg) hutil.do_exit(1, 'Enable', 'failed', '0', 'Enable failed: {0}'.format(err_msg))
def daemon(hutil): publicConfig = hutil.get_public_settings() privateConfig = hutil.get_protected_settings() config = aem.EnhancedMonitorConfig(publicConfig, privateConfig) monitor = aem.EnhancedMonitor(config) hutil.set_verbose_log(config.isVerbose()) InitExtensionEventLog(hutil.get_name()) while True: waagent.Log("Collecting performance counter.") startTime = time.time() try: monitor.run() message = ("deploymentId={0} roleInstance={1} OK" "").format(config.getVmDeploymentId(), config.getVmRoleInstance()) hutil.do_status_report("Enable", "success", 0, message) except Exception as e: waagent.Error("{0} {1}".format(printable(e), traceback.format_exc())) hutil.do_status_report("Enable", "error", 0, "{0}".format(e)) waagent.Log("Finished collection.") timeElapsed = time.time() - startTime timeToWait = (aem.MonitoringInterval - timeElapsed) #Make sure timeToWait is in the range [0, aem.MonitoringInterval) timeToWait = timeToWait % aem.MonitoringInterval time.sleep(timeToWait)
def main(): waagent.LoggerInit('/var/log/waagent.log', '/dev/stdout', True) waagent.Log("%s started to handle." % (ExtensionShortName)) try: for a in sys.argv[1:]: if re.match("^([-/]*)(disable)", a): hutil = parse_context("Disable") disable(hutil) elif re.match("^([-/]*)(uninstall)", a): hutil = parse_context("Uninstall") uninstall(hutil) elif re.match("^([-/]*)(install)", a): hutil = parse_context("Install") install(hutil) elif re.match("^([-/]*)(enable)", a): hutil = parse_context("Enable") enable(hutil) elif re.match("^([-/]*)(update)", a): dummy_command("Update", "success", "Update succeeded") except Exception as e: err_msg = ("Failed to enable the extension with error: {0}, " "{1}").format(e, traceback.format_exc()) waagent.Error(err_msg) hutil.error(err_msg) hutil.do_exit(1, 'Enable', 'failed', '0', 'Enable failed: {0}'.format(e))
def waagent_log_error(message): """ Log error message, being cautious of possibility that waagent may not be imported """ if 'Utils.WAAgentUtil' in sys.modules: waagent.Error(message) else: print('Error: {0}'.format(message))
def getNetworkPacketRetransmitted(self): netstat = self.getNetstat() match = re.search("(\d+)\s*segments retransmited", netstat) if match != None: return int(match.group(1)) else: waagent.Error("Failed to parse netstat output: {0}".format(netstat)) AddExtensionEvent(message=FAILED_TO_RETRIEVE_LOCAL_DATA) return None
def getStorageMetrics(account, key, hostBase, table, startKey, endKey): try: waagent.Log("Retrieve storage metrics data.") tableService = TableService(account_name = account, account_key = key, host_base = hostBase) ofilter = ("PartitionKey ge '{0}' and PartitionKey lt '{1}'" "").format(startKey, endKey) oselect = ("TotalRequests,TotalIngress,TotalEgress,AverageE2ELatency," "AverageServerLatency,RowKey") metrics = tableService.query_entities(table, ofilter, oselect) waagent.Log("{0} records returned.".format(len(metrics))) return metrics except Exception, e: waagent.Error(("Failed to retrieve storage metrics data: {0} {1}" "").format(printable(e), traceback.format_exc())) AddExtensionEvent(message=FAILED_TO_RETRIEVE_STORAGE_DATA) return None
class PerfCounterWriter(object): def write(self, counters, maxRetry = 3, eventFile=EventFile): for i in range(0, maxRetry): try: self._write(counters, eventFile) waagent.Log(("Write {0} counters to event file." "").format(len(counters))) return except IOError, e: waagent.Warn(("Write to perf counters file failed: {0}" "").format(printable(e))) waagent.Log("Retry: {0}".format(i)) time.sleep(1) waagent.Error(("Failed to serialize perf counter to file:" "{0}").format(eventFile)) AddExtensionEvent(message=FAILED_TO_SERIALIZE_PERF_COUNTERS) raise
def main(): waagent.LoggerInit('/var/log/waagent.log', '/dev/stdout') waagent.Log("%s started to handle." % (ExtensionShortName)) try: for a in sys.argv[1:]: if re.match("^([-/]*)(disable)", a): disable() elif re.match("^([-/]*)(uninstall)", a): uninstall() elif re.match("^([-/]*)(install)", a): install() elif re.match("^([-/]*)(enable)", a): enable() elif re.match("^([-/]*)(update)", a): update() except Exception as e: err_msg = "Failed with error: {0}, {1}".format(e, traceback.format_exc()) waagent.Error(err_msg)
def getAzureDiagnosticMemoryData(accountName, accountKey, hostBase, startKey, endKey, hostname): try: waagent.Log("Retrieve diagnostic data: Memory") table = "LinuxPerfMemVer1v0" tableService = TableService(account_name = accountName, account_key = accountKey, host_base = hostBase) ofilter = ("PartitionKey ge '{0}' and PartitionKey lt '{1}' " "and Host eq '{2}'").format(startKey, endKey, hostname) oselect = ("PercentAvailableMemory,Host") data = tableService.query_entities(table, ofilter, oselect, 1) if data is None or len(data) == 0: return None memoryPercent = 100 - float(data[0].PercentAvailableMemory) return memoryPercent except Exception, e: waagent.Error(("Failed to retrieve diagnostic data(Memory): {0} {1}" "").format(printable(e), traceback.format_exc())) AddExtensionEvent(message=FAILED_TO_RETRIEVE_MDS_DATA) return None