Ejemplo n.º 1
0
    def get_certs(self):
        certlist = CertList()
        certificatedata = CertificateData()
        headers = None if self.cert_etag is None else {
            IF_NONE_MATCH_HEADER: self.cert_etag
        }
        data, etag = self._get_data(self.cert_uri, headers=headers)

        if self.cert_etag is None or self.cert_etag != etag:
            self.cert_etag = etag

            set_properties("certlist", certlist, data)

            cert_list = get_properties(certlist)

            headers = {"x-ms-vmagent-public-x509-cert": self._get_trans_cert()}

            for cert_i in cert_list["certificates"]:
                certificate_data_uri = cert_i['certificateDataUri']
                data, etag = self._get_data(certificate_data_uri,
                                            headers=headers)
                set_properties("certificatedata", certificatedata, data)
                json_certificate_data = get_properties(certificatedata)

                self.certs = Certificates(self, json_certificate_data)

        if self.certs is None:
            return None
        return self.certs
 def test_get_properties(self):
     obj = SampleDataContract()
     obj.foo = "foo"
     obj.bar.append(1)
     data = get_properties(obj)
     self.assertEquals("foo", data["foo"])
     self.assertEquals(list, type(data["bar"]))
    def add_metric(self, category, counter, instance, value, log_event=False):
        """
        Create and save an event which contains a telemetry event.

        :param str category: The category of metric (e.g. "cpu", "memory")
        :param str counter: The specific metric within the category (e.g. "%idle")
        :param str instance: For instanced metrics, the instance identifier (filesystem name, cpu core#, etc.)
        :param value: Value of the metric
        :param bool log_event: If true, log the collected metric in the agent log
        """
        if log_event:
            from azurelinuxagent.common.version import AGENT_NAME
            message = "Metric {0}/{1} [{2}] = {3}".format(
                category, counter, instance, value)
            _log_event(AGENT_NAME, "METRIC", message, 0)

        event = TelemetryEvent(4, "69B669B9-4AF8-4C50-BDC4-6006FA76E975")
        event.parameters.append(TelemetryEventParam('Category', category))
        event.parameters.append(TelemetryEventParam('Counter', counter))
        event.parameters.append(TelemetryEventParam('Instance', instance))
        event.parameters.append(TelemetryEventParam('Value', value))

        self.add_default_parameters_to_event(event)
        data = get_properties(event)
        try:
            self.save_event(json.dumps(data))
        except EventError as e:
            logger.error("{0}", e)
    def add_log_event(self, level, message):
        # By the time the message has gotten to this point it is formatted as
        #
        #   YYYY/MM/DD HH:mm:ss.fffffff LEVEL <text>.
        #
        # The timestamp and the level are redundant, and should be stripped.
        # The logging library does not schematize this data, so I am forced
        # to parse the message.  The format is regular, so the burden is low.

        parts = message.split(' ', 3)
        msg = parts[3] if len(parts) == 4 \
            else message

        event = TelemetryEvent(7, "FFF0196F-EE4C-4EAF-9AA5-776F622DEB4F")
        event.parameters.append(
            TelemetryEventParam('EventName', WALAEventOperation.Log))
        event.parameters.append(
            TelemetryEventParam('CapabilityUsed',
                                logger.LogLevel.STRINGS[level]))
        event.parameters.append(TelemetryEventParam('Context1', msg))
        event.parameters.append(TelemetryEventParam('Context2', ''))
        event.parameters.append(TelemetryEventParam('Context3', ''))

        self.add_default_parameters_to_event(event)
        data = get_properties(event)
        try:
            self.save_event(json.dumps(data))
        except EventError:
            pass
Ejemplo n.º 5
0
    def add_metric(self, category, counter, instance, value, log_event=False):
        """
        Create and save an event which contains a telemetry event.

        :param str category: The category of metric (e.g. "cpu", "memory")
        :param str counter: The specific metric within the category (e.g. "%idle")
        :param str instance: For instanced metrics, the instance identifier (filesystem name, cpu core#, etc.)
        :param value: Value of the metric
        :param bool log_event: If true, log the collected metric in the agent log
        """
        if log_event:
            message = "Metric {0}/{1} [{2}] = {3}".format(category, counter, instance, value)
            _log_event(AGENT_NAME, "METRIC", message, 0)

        event = TelemetryEvent(TELEMETRY_METRICS_EVENT_ID, TELEMETRY_EVENT_PROVIDER_ID)
        event.parameters.append(TelemetryEventParam(GuestAgentPerfCounterEventsSchema.Category, str(category)))
        event.parameters.append(TelemetryEventParam(GuestAgentPerfCounterEventsSchema.Counter, str(counter)))
        event.parameters.append(TelemetryEventParam(GuestAgentPerfCounterEventsSchema.Instance, str(instance)))
        event.parameters.append(TelemetryEventParam(GuestAgentPerfCounterEventsSchema.Value, float(value)))
        self.add_common_event_parameters(event, datetime.utcnow())

        data = get_properties(event)
        try:
            self.save_event(json.dumps(data))
        except EventError as e:
            logger.periodic_error(logger.EVERY_FIFTEEN_MINUTES, "[PERIODIC] {0}".format(ustr(e)))
    def test_report_event(self, mock_post):
        events = TelemetryEventList()

        data = self.load_json("events/1478123456789000.tld")
        event = TelemetryEvent()
        set_properties("event", event, data)
        events.events.append(event)

        data = self.load_json("events/1478123456789001.tld")
        event = TelemetryEvent()
        set_properties("event", event, data)
        events.events.append(event)

        data = self.load_json("events/1479766858966718.tld")
        event = TelemetryEvent()
        set_properties("event", event, data)
        events.events.append(event)

        protocol = MetadataProtocol()
        protocol.report_event(events)

        events_uri = BASE_URI.format(
            METADATA_ENDPOINT,
            "status/telemetry",
            APIVERSION)

        self.assertEqual(mock_post.call_count, 1)
        self.assertEqual(mock_post.call_args[0][0], events_uri)
        self.assertEqual(mock_post.call_args[0][1], get_properties(events))
Ejemplo n.º 7
0
    def add_event(self,
                  name,
                  op=WALAEventOperation.Unknown,
                  is_success=True,
                  duration=0,
                  version=str(CURRENT_VERSION),
                  message="",
                  log_event=True):

        if (not is_success) and log_event:
            _log_event(name, op, message, duration, is_success=is_success)

        event = TelemetryEvent(TELEMETRY_EVENT_EVENT_ID,
                               TELEMETRY_EVENT_PROVIDER_ID)
        event.parameters.append(TelemetryEventParam('Name', str(name)))
        event.parameters.append(TelemetryEventParam('Version', str(version)))
        event.parameters.append(TelemetryEventParam('Operation', str(op)))
        event.parameters.append(
            TelemetryEventParam('OperationSuccess', bool(is_success)))
        event.parameters.append(TelemetryEventParam('Message', str(message)))
        event.parameters.append(TelemetryEventParam('Duration', int(duration)))
        self._add_common_event_parameters(event, datetime.utcnow())

        data = get_properties(event)
        try:
            self.save_event(json.dumps(data))
        except EventError as e:
            logger.periodic_error(logger.EVERY_FIFTEEN_MINUTES,
                                  "[PERIODIC] {0}".format(ustr(e)))
Ejemplo n.º 8
0
    def add_log_event(self, level, message):
        event = TelemetryEvent(TELEMETRY_LOG_EVENT_ID,
                               TELEMETRY_LOG_PROVIDER_ID)
        event.parameters.append(
            TelemetryEventParam(GuestAgentGenericLogsSchema.EventName,
                                WALAEventOperation.Log))
        event.parameters.append(
            TelemetryEventParam(GuestAgentGenericLogsSchema.CapabilityUsed,
                                logger.LogLevel.STRINGS[level]))
        event.parameters.append(
            TelemetryEventParam(
                GuestAgentGenericLogsSchema.Context1,
                str_to_encoded_ustr(self._clean_up_message(message))))
        event.parameters.append(
            TelemetryEventParam(
                GuestAgentGenericLogsSchema.Context2,
                datetime.utcnow().strftime(logger.Logger.LogTimeFormatInUTC)))
        event.parameters.append(
            TelemetryEventParam(GuestAgentGenericLogsSchema.Context3, ''))
        self.add_common_event_parameters(event, datetime.utcnow())

        data = get_properties(event)
        try:
            self.save_event(json.dumps(data))
        except EventError:
            pass
    def _get_event_data(message, name):
        event = TelemetryEvent(1, TestSendTelemetryEventsHandler._TEST_EVENT_PROVIDER_ID)
        event.parameters.append(TelemetryEventParam(GuestAgentExtensionEventsSchema.Name, name))
        event.parameters.append(TelemetryEventParam(GuestAgentExtensionEventsSchema.Version, str(CURRENT_VERSION)))
        event.parameters.append(TelemetryEventParam(GuestAgentExtensionEventsSchema.Operation, WALAEventOperation.Unknown))
        event.parameters.append(TelemetryEventParam(GuestAgentExtensionEventsSchema.OperationSuccess, True))
        event.parameters.append(TelemetryEventParam(GuestAgentExtensionEventsSchema.Message, message))
        event.parameters.append(TelemetryEventParam(GuestAgentExtensionEventsSchema.Duration, 0))

        data = get_properties(event)
        return json.dumps(data)
Ejemplo n.º 10
0
    def report_vm_status(self, vm_status):
        validate_param('vmStatus', vm_status, VMStatus)
        data = get_properties(vm_status)
        # TODO code field is not implemented for metadata protocol yet.
        # Remove it
        handler_statuses = data['vmAgent']['extensionHandlers']
        for handler_status in handler_statuses:
            try:
                handler_status.pop('code', None)
            except KeyError:
                pass

        self._put_data(self.vm_status_uri, data)
Ejemplo n.º 11
0
    def _get_event_data(duration,
                        is_success,
                        message,
                        name,
                        op,
                        version,
                        eventId=1):
        event = TelemetryEvent(eventId, "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")
        event.parameters.append(TelemetryEventParam('Name', name))
        event.parameters.append(TelemetryEventParam('Version', str(version)))
        event.parameters.append(TelemetryEventParam('Operation', op))
        event.parameters.append(
            TelemetryEventParam('OperationSuccess', is_success))
        event.parameters.append(TelemetryEventParam('Message', message))
        event.parameters.append(TelemetryEventParam('Duration', duration))

        data = get_properties(event)
        return json.dumps(data)
Ejemplo n.º 12
0
    def add_log_event(self, level, message):
        event = TelemetryEvent(TELEMETRY_LOG_EVENT_ID,
                               TELEMETRY_LOG_PROVIDER_ID)
        event.parameters.append(
            TelemetryEventParam('EventName', WALAEventOperation.Log))
        event.parameters.append(
            TelemetryEventParam('CapabilityUsed',
                                logger.LogLevel.STRINGS[level]))
        event.parameters.append(
            TelemetryEventParam('Context1', self._clean_up_message(message)))
        event.parameters.append(TelemetryEventParam('Context2', ''))
        event.parameters.append(TelemetryEventParam('Context3', ''))
        self._add_common_event_parameters(event, datetime.utcnow())

        data = get_properties(event)
        try:
            self.save_event(json.dumps(data))
        except EventError:
            pass
Ejemplo n.º 13
0
    def _add_event(self, duration, evt_type, is_internal, is_success, message,
                   name, op, version, event_id):
        event = TelemetryEvent(event_id, TELEMETRY_EVENT_PROVIDER_ID)
        event.parameters.append(TelemetryEventParam('Name', name))
        event.parameters.append(TelemetryEventParam('Version', str(version)))
        event.parameters.append(TelemetryEventParam('IsInternal', is_internal))
        event.parameters.append(TelemetryEventParam('Operation', op))
        event.parameters.append(
            TelemetryEventParam('OperationSuccess', is_success))
        event.parameters.append(TelemetryEventParam('Message', message))
        event.parameters.append(TelemetryEventParam('Duration', duration))
        event.parameters.append(TelemetryEventParam('ExtensionType', evt_type))

        self.add_default_parameters_to_event(event)
        data = get_properties(event)
        try:
            self.save_event(json.dumps(data))
        except EventError as e:
            logger.periodic_error(logger.EVERY_FIFTEEN_MINUTES,
                                  "[PERIODIC] {0}".format(ustr(e)))
Ejemplo n.º 14
0
 def report_event(self, events):
     validate_param('events', events, TelemetryEventList)
     data = get_properties(events)
     self._post_data(self.event_uri, data)
Ejemplo n.º 15
0
 def report_ext_status(self, ext_handler_name, ext_name, ext_status):
     validate_param('extensionStatus', ext_status, ExtensionStatus)
     data = get_properties(ext_status)
     uri = self.ext_status_uri.format(ext_name)
     self._put_data(uri, data)
Ejemplo n.º 16
0
 def report_provision_status(self, provision_status):
     validate_param('provisionStatus', provision_status, ProvisionStatus)
     data = get_properties(provision_status)
     self._put_data(self.provision_status_uri, data)