def _populate_fields(self, metric, fields): """Fill in the fields attribute of a metric protocol buffer. Args: metric (metrics_pb2.MetricsData): a metrics protobuf to populate fields (list of (key, value) tuples): normalized metric fields Raises: MonitoringInvalidFieldTypeError: if a field has a value of unknown type """ for key, value in fields: field = metric.fields.add() field.name = key if isinstance(value, basestring): field.type = metrics_pb2.MetricsField.STRING field.string_value = value elif isinstance(value, bool): field.type = metrics_pb2.MetricsField.BOOL field.bool_value = value elif isinstance(value, int): field.type = metrics_pb2.MetricsField.INT field.int_value = value else: raise errors.MonitoringInvalidFieldTypeError( self._name, key, value)
def _populate_field_descriptors(self, data_set, fields): """Populate `field_descriptor` in MetricsDataSet. Args: data_set (new_metrics_pb2.MetricsDataSet): a data set protobuf to populate fields (list of (key, value) tuples): normalized metric fields Raises: MonitoringInvalidFieldTypeError: if a field has a value of unknown type """ field_type = new_metrics_pb2.MetricsDataSet.MetricFieldDescriptor for key, value in fields: descriptor = data_set.field_descriptor.add() descriptor.name = key if isinstance(value, basestring): descriptor.field_type = field_type.STRING elif isinstance(value, bool): descriptor.field_type = field_type.BOOL elif isinstance(value, int): descriptor.field_type = field_type.INT64 else: raise errors.MonitoringInvalidFieldTypeError( self._name, key, value)
def validate_value(self, metric_name, value): if not isinstance(value, self.allowed_python_types): raise errors.MonitoringInvalidFieldTypeError( metric_name, self.name, value)