Loading src/dbscanserving/proto/__init__.py→manifests/cachingservice.yaml +43 −0 Original line number Diff line number Diff line Loading @@ -12,3 +12,46 @@ # See the License for the specific language governing permissions and # limitations under the License. --- apiVersion: apps/v1 kind: Deployment metadata: name: cachingservice spec: selector: matchLabels: app: cachingservice template: metadata: labels: app: cachingservice spec: containers: - name: redis image: redis:7.0-alpine env: - name: REDIS_PASSWORD valueFrom: secretKeyRef: name: redis-secrets key: REDIS_PASSWORD ports: - containerPort: 6379 name: client command: ["redis-server"] args: - --requirepass - $(REDIS_PASSWORD) --- apiVersion: v1 kind: Service metadata: name: cachingservice spec: type: ClusterIP selector: app: cachingservice ports: - name: redis port: 6379 targetPort: 6379 manifests/dbscanservingservice.yaml +35 −7 Original line number Diff line number Diff line Loading @@ -31,33 +31,61 @@ spec: image: labs.etsi.org:5050/tfs/controller/dbscanserving:latest imagePullPolicy: Always ports: - containerPort: 10006 - containerPort: 10008 - containerPort: 9192 env: - name: LOG_LEVEL value: "DEBUG" readinessProbe: exec: command: ["/bin/grpc_health_probe", "-addr=:10006"] command: ["/bin/grpc_health_probe", "-addr=:10008"] livenessProbe: exec: command: ["/bin/grpc_health_probe", "-addr=:10006"] command: ["/bin/grpc_health_probe", "-addr=:10008"] resources: requests: cpu: 250m memory: 512Mi memory: 128Mi limits: cpu: 700m cpu: 1000m memory: 1024Mi --- apiVersion: v1 kind: Service metadata: name: dbscanservingservice labels: app: dbscanservingservice spec: type: ClusterIP selector: app: dbscanservingservice ports: - name: grpc port: 10006 targetPort: 10006 port: 10008 targetPort: 10008 - name: metrics port: 9192 targetPort: 9192 --- apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: dbscanservingservice-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: dbscanservingservice minReplicas: 1 maxReplicas: 20 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 80 #behavior: # scaleDown: # stabilizationWindowSeconds: 30 manifests/servicemonitors.yaml +29 −0 Original line number Diff line number Diff line Loading @@ -359,3 +359,32 @@ spec: any: false matchNames: - tfs # namespace where the app is running --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: namespace: monitoring # namespace where prometheus is running name: tfs-dbscanservingservice-metric labels: app: dbscanservingservice #release: prometheus #release: prom # name of the release # ( VERY IMPORTANT: You need to know the correct release name by viewing # the servicemonitor of Prometheus itself: Without the correct name, # Prometheus cannot identify the metrics of the Flask app as the target.) spec: selector: matchLabels: # Target app service #namespace: tfs app: dbscanservingservice # same as above #release: prometheus # same as above endpoints: - port: metrics # named port in target app scheme: http path: /metrics # path to scrape interval: 5s # scrape interval namespaceSelector: any: false matchNames: - tfs # namespace where the app is running src/dbscanserving/.gitlab-ci.yml +4 −4 Original line number Diff line number Diff line # Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) # 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. Loading @@ -21,7 +21,7 @@ build dbscanserving: before_script: - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY script: - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile ./src/ - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile . - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" after_script: Loading Loading @@ -51,11 +51,11 @@ unit test dbscanserving: - if docker container ls | grep $IMAGE_NAME; then docker rm -f $IMAGE_NAME; else echo "$IMAGE_NAME image is not in the system"; fi script: - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" - docker run --name $IMAGE_NAME -d -p 10006:10006 -v "$PWD/src/$IMAGE_NAME/tests:/opt/results" --network=teraflowbridge --rm $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG - docker run --name $IMAGE_NAME -d -p 10008:10008 -v "$PWD/src/$IMAGE_NAME/tests:/home/${IMAGE_NAME}/results" --network=teraflowbridge --rm $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG - sleep 5 - docker ps -a - docker logs $IMAGE_NAME - docker exec -i $IMAGE_NAME bash -c "coverage run -m pytest --log-level=INFO --verbose $IMAGE_NAME/tests/test_unitary.py --junitxml=/opt/results/${IMAGE_NAME}_report.xml" - docker exec -i $IMAGE_NAME bash -c "coverage run -m pytest --log-level=INFO --verbose $IMAGE_NAME/tests/test_unitary.py --junitxml=/home/${IMAGE_NAME}/results/${IMAGE_NAME}_report.xml" - docker exec -i $IMAGE_NAME bash -c "coverage report --include='${IMAGE_NAME}/*' --show-missing" coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/' after_script: Loading src/dbscanserving/Config.py +2 −4 Original line number Diff line number Diff line # Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) # 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. Loading @@ -18,9 +18,7 @@ import logging LOG_LEVEL = logging.DEBUG # gRPC settings GRPC_SERVICE_PORT = 10006 GRPC_MAX_WORKERS = 10 GRPC_GRACE_PERIOD = 60 GRPC_SERVICE_PORT = 10008 # Prometheus settings METRICS_PORT = 9192 Loading
src/dbscanserving/proto/__init__.py→manifests/cachingservice.yaml +43 −0 Original line number Diff line number Diff line Loading @@ -12,3 +12,46 @@ # See the License for the specific language governing permissions and # limitations under the License. --- apiVersion: apps/v1 kind: Deployment metadata: name: cachingservice spec: selector: matchLabels: app: cachingservice template: metadata: labels: app: cachingservice spec: containers: - name: redis image: redis:7.0-alpine env: - name: REDIS_PASSWORD valueFrom: secretKeyRef: name: redis-secrets key: REDIS_PASSWORD ports: - containerPort: 6379 name: client command: ["redis-server"] args: - --requirepass - $(REDIS_PASSWORD) --- apiVersion: v1 kind: Service metadata: name: cachingservice spec: type: ClusterIP selector: app: cachingservice ports: - name: redis port: 6379 targetPort: 6379
manifests/dbscanservingservice.yaml +35 −7 Original line number Diff line number Diff line Loading @@ -31,33 +31,61 @@ spec: image: labs.etsi.org:5050/tfs/controller/dbscanserving:latest imagePullPolicy: Always ports: - containerPort: 10006 - containerPort: 10008 - containerPort: 9192 env: - name: LOG_LEVEL value: "DEBUG" readinessProbe: exec: command: ["/bin/grpc_health_probe", "-addr=:10006"] command: ["/bin/grpc_health_probe", "-addr=:10008"] livenessProbe: exec: command: ["/bin/grpc_health_probe", "-addr=:10006"] command: ["/bin/grpc_health_probe", "-addr=:10008"] resources: requests: cpu: 250m memory: 512Mi memory: 128Mi limits: cpu: 700m cpu: 1000m memory: 1024Mi --- apiVersion: v1 kind: Service metadata: name: dbscanservingservice labels: app: dbscanservingservice spec: type: ClusterIP selector: app: dbscanservingservice ports: - name: grpc port: 10006 targetPort: 10006 port: 10008 targetPort: 10008 - name: metrics port: 9192 targetPort: 9192 --- apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: dbscanservingservice-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: dbscanservingservice minReplicas: 1 maxReplicas: 20 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 80 #behavior: # scaleDown: # stabilizationWindowSeconds: 30
manifests/servicemonitors.yaml +29 −0 Original line number Diff line number Diff line Loading @@ -359,3 +359,32 @@ spec: any: false matchNames: - tfs # namespace where the app is running --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: namespace: monitoring # namespace where prometheus is running name: tfs-dbscanservingservice-metric labels: app: dbscanservingservice #release: prometheus #release: prom # name of the release # ( VERY IMPORTANT: You need to know the correct release name by viewing # the servicemonitor of Prometheus itself: Without the correct name, # Prometheus cannot identify the metrics of the Flask app as the target.) spec: selector: matchLabels: # Target app service #namespace: tfs app: dbscanservingservice # same as above #release: prometheus # same as above endpoints: - port: metrics # named port in target app scheme: http path: /metrics # path to scrape interval: 5s # scrape interval namespaceSelector: any: false matchNames: - tfs # namespace where the app is running
src/dbscanserving/.gitlab-ci.yml +4 −4 Original line number Diff line number Diff line # Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) # 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. Loading @@ -21,7 +21,7 @@ build dbscanserving: before_script: - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY script: - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile ./src/ - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile . - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" after_script: Loading Loading @@ -51,11 +51,11 @@ unit test dbscanserving: - if docker container ls | grep $IMAGE_NAME; then docker rm -f $IMAGE_NAME; else echo "$IMAGE_NAME image is not in the system"; fi script: - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" - docker run --name $IMAGE_NAME -d -p 10006:10006 -v "$PWD/src/$IMAGE_NAME/tests:/opt/results" --network=teraflowbridge --rm $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG - docker run --name $IMAGE_NAME -d -p 10008:10008 -v "$PWD/src/$IMAGE_NAME/tests:/home/${IMAGE_NAME}/results" --network=teraflowbridge --rm $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG - sleep 5 - docker ps -a - docker logs $IMAGE_NAME - docker exec -i $IMAGE_NAME bash -c "coverage run -m pytest --log-level=INFO --verbose $IMAGE_NAME/tests/test_unitary.py --junitxml=/opt/results/${IMAGE_NAME}_report.xml" - docker exec -i $IMAGE_NAME bash -c "coverage run -m pytest --log-level=INFO --verbose $IMAGE_NAME/tests/test_unitary.py --junitxml=/home/${IMAGE_NAME}/results/${IMAGE_NAME}_report.xml" - docker exec -i $IMAGE_NAME bash -c "coverage report --include='${IMAGE_NAME}/*' --show-missing" coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/' after_script: Loading
src/dbscanserving/Config.py +2 −4 Original line number Diff line number Diff line # Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) # 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. Loading @@ -18,9 +18,7 @@ import logging LOG_LEVEL = logging.DEBUG # gRPC settings GRPC_SERVICE_PORT = 10006 GRPC_MAX_WORKERS = 10 GRPC_GRACE_PERIOD = 60 GRPC_SERVICE_PORT = 10008 # Prometheus settings METRICS_PORT = 9192