This commit is contained in:
lamya1baidouri 2025-02-03 20:25:14 +01:00
parent b8055c3c2b
commit da5cb7e45d

View file

@ -14,7 +14,7 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Setup directories for metrics
- name: Setup directories and install dependencies
run: |
set -eo pipefail
@ -25,11 +25,14 @@ jobs:
# Installation des packages nécessaires
sudo apt-get update
sudo apt-get install -y linux-tools-common linux-tools-generic python3-pip python3-psutil
sudo apt-get install -y \
linux-tools-common \
linux-tools-generic \
python3-pip \
python3-psutil
# Installation de PowerAPI et dépendances
pip3 install powerapi==0.9.0 pandas numpy
sudo powerapi --formula rapl
# Installer PowerAPI globalement
sudo pip3 install powerapi pandas numpy
- name: Cache Maven packages
uses: actions/cache@v3
@ -38,13 +41,6 @@ jobs:
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Start PowerAPI monitoring
id: start-powerapi
run: |
# Démarrer le daemon PowerAPI
sudo powerapi daemon start --formula rapl
echo "POWERAPI_PID=$(pgrep -f powerapi)" >> $GITHUB_ENV
- name: Collect initial system metrics
run: |
set -eo pipefail
@ -69,7 +65,7 @@ jobs:
distribution: 'adopt'
cache: maven
- name: Build with Maven
- name: Build with Maven and measure energy
id: build
timeout-minutes: 15
env:
@ -79,13 +75,36 @@ jobs:
start_time=$(date +%s%N)
# Démarrer la mesure PowerAPI
sudo powerapi monitor record --formula rapl --pid $$ --output metrics/power/build_power.csv &
POWER_MONITOR_PID=$!
# Collecter les métriques avant build
free -m > metrics/system/pre_build_memory.txt
# Mesure de la consommation d'énergie avec PowerAPI
python3 -c "
import powerapi
from powerapi import database
# Configuration de la base de données
db = database.InfluxDatabase(
host='localhost',
port=8086,
database='powerapi'
)
# Configuration du monitoring
monitor = powerapi.monitor.PowerMonitor(
'rapl', # Utilisation de l'interface RAPL
db,
1 # Période de mesure en secondes
)
# Démarrer le monitoring
monitor.start()
# Enregistrer le début du monitoring
print('Monitoring started')
" &
POWERAPI_PID=$!
# Build optimisé
./mvnw -B verify \
-Dmaven.test.skip=true \
@ -95,8 +114,8 @@ jobs:
build_status=$?
end_time=$(date +%s%N)
# Arrêter la mesure PowerAPI
kill $POWER_MONITOR_PID
# Arrêter PowerAPI
kill $POWERAPI_PID
# Collecter les métriques post-build
free -m > metrics/system/post_build_memory.txt
@ -106,7 +125,7 @@ jobs:
exit $build_status
- name: Run tests
- name: Run tests with energy monitoring
id: test
if: success()
timeout-minutes: 20
@ -115,21 +134,44 @@ jobs:
start_time=$(date +%s%N)
# Démarrer la mesure PowerAPI
sudo powerapi monitor record --formula rapl --pid $$ --output metrics/power/test_power.csv &
POWER_MONITOR_PID=$!
# Collecter les métriques pré-tests
free -m > metrics/system/pre_test_memory.txt
# Mesure de la consommation d'énergie avec PowerAPI
python3 -c "
import powerapi
from powerapi import database
# Configuration de la base de données
db = database.InfluxDatabase(
host='localhost',
port=8086,
database='powerapi'
)
# Configuration du monitoring
monitor = powerapi.monitor.PowerMonitor(
'rapl', # Utilisation de l'interface RAPL
db,
1 # Période de mesure en secondes
)
# Démarrer le monitoring
monitor.start()
# Enregistrer le début du monitoring
print('Monitoring started')
" &
POWERAPI_PID=$!
# Tests optimisés
./mvnw test -T 1C
test_status=$?
end_time=$(date +%s%N)
# Arrêter la mesure PowerAPI
kill $POWER_MONITOR_PID
# Arrêter PowerAPI
kill $POWERAPI_PID
# Collecter les métriques post-tests
free -m > metrics/system/post_test_memory.txt
@ -139,7 +181,7 @@ jobs:
exit $test_status
- name: Build Docker image
- name: Build Docker image with energy monitoring
id: docker-build
if: success()
timeout-minutes: 10
@ -148,22 +190,45 @@ jobs:
start_time=$(date +%s%N)
# Démarrer la mesure PowerAPI
sudo powerapi monitor record --formula rapl --pid $$ --output metrics/power/docker_power.csv &
POWER_MONITOR_PID=$!
# Collecter les métriques pré-docker
free -m > metrics/system/pre_docker_memory.txt
df -h > metrics/system/pre_docker_disk.txt
# Mesure de la consommation d'énergie avec PowerAPI
python3 -c "
import powerapi
from powerapi import database
# Configuration de la base de données
db = database.InfluxDatabase(
host='localhost',
port=8086,
database='powerapi'
)
# Configuration du monitoring
monitor = powerapi.monitor.PowerMonitor(
'rapl', # Utilisation de l'interface RAPL
db,
1 # Période de mesure en secondes
)
# Démarrer le monitoring
monitor.start()
# Enregistrer le début du monitoring
print('Monitoring started')
" &
POWERAPI_PID=$!
# Build Docker optimisé
docker build -t app:latest -f .devcontainer/Dockerfile . --no-cache
build_status=$?
end_time=$(date +%s%N)
# Arrêter la mesure PowerAPI
kill $POWER_MONITOR_PID
# Arrêter PowerAPI
kill $POWERAPI_PID
# Collecter les métriques post-docker
free -m > metrics/system/post_docker_memory.txt
@ -207,9 +272,4 @@ jobs:
- name: Cleanup
if: always()
run: |
# Arrêter PowerAPI
if [ -n "$POWERAPI_PID" ]; then
sudo powerapi daemon stop
fi
docker system prune -af