Skip to content

Commit 1115a74

Browse files
authored
Add projects into monitoring (#1523)
1 parent ab1a302 commit 1115a74

File tree

12 files changed

+83
-19
lines changed

12 files changed

+83
-19
lines changed

.github/workflows/collect-statistics.yml

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ on:
6060
env:
6161
data_branch: monitoring-data
6262
data_path: monitoring/data
63-
monitoring_properties: monitoring/monitoring.properties
63+
monitoring_projects: monitoring/projects/
6464
push_script: monitoring/push_with_rebase.sh
6565
PUSHGATEWAY_HOSTNAME: monitoring.utbot.org
6666
PUSHGATEWAY_ADDITIONAL_PATH: /pushgateway-custom
@@ -70,11 +70,24 @@ jobs:
7070
setup_matrix:
7171
runs-on: ubuntu-latest
7272
outputs:
73+
projects: ${{ steps.set-matrix.outputs.projects }}
7374
matrix: ${{ steps.set-matrix.outputs.matrix }}
7475
steps:
76+
- name: Checkout repository
77+
uses: actions/checkout@v3
78+
7579
- name: Create matrix
7680
id: set-matrix
81+
shell: bash
7782
run: |
83+
read -r -a projects <<< $(ls --format=horizontal --indicator-style=none $monitoring_projects)
84+
projects=(${projects[@]/#/\"})
85+
projects=(${projects[@]/%/\"})
86+
printf -v projects '%s,' "${projects[@]}"
87+
projects=$(echo [${projects%,}])
88+
echo "projects=$projects" >> $GITHUB_OUTPUT
89+
echo $projects
90+
7891
arr=$(echo [$(seq -s , ${{ inputs.runners }})])
7992
echo "matrix=$arr" >> $GITHUB_OUTPUT
8093
echo $arr
@@ -83,7 +96,9 @@ jobs:
8396
needs: setup_matrix
8497
continue-on-error: true
8598
strategy:
99+
max-parallel: 3
86100
matrix:
101+
project: ${{ fromJson(needs.setup_matrix.outputs.projects) }}
87102
value: ${{ fromJson(needs.setup_matrix.outputs.matrix) }}
88103
runs-on: ubuntu-20.04
89104
container: unittestbot/java-env:java11-zulu-jdk-fx-gradle7.4.2-kotlinc1.7.0
@@ -114,7 +129,7 @@ jobs:
114129
for i in $(seq ${{ inputs.run_number }})
115130
do
116131
java -jar \
117-
-Dutbot.monitoring.settings.path=$monitoring_properties \
132+
-Dutbot.monitoring.settings.path=$monitoring_projects/${{ matrix.project }}/monitoring.properties \
118133
utbot-junit-contest/build/libs/monitoring.jar \
119134
stats-$i.json
120135
mv logs/utbot.log logs/utbot-$i.log
@@ -139,7 +154,7 @@ jobs:
139154
id: insert
140155
shell: bash
141156
run: |
142-
OUT_FILE="$data_path/$date-$short_commit-${{ matrix.value }}.json"
157+
OUT_FILE="$data_path/$date-$short_commit-${{ matrix.project }}-${{ matrix.value }}.json"
143158
echo "output=$OUT_FILE" >> $GITHUB_OUTPUT
144159
145160
INPUTS=($(seq ${{ inputs.run_number }}))
@@ -169,7 +184,7 @@ jobs:
169184
- name: Upload statistics
170185
uses: actions/upload-artifact@v3
171186
with:
172-
name: statistics-${{ matrix.value }}
187+
name: statistics-${{ matrix.value }}-${{ matrix.project }}
173188
path: ${{ steps.insert.outputs.output }}
174189

175190
- name: Commit and push statistics
@@ -188,7 +203,7 @@ jobs:
188203
run: |
189204
python monitoring/prepare_metrics.py --stats_file $stats_file --output_file grafana_metrics.json
190205
chmod +x scripts/project/json_to_prometheus.py
191-
python3 scripts/project/json_to_prometheus.py grafana_metrics.json | curl -u "${{ secrets.PUSHGATEWAY_USER }}:${{ secrets.PUSHGATEWAY_PASSWORD }}" --data-binary @- "https://${PUSHGATEWAY_HOSTNAME}${PUSHGATEWAY_ADDITIONAL_PATH}/metrics/job/pushgateway-custom/instance/run-${{ matrix.value }}${PROM_ADDITIONAL_LABELS}"
206+
python3 scripts/project/json_to_prometheus.py grafana_metrics.json | curl -u "${{ secrets.PUSHGATEWAY_USER }}:${{ secrets.PUSHGATEWAY_PASSWORD }}" --data-binary @- "https://${PUSHGATEWAY_HOSTNAME}${PUSHGATEWAY_ADDITIONAL_PATH}/metrics/job/pushgateway-custom/instance/run-${{ matrix.value }}-${{ matrix.project }}${PROM_ADDITIONAL_LABELS}"
192207
echo "Please visit Grafana to check metrics: https://monitoring.utbot.org/d/m6bagaD4z/utbot-nightly-statistic"
193208
env:
194209
stats_file: ${{ steps.insert.outputs.output }}
@@ -197,5 +212,13 @@ jobs:
197212
if: ${{ always() }}
198213
uses: actions/upload-artifact@v3
199214
with:
200-
name: logs-${{ matrix.value }}
215+
name: logs-${{ matrix.value }}-${{ matrix.project }}
201216
path: logs/
217+
218+
- name: Upload artifacts
219+
if: ${{ always() }}
220+
uses: actions/upload-artifact@v3
221+
with:
222+
name: generated-${{ matrix.value }}-${{ matrix.project }}
223+
path: |
224+
/tmp/UTBot/generated*/*

docs/NightStatisticsMonitoring.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ We store the collected statistics in our repository. You can find two special br
195195

196196
The `monitoring-data` branch is a storage for raw statistics data as well as metadata.
197197

198-
The filename format: `<yyyy>-<mm>-<dd>-<hh>-<MM>-<ss>-<branch>-<short commit hash>-<runner number>.json`
198+
The filename format: `<yyyy>-<mm>-<dd>-<hh>-<MM>-<ss>-<branch>-<short commit hash>-<project name>-<runner number>.json`
199199

200200
### Grafana
201201

monitoring/MonitoringSettings.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Monitoring Settings
2+
3+
## Configuration files
4+
5+
There are monitoring configuration files for each project in `project/<project name>/monitoring.properties`.
6+
7+
### Monitoring configure
8+
The file `monitoring.properties` is passed as a java property `-Dutbot.monitoring.settings.path`. It configures `org.utbot.monitoring.MonitoringSettings` class.
9+
10+
#### Properties description:
11+
- `project` is a name of project that will be run in monitoring.
12+
- `classTimeoutSeconds` is a unit-test generation timeout for one class.
13+
- `runTimeoutMinutes` is a timeout for one whole run of the project.
14+
- `fuzzingRatios` is a list of numbers that configure the ratio of fuzzing time to total generation time.
15+
16+
## Which project can be run?
17+
18+
### Prerequisites
19+
20+
Firstly, you should read [this](../utbot-junit-contest/README.md) paper about available projects and how to extend them.
21+
22+
### How to add projects to monitoring
23+
24+
To add a project to monitoring you should create a folder with a project name and create a file `monitoring.properties` with needed configurations.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
project=fescar
2+
classTimeoutSeconds=20
3+
runTimeoutMinutes=20
4+
fuzzingRatios=0.0;0.05;1.0
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
projects=guava
1+
project=guava
22
classTimeoutSeconds=20
33
runTimeoutMinutes=20
4-
fuzzingRatios=0.0;0.1;1.0
4+
fuzzingRatios=0.0;0.05;1.0
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
project=pdfbox
2+
classTimeoutSeconds=20
3+
runTimeoutMinutes=20
4+
fuzzingRatios=0.0;0.05;1.0
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
project=seata
2+
classTimeoutSeconds=20
3+
runTimeoutMinutes=20
4+
fuzzingRatios=0.0;0.05;1.0
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
project=spoon
2+
classTimeoutSeconds=20
3+
runTimeoutMinutes=20
4+
fuzzingRatios=0.0;0.05;1.0

utbot-junit-contest/src/main/kotlin/org/utbot/monitoring/MonitoringReport.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,12 @@ data class SummarisedMetricsReport(
116116
covered_bytecode_instructions_by_fuzzing = targets.sumOf { it.metrics.covered_bytecode_instructions_in_class_by_fuzzing },
117117
covered_bytecode_instructions_by_concolic = targets.sumOf { it.metrics.covered_bytecode_instructions_in_class_by_concolic },
118118
total_bytecode_instructions = targets.sumOf { it.metrics.total_bytecode_instructions_in_class },
119-
averaged_bytecode_instruction_coverage_by_classes = targets.map { it.metrics.bytecode_instructions_coverage_in_class }.average()
119+
averaged_bytecode_instruction_coverage_by_classes = targets.map { it.metrics.bytecode_instructions_coverage_in_class }.average().fixNaN()
120120
)
121121
}
122+
123+
private fun Double.fixNaN(): Double = if (isNaN() || isInfinite()) {
124+
0.0
125+
} else {
126+
this
127+
}

utbot-junit-contest/src/main/kotlin/org/utbot/monitoring/MonitoringSettings.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ object MonitoringSettings : AbstractSettings(
2727
val runTimeoutMinutes by getIntProperty(180)
2828

2929
/**
30-
* Target projects to generate tests.
30+
* The target project to generate tests.
3131
*/
32-
val projects by getListProperty(listOf("guava"))
32+
val project by getStringProperty("guava")
3333

3434
/**
3535
* Set up fuzzing timeout relatively total generation time.

utbot-junit-contest/src/main/kotlin/org/utbot/monitoring/StatisticsMonitoring.kt

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,6 @@ package org.utbot.monitoring
33
import java.io.File
44
import java.util.concurrent.TimeUnit
55
import kotlin.system.exitProcess
6-
import kotlinx.coroutines.GlobalScope
7-
import kotlinx.coroutines.cancel
8-
import kotlinx.coroutines.cancelChildren
9-
import kotlinx.coroutines.job
106
import kotlinx.serialization.encodeToString
117
import kotlinx.serialization.json.Json
128
import mu.KotlinLogging
@@ -19,7 +15,6 @@ import org.utbot.contest.GlobalStats
1915
import org.utbot.contest.Paths
2016
import org.utbot.contest.Tool
2117
import org.utbot.contest.runEstimator
22-
import org.utbot.framework.plugin.api.util.utContext
2318
import org.utbot.framework.plugin.services.JdkInfoService
2419
import org.utbot.instrumentation.ConcreteExecutor
2520

@@ -35,7 +30,7 @@ fun main(args: Array<String>) {
3530
val processedClassesThreshold = MonitoringSettings.processedClassesThreshold
3631
val timeLimit = MonitoringSettings.classTimeoutSeconds
3732

38-
val projects = MonitoringSettings.projects
33+
val projects = listOf(MonitoringSettings.project)
3934
methodFilter = null
4035

4136
val runTimeout = TimeUnit.MINUTES.toMillis(MonitoringSettings.runTimeoutMinutes.toLong())

utbot-junit-contest/src/main/resources/log4j2.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525

2626
<Logger name="org.utbot.engine.UtBotSymbolicEngine" level="debug"/>
27-
<Logger name="org.utbot.instrumentation" level="trace"/>
27+
<Logger name="org.utbot.instrumentation" level="debug"/>
2828

2929
<Logger name="org.utbot.engine.selectors.strategies.GraphViz" level="debug">
3030
<AppenderRef ref="Console"/>

0 commit comments

Comments
 (0)