-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathJenkinsfile-omec-post-results.groovy
134 lines (124 loc) · 4.46 KB
/
Jenkinsfile-omec-post-results.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
// SPDX-FileCopyrightText: 2020 Open Networking Foundation <[email protected]>
// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
// This pipeline analyzes ng40 test results and generates plots
pipeline {
agent {
label "${params.buildNode}"
}
environment {
datadir = "$HOME/ng40/${params.testType}_data_${params.pod}/"
}
stages {
stage ("Environment Cleanup"){
steps {
step([$class: 'WsCleanup'])
}
}
stage ("Copy NG40 Logs"){
steps {
script {
if ("${params.pod}" == "dev") {
copyArtifacts projectName: "omec_ng40-test_${params.pod}", target: 'ng40', selector: lastCompleted()
} else {
copyArtifacts projectName: "ng40-test_${params.pod}", target: 'ng40', selector: lastCompleted()
}
}
}
}
stage ("Analyze NG40 Results"){
when { expression { return params.testType == "scale" } }
steps {
script {
// Analyse pcap file
sh label: 'Analyse pcap', script: """
echo "Analyzing pcap file"
cd ng40/pcap
tar xzf pcap.tgz
docker run --rm -v \$(realpath 4G_SCALE_*.pcap):/app/capture.pcap registry.aetherproject.org/omecproject/pcap-analyze > pcap-analyze.log
cat pcap-analyze.log
rm *.pcap
"""
// Extract results from NG40 logs and generate csv files
log_list = sh returnStdout: true, script: """
cd ng40/log
ls *.log | grep -v interactive | grep -v ng40test | grep SCALE
"""
log_list = log_list.trim()
for( String log_name : log_list.split() ) {
sh returnStdout: true, script: """
export NG40_LOG_FILE=${log_name}
export NG40_LOG_DIR=${workspace}/ng40/log/
# FIXME: upload the script or use container
$HOME/ng40/ng40-log-to-csv.sh
"""
}
}
}
}
stage ("Archive NG40 Logs"){
steps {
archiveArtifacts artifacts: "ng40/*/*", allowEmptyArchive: true
}
}
stage ("Generate Plots for Scale Test"){
when { expression { return params.testType == "scale" } }
steps {
script {
sh label: "Clone omec-project-ci", script: """
[ -d "omec-project-ci" ] || git clone https://github.com/omec-project/omec-project-ci
"""
// Copy csv file(s) generated by the test
csv_list = sh returnStdout: true, script: """
cd ng40/log
ls *SCALE*.csv
"""
csv_list = csv_list.trim()
for( String csv_name : csv_list.split() ) {
sh label: "Copy ${csv_name} to Data Directory", script : """
# Add build number to CSV
Rscript omec-project-ci/metrics/common/add_entry_to_csv.R build ${params.buildNumber} ng40/log/${csv_name}
# Copy to data directory
cp ng40/log/${csv_name} ${datadir}
"""
}
// Generate plots
sh label: "Generate Plot", script: """
mkdir plots
Rscript omec-project-ci/metrics/scaling/scaling.R ${datadir}scale_config.json ${datadir} plots/
"""
archiveArtifacts artifacts: "plots/*", allowEmptyArchive: true
}
}
}
stage ("Generate Plots for Func Test"){
when { expression { return params.testType == "func" } }
steps {
script {
sh label: "Clone omec-project-ci", script: """
[ -d "omec-project-ci" ] || git clone https://github.com/omec-project/omec-project-ci
"""
// Copy csv file(s) generated by the test
csv_list = sh returnStdout: true, script: """
cd ng40/log
ls ng40test*.csv
"""
csv_list = csv_list.trim()
for( String csv_name : csv_list.split() ) {
sh label: "Copy ${csv_name} to Data Directory", script : """
# Add build number to CSV
Rscript omec-project-ci/metrics/common/add_entry_to_csv.R build ${params.buildNumber} ng40/log/${csv_name}
# Copy to data directory
cp ng40/log/${csv_name} ${datadir}
"""
}
// Generate plots
sh label: "Generate Plot", script: """
mkdir plots
Rscript omec-project-ci/metrics/func/func.R ${datadir}/func_config.json ${datadir} plots/plot.png
"""
archiveArtifacts artifacts: "plots/*", allowEmptyArchive: true
}
}
}
}
}