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/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: