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 9970852124fb0a5334087ef703a6b0fb5b3ef9a8..9e536450873fe9d6e31f66dd71088ae401fce64e 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java +++ b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java @@ -56,6 +56,7 @@ import eu.teraflow.policy.context.model.Device; import eu.teraflow.policy.context.model.DeviceConfig; import eu.teraflow.policy.context.model.DeviceDriverEnum; import eu.teraflow.policy.context.model.DeviceOperationalStatus; +import eu.teraflow.policy.context.model.Empty; import eu.teraflow.policy.context.model.EndPoint; import eu.teraflow.policy.context.model.EndPointId; import eu.teraflow.policy.context.model.Event; @@ -95,11 +96,15 @@ import eu.teraflow.policy.monitoring.model.KpiValue; import eu.teraflow.policy.monitoring.model.KpiValueRange; import eu.teraflow.policy.monitoring.model.StringKpiValue; import eu.teraflow.policy.monitoring.model.SubsDescriptor; +import java.util.ArrayList; +import java.util.List; import java.util.stream.Collectors; import javax.inject.Singleton; import kpi_sample_types.KpiSampleTypes; import monitoring.Monitoring; +import monitoring.Monitoring.AlarmID; import monitoring.Monitoring.KpiId; +import monitoring.Monitoring.SubscriptionID; import policy.Policy; import policy.Policy.PolicyRuleId; import policy.PolicyAction; @@ -1538,6 +1543,21 @@ public class Serializer { return new KpiValueRange(minKpiValue, maxKpiValue); } + public AlarmID serializeAlarmId(String alarmId) { + final var builder = Monitoring.AlarmID.newBuilder(); + + final var serializedAlarmIdUuid = serializeUuid(alarmId); + builder.setAlarmId(serializedAlarmIdUuid); + + return builder.build(); + } + + public String deserialize(AlarmID serializedAlarmId) { + final var serializedAlarmIdUuid = serializedAlarmId.getAlarmId(); + + return deserialize(serializedAlarmIdUuid); + } + public Monitoring.AlarmDescriptor serialize(AlarmDescriptor alarmDescriptor) { final var builder = Monitoring.AlarmDescriptor.newBuilder(); @@ -1637,6 +1657,21 @@ public class Serializer { return new SubsDescriptor(kpiId, samplingDurationS, samplingIntervalS, startDate, endDate); } + public SubscriptionID serializeSubscriptionIdId(String subscriptionId) { + final var builder = Monitoring.SubscriptionID.newBuilder(); + + final var serializedSubscriptionIdUuid = serializeUuid(subscriptionId); + builder.setSubsId(serializedSubscriptionIdUuid); + + return builder.build(); + } + + public String deserialize(SubscriptionID serializedSubscriptionId) { + final var serializedSubscriptionIdUuid = serializedSubscriptionId.getSubsId(); + + return deserialize(serializedSubscriptionIdUuid); + } + public PolicyCondition.PolicyRuleCondition serialize(PolicyRuleCondition policyRuleCondition) { final var builder = PolicyCondition.PolicyRuleCondition.newBuilder(); @@ -1908,6 +1943,28 @@ public class Serializer { return new Kpi(kpiId, timestamp, kpiValue); } + public List<Monitoring.Kpi> serialize(List<Kpi> kpis) { + List<Monitoring.Kpi> serializedKpis = new ArrayList<>(); + + for (Kpi kpi : kpis) { + final var serializedKpi = serialize(kpi); + + serializedKpis.add(serializedKpi); + } + return serializedKpis; + } + + public List<Kpi> deserialize(List<Monitoring.Kpi> serializedKpis) { + List<Kpi> kpis = new ArrayList<>(); + + for (Monitoring.Kpi serializedKpi : serializedKpis) { + final var kpi = deserialize(serializedKpi); + + kpis.add(kpi); + } + return kpis; + } + public Monitoring.KpiDescriptor serialize(KpiDescriptor kpiDescriptor) { final var builder = Monitoring.KpiDescriptor.newBuilder(); @@ -2130,6 +2187,17 @@ public class Serializer { deviceEndPoints); } + public ContextOuterClass.Empty serializeEmpty(Empty empty) { + + final var builder = ContextOuterClass.Empty.newBuilder(); + + return builder.build(); + } + + public Empty deserializeEmpty(ContextOuterClass.Empty serializedEmpty) { + return new Empty(); + } + public Uuid serializeUuid(String uuid) { return Uuid.newBuilder().setUuid(uuid).build(); } diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/Empty.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/Empty.java new file mode 100644 index 0000000000000000000000000000000000000000..d19dd9776e9688999007761e969e5c1b53d37176 --- /dev/null +++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/Empty.java @@ -0,0 +1,24 @@ +/* +* 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. +*/ + +package eu.teraflow.policy.context.model; + +public class Empty { + + public Empty() { + // Empty constructor to represent the Empty rpc message of context service + } +} diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGateway.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGateway.java new file mode 100644 index 0000000000000000000000000000000000000000..4b9849a7649894cb4109fb458dac611e834bd916 --- /dev/null +++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGateway.java @@ -0,0 +1,48 @@ +/* +* 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. +*/ + +package eu.teraflow.policy.monitoring; + +import eu.teraflow.policy.context.model.Empty; +import eu.teraflow.policy.monitoring.model.AlarmDescriptor; +import eu.teraflow.policy.monitoring.model.AlarmResponse; +import eu.teraflow.policy.monitoring.model.Kpi; +import eu.teraflow.policy.monitoring.model.KpiDescriptor; +import eu.teraflow.policy.monitoring.model.SubsDescriptor; +import io.smallrye.mutiny.Multi; +import io.smallrye.mutiny.Uni; +import java.util.List; + +public interface MonitoringGateway { + + Uni<String> createKpi(KpiDescriptor kpiDescriptor); + + Uni<KpiDescriptor> getKpiDescriptor(String kpiId); + + Multi<List<Kpi>> subscribeKpi(SubsDescriptor subsDescriptor); + + Uni<SubsDescriptor> getSubsDescriptor(String subscriptionId); + + Uni<Empty> editKpiSubscription(SubsDescriptor subsDescriptor); + + Uni<String> createKpiAlarm(AlarmDescriptor alarmDescriptor); + + Uni<Empty> editKpiAlarm(AlarmDescriptor alarmDescriptor); + + Uni<AlarmDescriptor> getAlarmDescriptor(String alarmId); + + Multi<AlarmResponse> getAlarmResponseStream(String alarmId); +} diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGatewayImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..e0b4e088a9e23387f56d956bed5f6e104a68ea56 --- /dev/null +++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGatewayImpl.java @@ -0,0 +1,136 @@ +/* +* 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. +*/ + +package eu.teraflow.policy.monitoring; + +import eu.teraflow.policy.Serializer; +import eu.teraflow.policy.context.model.Empty; +import eu.teraflow.policy.monitoring.model.AlarmDescriptor; +import eu.teraflow.policy.monitoring.model.AlarmResponse; +import eu.teraflow.policy.monitoring.model.Kpi; +import eu.teraflow.policy.monitoring.model.KpiDescriptor; +import eu.teraflow.policy.monitoring.model.SubsDescriptor; +import io.quarkus.grpc.GrpcClient; +import io.smallrye.mutiny.Multi; +import io.smallrye.mutiny.Uni; +import java.util.List; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import monitoring.MutinyMonitoringServiceGrpc.MutinyMonitoringServiceStub; + +@ApplicationScoped +public class MonitoringGatewayImpl implements MonitoringGateway { + + @GrpcClient("monitoring") + MutinyMonitoringServiceStub streamingDelegateMonitoring; + + private final Serializer serializer; + + @Inject + public MonitoringGatewayImpl(Serializer serializer) { + this.serializer = serializer; + } + + @Override + public Uni<String> createKpi(KpiDescriptor kpiDescriptor) { + final var serializedKpiDescriptor = serializer.serialize(kpiDescriptor); + + return streamingDelegateMonitoring + .createKpi(serializedKpiDescriptor) + .onItem() + .transform(serializer::deserialize); + } + + @Override + public Uni<KpiDescriptor> getKpiDescriptor(String kpiId) { + final var serializedKpiId = serializer.serializeKpiId(kpiId); + + return streamingDelegateMonitoring + .getKpiDescriptor(serializedKpiId) + .onItem() + .transform(serializer::deserialize); + } + + @Override + public Multi<List<Kpi>> subscribeKpi(SubsDescriptor subsDescriptor) { + final var serializedSubsDescriptor = serializer.serialize(subsDescriptor); + + return streamingDelegateMonitoring + .subscribeKpi(serializedSubsDescriptor) + .onItem() + .transform(kpiList -> serializer.deserialize(kpiList.getKpiListList())); + } + + @Override + public Uni<SubsDescriptor> getSubsDescriptor(String subscriptionId) { + final var serializedSubscriptionId = serializer.serializeSubscriptionIdId(subscriptionId); + + return streamingDelegateMonitoring + .getSubsDescriptor(serializedSubscriptionId) + .onItem() + .transform(serializer::deserialize); + } + + @Override + public Uni<Empty> editKpiSubscription(SubsDescriptor subsDescriptor) { + final var serializedSubsDescriptor = serializer.serialize(subsDescriptor); + + return streamingDelegateMonitoring + .editKpiSubscription(serializedSubsDescriptor) + .onItem() + .transform(serializer::deserializeEmpty); + } + + @Override + public Uni<String> createKpiAlarm(AlarmDescriptor alarmDescriptor) { + final var serializedAlarmDescriptor = serializer.serialize(alarmDescriptor); + + return streamingDelegateMonitoring + .createKpiAlarm(serializedAlarmDescriptor) + .onItem() + .transform(serializer::deserialize); + } + + @Override + public Uni<Empty> editKpiAlarm(AlarmDescriptor alarmDescriptor) { + final var serializedAlarmDescriptor = serializer.serialize(alarmDescriptor); + + return streamingDelegateMonitoring + .editKpiAlarm(serializedAlarmDescriptor) + .onItem() + .transform(serializer::deserializeEmpty); + } + + @Override + public Uni<AlarmDescriptor> getAlarmDescriptor(String alarmId) { + final var serializedAlarmId = serializer.serializeAlarmId(alarmId); + + return streamingDelegateMonitoring + .getAlarmDescriptor(serializedAlarmId) + .onItem() + .transform(serializer::deserialize); + } + + @Override + public Multi<AlarmResponse> getAlarmResponseStream(String alarmId) { + final var serializedAlarmId = serializer.serializeAlarmId(alarmId); + + return streamingDelegateMonitoring + .getAlarmResponseStream(serializedAlarmId) + .onItem() + .transform(serializer::deserialize); + } +} diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringService.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringService.java new file mode 100644 index 0000000000000000000000000000000000000000..276a9d3632655cf684ae4dff0469d477ff15a88e --- /dev/null +++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringService.java @@ -0,0 +1,48 @@ +/* +* 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. +*/ + +package eu.teraflow.policy.monitoring; + +import eu.teraflow.policy.context.model.Empty; +import eu.teraflow.policy.monitoring.model.AlarmDescriptor; +import eu.teraflow.policy.monitoring.model.AlarmResponse; +import eu.teraflow.policy.monitoring.model.Kpi; +import eu.teraflow.policy.monitoring.model.KpiDescriptor; +import eu.teraflow.policy.monitoring.model.SubsDescriptor; +import io.smallrye.mutiny.Multi; +import io.smallrye.mutiny.Uni; +import java.util.List; + +public interface MonitoringService { + + Uni<String> createKpi(KpiDescriptor kpiDescriptor); + + Uni<KpiDescriptor> getKpiDescriptor(String kpiId); + + Multi<List<Kpi>> subscribeKpi(SubsDescriptor subsDescriptor); + + Uni<SubsDescriptor> getSubsDescriptor(String subscriptionId); + + Uni<Empty> editKpiSubscription(SubsDescriptor subsDescriptor); + + Uni<String> createKpiAlarm(AlarmDescriptor alarmDescriptor); + + Uni<Empty> editKpiAlarm(AlarmDescriptor alarmDescriptor); + + Uni<AlarmDescriptor> getAlarmDescriptor(String alarmId); + + Multi<AlarmResponse> getAlarmResponseStream(String alarmId); +} diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..e1e79af757b9866360040b785fd41dd1f0c70cd4 --- /dev/null +++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringServiceImpl.java @@ -0,0 +1,85 @@ +/* +* 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. +*/ + +package eu.teraflow.policy.monitoring; + +import eu.teraflow.policy.context.model.Empty; +import eu.teraflow.policy.monitoring.model.AlarmDescriptor; +import eu.teraflow.policy.monitoring.model.AlarmResponse; +import eu.teraflow.policy.monitoring.model.Kpi; +import eu.teraflow.policy.monitoring.model.KpiDescriptor; +import eu.teraflow.policy.monitoring.model.SubsDescriptor; +import io.smallrye.mutiny.Multi; +import io.smallrye.mutiny.Uni; +import java.util.List; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +@ApplicationScoped +public class MonitoringServiceImpl implements MonitoringService { + + private final MonitoringGateway monitoringGateway; + + @Inject + public MonitoringServiceImpl(MonitoringGateway monitoringGateway) { + this.monitoringGateway = monitoringGateway; + } + + @Override + public Uni<String> createKpi(KpiDescriptor kpiDescriptor) { + return monitoringGateway.createKpi(kpiDescriptor); + } + + @Override + public Uni<KpiDescriptor> getKpiDescriptor(String kpiId) { + return monitoringGateway.getKpiDescriptor(kpiId); + } + + @Override + public Multi<List<Kpi>> subscribeKpi(SubsDescriptor subsDescriptor) { + return monitoringGateway.subscribeKpi(subsDescriptor); + } + + @Override + public Uni<SubsDescriptor> getSubsDescriptor(String subscriptionId) { + return monitoringGateway.getSubsDescriptor(subscriptionId); + } + + @Override + public Uni<Empty> editKpiSubscription(SubsDescriptor subsDescriptor) { + return monitoringGateway.editKpiSubscription(subsDescriptor); + } + + @Override + public Uni<String> createKpiAlarm(AlarmDescriptor alarmDescriptor) { + return monitoringGateway.createKpiAlarm(alarmDescriptor); + } + + @Override + public Uni<Empty> editKpiAlarm(AlarmDescriptor alarmDescriptor) { + return monitoringGateway.editKpiAlarm(alarmDescriptor); + } + + @Override + public Uni<AlarmDescriptor> getAlarmDescriptor(String alarmId) { + return monitoringGateway.getAlarmDescriptor(alarmId); + } + + @Override + public Multi<AlarmResponse> getAlarmResponseStream(String alarmId) { + return monitoringGateway.getAlarmResponseStream(alarmId); + } +} 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 e8c582013366c993992ff3fd504bb9b2c7578c17..40e8ce80bacc02cca70a730f0f5a618e761d597d 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java @@ -57,6 +57,7 @@ import eu.teraflow.policy.context.model.Device; import eu.teraflow.policy.context.model.DeviceConfig; import eu.teraflow.policy.context.model.DeviceDriverEnum; import eu.teraflow.policy.context.model.DeviceOperationalStatus; +import eu.teraflow.policy.context.model.Empty; import eu.teraflow.policy.context.model.EndPoint; import eu.teraflow.policy.context.model.EndPointId; import eu.teraflow.policy.context.model.Event; @@ -2317,6 +2318,35 @@ class SerializerTest { assertThat(numericalOperator).isEqualTo(expectedNumericalOperator); } + @Test + void shouldSerializeSubscriptionId() { + final var subscriptionId = "subscriptionId"; + + final var subscriptionIdUuid = serializer.serializeUuid(subscriptionId); + + final var expectedSubscriptionId = + Monitoring.SubscriptionID.newBuilder().setSubsId(subscriptionIdUuid).build(); + + final var serializedSubscriptionId = serializer.serializeSubscriptionIdId(subscriptionId); + + assertThat(serializedSubscriptionId) + .usingRecursiveComparison() + .isEqualTo(expectedSubscriptionId); + } + + @Test + void shouldDeserializeSubscriptionId() { + final var expectedSubscriptionId = "expectedSubscriptionId"; + + final var serializedSubscriptionIdUuid = serializer.serializeUuid(expectedSubscriptionId); + final var serializedSubscriptionId = + Monitoring.SubscriptionID.newBuilder().setSubsId(serializedSubscriptionIdUuid).build(); + + final var subscriptionId = serializer.deserialize(serializedSubscriptionId); + + assertThat(subscriptionId).isEqualTo(expectedSubscriptionId); + } + @ParameterizedTest @MethodSource("provideNumericalOperator") void shouldSerializePolicyRuleConditionGivenMultipleNumericalOperators( @@ -2367,7 +2397,7 @@ class SerializerTest { @ParameterizedTest @MethodSource("provideKpiValues") - void shouldSerializeKpiValues(KpiValue kpiValue, Monitoring.KpiValue expectedKpiValue) { + void shouldSerializeKpiValues(KpiValue<?> kpiValue, Monitoring.KpiValue expectedKpiValue) { final var serializedKpiValue = serializer.serialize(kpiValue); assertThat(serializedKpiValue).isEqualTo(expectedKpiValue); @@ -2376,7 +2406,7 @@ class SerializerTest { @ParameterizedTest @MethodSource("provideKpiValues") void shouldDeserializeKpiValues( - KpiValue expectedKpiValue, Monitoring.KpiValue serializedKpiValue) { + KpiValue<?> expectedKpiValue, Monitoring.KpiValue serializedKpiValue) { final var kpiValue = serializer.deserialize(serializedKpiValue); assertThat(kpiValue).usingRecursiveComparison().isEqualTo(expectedKpiValue); @@ -2556,6 +2586,32 @@ class SerializerTest { .isEqualTo(expectedKpiValueRange.getKpiMaxValue()); } + @Test + void shouldSerializeAlarmId() { + final var alarmId = "alarmId"; + + final var alarmIdUuid = serializer.serializeUuid(alarmId); + + final var expectedAlarmId = Monitoring.AlarmID.newBuilder().setAlarmId(alarmIdUuid).build(); + + final var serializedAlarmId = serializer.serializeAlarmId(alarmId); + + assertThat(serializedAlarmId).usingRecursiveComparison().isEqualTo(expectedAlarmId); + } + + @Test + void shouldDeserializeAlarmId() { + final var expectedAlarmId = "expectedAlarmId"; + + final var serializedAlarmIdUuid = serializer.serializeUuid(expectedAlarmId); + final var serializedAlarmId = + Monitoring.KpiId.newBuilder().setKpiId(serializedAlarmIdUuid).build(); + + final var alarmId = serializer.deserialize(serializedAlarmId); + + assertThat(alarmId).isEqualTo(expectedAlarmId); + } + @Test void shouldSerializeAlarmDescriptor() { final var alarmDescription = "alarmDescription"; @@ -3091,6 +3147,84 @@ class SerializerTest { assertThat(kpi).usingRecursiveComparison().isEqualTo(expectedKpi); } + @Test + void shouldSerializeKpisList() { + final var expectedKpiIdA = "expectedKpiIdA"; + final var expectedTimestampA = "expectedTimestampA"; + final var expectedKpiValueA = new FloatKpiValue(643.45f); + final var serializedKpiIdA = serializer.serializeKpiId(expectedKpiIdA); + final var serializedKpiValueA = serializer.serialize(expectedKpiValueA); + final var kpiA = new Kpi(expectedKpiIdA, expectedTimestampA, expectedKpiValueA); + + final var expectedKpiIdB = "expectedKpiIdB"; + final var expectedTimestampB = "expectedTimestampB"; + final var expectedKpiValueB = new IntegerKpiValue(32); + final var serializedKpiIdB = serializer.serializeKpiId(expectedKpiIdB); + final var serializedKpiValueB = serializer.serialize(expectedKpiValueB); + final var kpiB = new Kpi(expectedKpiIdB, expectedTimestampB, expectedKpiValueB); + + final var kpis = List.of(kpiA, kpiB); + + final var expectedKpiA = + Monitoring.Kpi.newBuilder() + .setKpiId(serializedKpiIdA) + .setTimestamp(expectedTimestampA) + .setKpiValue(serializedKpiValueA) + .build(); + + final var expectedKpiB = + Monitoring.Kpi.newBuilder() + .setKpiId(serializedKpiIdB) + .setTimestamp(expectedTimestampB) + .setKpiValue(serializedKpiValueB) + .build(); + + final var expectedKpis = List.of(expectedKpiA, expectedKpiB); + + final var serializedKpis = serializer.serialize(kpis); + + assertThat(serializedKpis).usingRecursiveComparison().isEqualTo(expectedKpis); + } + + @Test + void shouldDeserializeKpisList() { + final var expectedKpiIdA = "expectedKpiIdA"; + final var expectedTimestampA = "expectedTimestampA"; + final var expectedKpiValueA = new FloatKpiValue(643.45f); + final var serializedKpiIdA = serializer.serializeKpiId(expectedKpiIdA); + final var serializedKpiValueA = serializer.serialize(expectedKpiValueA); + final var expectedKpiA = new Kpi(expectedKpiIdA, expectedTimestampA, expectedKpiValueA); + + final var expectedKpiIdB = "expectedKpiIdB"; + final var expectedTimestampB = "expectedTimestampB"; + final var expectedKpiValueB = new IntegerKpiValue(32); + final var serializedKpiIdB = serializer.serializeKpiId(expectedKpiIdB); + final var serializedKpiValueB = serializer.serialize(expectedKpiValueB); + final var expectedKpiB = new Kpi(expectedKpiIdB, expectedTimestampB, expectedKpiValueB); + + final var expectedKpis = List.of(expectedKpiA, expectedKpiB); + + final var serializedKpiA = + Monitoring.Kpi.newBuilder() + .setKpiId(serializedKpiIdA) + .setTimestamp(expectedTimestampA) + .setKpiValue(serializedKpiValueA) + .build(); + + final var serializedKpiB = + Monitoring.Kpi.newBuilder() + .setKpiId(serializedKpiIdB) + .setTimestamp(expectedTimestampB) + .setKpiValue(serializedKpiValueB) + .build(); + + final var serializedKpis = List.of(serializedKpiA, serializedKpiB); + + final var kpis = serializer.deserialize(serializedKpis); + + assertThat(kpis).usingRecursiveComparison().isEqualTo(expectedKpis); + } + @Test void shouldSerializeKpiDescriptor() { final var expectedKpiDescription = "expectedKpiDescription"; @@ -3581,6 +3715,27 @@ class SerializerTest { assertThat(device).usingRecursiveComparison().isEqualTo(expectedDevice); } + @Test + void shouldSerializeEmpty() { + final var empty = new Empty(); + final var expectedEmpty = ContextOuterClass.Empty.newBuilder().build(); + + final var serializeEmpty = serializer.serializeEmpty(empty); + + assertThat(serializeEmpty).isEqualTo(expectedEmpty); + } + + @Test + void shouldDeserializeEmpty() { + final var expectedEmpty = new Empty(); + + final var serializedEmpty = serializer.serializeEmpty(expectedEmpty); + + final var empty = serializer.deserializeEmpty(serializedEmpty); + + assertThat(empty).usingRecursiveComparison().isEqualTo(expectedEmpty); + } + @Test void shouldSerializeUuid() { final var expectedUuid = "uuid"; diff --git a/src/policy/target/kubernetes/kubernetes.yml b/src/policy/target/kubernetes/kubernetes.yml index 06068f0f5983b4ef385ee60b8a6cb5d812cab253..273778787a08fae57ed9282d075950041fc2f010 100644 --- a/src/policy/target/kubernetes/kubernetes.yml +++ b/src/policy/target/kubernetes/kubernetes.yml @@ -3,8 +3,8 @@ apiVersion: v1 kind: Service metadata: annotations: - app.quarkus.io/commit-id: 1d77cb00ae8f577885de32f01f4740f865853863 - app.quarkus.io/build-timestamp: 2022-07-26 - 10:46:55 +0000 + app.quarkus.io/commit-id: 57e16fed85037f2415bac3b1a55997ac4967fd99 + app.quarkus.io/build-timestamp: 2022-07-27 - 11:40:31 +0000 labels: app.kubernetes.io/name: policyservice app: policyservice @@ -25,8 +25,8 @@ apiVersion: apps/v1 kind: Deployment metadata: annotations: - app.quarkus.io/commit-id: 1d77cb00ae8f577885de32f01f4740f865853863 - app.quarkus.io/build-timestamp: 2022-07-26 - 10:46:55 +0000 + app.quarkus.io/commit-id: 57e16fed85037f2415bac3b1a55997ac4967fd99 + app.quarkus.io/build-timestamp: 2022-07-27 - 11:40:31 +0000 labels: app: policyservice app.kubernetes.io/name: policyservice @@ -39,8 +39,8 @@ spec: template: metadata: annotations: - app.quarkus.io/commit-id: 1d77cb00ae8f577885de32f01f4740f865853863 - app.quarkus.io/build-timestamp: 2022-07-26 - 10:46:55 +0000 + app.quarkus.io/commit-id: 57e16fed85037f2415bac3b1a55997ac4967fd99 + app.quarkus.io/build-timestamp: 2022-07-27 - 11:40:31 +0000 labels: app: policyservice app.kubernetes.io/name: policyservice @@ -51,12 +51,12 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - - name: SERVICE_SERVICE_HOST - value: serviceservice - name: MONITORING_SERVICE_HOST value: monitoringservice - name: CONTEXT_SERVICE_HOST value: contextservice + - name: SERVICE_SERVICE_HOST + value: serviceservice image: registry.gitlab.com/teraflow-h2020/controller/policy:0.1.0 imagePullPolicy: Always livenessProbe: