From a10021fb982098e7732ea93a5ce50fb330258c43 Mon Sep 17 00:00:00 2001 From: pb Date: Wed, 28 May 2025 11:30:22 +0200 Subject: [PATCH] added documentation for the RAM consumption tests we jsut did --- docs/performance_test/README.md | 135 ++++++++++++++++++++ docs/performance_test/insert_exec.sh | 71 ++++++++++ docs/performance_test/performance_report.md | 0 3 files changed, 206 insertions(+) create mode 100644 docs/performance_test/README.md create mode 100755 docs/performance_test/insert_exec.sh create mode 100644 docs/performance_test/performance_report.md diff --git a/docs/performance_test/README.md b/docs/performance_test/README.md new file mode 100644 index 0000000..bad5653 --- /dev/null +++ b/docs/performance_test/README.md @@ -0,0 +1,135 @@ +# Goals + +This originated from a demand to know how much RAM is consummed by Open Cloud when running a large number of workflow at the same time on the same node. + +We differentiated between differents components : + +- The "oc-stack", which is the minimum set of services to be able to create and schedule a workflow execution : oc-auth, oc-datacenter, oc-scheduler, oc-front, oc-schedulerd, oc-workflow, oc-catalog, oc-peer, oc-workspace, loki, mongo, traefik and nats + +- oc-monitord, which is the daemon instanciated by the scheduling daemon (oc-schedulerd) that created the YAML for argo and creates the necessary kubernetes ressources. + +We monitor both parts to view how much RAM the oc-stack uses before / during / after the execution, the RAM consummed by the monitord containers and the total of the stack and monitors. + +# Setup + +In order to have optimal performance we used a Promox server with high ressources (>370 GiB RAM and 128 cores) to hosts two VMs composing our Kubernetes cluster, with one control plane node were the oc stack is running and a worker node with only k3s running. + +## VMs + +We instantiated a 2 node kubernetes (with k3s) cluster on the superg PVE (https://superg-pve.irtse-pf.ext:8006/) + +### VM Control + +This vm is running the oc stack and the monitord containers, it carries the biggest part of the load. It must have k3s and argo installed. We allocated **62 GiB of RAM** and **31 cores**. + +### VM Worker + +This VM is holding the workload for all the pods created, acting as a worker node for the k3s cluster. We deploy k3s as a nodes as explained in the K3S quick start guide : + +`curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -` + +The value to use for K3S_TOKEN is stored at `/var/lib/rancher/k3s/server/node-token` on the server node. + +Verify that the server has been added as a node to the cluster on the control plane with `kubectl get nodes` and look for the hostname of the worker VM on the list of nodes. + +### Delegate pods to the worker node + +In order for the pods to be executed on another node we need to modify how we construct he Argo YAML, to add a label in the metadata. We have added the needed attributes to the `Spec` struct in `oc-monitord` on the `test-ram` branch. + +```go +type Spec struct { + ServiceAccountName string `yaml:"serviceAccountName"` + Entrypoint string `yaml:"entrypoint"` + Arguments []Parameter `yaml:"arguments,omitempty"` + Volumes []VolumeClaimTemplate `yaml:"volumeClaimTemplates,omitempty"` + Templates []Template `yaml:"templates"` + Timeout int `yaml:"activeDeadlineSeconds,omitempty"` + NodeSelector struct{ + NodeRole string `yaml:"node-role"` + } `yaml:"nodeSelector"` +} +``` + +and added the tag in the `CreateDAG()` method : + +```go +b.Workflow.Spec.NodeSelector.NodeRole = "worker" +``` + +## Container monitoring + +Docker compose to instantiate the monitoring stack : +- Prometheus : storing data +- Cadvisor : monitoring of the containers + +```yml +version: '3.2' +services: + prometheus: + image: prom/prometheus:latest + container_name: prometheus + ports: + - 9090:9090 + command: + - --config.file=/etc/prometheus/prometheus.yml + volumes: + - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro + depends_on: + - cadvisor + cadvisor: + image: gcr.io/cadvisor/cadvisor:latest + container_name: cadvisor + ports: + - 9999:8080 + volumes: + - /:/rootfs:ro + - /var/run:/var/run:rw + - /sys:/sys:ro + - /var/lib/docker/:/var/lib/docker:ro + +``` + +Prometheus scrapping configuration : + +```yml +scrape_configs: +- job_name: cadvisor + scrape_interval: 5s + static_configs: + - targets: + - cadvisor:8080 +``` + +## Dashboards + +In order to monitor the ressource consumption during our tests we need to create dashboard in Grafana. + +We create 4 different queries using Prometheus as the data source. For each query we can use the `code` mode to create them from a PromQL query. + +## OC stack consumption + +``` +sum(container_memory_usage_bytes{name=~"oc-auth|oc-datacenter|oc-scheduler|oc-front|oc-schedulerd|oc-workflow|oc-catalog|oc-peer|oc-workspace|loki|mongo|traefik|nats"}) +``` + +## Monitord consumption + +``` +sum(container_memory_usage_bytes{image="oc-monitord"}) +``` + +## Total RAM consumption + +``` +sum( + container_memory_usage_bytes{name=~"oc-auth|oc-datacenter|oc-scheduler|oc-front|oc-schedulerd|oc-workflow|oc-catalog|oc-peer|oc-workspace|loki|mongo|traefik|nats"} + or + container_memory_usage_bytes{image="oc-monitord"} +) +``` + +## Number of monitord containers + +``` +count(container_memory_usage_bytes{image="oc-monitord"} > 0) +``` \ No newline at end of file diff --git a/docs/performance_test/insert_exec.sh b/docs/performance_test/insert_exec.sh new file mode 100755 index 0000000..2a07c14 --- /dev/null +++ b/docs/performance_test/insert_exec.sh @@ -0,0 +1,71 @@ +#!/bin/bash + +TOKEN="LCSg2svSFdIBPucRCCmz7UrDmZKmsvODXU5PM0yWdYc.-LPNAoycUm5Kwm1IcyyP-wJvc8Zy7er36ozpjTWICKc.eyJzZXNzaW9uIjp7ImFjY2Vzc190b2tlbiI6eyJERUxFVEVfX0FVVEhfR1JPVVBfVVNFUl9JRF9HUk9VUF9JRCI6Ii9hdXRoL2dyb3VwLzp1c2VyX2lkLzpncm91cF9pZCIsIkRFTEVURV9fQVVUSF9QRVJNSVNTSU9OX1BFUk1JU1NJT05fSURfUk9MRV9JRF9SRUxBVElPTiI6Ii9hdXRoL3Blcm1pc3Npb24vOnBlcm1pc3Npb25faWQvOnJvbGVfaWQvOnJlbGF0aW9uIiwiREVMRVRFX19BVVRIX1JPTEVfVVNFUl9JRF9ST0xFX0lEIjoiL2F1dGgvcm9sZS86dXNlcl9pZC86cm9sZV9pZCIsIkRFTEVURV9fQ0FUQUxPR19DT01QVVRFX0lEIjoiL2NhdGFsb2cvY29tcHV0ZS86aWQiLCJERUxFVEVfX0NBVEFMT0dfREFUQV9JRCI6Ii9jYXRhbG9nL2RhdGEvOmlkIiwiREVMRVRFX19DQVRBTE9HX1BST0NFU1NJTkdfSUQiOiIvY2F0YWxvZy9wcm9jZXNzaW5nLzppZCIsIkRFTEVURV9fQ0FUQUxPR19SRVNPVVJDRV9JRCI6Ii9jYXRhbG9nL3Jlc291cmNlLzppZCIsIkRFTEVURV9fQ0FUQUxPR19TVE9SQUdFX0lEIjoiL2NhdGFsb2cvc3RvcmFnZS86aWQiLCJERUxFVEVfX0NBVEFMT0dfV09SS0ZMT1dfSUQiOiIvY2F0YWxvZy93b3JrZmxvdy86aWQiLCJERUxFVEVfX1NDSEVEVUxFUl9JRCI6Ii9zY2hlZHVsZXIvOmlkIiwiREVMRVRFX19XT1JLRkxPV19JRCI6Ii93b3JrZmxvdy86aWQiLCJERUxFVEVfX1dPUktTUEFDRV9JRCI6Ii93b3Jrc3BhY2UvOmlkIiwiR0VUX19DQVRBTE9HX0NPTVBVVEVfIjoiL2NhdGFsb2cvY29tcHV0ZS8iLCJHRVRfX0NBVEFMT0dfQ09NUFVURV9JRCI6Ii9jYXRhbG9nL2NvbXB1dGUvOmlkIiwiR0VUX19DQVRBTE9HX0NPTVBVVEVfU0VBUkNIX1NFQVJDSCI6Ii9jYXRhbG9nL2NvbXB1dGUvc2VhcmNoLzpzZWFyY2giLCJHRVRfX0NBVEFMT0dfREFUQV8iOiIvY2F0YWxvZy9kYXRhLyIsIkdFVF9fQ0FUQUxPR19EQVRBX0lEIjoiL2NhdGFsb2cvZGF0YS86aWQiLCJHRVRfX0NBVEFMT0dfREFUQV9TRUFSQ0hfU0VBUkNIIjoiL2NhdGFsb2cvZGF0YS9zZWFyY2gvOnNlYXJjaCIsIkdFVF9fQ0FUQUxPR19FTlVNX0JPT0tJTkdfU1RBVFVTIjoiL2NhdGFsb2cvZW51bS9ib29raW5nL3N0YXR1cyIsIkdFVF9fQ0FUQUxPR19FTlVNX0lORlJBU1RSVUNUVVJFIjoiL2NhdGFsb2cvZW51bS9pbmZyYXN0cnVjdHVyZSIsIkdFVF9fQ0FUQUxPR19FTlVNX1BSSUNJTkdfUkVGVU5EX1RZUEUiOiIvY2F0YWxvZy9lbnVtL3ByaWNpbmcvcmVmdW5kL3R5cGUiLCJHRVRfX0NBVEFMT0dfRU5VTV9QUklDSU5HX1NUUkFURUdZX0JVWSI6Ii9jYXRhbG9nL2VudW0vcHJpY2luZy9zdHJhdGVneS9idXkiLCJHRVRfX0NBVEFMT0dfRU5VTV9QUklDSU5HX1NUUkFURUdZX0RBVEEiOiIvY2F0YWxvZy9lbnVtL3ByaWNpbmcvc3RyYXRlZ3kvZGF0YSIsIkdFVF9fQ0FUQUxPR19FTlVNX1BSSUNJTkdfU1RSQVRFR1lfUFJJVklMRUdFIjoiL2NhdGFsb2cvZW51bS9wcmljaW5nL3N0cmF0ZWd5L3ByaXZpbGVnZSIsIkdFVF9fQ0FUQUxPR19FTlVNX1BSSUNJTkdfU1RSQVRFR1lfUFJJVklMRUdFX1NUT1JBR0UiOiIvY2F0YWxvZy9lbnVtL3ByaWNpbmcvc3RyYXRlZ3kvcHJpdmlsZWdlL3N0b3JhZ2UiLCJHRVRfX0NBVEFMT0dfRU5VTV9QUklDSU5HX1NUUkFURUdZX1NUT1JBR0UiOiIvY2F0YWxvZy9lbnVtL3ByaWNpbmcvc3RyYXRlZ3kvc3RvcmFnZSIsIkdFVF9fQ0FUQUxPR19FTlVNX1BSSUNJTkdfU1RSQVRFR1lfVElNRSI6Ii9jYXRhbG9nL2VudW0vcHJpY2luZy9zdHJhdGVneS90aW1lIiwiR0VUX19DQVRBTE9HX0VOVU1fUkVTT1VSQ0VfVFlQRSI6Ii9jYXRhbG9nL2VudW0vcmVzb3VyY2UvdHlwZSIsIkdFVF9fQ0FUQUxPR19FTlVNX1NUQVRVUyI6Ii9jYXRhbG9nL2VudW0vc3RhdHVzIiwiR0VUX19DQVRBTE9HX0VOVU1fU1RPUkFHRV9TSVpFIjoiL2NhdGFsb2cvZW51bS9zdG9yYWdlL3NpemUiLCJHRVRfX0NBVEFMT0dfRU5VTV9TVE9SQUdFX1RZUEUiOiIvY2F0YWxvZy9lbnVtL3N0b3JhZ2UvdHlwZSIsIkdFVF9fQ0FUQUxPR19QUk9DRVNTSU5HXyI6Ii9jYXRhbG9nL3Byb2Nlc3NpbmcvIiwiR0VUX19DQVRBTE9HX1BST0NFU1NJTkdfSUQiOiIvY2F0YWxvZy9wcm9jZXNzaW5nLzppZCIsIkdFVF9fQ0FUQUxPR19QUk9DRVNTSU5HX1NFQVJDSF9TRUFSQ0giOiIvY2F0YWxvZy9wcm9jZXNzaW5nL3NlYXJjaC86c2VhcmNoIiwiR0VUX19DQVRBTE9HX1JFU09VUkNFXyI6Ii9jYXRhbG9nL3Jlc291cmNlLyIsIkdFVF9fQ0FUQUxPR19SRVNPVVJDRV9JRCI6Ii9jYXRhbG9nL3Jlc291cmNlLzppZCIsIkdFVF9fQ0FUQUxPR19SRVNPVVJDRV9TRUFSQ0hfU0VBUkNIIjoiL2NhdGFsb2cvcmVzb3VyY2Uvc2VhcmNoLzpzZWFyY2giLCJHRVRfX0NBVEFMT0dfU1RPUkFHRV8iOiIvY2F0YWxvZy9zdG9yYWdlLyIsIkdFVF9fQ0FUQUxPR19TVE9SQUdFX0lEIjoiL2NhdGFsb2cvc3RvcmFnZS86aWQiLCJHRVRfX0NBVEFMT0dfU1RPUkFHRV9TRUFSQ0hfU0VBUkNIIjoiL2NhdGFsb2cvc3RvcmFnZS9zZWFyY2gvOnNlYXJjaCIsIkdFVF9fQ0FUQUxPR19WRVJTSU9OXyI6Ii9jYXRhbG9nL3ZlcnNpb24vIiwiR0VUX19DQVRBTE9HX1ZFUlNJT05fU1RBVFVTIjoiL2NhdGFsb2cvdmVyc2lvbi9zdGF0dXMiLCJHRVRfX0NBVEFMT0dfV09SS0ZMT1dfIjoiL2NhdGFsb2cvd29ya2Zsb3cvIiwiR0VUX19DQVRBTE9HX1dPUktGTE9XX0lEIjoiL2NhdGFsb2cvd29ya2Zsb3cvOmlkIiwiR0VUX19DQVRBTE9HX1dPUktGTE9XX1NFQVJDSF9TRUFSQ0giOiIvY2F0YWxvZy93b3JrZmxvdy9zZWFyY2gvOnNlYXJjaCIsIkdFVF9fREFUQUNFTlRFUl8iOiIvZGF0YWNlbnRlci8iLCJHRVRfX0RBVEFDRU5URVJfQURNSVJBTFRZX0tVQkVDT05GSUdfRVhFQ1VUSU9OIjoiL2RhdGFjZW50ZXIvYWRtaXJhbHR5L2t1YmVjb25maWcvOmV4ZWN1dGlvbiIsIkdFVF9fREFUQUNFTlRFUl9BRE1JUkFMVFlfTk9ERV9FWEVDVVRJT05fUEVFUiI6Ii9kYXRhY2VudGVyL2FkbWlyYWx0eS9ub2RlLzpleGVjdXRpb24vOnBlZXIiLCJHRVRfX0RBVEFDRU5URVJfQURNSVJBTFRZX1NFQ1JFVF9FWEVDVVRJT05fUEVFUiI6Ii9kYXRhY2VudGVyL2FkbWlyYWx0eS9zZWNyZXQvOmV4ZWN1dGlvbi86cGVlciIsIkdFVF9fREFUQUNFTlRFUl9BRE1JUkFMVFlfVEFSR0VUUyI6Ii9kYXRhY2VudGVyL2FkbWlyYWx0eS90YXJnZXRzIiwiR0VUX19EQVRBQ0VOVEVSX0FETUlSQUxUWV9UQVJHRVRTX0VYRUNVVElPTiI6Ii9kYXRhY2VudGVyL2FkbWlyYWx0eS90YXJnZXRzLzpleGVjdXRpb24iLCJHRVRfX0RBVEFDRU5URVJfQk9PS0lOR18iOiIvZGF0YWNlbnRlci9ib29raW5nLyIsIkdFVF9fREFUQUNFTlRFUl9CT09LSU5HX0NIRUNLX0lEX1NUQVJUX0RBVEVfRU5EX0RBVEUiOiIvZGF0YWNlbnRlci9ib29raW5nL2NoZWNrLzppZC86c3RhcnRfZGF0ZS86ZW5kX2RhdGUiLCJHRVRfX0RBVEFDRU5URVJfQk9PS0lOR19JRCI6Ii9kYXRhY2VudGVyL2Jvb2tpbmcvOmlkIiwiR0VUX19EQVRBQ0VOVEVSX0JPT0tJTkdfU0VBUkNIX0VYRUNVVElPTl9JRCI6Ii9kYXRhY2VudGVyL2Jvb2tpbmcvc2VhcmNoL2V4ZWN1dGlvbi86aWQiLCJHRVRfX0RBVEFDRU5URVJfQk9PS0lOR19TRUFSQ0hfU1RBUlRfREFURV9FTkRfREFURSI6Ii9kYXRhY2VudGVyL2Jvb2tpbmcvc2VhcmNoLzpzdGFydF9kYXRlLzplbmRfZGF0ZSIsIkdFVF9fREFUQUNFTlRFUl9JRCI6Ii9kYXRhY2VudGVyLzppZCIsIkdFVF9fREFUQUNFTlRFUl9TRVNTSU9OX1RPS0VOX0lEX0RVUkFUSU9OIjoiL2RhdGFjZW50ZXIvc2Vzc2lvbi90b2tlbi86aWQvOmR1cmF0aW9uIiwiR0VUX19EQVRBQ0VOVEVSX1ZFUlNJT05fIjoiL2RhdGFjZW50ZXIvdmVyc2lvbi8iLCJHRVRfX0RBVEFDRU5URVJfVkVSU0lPTl9TVEFUVVMiOiIvZGF0YWNlbnRlci92ZXJzaW9uL3N0YXR1cyIsIkdFVF9fUEVFUl8iOiIvcGVlci8iLCJHRVRfX1BFRVJfSUQiOiIvcGVlci86aWQiLCJHRVRfX1BFRVJfU0VBUkNIX1NFQVJDSCI6Ii9wZWVyL3NlYXJjaC86c2VhcmNoIiwiR0VUX19QRUVSX1ZFUlNJT05fIjoiL3BlZXIvdmVyc2lvbi8iLCJHRVRfX1NDSEVEVUxFUl9FWEVDVVRJT05fIjoiL3NjaGVkdWxlci9leGVjdXRpb24vIiwiR0VUX19TQ0hFRFVMRVJfRVhFQ1VUSU9OX0lEIjoiL3NjaGVkdWxlci9leGVjdXRpb24vOmlkIiwiR0VUX19TQ0hFRFVMRVJfRVhFQ1VUSU9OX1NFQVJDSF9TRUFSQ0giOiIvc2NoZWR1bGVyL2V4ZWN1dGlvbi9zZWFyY2gvOnNlYXJjaCIsIkdFVF9fU0NIRURVTEVSX0VYRUNVVElPTl9TRUFSQ0hfU1RBUlRfREFURV9FTkRfREFURSI6Ii9zY2hlZHVsZXIvZXhlY3V0aW9uL3NlYXJjaC86c3RhcnRfZGF0ZS86ZW5kX2RhdGUiLCJHRVRfX1NDSEVEVUxFUl9JRF9PUkRFUiI6Ii9zY2hlZHVsZXIvOmlkL29yZGVyIiwiR0VUX19TQ0hFRFVMRVJfVkVSU0lPTl8iOiIvc2NoZWR1bGVyL3ZlcnNpb24vIiwiR0VUX19TQ0hFRFVMRVJfVkVSU0lPTl9TVEFUVVMiOiIvc2NoZWR1bGVyL3ZlcnNpb24vc3RhdHVzIiwiR0VUX19XT1JLRkxPV18iOiIvd29ya2Zsb3cvIiwiR0VUX19XT1JLRkxPV19DSEVDS19JRF9TVEFSVF9EQVRFX0VORF9EQVRFIjoiL3dvcmtmbG93L2NoZWNrLzppZC86c3RhcnRfZGF0ZS86ZW5kX2RhdGUiLCJHRVRfX1dPUktGTE9XX0lEIjoiL3dvcmtmbG93LzppZCIsIkdFVF9fV09SS0ZMT1dfU0VBUkNIX1NFQVJDSCI6Ii93b3JrZmxvdy9zZWFyY2gvOnNlYXJjaCIsIkdFVF9fV09SS0ZMT1dfVkVSU0lPTl8iOiIvd29ya2Zsb3cvdmVyc2lvbi8iLCJHRVRfX1dPUktGTE9XX1ZFUlNJT05fU1RBVFVTIjoiL3dvcmtmbG93L3ZlcnNpb24vc3RhdHVzIiwiR0VUX19XT1JLU1BBQ0VfIjoiL3dvcmtzcGFjZS8iLCJHRVRfX1dPUktTUEFDRV9JRCI6Ii93b3Jrc3BhY2UvOmlkIiwiR0VUX19XT1JLU1BBQ0VfU0VBUkNIX1NFQVJDSCI6Ii93b3Jrc3BhY2Uvc2VhcmNoLzpzZWFyY2giLCJHRVRfX1dPUktTUEFDRV9WRVJTSU9OXyI6Ii93b3Jrc3BhY2UvdmVyc2lvbi8iLCJHRVRfX1dPUktTUEFDRV9WRVJTSU9OX1NUQVRVUyI6Ii93b3Jrc3BhY2UvdmVyc2lvbi9zdGF0dXMiLCJQT1NUX19BVVRIX0dST1VQX0lEIjoiL2F1dGgvZ3JvdXAvOmlkIiwiUE9TVF9fQVVUSF9ST0xFX0lEIjoiL2F1dGgvcm9sZS86aWQiLCJQT1NUX19DQVRBTE9HX0NPTVBVVEVfIjoiL2NhdGFsb2cvY29tcHV0ZS8iLCJQT1NUX19DQVRBTE9HX0RBVEFfIjoiL2NhdGFsb2cvZGF0YS8iLCJQT1NUX19DQVRBTE9HX1BST0NFU1NJTkdfIjoiL2NhdGFsb2cvcHJvY2Vzc2luZy8iLCJQT1NUX19DQVRBTE9HX1NUT1JBR0VfIjoiL2NhdGFsb2cvc3RvcmFnZS8iLCJQT1NUX19DQVRBTE9HX1dPUktGTE9XXyI6Ii9jYXRhbG9nL3dvcmtmbG93LyIsIlBPU1RfX0RBVEFDRU5URVJfQURNSVJBTFRZX1NFQ1JFVF9FWEVDVVRJT05fUEVFUiI6Ii9kYXRhY2VudGVyL2FkbWlyYWx0eS9zZWNyZXQvOmV4ZWN1dGlvbi86cGVlciIsIlBPU1RfX0RBVEFDRU5URVJfQURNSVJBTFRZX1NPVVJDRV9FWEVDVVRJT04iOiIvZGF0YWNlbnRlci9hZG1pcmFsdHkvc291cmNlLzpleGVjdXRpb24iLCJQT1NUX19EQVRBQ0VOVEVSX0FETUlSQUxUWV9UQVJHRVRfRVhFQ1VUSU9OX1BFRVIiOiIvZGF0YWNlbnRlci9hZG1pcmFsdHkvdGFyZ2V0LzpleGVjdXRpb24vOnBlZXIiLCJQT1NUX19EQVRBQ0VOVEVSX0JPT0tJTkdfIjoiL2RhdGFjZW50ZXIvYm9va2luZy8iLCJQT1NUX19QRUVSX0lEX0JMQUNLTElTVCI6Ii9wZWVyLzppZC9ibGFja2xpc3QiLCJQT1NUX19QRUVSX0lEX1BBUlRORVIiOiIvcGVlci86aWQvcGFydG5lciIsIlBPU1RfX1BFRVJfSURfVU5ET19TVEFURSI6Ii9wZWVyLzppZC91bmRvX3N0YXRlIiwiUE9TVF9fUEVFUl9TVEFUVVNfIjoiL3BlZXIvc3RhdHVzLyIsIlBPU1RfX1NDSEVEVUxFUl9JRCI6Ii9zY2hlZHVsZXIvOmlkIiwiUE9TVF9fU0NIRURVTEVSX0xPS0lfIjoiL3NjaGVkdWxlci9sb2tpLyIsIlBPU1RfX1dPUktGTE9XXyI6Ii93b3JrZmxvdy8iLCJQT1NUX19XT1JLRkxPV19QVUJMSVNIX0lEIjoiL3dvcmtmbG93L3B1Ymxpc2gvOmlkIiwiUE9TVF9fV09SS1NQQUNFXyI6Ii93b3Jrc3BhY2UvIiwiUFVUX19DQVRBTE9HX0NPTVBVVEVfSUQiOiIvY2F0YWxvZy9jb21wdXRlLzppZCIsIlBVVF9fQ0FUQUxPR19EQVRBX0lEIjoiL2NhdGFsb2cvZGF0YS86aWQiLCJQVVRfX0NBVEFMT0dfUFJPQ0VTU0lOR19JRCI6Ii9jYXRhbG9nL3Byb2Nlc3NpbmcvOmlkIiwiUFVUX19DQVRBTE9HX1NUT1JBR0VfSUQiOiIvY2F0YWxvZy9zdG9yYWdlLzppZCIsIlBVVF9fQ0FUQUxPR19XT1JLRkxPV19JRCI6Ii9jYXRhbG9nL3dvcmtmbG93LzppZCIsIlBVVF9fREFUQUNFTlRFUl9CT09LSU5HX0lEIjoiL2RhdGFjZW50ZXIvYm9va2luZy86aWQiLCJQVVRfX1BFRVJfSUQiOiIvcGVlci86aWQiLCJQVVRfX1dPUktGTE9XX0lEIjoiL3dvcmtmbG93LzppZCIsIlBVVF9fV09SS1NQQUNFX0lEIjoiL3dvcmtzcGFjZS86aWQiLCJleHAiOjE3NDgyNjg4MDR9LCJpZF90b2tlbiI6eyJjbGllbnRfaWQiOiIyMjQ4NzMzOS1lMGM1LTRkODctOWNmMS0yOWRkYWFlZDExN2UiLCJncm91cHMiOltdLCJwZWVyX2lkIjoiYzBjZWNlOTctNzczMC00YzJhLThjMjAtYTMwOTQ0NTY0MTA2Iiwic2lnbmF0dXJlIjoiRnhHaktaZE9uczJVVzM2VXdDS2l5MXhTR3hMTlpqUDZ0aWQyd0NnNmhHdHNWYzFnWi9vOHRNcFRaN3VSLzlLbTFjK2NYTFdrYjZWaldydjZTaExBWEN1eC9vZjRvSm9SK0lBUS83Qk94Q21tMkdYTVIvU1J2Sm1KdmVoZ1FwSmJGcTBsWVBDQmRGUGMvNkZCSENwY0pqREZIaW5lcDZjSGFOTWtKS3Fycmh0UWs4MzdSK3ZyUlNPTHVuN3lTSE5uVUhtbHFOZldHdGd4T3lUV2ZQOVVnQU9sLzAxQmFzVll4TDl1TS9UbDNMdEdRYy9xL2kxWCtCMzFKWkRFOUJETzlMRXRSRlYzTUQyYWw2YTQ0MzZMTkpFU0hVUklZdUp6czRDZ3dSQ1NPTWtkMjBsdm84ZTNuOTJKYTgvWDhQY2JJendrZUFzSHlTdU42N21LRjdTeHYrek4wZm9vL01RbEo0KzBBb1VYSm5Id1hZRDVUSUxLc0NNWWFRU0p1bEJVbTM2MmhONkYxNzVkVnB4dmg2Y1BFN1FNdGRSZlJvR2lhdXMweDFKSzcrV2dXRUsxVDhudCtSUHFWQ3hsTkVSS0VVVGtia3R6RmlPeXIzUXBJMlZSaG0xdUNNVEtQRkhlQTlXMUw2ekoxWnFKNzZOZHJIRXQ1azhUMnZseEhJbWZVbVhRelRWZXl6K3E0d2tNZ2V1TGczOWg4VWxPbWpKZ3dDWlJMZ3lDK2QyS2lKUnpTaDU3b2owaDFuWXBTT1BXUER4MXhxVkNnZWRWWWc1T29YbE5ncHRNb3VGYmJuYnIzcTBwK05WTmFqcXdhbGZ2M3gxOXcwVWxBb2tnald6OU9tTUZCdk9qSGU4UE95NmJYTksxKy8rS3AxUTdWUDlGZUZmSnplWE40OXc9IiwidXNlcm5hbWUiOiJhZG1pbiJ9fX0=" + +NB_EXEC=$1 +TIME=$2 + +if [ -z "$NB_EXEC" ]; then + NB_EXEC=1 +fi + +# if (( NB_EXEC % 10 != 0 )); then +# echo "Met un chiffre rond stp" +# exit 0 +# fi + +if [ -z "$TIME" ]; then + TIME=1 +fi + + +EXECS=$(((NB_EXEC+9) / 10)) +echo EXECS=$EXECS + +DAY=$(date +%d -u) +MONTH=$(date +%m -u) +HOUR=$(date +%H -u) +MINUTE=$(date -d "$TIME min" +"%M" -u) +SECOND=$(date +%s -u) + +start_loop=$(date +%s) + +for ((i = 1; i <= $EXECS; i++)); do + ( + start_req=$(date +%s) + + echo "Exec $i" + CRON="0-10 $MINUTE $HOUR $DAY $MONTH *" + echo "$CRON" + + START="2025-$MONTH-$DAY"T"$HOUR:$MINUTE:00.012Z" + + END_MONTH=$(printf "%02d" $((MONTH + 1))) + END="2025-$END_MONTH-$DAY"T"$HOUR:$MINUTE:00.012Z" + + # PAYLOAD=$(printf '{"id":null,"name":null,"cron":"","mode":1,"start":"%s","end":"%s"}' "$START" "$END") + PAYLOAD=$(printf '{"id":null,"name":null,"cron":"%s","mode":1,"start":"%s","end":"%s"}' "$CRON" "$START" "$END") + + # echo $PAYLOAD + + curl -X 'POST' 'http://localhost:8000/scheduler/62c55a70-e295-45e6-9925-a98137d59abc' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d "$PAYLOAD" \ + -H "Authorization: Bearer $TOKEN" -w '\n' + + end=$(date +%s) + duration=$((end - start_req)) + + echo "Début $start_req" + echo "Fin $end" + echo "Durée d'exécution $i : $duration secondes" + )& + +done + +wait + +end_loop=$(date +%s) +total_time=$((end_loop - start_loop)) +echo "Durée d'exécution total : $total_time secondes" diff --git a/docs/performance_test/performance_report.md b/docs/performance_test/performance_report.md new file mode 100644 index 0000000..e69de29