# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: dmi/hw_metrics_mgmt_service.proto
"""Generated protocol buffer code."""
from google.protobuf.internal import enum_type_wrapper
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()


from dmi import commons_pb2 as dmi_dot_commons__pb2
from dmi import hw_pb2 as dmi_dot_hw__pb2
from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2


DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!dmi/hw_metrics_mgmt_service.proto\x12\x03\x64mi\x1a\x11\x64mi/commons.proto\x1a\x0c\x64mi/hw.proto\x1a\x1bgoogle/protobuf/empty.proto\"a\n\x0cMetricConfig\x12#\n\tmetric_id\x18\x01 \x01(\x0e\x32\x10.dmi.MetricNames\x12\x15\n\ris_configured\x18\x02 \x01(\x08\x12\x15\n\rpoll_interval\x18\x03 \x01(\r\"3\n\rMetricsConfig\x12\"\n\x07metrics\x18\x01 \x03(\x0b\x32\x11.dmi.MetricConfig\"\xff\x01\n\x13ListMetricsResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12/\n\x06reason\x18\x02 \x01(\x0e\x32\x1f.dmi.ListMetricsResponse.Reason\x12#\n\x07metrics\x18\x03 \x01(\x0b\x32\x12.dmi.MetricsConfig\x12\x15\n\rreason_detail\x18\x04 \x01(\t\"^\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\x12\x12\n\x0eINTERNAL_ERROR\x10\x02\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x03\"\x8d\x01\n\x1bMetricsConfigurationRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12%\n\x07\x63hanges\x18\x02 \x01(\x0b\x32\x12.dmi.MetricsConfigH\x00\x12\x1a\n\x10reset_to_default\x18\x03 \x01(\x08H\x00\x42\x0b\n\toperation\"\xa0\x02\n\x1cMetricsConfigurationResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x38\n\x06reason\x18\x02 \x01(\x0e\x32(.dmi.MetricsConfigurationResponse.Reason\x12\x15\n\rreason_detail\x18\x03 \x01(\t\"\x91\x01\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\x12\x12\n\x0eINTERNAL_ERROR\x10\x02\x12\x1d\n\x19POLL_INTERVAL_UNSUPPORTED\x10\x03\x12\x12\n\x0eINVALID_METRIC\x10\x04\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x05\"k\n\x0eMetricMetaData\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12!\n\x0e\x63omponent_uuid\x18\x02 \x01(\x0b\x32\t.dmi.Uuid\x12\x16\n\x0e\x63omponent_name\x18\x03 \x01(\t\"\x84\x01\n\x06Metric\x12#\n\tmetric_id\x18\x01 \x01(\x0e\x32\x10.dmi.MetricNames\x12,\n\x0fmetric_metadata\x18\x02 \x01(\x0b\x32\x13.dmi.MetricMetaData\x12\'\n\x05value\x18\x03 \x01(\x0b\x32\x18.dmi.ComponentSensorData\"_\n\x10GetMetricRequest\x12&\n\tmeta_data\x18\x01 \x01(\x0b\x32\x13.dmi.MetricMetaData\x12#\n\tmetric_id\x18\x02 \x01(\x0e\x32\x10.dmi.MetricNames\"\x9f\x02\n\x11GetMetricResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12-\n\x06reason\x18\x02 \x01(\x0e\x32\x1d.dmi.GetMetricResponse.Reason\x12\x1b\n\x06metric\x18\x03 \x01(\x0b\x32\x0b.dmi.Metric\x12\x15\n\rreason_detail\x18\x04 \x01(\t\"\x89\x01\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\x12\x15\n\x11UNKNOWN_COMPONENT\x10\x02\x12\x12\n\x0eINTERNAL_ERROR\x10\x03\x12\x12\n\x0eINVALID_METRIC\x10\x04\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x05*\xd9\x05\n\x0bMetricNames\x12\x19\n\x15METRIC_NAME_UNDEFINED\x10\x00\x12\x14\n\x10METRIC_FAN_SPEED\x10\x01\x12\x13\n\x0fMETRIC_CPU_TEMP\x10\x64\x12\x1f\n\x1bMETRIC_CPU_USAGE_PERCENTAGE\x10\x65\x12\x1c\n\x17METRIC_TRANSCEIVER_TEMP\x10\xc8\x01\x12\x1f\n\x1aMETRIC_TRANSCEIVER_VOLTAGE\x10\xc9\x01\x12\x1c\n\x17METRIC_TRANSCEIVER_BIAS\x10\xca\x01\x12 \n\x1bMETRIC_TRANSCEIVER_RX_POWER\x10\xcb\x01\x12 \n\x1bMETRIC_TRANSCEIVER_TX_POWER\x10\xcc\x01\x12\"\n\x1dMETRIC_TRANSCEIVER_WAVELENGTH\x10\xcd\x01\x12\x15\n\x10METRIC_DISK_TEMP\x10\xac\x02\x12\x19\n\x14METRIC_DISK_CAPACITY\x10\xad\x02\x12\x16\n\x11METRIC_DISK_USAGE\x10\xae\x02\x12!\n\x1cMETRIC_DISK_USAGE_PERCENTAGE\x10\xaf\x02\x12&\n!METRIC_DISK_READ_WRITE_PERCENTAGE\x10\xb0\x02\x12(\n#METRIC_DISK_FAULTY_CELLS_PERCENTAGE\x10\xb1\x02\x12\x14\n\x0fMETRIC_RAM_TEMP\x10\x90\x03\x12\x18\n\x13METRIC_RAM_CAPACITY\x10\x91\x03\x12\x15\n\x10METRIC_RAM_USAGE\x10\x92\x03\x12 \n\x1bMETRIC_RAM_USAGE_PERCENTAGE\x10\x93\x03\x12\x15\n\x10METRIC_POWER_MAX\x10\xf4\x03\x12\x17\n\x12METRIC_POWER_USAGE\x10\xf5\x03\x12\"\n\x1dMETRIC_POWER_USAGE_PERCENTAGE\x10\xf6\x03\x12\"\n\x1dMETRIC_INNER_SURROUNDING_TEMP\x10\xd8\x04\x32\xb1\x02\n\x1eNativeMetricsManagementService\x12\x38\n\x0bListMetrics\x12\x0f.dmi.HardwareID\x1a\x18.dmi.ListMetricsResponse\x12\x61\n\x1aUpdateMetricsConfiguration\x12 .dmi.MetricsConfigurationRequest\x1a!.dmi.MetricsConfigurationResponse\x12:\n\tGetMetric\x12\x15.dmi.GetMetricRequest\x1a\x16.dmi.GetMetricResponse\x12\x36\n\rStreamMetrics\x12\x16.google.protobuf.Empty\x1a\x0b.dmi.Metric0\x01\x42;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3')

_METRICNAMES = DESCRIPTOR.enum_types_by_name['MetricNames']
MetricNames = enum_type_wrapper.EnumTypeWrapper(_METRICNAMES)
METRIC_NAME_UNDEFINED = 0
METRIC_FAN_SPEED = 1
METRIC_CPU_TEMP = 100
METRIC_CPU_USAGE_PERCENTAGE = 101
METRIC_TRANSCEIVER_TEMP = 200
METRIC_TRANSCEIVER_VOLTAGE = 201
METRIC_TRANSCEIVER_BIAS = 202
METRIC_TRANSCEIVER_RX_POWER = 203
METRIC_TRANSCEIVER_TX_POWER = 204
METRIC_TRANSCEIVER_WAVELENGTH = 205
METRIC_DISK_TEMP = 300
METRIC_DISK_CAPACITY = 301
METRIC_DISK_USAGE = 302
METRIC_DISK_USAGE_PERCENTAGE = 303
METRIC_DISK_READ_WRITE_PERCENTAGE = 304
METRIC_DISK_FAULTY_CELLS_PERCENTAGE = 305
METRIC_RAM_TEMP = 400
METRIC_RAM_CAPACITY = 401
METRIC_RAM_USAGE = 402
METRIC_RAM_USAGE_PERCENTAGE = 403
METRIC_POWER_MAX = 500
METRIC_POWER_USAGE = 501
METRIC_POWER_USAGE_PERCENTAGE = 502
METRIC_INNER_SURROUNDING_TEMP = 600


_METRICCONFIG = DESCRIPTOR.message_types_by_name['MetricConfig']
_METRICSCONFIG = DESCRIPTOR.message_types_by_name['MetricsConfig']
_LISTMETRICSRESPONSE = DESCRIPTOR.message_types_by_name['ListMetricsResponse']
_METRICSCONFIGURATIONREQUEST = DESCRIPTOR.message_types_by_name['MetricsConfigurationRequest']
_METRICSCONFIGURATIONRESPONSE = DESCRIPTOR.message_types_by_name['MetricsConfigurationResponse']
_METRICMETADATA = DESCRIPTOR.message_types_by_name['MetricMetaData']
_METRIC = DESCRIPTOR.message_types_by_name['Metric']
_GETMETRICREQUEST = DESCRIPTOR.message_types_by_name['GetMetricRequest']
_GETMETRICRESPONSE = DESCRIPTOR.message_types_by_name['GetMetricResponse']
_LISTMETRICSRESPONSE_REASON = _LISTMETRICSRESPONSE.enum_types_by_name['Reason']
_METRICSCONFIGURATIONRESPONSE_REASON = _METRICSCONFIGURATIONRESPONSE.enum_types_by_name['Reason']
_GETMETRICRESPONSE_REASON = _GETMETRICRESPONSE.enum_types_by_name['Reason']
MetricConfig = _reflection.GeneratedProtocolMessageType('MetricConfig', (_message.Message,), {
  'DESCRIPTOR' : _METRICCONFIG,
  '__module__' : 'dmi.hw_metrics_mgmt_service_pb2'
  # @@protoc_insertion_point(class_scope:dmi.MetricConfig)
  })
_sym_db.RegisterMessage(MetricConfig)

MetricsConfig = _reflection.GeneratedProtocolMessageType('MetricsConfig', (_message.Message,), {
  'DESCRIPTOR' : _METRICSCONFIG,
  '__module__' : 'dmi.hw_metrics_mgmt_service_pb2'
  # @@protoc_insertion_point(class_scope:dmi.MetricsConfig)
  })
_sym_db.RegisterMessage(MetricsConfig)

ListMetricsResponse = _reflection.GeneratedProtocolMessageType('ListMetricsResponse', (_message.Message,), {
  'DESCRIPTOR' : _LISTMETRICSRESPONSE,
  '__module__' : 'dmi.hw_metrics_mgmt_service_pb2'
  # @@protoc_insertion_point(class_scope:dmi.ListMetricsResponse)
  })
_sym_db.RegisterMessage(ListMetricsResponse)

MetricsConfigurationRequest = _reflection.GeneratedProtocolMessageType('MetricsConfigurationRequest', (_message.Message,), {
  'DESCRIPTOR' : _METRICSCONFIGURATIONREQUEST,
  '__module__' : 'dmi.hw_metrics_mgmt_service_pb2'
  # @@protoc_insertion_point(class_scope:dmi.MetricsConfigurationRequest)
  })
_sym_db.RegisterMessage(MetricsConfigurationRequest)

MetricsConfigurationResponse = _reflection.GeneratedProtocolMessageType('MetricsConfigurationResponse', (_message.Message,), {
  'DESCRIPTOR' : _METRICSCONFIGURATIONRESPONSE,
  '__module__' : 'dmi.hw_metrics_mgmt_service_pb2'
  # @@protoc_insertion_point(class_scope:dmi.MetricsConfigurationResponse)
  })
_sym_db.RegisterMessage(MetricsConfigurationResponse)

MetricMetaData = _reflection.GeneratedProtocolMessageType('MetricMetaData', (_message.Message,), {
  'DESCRIPTOR' : _METRICMETADATA,
  '__module__' : 'dmi.hw_metrics_mgmt_service_pb2'
  # @@protoc_insertion_point(class_scope:dmi.MetricMetaData)
  })
_sym_db.RegisterMessage(MetricMetaData)

Metric = _reflection.GeneratedProtocolMessageType('Metric', (_message.Message,), {
  'DESCRIPTOR' : _METRIC,
  '__module__' : 'dmi.hw_metrics_mgmt_service_pb2'
  # @@protoc_insertion_point(class_scope:dmi.Metric)
  })
_sym_db.RegisterMessage(Metric)

GetMetricRequest = _reflection.GeneratedProtocolMessageType('GetMetricRequest', (_message.Message,), {
  'DESCRIPTOR' : _GETMETRICREQUEST,
  '__module__' : 'dmi.hw_metrics_mgmt_service_pb2'
  # @@protoc_insertion_point(class_scope:dmi.GetMetricRequest)
  })
_sym_db.RegisterMessage(GetMetricRequest)

GetMetricResponse = _reflection.GeneratedProtocolMessageType('GetMetricResponse', (_message.Message,), {
  'DESCRIPTOR' : _GETMETRICRESPONSE,
  '__module__' : 'dmi.hw_metrics_mgmt_service_pb2'
  # @@protoc_insertion_point(class_scope:dmi.GetMetricResponse)
  })
_sym_db.RegisterMessage(GetMetricResponse)

_NATIVEMETRICSMANAGEMENTSERVICE = DESCRIPTOR.services_by_name['NativeMetricsManagementService']
if _descriptor._USE_C_DESCRIPTORS == False:

  DESCRIPTOR._options = None
  DESCRIPTOR._serialized_options = b'Z9github.com/opencord/device-management-interface/v3/go/dmi'
  _METRICNAMES._serialized_start=1581
  _METRICNAMES._serialized_end=2310
  _METRICCONFIG._serialized_start=104
  _METRICCONFIG._serialized_end=201
  _METRICSCONFIG._serialized_start=203
  _METRICSCONFIG._serialized_end=254
  _LISTMETRICSRESPONSE._serialized_start=257
  _LISTMETRICSRESPONSE._serialized_end=512
  _LISTMETRICSRESPONSE_REASON._serialized_start=418
  _LISTMETRICSRESPONSE_REASON._serialized_end=512
  _METRICSCONFIGURATIONREQUEST._serialized_start=515
  _METRICSCONFIGURATIONREQUEST._serialized_end=656
  _METRICSCONFIGURATIONRESPONSE._serialized_start=659
  _METRICSCONFIGURATIONRESPONSE._serialized_end=947
  _METRICSCONFIGURATIONRESPONSE_REASON._serialized_start=802
  _METRICSCONFIGURATIONRESPONSE_REASON._serialized_end=947
  _METRICMETADATA._serialized_start=949
  _METRICMETADATA._serialized_end=1056
  _METRIC._serialized_start=1059
  _METRIC._serialized_end=1191
  _GETMETRICREQUEST._serialized_start=1193
  _GETMETRICREQUEST._serialized_end=1288
  _GETMETRICRESPONSE._serialized_start=1291
  _GETMETRICRESPONSE._serialized_end=1578
  _GETMETRICRESPONSE_REASON._serialized_start=1441
  _GETMETRICRESPONSE_REASON._serialized_end=1578
  _NATIVEMETRICSMANAGEMENTSERVICE._serialized_start=2313
  _NATIVEMETRICSMANAGEMENTSERVICE._serialized_end=2618
# @@protoc_insertion_point(module_scope)
