OpenMiInk/third_party/kde-ci-utilities/gitlab-templates/energy-usage-measurement.yml
Hellings b8c8ff98e2 Hi
2026-10-16 09:05:56 -04:00

152 lines
7.6 KiB
YAML

# Requirements: Add runner variables `LABPC_IP` and `PM_IP`
# LABPC_IP: "192.168.170.23" # IP address of the LABPC
# PM_IP: "192.168.170.22" # IP address of the PM (Power Meter)
# NOTE: The values may change so check up with KEcoLab team if it doesn't work
.workflow-template:
rules:
# Ensure the pipeline runs for tag pushes
- if: $CI_COMMIT_TAG
# Ensure the pipeline runs for web triggers i.e triggered from the web ui
- if: $CI_PIPELINE_SOURCE == "web"
# Ensure the pipeline doesn't run for every commit push
- if: $CI_PIPELINE_SOURCE == "push"
when: never
include:
- project: sysadmin/ci-utilities
file:
- /gitlab-templates/flatpak.yml
kecolab-worker-build:
extends: .workflow-template
stage: publish
image: alpine
dependencies:
- flatpak
tags:
- EcoLabWorker
before_script:
- echo $CI_PROJECT_NAME:$CI_COMMIT_REF_NAME
# Copy flatpak artifacts to LABPC
- scp -o StrictHostKeyChecking=no -i ~/.ssh/kecolab ${CI_PROJECT_NAME}.flatpak kecolab@$LABPC_IP:/tmp/
script:
- ssh -o StrictHostKeyChecking=no -i ~/.ssh/kecolab kecolab@$LABPC_IP "
cd /tmp/ && flatpak install --user ${CI_PROJECT_NAME}.flatpak -y "
kecolab-worker-energy_measurement:
extends: .workflow-template
stage: publish
image: alpine
needs:
- kecolab-worker-build
dependencies:
- kecolab-worker-build
timeout: 12h
tags:
- EcoLabWorker
before_script:
# Download and Copy Usage scenario scripts to the LABPC
- git clone --no-checkout https://invent.kde.org/teams/eco/remote-eco-lab.git
- cd remote-eco-lab
- git checkout master
- git config core.sparseCheckout true
- git sparse-checkout set scripts/test_scripts/org.kde.$CI_PROJECT_NAME
- scp -o StrictHostKeyChecking=no -r -i ~/.ssh/kecolab scripts/test_scripts/org.kde.$CI_PROJECT_NAME/* kecolab@$LABPC_IP:/tmp/
- cd .. && rm -rf remote-eco-lab
# Check for configuration script for application under test
- ssh -o StrictHostKeyChecking=no -i ~/.ssh/kecolab kecolab@$LABPC_IP 'export DISPLAY=:0 && export TERM=xterm && cd /tmp/ && if [ -f "configuration.sh" ]; then chmod +x configuration.sh && ./configuration.sh; fi; exit'
script:
- export CURRENT_DATE=$(date +%Y%m%d)
# Start taking PM Readings (Script 1)
- cd /home/gitlab-runner/GUDEPowerMeter && nohup python3 check_gude_modified.py -i 1 -x $PM_IP >> ~/testreadings1.csv 2>/dev/null &
# Start taking Hardware readings using collectl (for script 1)
- ssh -o StrictHostKeyChecking=no -i ~/.ssh/kecolab kecolab@$LABPC_IP '
nohup collectl -s cdmn -i1 -P --sep 59 -f ~/test1.csv >/dev/null 2>&1 &
export DISPLAY=:0 && export TERM=xterm && cd /tmp/ && chmod +x log_sus.sh && ./log_sus.sh'
# Kill the Process taking PM Readings
- pkill -f check_gude_modified.py
# Start taking PM Readings (Script 2)
- cd /home/gitlab-runner/GUDEPowerMeter && nohup python3 check_gude_modified.py -i 1 -x $PM_IP >> ~/testreadings2.csv 2>/dev/null &
# Start taking Hardware readings using collectl (for script 2)
- ssh -o StrictHostKeyChecking=no -i ~/.ssh/kecolab kecolab@$LABPC_IP '
nohup collectl -s cdmn -i1 -P --sep 59 -f ~/test2.csv >/dev/null 2>&1 &
export DISPLAY=:0 && export TERM=xterm && cd /tmp/ && chmod +x log_baseline.sh && ./log_baseline.sh'
- pkill -f check_gude_modified.py
# Start taking PM Readings (Script 3)
- cd /home/gitlab-runner/GUDEPowerMeter && nohup python3 check_gude_modified.py -i 1 -x $PM_IP >> ~/testreadings3.csv 2>/dev/null &
# Start taking Hardware readings using collectl (for script 3)
- ssh -o StrictHostKeyChecking=no -i ~/.ssh/kecolab kecolab@$LABPC_IP '
nohup collectl -s cdmn -i1 -P --sep 59 -f ~/test3.csv >/dev/null 2>&1 &
export DISPLAY=:0 && export TERM=xterm && cd /tmp/ && chmod +x log_idle.sh && ./log_idle.sh'
- pkill -f check_gude_modified.py
# Export collectl readings using Current Date in the filename
- ssh -o StrictHostKeyChecking=no -i ~/.ssh/kecolab kecolab@$LABPC_IP "
export CURRENT_DATE=$(date +%Y%m%d) && cd ~/ && cp test1.csv-kecolab-$CURRENT_DATE.tab.gz ~/test1.csv-kecolab.tab.gz"
- ssh -o StrictHostKeyChecking=no -i ~/.ssh/kecolab kecolab@$LABPC_IP "
export CURRENT_DATE=$(date +%Y%m%d) && cd ~/ && cp test2.csv-kecolab-$CURRENT_DATE.tab.gz ~/test2.csv-kecolab.tab.gz"
- ssh -o StrictHostKeyChecking=no -i ~/.ssh/kecolab kecolab@$LABPC_IP "
export CURRENT_DATE=$(date +%Y%m%d) && cd ~/ && cp test3.csv-kecolab-$CURRENT_DATE.tab.gz ~/test3.csv-kecolab.tab.gz"
# Export Power Meter Readings
- cp ~/testreadings1.csv testreadings1.csv
- cp ~/testreadings2.csv testreadings2.csv
- cp ~/testreadings3.csv testreadings3.csv
# Export all the Raw Power and Hardware Readings to Artifacts
- scp -o StrictHostKeyChecking=no -r -i ~/.ssh/kecolab kecolab@$LABPC_IP:~/test1.csv-kecolab.tab.gz test1.csv-kecolab-$CURRENT_DATE.tab.gz
- scp -o StrictHostKeyChecking=no -r -i ~/.ssh/kecolab kecolab@$LABPC_IP:~/test2.csv-kecolab.tab.gz test2.csv-kecolab-$CURRENT_DATE.tab.gz
- scp -o StrictHostKeyChecking=no -r -i ~/.ssh/kecolab kecolab@$LABPC_IP:~/test3.csv-kecolab.tab.gz test3.csv-kecolab-$CURRENT_DATE.tab.gz
- scp -o StrictHostKeyChecking=no -r -i ~/.ssh/kecolab kecolab@$LABPC_IP:~/log_sus.csv log_sus.csv
- scp -o StrictHostKeyChecking=no -r -i ~/.ssh/kecolab kecolab@$LABPC_IP:~/log_baseline.csv log_baseline.csv
- scp -o StrictHostKeyChecking=no -r -i ~/.ssh/kecolab kecolab@$LABPC_IP:~/log_idle.csv log_idle.csv
# Remove all the logs
- cd ~/ && rm testreadings1.csv testreadings2.csv testreadings3.csv
- ssh -o StrictHostKeyChecking=no -i ~/.ssh/kecolab kecolab@$LABPC_IP ' export CURRENT_DATE=$(date +%Y%m%d) && rm log_sus.csv log_baseline.csv log_idle.csv test1.csv-kecolab-$CURRENT_DATE.tab.gz test2.csv-kecolab-$CURRENT_DATE.tab.gz test3.csv-kecolab-$CURRENT_DATE.tab.gz test1.csv-kecolab.tab.gz test2.csv-kecolab.tab.gz test3.csv-kecolab.tab.gz && cd /tmp/ && rm log_sus.sh log_baseline.sh log_idle.sh'
artifacts:
paths:
- testreadings1.csv
- testreadings2.csv
- testreadings3.csv
- "test1.csv-kecolab-*.tab.gz"
- "test2.csv-kecolab-*.tab.gz"
- "test3.csv-kecolab-*.tab.gz"
- log_sus.csv
- log_baseline.csv
- log_idle.csv
expire_in: 90 days
# Result Stage (To Generate Energy Measurement Report)
kecolab-worker-result:
extends: .workflow-template
stage: publish
image: invent-registry.kde.org/sysadmin/ci-images/kecolab-analysis:latest
needs:
- kecolab-worker-energy_measurement
dependencies:
- kecolab-worker-energy_measurement
script:
- export CURRENT_DATE=$(date +%Y%m%d)
- gunzip test1.csv-kecolab-$CURRENT_DATE.tab.gz
- gunzip test2.csv-kecolab-$CURRENT_DATE.tab.gz
- gunzip test3.csv-kecolab-$CURRENT_DATE.tab.gz
# Preprocess Raw data for OSCAR Script
- Rscript ~/Preprocessing.R test1.csv-kecolab-$CURRENT_DATE.tab test2.csv-kecolab-$CURRENT_DATE.tab test3.csv-kecolab-$CURRENT_DATE.tab $CI_PROJECT_DIR
# Run OSCAR Analysis script to generate a report SUS
- Rscript ~/sus_analysis_script.R
- cp -r ~/SUS_Report.pdf ~/SUS_Report.tex ~/sus_graphics ~/SUS_Report_files $CI_PROJECT_DIR/
# Run OSCAR Analysis script to generate a report for Idle Mode
- Rscript ~/idle_analysis_script.R
- cp -r ~/Idle_Report.pdf ~/Idle_Report.tex ~/idle_graphics ~/Idle_Report_files $CI_PROJECT_DIR/
artifacts:
paths:
- SUS_Report.pdf
- SUS_Report.tex
- SUS_Report_files
- sus_graphics
- Idle_Report.pdf
- Idle_Report.tex
- Idle_Report_files
- idle_graphics
expire_in: 90 days