| syntax = "proto3"; | |
| option go_package = "github.com/opencord/device-management-interface/v3/go/dmi"; | |
| package dmi; | |
| import "dmi/commons.proto"; | |
| import "dmi/hw.proto"; | |
| import "google/protobuf/empty.proto"; | |
| // The model used to represent the event data on the SensorData of a component as described | |
| // in RFC8348 (https://tools.ietf.org/html/rfc8348) | |
| // Management of Metrics and protos for encoding of Metrics | |
| enum MetricNames { | |
| METRIC_NAME_UNDEFINED = 0; | |
| // FAN related metrics | |
| METRIC_FAN_SPEED = 1; | |
| // CPU related metrics | |
| METRIC_CPU_TEMP = 100; | |
| METRIC_CPU_USAGE_PERCENTAGE = 101; | |
| // Transceiver related metrics | |
| 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; | |
| // Disk related metrics | |
| 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; | |
| // RAM related metrics | |
| METRIC_RAM_TEMP = 400; | |
| METRIC_RAM_CAPACITY = 401; | |
| METRIC_RAM_USAGE = 402; | |
| METRIC_RAM_USAGE_PERCENTAGE = 403; | |
| // Power related metrics | |
| METRIC_POWER_MAX = 500; | |
| METRIC_POWER_USAGE = 501; | |
| METRIC_POWER_USAGE_PERCENTAGE = 502; | |
| // Chassis related metrics | |
| METRIC_INNER_SURROUNDING_TEMP = 600; | |
| } | |
| message MetricConfig { | |
| MetricNames metric_id = 1; | |
| // Whether the device manager is collecting and reporting this metric or not | |
| bool is_configured = 2; | |
| // Number of seconds between two consecutive polls of the particular metric | |
| // Each device manager implemenation could have it's per metric default poll frequency which | |
| // can be requested to be changed using this value | |
| uint32 poll_interval = 3; | |
| } | |
| message MetricsConfig { | |
| repeated MetricConfig metrics = 1; | |
| } | |
| message ListMetricsResponse { | |
| enum Reason { | |
| UNDEFINED_REASON = 0; | |
| UNKNOWN_DEVICE = 1; | |
| INTERNAL_ERROR = 2; | |
| DEVICE_UNREACHABLE = 3; | |
| } | |
| Status status = 1; | |
| Reason reason = 2; | |
| MetricsConfig metrics = 3; | |
| string reason_detail = 4; | |
| } | |
| message MetricsConfigurationRequest { | |
| Uuid device_uuid = 1; | |
| oneof operation { | |
| MetricsConfig changes = 2; | |
| bool reset_to_default = 3; | |
| } | |
| } | |
| message MetricsConfigurationResponse { | |
| enum Reason { | |
| UNDEFINED_REASON = 0; | |
| UNKNOWN_DEVICE = 1; | |
| INTERNAL_ERROR = 2; | |
| POLL_INTERVAL_UNSUPPORTED = 3; | |
| INVALID_METRIC = 4; | |
| DEVICE_UNREACHABLE = 5; | |
| } | |
| Status status = 1; | |
| Reason reason = 2; | |
| string reason_detail = 3; | |
| } | |
| message MetricMetaData { | |
| Uuid device_uuid = 1; | |
| // uuid of the component | |
| Uuid component_uuid = 2; | |
| string component_name = 3; | |
| } | |
| // The Metrics are conveyed to external systems either by submitting them on a message bus or using gRPC server streaming. | |
| // The topic to which are Metrics are submitted would be configured as startup | |
| // configuration of the components | |
| message Metric { | |
| MetricNames metric_id = 1; | |
| MetricMetaData metric_metadata = 2; | |
| ComponentSensorData value = 3; | |
| } | |
| message GetMetricRequest { | |
| MetricMetaData meta_data = 1; | |
| MetricNames metric_id = 2; | |
| } | |
| message GetMetricResponse { | |
| enum Reason { | |
| UNDEFINED_REASON = 0; | |
| UNKNOWN_DEVICE = 1; | |
| UNKNOWN_COMPONENT = 2; | |
| INTERNAL_ERROR = 3; | |
| INVALID_METRIC = 4; | |
| DEVICE_UNREACHABLE = 5; | |
| } | |
| Status status = 1; | |
| Reason reason = 2; | |
| Metric metric = 3; | |
| string reason_detail = 4; | |
| } | |
| service NativeMetricsManagementService { | |
| // List the supported metrics for the passed device. | |
| // This would be the first call that you make to know about the metrics that a particular device supports and | |
| // then use the UpdateMetricsConfiguration API to monitor only the required metrics. | |
| rpc ListMetrics(HardwareID) returns(ListMetricsResponse); | |
| // Updates the configuration of the list of metrics in the request | |
| // Acts upon single metric configuration, collection of a single metric can be started/stopped | |
| // by changing its configuration. | |
| // | |
| // This configuration is persisted across restart of the device or the device manager | |
| rpc UpdateMetricsConfiguration(MetricsConfigurationRequest) returns(MetricsConfigurationResponse); | |
| // Get the instantenous value of a metric | |
| rpc GetMetric(GetMetricRequest) returns(GetMetricResponse); | |
| // Initiate the server streaming of the metrics | |
| rpc StreamMetrics(google.protobuf.Empty) returns(stream Metric); | |
| } |