VOL-3157: Initial version of the protos

Change-Id: I8ffda169132f80a51632c52dd8ac142efef26ef7
diff --git a/protos/dmi/hw_metrics_mgmt_service.proto b/protos/dmi/hw_metrics_mgmt_service.proto
new file mode 100644
index 0000000..a30199f
--- /dev/null
+++ b/protos/dmi/hw_metrics_mgmt_service.proto
@@ -0,0 +1,125 @@
+syntax = "proto3";

+

+option go_package = "github.com/opencord/device-management-interface/v3/go/dmi";

+package dmi;

+

+import "dmi/commons.proto";

+import "dmi/hw.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 {

+    Status status = 1;

+    Reason reason = 2;

+    MetricsConfig metrics = 3;

+}

+

+message MetricsConfigurationRequest {

+    Uuid device_uuid = 1;

+    oneof operation {

+        MetricsConfig changes = 2;

+        bool reset_to_default = 3;

+    }

+}

+

+message MetricsConfigurationResponse {

+    Status status = 1;

+    Reason reason = 2;

+}

+

+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 by submitting them on a kafka bus.

+// 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;

+}

+

+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(Metric);

+}