// Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
//
// 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 kpi_value_api;

import "context.proto";
import "kpi_manager.proto";

service KpiValueAPIService {
  rpc StoreKpiValues  (KpiValueList     ) returns (context.Empty   ) {}
  rpc SelectKpiValues (KpiValueFilter   ) returns (KpiValueList    ) {}
  rpc GetKpiAlarms    (kpi_manager.KpiId) returns (stream KpiAlarms) {}
}

message KpiValue {
  kpi_manager.KpiId kpi_id         = 1;
  context.Timestamp timestamp      = 2;
  KpiValueType      kpi_value_type = 3;
}

message KpiValueList {
  repeated KpiValue kpi_value_list = 1;
}

message KpiValueType {
  oneof value {
    int32  int32Val  = 1;
    uint32 uint32Val = 2;
    int64  int64Val  = 3;
    uint64 uint64Val = 4;
    float  floatVal  = 5;
    string stringVal = 6;
    bool   boolVal   = 7;
  }
}

message KpiValueFilter {
  repeated kpi_manager.KpiId kpi_id          = 1;
  repeated context.Timestamp start_timestamp = 2;
  repeated context.Timestamp end_timestamp   = 3;
}

message KpiAlarms {
  context.Timestamp start_timestamp = 1;
  context.Timestamp end_timestamp   = 2;
  kpi_manager.KpiId kpi_id          = 3;
  map<string, bool> alarms          = 4;
}
