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 {
    enum Reason {
        UNDEFINED_REASON = 0;
        UNKNOWN_DEVICE = 1;
        INTERNAL_ERROR = 2;
    }
    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 {
    enum Reason {
        UNDEFINED_REASON = 0;
        UNKNOWN_DEVICE = 1;
        INTERNAL_ERROR = 2;
        POLL_INTERVAL_UNSUPPORTED = 3;
        INVALID_METRIC = 4;
    }
    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;
}

message GetMetricResponse {
    enum Reason {
        UNDEFINED_REASON = 0;
        UNKNOWN_DEVICE = 1;
        UNKNOWN_COMPONENT = 2;
        INTERNAL_ERROR = 3;
        INVALID_METRIC = 4;
    }
    Status status = 1;
    Reason reason = 2;
    Metric metric = 3;
}

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);
}
