From 9204eee79df228ece1231e135cf4d1e3deade2a0 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 31 Oct 2023 16:49:57 +0000
Subject: [PATCH] Add Link Capacity KPIs:

- Added entries in proto
- Added entries in common/type_checkers
- Updated Context, Automation, and Policy components
---
 proto/kpi_sample_types.proto                   |  8 ++++++++
 .../eu/teraflow/automation/Serializer.java     |  8 ++++++++
 .../eu/teraflow/automation/SerializerTest.java |  6 ++++++
 .../grpc/kpi_sample_types/KpiSampleTypes.java  | 18 ++++++++++++++++++
 src/common/type_checkers/Assertions.py         |  2 ++
 .../database/models/enums/KpiSampleType.py     | 12 +++++++-----
 .../java/eu/teraflow/policy/Serializer.java    |  8 ++++++++
 .../eu/teraflow/policy/SerializerTest.java     |  6 ++++++
 .../grpc/kpi_sample_types/KpiSampleTypes.java  | 18 ++++++++++++++++++
 9 files changed, 81 insertions(+), 5 deletions(-)

diff --git a/proto/kpi_sample_types.proto b/proto/kpi_sample_types.proto
index 1ade4d69b..5b234a4e3 100644
--- a/proto/kpi_sample_types.proto
+++ b/proto/kpi_sample_types.proto
@@ -17,18 +17,26 @@ package kpi_sample_types;
 
 enum KpiSampleType {
     KPISAMPLETYPE_UNKNOWN                       = 0;
+
     KPISAMPLETYPE_PACKETS_TRANSMITTED           = 101;
     KPISAMPLETYPE_PACKETS_RECEIVED              = 102;
     KPISAMPLETYPE_PACKETS_DROPPED               = 103;
     KPISAMPLETYPE_BYTES_TRANSMITTED             = 201;
     KPISAMPLETYPE_BYTES_RECEIVED                = 202;
     KPISAMPLETYPE_BYTES_DROPPED                 = 203;
+
+    KPISAMPLETYPE_LINK_TOTAL_CAPACITY_GBPS      = 301;
+    KPISAMPLETYPE_LINK_USED_CAPACITY_GBPS       = 302;
+
     KPISAMPLETYPE_ML_CONFIDENCE                 = 401;  //. can be used by both optical and L3 without any issue
+
     KPISAMPLETYPE_OPTICAL_SECURITY_STATUS       = 501;  //. can be used by both optical and L3 without any issue
+
     KPISAMPLETYPE_L3_UNIQUE_ATTACK_CONNS        = 601;
     KPISAMPLETYPE_L3_TOTAL_DROPPED_PACKTS       = 602;
     KPISAMPLETYPE_L3_UNIQUE_ATTACKERS           = 603;
     KPISAMPLETYPE_L3_UNIQUE_COMPROMISED_CLIENTS = 604;
     KPISAMPLETYPE_L3_SECURITY_STATUS_CRYPTO     = 605;
+
     KPISAMPLETYPE_SERVICE_LATENCY_MS            = 701;
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/Serializer.java b/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
index 3d5c93b2c..5113aa009 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
@@ -764,6 +764,10 @@ public class Serializer {
                 return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_TRANSMITTED;
             case BYTES_RECEIVED:
                 return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_RECEIVED;
+            case LINK_TOTAL_CAPACITY_GBPS:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_LINK_TOTAL_CAPACITY_GBPS;
+            case LINK_USED_CAPACITY_GBPS:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_LINK_USED_CAPACITY_GBPS;
             case UNKNOWN:
                 return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN;
             default:
@@ -781,6 +785,10 @@ public class Serializer {
                 return KpiSampleType.BYTES_TRANSMITTED;
             case KPISAMPLETYPE_BYTES_RECEIVED:
                 return KpiSampleType.BYTES_RECEIVED;
+            case KPISAMPLETYPE_LINK_TOTAL_CAPACITY_GBPS:
+                return KpiSampleType.LINK_TOTAL_CAPACITY_GBPS;
+            case KPISAMPLETYPE_LINK_USED_CAPACITY_GBPS:
+                return KpiSampleType.LINK_USED_CAPACITY_GBPS;
             case KPISAMPLETYPE_UNKNOWN:
             default:
                 return KpiSampleType.UNKNOWN;
diff --git a/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java b/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
index 7351d16a9..7540bbf29 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
@@ -1178,6 +1178,12 @@ class SerializerTest {
                 Arguments.of(
                         KpiSampleType.BYTES_RECEIVED,
                         KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_RECEIVED),
+                Arguments.of(
+                        KpiSampleType.LINK_TOTAL_CAPACITY_GBPS,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_LINK_TOTAL_CAPACITY_GBPS),
+                Arguments.of(
+                        KpiSampleType.LINK_USED_CAPACITY_GBPS,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_LINK_USED_CAPACITY_GBPS),
                 Arguments.of(KpiSampleType.UNKNOWN, KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN));
     }
 
diff --git a/src/automation/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java b/src/automation/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java
index 217672b2e..98bdbbd2c 100644
--- a/src/automation/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java
+++ b/src/automation/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java
@@ -47,6 +47,14 @@ public final class KpiSampleTypes {
      * <code>KPISAMPLETYPE_BYTES_DROPPED = 203;</code>
      */
     KPISAMPLETYPE_BYTES_DROPPED(203),
+    /**
+     * <code>KPISAMPLETYPE_LINK_TOTAL_CAPACITY_GBPS = 301;</code>
+     */
+    KPISAMPLETYPE_LINK_TOTAL_CAPACITY_GBPS(301),
+    /**
+     * <code>KPISAMPLETYPE_LINK_USED_CAPACITY_GBPS = 302;</code>
+     */
+    KPISAMPLETYPE_LINK_USED_CAPACITY_GBPS(302),
     /**
      * <pre>
      *. can be used by both optical and L3 without any issue
@@ -118,6 +126,14 @@ public final class KpiSampleTypes {
      * <code>KPISAMPLETYPE_BYTES_DROPPED = 203;</code>
      */
     public static final int KPISAMPLETYPE_BYTES_DROPPED_VALUE = 203;
+    /**
+     * <code>KPISAMPLETYPE_LINK_TOTAL_CAPACITY_GBPS = 301;</code>
+     */
+    public static final int KPISAMPLETYPE_LINK_TOTAL_CAPACITY_GBPS_VALUE = 301;
+    /**
+     * <code>KPISAMPLETYPE_LINK_USED_CAPACITY_GBPS = 302;</code>
+     */
+    public static final int KPISAMPLETYPE_LINK_USED_CAPACITY_GBPS_VALUE = 302;
     /**
      * <pre>
      *. can be used by both optical and L3 without any issue
@@ -191,6 +207,8 @@ public final class KpiSampleTypes {
         case 201: return KPISAMPLETYPE_BYTES_TRANSMITTED;
         case 202: return KPISAMPLETYPE_BYTES_RECEIVED;
         case 203: return KPISAMPLETYPE_BYTES_DROPPED;
+        case 301: return KPISAMPLETYPE_LINK_TOTAL_CAPACITY_GBPS;
+        case 302: return KPISAMPLETYPE_LINK_USED_CAPACITY_GBPS;
         case 401: return KPISAMPLETYPE_ML_CONFIDENCE;
         case 501: return KPISAMPLETYPE_OPTICAL_SECURITY_STATUS;
         case 601: return KPISAMPLETYPE_L3_UNIQUE_ATTACK_CONNS;
diff --git a/src/common/type_checkers/Assertions.py b/src/common/type_checkers/Assertions.py
index 42ea864f3..286ae179d 100644
--- a/src/common/type_checkers/Assertions.py
+++ b/src/common/type_checkers/Assertions.py
@@ -53,6 +53,8 @@ def validate_kpi_sample_types_enum(message):
         'KPISAMPLETYPE_PACKETS_RECEIVED',
         'KPISAMPLETYPE_BYTES_TRANSMITTED',
         'KPISAMPLETYPE_BYTES_RECEIVED',
+        'KPISAMPLETYPE_LINK_TOTAL_CAPACITY_GBPS',
+        'KPISAMPLETYPE_LINK_USED_CAPACITY_GBPS',
     ]
 
 def validate_service_type_enum(message):
diff --git a/src/context/service/database/models/enums/KpiSampleType.py b/src/context/service/database/models/enums/KpiSampleType.py
index 5cef9ac19..a229b5698 100644
--- a/src/context/service/database/models/enums/KpiSampleType.py
+++ b/src/context/service/database/models/enums/KpiSampleType.py
@@ -22,11 +22,13 @@ from ._GrpcToEnum import grpc_to_enum
 #            BYTES_RECEIVED. If item name does not match, automatic mapping of
 #            proto enums to database enums will fail.
 class ORM_KpiSampleTypeEnum(enum.Enum):
-    UNKNOWN             = KpiSampleType.KPISAMPLETYPE_UNKNOWN
-    PACKETS_TRANSMITTED = KpiSampleType.KPISAMPLETYPE_PACKETS_TRANSMITTED
-    PACKETS_RECEIVED    = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED
-    BYTES_TRANSMITTED   = KpiSampleType.KPISAMPLETYPE_BYTES_TRANSMITTED
-    BYTES_RECEIVED      = KpiSampleType.KPISAMPLETYPE_BYTES_RECEIVED
+    UNKNOWN                  = KpiSampleType.KPISAMPLETYPE_UNKNOWN
+    PACKETS_TRANSMITTED      = KpiSampleType.KPISAMPLETYPE_PACKETS_TRANSMITTED
+    PACKETS_RECEIVED         = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED
+    BYTES_TRANSMITTED        = KpiSampleType.KPISAMPLETYPE_BYTES_TRANSMITTED
+    BYTES_RECEIVED           = KpiSampleType.KPISAMPLETYPE_BYTES_RECEIVED
+    LINK_TOTAL_CAPACITY_GBPS = KpiSampleType.KPISAMPLETYPE_LINK_TOTAL_CAPACITY_GBPS
+    LINK_USED_CAPACITY_GBPS  = KpiSampleType.KPISAMPLETYPE_LINK_USED_CAPACITY_GBPS
 
 grpc_to_enum__kpi_sample_type = functools.partial(
     grpc_to_enum, KpiSampleType, ORM_KpiSampleTypeEnum)
diff --git a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
index e7fb00029..4f0c60092 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
@@ -1295,6 +1295,10 @@ public class Serializer {
                 return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_TRANSMITTED;
             case BYTES_RECEIVED:
                 return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_RECEIVED;
+            case LINK_TOTAL_CAPACITY_GBPS:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_LINK_TOTAL_CAPACITY_GBPS;
+            case LINK_USED_CAPACITY_GBPS:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_LINK_USED_CAPACITY_GBPS;
             case UNKNOWN:
                 return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN;
             default:
@@ -1312,6 +1316,10 @@ public class Serializer {
                 return KpiSampleType.BYTES_TRANSMITTED;
             case KPISAMPLETYPE_BYTES_RECEIVED:
                 return KpiSampleType.BYTES_RECEIVED;
+            case KPISAMPLETYPE_LINK_TOTAL_CAPACITY_GBPS:
+                return KpiSampleType.LINK_TOTAL_CAPACITY_GBPS;
+            case KPISAMPLETYPE_LINK_USED_CAPACITY_GBPS:
+                return KpiSampleType.LINK_USED_CAPACITY_GBPS;
             case KPISAMPLETYPE_UNKNOWN:
             default:
                 return KpiSampleType.UNKNOWN;
diff --git a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
index fb60ef8d1..b57bdf10a 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
@@ -2218,6 +2218,12 @@ class SerializerTest {
                 Arguments.of(
                         KpiSampleType.BYTES_RECEIVED,
                         KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_RECEIVED),
+                Arguments.of(
+                        KpiSampleType.LINK_TOTAL_CAPACITY_GBPS,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_LINK_TOTAL_CAPACITY_GBPS),
+                Arguments.of(
+                        KpiSampleType.LINK_USED_CAPACITY_GBPS,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_LINK_USED_CAPACITY_GBPS),
                 Arguments.of(KpiSampleType.UNKNOWN, KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN));
     }
 
diff --git a/src/policy/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java b/src/policy/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java
index 217672b2e..98bdbbd2c 100644
--- a/src/policy/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java
+++ b/src/policy/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java
@@ -47,6 +47,14 @@ public final class KpiSampleTypes {
      * <code>KPISAMPLETYPE_BYTES_DROPPED = 203;</code>
      */
     KPISAMPLETYPE_BYTES_DROPPED(203),
+    /**
+     * <code>KPISAMPLETYPE_LINK_TOTAL_CAPACITY_GBPS = 301;</code>
+     */
+    KPISAMPLETYPE_LINK_TOTAL_CAPACITY_GBPS(301),
+    /**
+     * <code>KPISAMPLETYPE_LINK_USED_CAPACITY_GBPS = 302;</code>
+     */
+    KPISAMPLETYPE_LINK_USED_CAPACITY_GBPS(302),
     /**
      * <pre>
      *. can be used by both optical and L3 without any issue
@@ -118,6 +126,14 @@ public final class KpiSampleTypes {
      * <code>KPISAMPLETYPE_BYTES_DROPPED = 203;</code>
      */
     public static final int KPISAMPLETYPE_BYTES_DROPPED_VALUE = 203;
+    /**
+     * <code>KPISAMPLETYPE_LINK_TOTAL_CAPACITY_GBPS = 301;</code>
+     */
+    public static final int KPISAMPLETYPE_LINK_TOTAL_CAPACITY_GBPS_VALUE = 301;
+    /**
+     * <code>KPISAMPLETYPE_LINK_USED_CAPACITY_GBPS = 302;</code>
+     */
+    public static final int KPISAMPLETYPE_LINK_USED_CAPACITY_GBPS_VALUE = 302;
     /**
      * <pre>
      *. can be used by both optical and L3 without any issue
@@ -191,6 +207,8 @@ public final class KpiSampleTypes {
         case 201: return KPISAMPLETYPE_BYTES_TRANSMITTED;
         case 202: return KPISAMPLETYPE_BYTES_RECEIVED;
         case 203: return KPISAMPLETYPE_BYTES_DROPPED;
+        case 301: return KPISAMPLETYPE_LINK_TOTAL_CAPACITY_GBPS;
+        case 302: return KPISAMPLETYPE_LINK_USED_CAPACITY_GBPS;
         case 401: return KPISAMPLETYPE_ML_CONFIDENCE;
         case 501: return KPISAMPLETYPE_OPTICAL_SECURITY_STATUS;
         case 601: return KPISAMPLETYPE_L3_UNIQUE_ATTACK_CONNS;
-- 
GitLab