Beispiel #1
0
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))
Beispiel #2
0
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)
Beispiel #3
0
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))
Beispiel #5
0
 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
Beispiel #6
0
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
Beispiel #7
0
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
Beispiel #8
0
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)
Beispiel #9
0
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