// Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/) // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; package monitoring; import "context.proto"; import "kpi_sample_types.proto"; service MonitoringService { rpc CreateKpi (KpiDescriptor ) returns (KpiId ) {} rpc EditKpiDescriptor (EditedKpiDescriptor) returns (context.Empty ) {} rpc DeleteKpi (KpiId ) returns (context.Empty ) {} rpc GetKpiDescriptor (KpiId ) returns (KpiDescriptor ) {} rpc GetKpiDescriptorList (context.Empty ) returns (KpiDescriptorList ) {} rpc CreateBundleKpi (BundleKpiDescriptor) returns (KpiId ) {} rpc IncludeKpi (Kpi ) returns (context.Empty ) {} rpc MonitorKpi (MonitorKpiRequest ) returns (context.Empty ) {} rpc QueryKpiData (KpiQuery ) returns (KpiList ) {} rpc SubscribeKpi (SubsDescriptor ) returns (stream KpiList ) {} rpc GetSubsDescriptor (SubscriptionID ) returns (SubsDescriptor ) {} rpc GetSubscriptions (context.Empty ) returns (SubsIDList ) {} rpc EditKpiSubscription (SubsDescriptor ) returns (context.Empty ) {} rpc CreateKpiAlarm (AlarmDescriptor ) returns (AlarmID ) {} rpc EditKpiAlarm (AlarmDescriptor ) returns (context.Empty ) {} rpc GetAlarms (context.Empty ) returns (AlarmIDList ) {} rpc GetAlarmDescriptor (AlarmID ) returns (AlarmDescriptor ) {} rpc GetAlarmResponseStream(AlarmSubscription ) returns (stream AlarmResponse) {} rpc GetStreamKpi (KpiId ) returns (stream Kpi ) {} rpc GetInstantKpi (KpiId ) returns (KpiList ) {} } message KpiDescriptor { string kpi_description = 1; kpi_sample_types.KpiSampleType kpi_sample_type = 2; context.DeviceId device_id = 3; context.EndPointId endpoint_id = 4; context.ServiceId service_id = 5; context.SliceId slice_id = 6; } message BundleKpiDescriptor { string kpi_description = 1; repeated KpiId kpi_id_list = 2; kpi_sample_types.KpiSampleType kpi_sample_type = 3; context.DeviceId device_id = 4; context.EndPointId endpoint_id = 5; context.ServiceId service_id = 6; context.SliceId slice_id = 7; } message EditedKpiDescriptor { KpiId kpi_id = 1; string kpi_description = 2; repeated KpiId kpi_id_list = 3; kpi_sample_types.KpiSampleType kpi_sample_type = 4; context.DeviceId device_id = 5; context.EndPointId endpoint_id = 6; context.ServiceId service_id = 7; context.SliceId slice_id = 8; } message MonitorKpiRequest { KpiId kpi_id = 1; float monitoring_window_s = 2; float sampling_rate_s = 3; // Pending add field to reflect Available Device Protocols } message KpiQuery { repeated KpiId kpi_id = 1; float monitoring_window_s = 2; float sampling_rate_s = 3; uint32 last_n_samples = 4; // used when you want something like "get the last N many samples context.Timestamp start_timestamp = 5; // used when you want something like "get the samples since X date/time" context.Timestamp end_timestamp = 6; // used when you want something like "get the samples until X date/time" // Pending add field to reflect Available Device Protocols } message KpiId { context.Uuid kpi_id = 1; } message Kpi { KpiId kpi_id = 1; context.Timestamp timestamp = 2; KpiValue kpi_value = 3; } message KpiValueRange { KpiValue kpiMinValue = 1; KpiValue kpiMaxValue = 2; bool inRange = 3; // by default False } message KpiValue { oneof value { int32 int32Val = 1; uint32 uint32Val = 2; int64 int64Val = 3; uint64 uint64Val = 4; float floatVal = 5; string stringVal = 6; bool boolVal = 7; } } message KpiList { repeated Kpi kpi_list = 1; } message KpiDescriptorList { repeated KpiDescriptor kpi_descriptor_list = 1; } message SubsDescriptor{ KpiId kpi_id = 1; float sampling_duration_s = 2; float sampling_interval_s = 3; context.Timestamp start_timestamp = 4; // used when you want something like "get the samples since X date/time" context.Timestamp end_timestamp = 5; // used when you want something like "get the samples until X date/time" // Pending add field to reflect Available Device Protocols } message SubscriptionID { context.Uuid subs_id = 1; } message SubsResponse { SubscriptionID subs_id = 1; repeated KpiList kpi_list = 2; } message SubsIDList { repeated SubscriptionID subs_list = 1; } message AlarmDescriptor { string alarm_description = 1; string name = 2; KpiId kpi_id = 3; KpiValueRange kpi_value_range = 4; context.Timestamp timestamp = 5; } message AlarmID{ context.Uuid alarm_id = 1; } message AlarmSubscription{ AlarmID alarmID = 1; float subscription_timeout_s = 2; float subscription_frequency_ms = 3; } message AlarmResponse { AlarmID alarm_id = 1; string text = 2; KpiValue kpi_value = 3; context.Timestamp timestamp = 4; } message AlarmIDList { repeated AlarmID alarm_list = 1; }