blob: e8c1e9cabe73288dfc155b3e25464afded539e54 [file] [log] [blame]
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/timestamp.proto";
import "google/protobuf/empty.proto";
// Management of Events and protos for encoding of Events
enum EventIds {
EVENT_NAME_UNDEFINED = 0;
// Events from the Transceivers
EVENT_TRANSCEIVER_PLUG_OUT = 100;
EVENT_TRANSCEIVER_PLUG_IN = 101;
// The threshold based events on the transceivers should be configured on
// the port components of that transceiver and not on the transceiver
// component itself. This is because there could be different thresholds
// on the different ports of a transceiver (for example for a transceiver of
// type COMBO_GPON_XGSPON the power thresholds could be different for the
// GPON and XGSPON ports)
EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD = 102;
EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD = 103;
EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD = 104;
EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD = 105;
EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD = 106;
EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD = 107;
EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD = 108;
EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD = 109;
EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD = 110;
EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD = 111;
EVENT_TRANSCEIVER_FAILURE = 112;
EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD_RECOVERED = 113;
EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD_RECOVERED = 114;
EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD_RECOVERED = 115;
EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD_RECOVERED = 116;
EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD_RECOVERED = 117;
EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD_RECOVERED = 118;
EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD_RECOVERED = 119;
EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD_RECOVERED = 120;
EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD_RECOVERED = 121;
EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD_RECOVERED = 122;
EVENT_TRANSCEIVER_FAILURE_RECOVERED = 123;
// Events from the PSU
EVENT_PSU_PLUG_OUT = 200;
EVENT_PSU_PLUG_IN = 201;
EVENT_PSU_FAILURE = 202;
EVENT_PSU_FAILURE_RECOVERED = 203;
// Events for the Fans
EVENT_FAN_FAILURE = 300;
EVENT_FAN_PLUG_OUT = 301;
EVENT_FAN_PLUG_IN = 302;
EVENT_FAN_FAILURE_RECOVERED = 303;
// Events for the CPUs
EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL = 400;
EVENT_CPU_TEMPERATURE_ABOVE_FATAL = 401;
EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL_RECOVERED = 402;
EVENT_CPU_TEMPERATURE_ABOVE_FATAL_RECOVERED = 403;
EVENT_CPU_USAGE_ABOVE_THRESHOLD = 404;
EVENT_CPU_USAGE_ABOVE_THRESHOLD_RECOVERED = 405;
// Events for the complete HW Device
EVENT_HW_DEVICE_RESET = 500;
EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL = 501;
EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL = 502;
EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL_RECOVERED = 503;
EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL_RECOVERED = 504;
EVENT_HW_DEVICE_REBOOT = 505;
EVENT_HW_TEMPERATURE_SENSOR_FAILED = 506;
EVENT_HW_ALL_TEMPERATURE_SENSORS_FAILED = 507;
EVENT_HW_DISK_USAGE_ABOVE_THRESHOLD = 508;
EVENT_HW_DISK_USAGE_ABOVE_THRESHOLD_RECOVERED = 509;
EVENT_HW_MEMORY_USAGE_ABOVE_THRESHOLD = 510;
EVENT_HW_MEMORY_USAGE_ABOVE_THRESHOLD_RECOVERED = 511;
EVENT_HW_NTP_SYNC_FAILURE = 512;
EVENT_HW_NTP_SYNC_FAILURE_RECOVERED = 513;
// Events for the line cards on the HW Device
EVENT_LINE_CARD_PLUG_OUT = 600;
EVENT_LINE_CARD_PLUG_IN = 601;
// More to be added
}
message ValueType {
// For val no multiples of units shall be used.
// For example, for memory val should be in bytes and not in kilobytes or any
// other multiple of the unit byte.
oneof val{
int64 int_val = 1;
uint64 uint_val = 2;
float float_val = 3;
}
DataValueType typeOfVal = 4;
}
message WaterMarks {
ValueType high = 1;
ValueType low = 2;
}
message Thresholds {
oneof threshold {
WaterMarks upper = 1;
WaterMarks lower = 2;
}
}
message ThresholdInformation {
ValueType observed_value = 1;
Thresholds thresholds = 2;
}
message EventCfg {
EventIds event_id = 1;
bool is_configured = 2;
// Optional threshold values, applicable only for some specific events
// If an event needs thresholds but the user does not pass the thresholds here, the Device Manager implementations
// could choose to use defaults applicable for the specific component (recommended) or return an error for such
// an EventConfigurationRequest with reason as INVALID_CONFIG
Thresholds thresholds = 3;
// For events which can be configured on a particular component this id can be used to identify the component
// For e.g. for events of the transceivers
Uuid component_uuid = 4;
}
message EventsCfg {
repeated EventCfg items = 1;
}
message ListEventsResponse {
enum Reason {
UNDEFINED_REASON = 0;
UNKNOWN_DEVICE = 1;
INTERNAL_ERROR = 2;
DEVICE_UNREACHABLE = 3;
}
Status status = 1;
Reason reason = 2;
EventsCfg events = 3;
string reason_detail = 4;
}
message EventsConfigurationRequest {
Uuid device_uuid = 1;
oneof operation {
EventsCfg changes = 2;
bool reset_to_default = 3;
}
}
message EventsConfigurationResponse {
enum Reason {
UNDEFINED_REASON = 0;
UNKNOWN_DEVICE = 1;
INTERNAL_ERROR = 2;
INVALID_CONFIG = 3;
DEVICE_UNREACHABLE = 4;
}
Status status = 1;
Reason reason = 2;
string reason_detail = 3;
}
message EventMetaData {
Uuid device_uuid = 1;
// uuid of the component
Uuid component_uuid = 2;
string component_name = 3;
}
// The Events are conveyed to external systems either by submitting them on a message bus or using gRPC server streaming.
// The message bus topic to which are Events are submitted would be configured as startup
// configuration of the components
message Event {
EventMetaData event_metadata = 1;
EventIds event_id = 2;
google.protobuf.Timestamp raised_ts = 3;
// Optional threshold information for an event
ThresholdInformation threshold_info = 4;
// Any additional info regarding the event
string add_info = 5;
}
service NativeEventsManagementService {
// List the supported events for the passed device
rpc ListEvents(HardwareID) returns(ListEventsResponse);
// Updates the configuration of the list of events in the request
// The default behavior of the device is to report all the supported events
// This configuration is persisted across reboots of the device or the device manager
rpc UpdateEventsConfiguration(EventsConfigurationRequest) returns(EventsConfigurationResponse);
// Initiate the server streaming of the events
rpc StreamEvents(google.protobuf.Empty) returns(stream Event);
}