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: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Setup directories for metrics - name: Setup directories and install dependencies
run: | run: |
set -eo pipefail set -eo pipefail
@ -25,11 +25,14 @@ jobs:
# Installation des packages nécessaires # Installation des packages nécessaires
sudo apt-get update 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 # Installer PowerAPI globalement
pip3 install powerapi==0.9.0 pandas numpy sudo pip3 install powerapi pandas numpy
sudo powerapi --formula rapl
- name: Cache Maven packages - name: Cache Maven packages
uses: actions/cache@v3 uses: actions/cache@v3
@ -38,13 +41,6 @@ jobs:
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2 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 - name: Collect initial system metrics
run: | run: |
set -eo pipefail set -eo pipefail
@ -69,7 +65,7 @@ jobs:
distribution: 'adopt' distribution: 'adopt'
cache: maven cache: maven
- name: Build with Maven - name: Build with Maven and measure energy
id: build id: build
timeout-minutes: 15 timeout-minutes: 15
env: env:
@ -79,13 +75,36 @@ jobs:
start_time=$(date +%s%N) 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 # Collecter les métriques avant build
free -m > metrics/system/pre_build_memory.txt 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é # Build optimisé
./mvnw -B verify \ ./mvnw -B verify \
-Dmaven.test.skip=true \ -Dmaven.test.skip=true \
@ -95,8 +114,8 @@ jobs:
build_status=$? build_status=$?
end_time=$(date +%s%N) end_time=$(date +%s%N)
# Arrêter la mesure PowerAPI # Arrêter PowerAPI
kill $POWER_MONITOR_PID kill $POWERAPI_PID
# Collecter les métriques post-build # Collecter les métriques post-build
free -m > metrics/system/post_build_memory.txt free -m > metrics/system/post_build_memory.txt
@ -106,7 +125,7 @@ jobs:
exit $build_status exit $build_status
- name: Run tests - name: Run tests with energy monitoring
id: test id: test
if: success() if: success()
timeout-minutes: 20 timeout-minutes: 20
@ -115,21 +134,44 @@ jobs:
start_time=$(date +%s%N) 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 # Collecter les métriques pré-tests
free -m > metrics/system/pre_test_memory.txt 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 # Tests optimisés
./mvnw test -T 1C ./mvnw test -T 1C
test_status=$? test_status=$?
end_time=$(date +%s%N) end_time=$(date +%s%N)
# Arrêter la mesure PowerAPI # Arrêter PowerAPI
kill $POWER_MONITOR_PID kill $POWERAPI_PID
# Collecter les métriques post-tests # Collecter les métriques post-tests
free -m > metrics/system/post_test_memory.txt free -m > metrics/system/post_test_memory.txt
@ -139,7 +181,7 @@ jobs:
exit $test_status exit $test_status
- name: Build Docker image - name: Build Docker image with energy monitoring
id: docker-build id: docker-build
if: success() if: success()
timeout-minutes: 10 timeout-minutes: 10
@ -148,22 +190,45 @@ jobs:
start_time=$(date +%s%N) 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 # Collecter les métriques pré-docker
free -m > metrics/system/pre_docker_memory.txt free -m > metrics/system/pre_docker_memory.txt
df -h > metrics/system/pre_docker_disk.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é # Build Docker optimisé
docker build -t app:latest -f .devcontainer/Dockerfile . --no-cache docker build -t app:latest -f .devcontainer/Dockerfile . --no-cache
build_status=$? build_status=$?
end_time=$(date +%s%N) end_time=$(date +%s%N)
# Arrêter la mesure PowerAPI # Arrêter PowerAPI
kill $POWER_MONITOR_PID kill $POWERAPI_PID
# Collecter les métriques post-docker # Collecter les métriques post-docker
free -m > metrics/system/post_docker_memory.txt free -m > metrics/system/post_docker_memory.txt
@ -207,9 +272,4 @@ jobs:
- name: Cleanup - name: Cleanup
if: always() if: always()
run: | run: |
# Arrêter PowerAPI
if [ -n "$POWERAPI_PID" ]; then
sudo powerapi daemon stop
fi
docker system prune -af docker system prune -af