//Example of topology syntax = "proto3"; package monitoring; import "context.proto"; service MonitoringService { rpc IncludeKpi (KpiRequest) returns (KpiId) {} rpc MonitorKpi ( KpiId ) returns (Kpi) {} rpc GetStreamKpi ( KpiId ) returns (stream Kpi) {} rpc GetInstantKpi ( KpiId ) returns (Kpi) {} } message KpiRequest{ string kpiDescription = 1; context.DeviceId device_id = 2; KpiSampleType kpi_sample_type = 3; // context.EndpointId endpoint_id = 4; // others might be added // context.ServiceId service_id = 5; // for monitoring other // context.SliceId slice_id = 6; // entities } message Kpi { KpiId kpi_id = 1; string timestamp = 2; string kpiDescription = 3; KpiValue kpi_value = 4; KpiSampleType kpi_sample_type = 5; context.DeviceId device_id = 6; // context.EndpointId endpoint_id = 7; // others might be added // context.ServiceId service_id = 8; // for monitoring other // context.SliceId slice_id = 9; // entities } message KpiId { context.Uuid kpi_id = 1; } message KpiDevice { KpiId kpi_id = 1; context.DeviceId device_id = 2; } enum KpiSampleType { UNKNOWN = 0; PACKETS_TRANSMITTED = 101; // others might be added for PACKETS_RECEIVED = 102; // packet, optical, radio,... BYTES_TRANSMITTED = 201; BYTES_RECEIVED = 202; } message KpiList { repeated Kpi kpiList = 1; } message KpiValue { oneof value { uint32 intVal = 1; string stringVal = 2; bool boolVal = 3; } }