-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathutil.yaml
140 lines (130 loc) · 4.29 KB
/
util.yaml
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
135
136
137
138
139
140
globals:
javascript: |
// returns the `host` network if running locally otherwise empty string
function getNetwork(server){
// return server == 'LOCAL' ? '--network host' : ''
return '--network host'
}
// retrieves the hostname from the specified server
function getHostname(server){
return server == 'LOCAL' ? 'localhost' : server.split('@').pop()
}
scripts:
install-sdkman: #https://sdkman.io/install
- sh:
command: sdk help
prompt:
"Would you like to upgrade now? (Y/n): ": "Y"
- regex: ".*command not found"
then:
- sh: curl -s "https://get.sdkman.io" | bash
then:
- regex: "Enjoy"
else:
- abort: failed to install SDKMAN
- sh: source "$HOME/.sdkman/bin/sdkman-init.sh"
# else:
# - sh: sdk selfupdate force
# then:
# - regex: "Successfully upgraded SDKMAN"
# else:
# - abort: failed to upgrade SDKMAN
- sh:
command: sdk version
prompt:
"Would you like to upgrade now? (Y/n): ": "Y"
# SDKMAN 5.9.1+575
then:
- regex: "SDKMAN (?<RUN.sdk_version>[\\d\\.\\+]+)"
sdk-select-java:
- script: install-sdkman # requires util.yaml
- sh:
command: sdk install java ${{JAVA_VERSION:21.0.5-tem}}
prompt:
"set as default? (Y/n): ": "Y"
- sh:
command: sdk use java ${{JAVA_VERSION:21.0.5-tem}}
sdk-select-jbang:
- script: install-sdkman # requires util.yaml
- sh:
command: sdk install jbang ${{JBANG_VERSION:0.121.0}}
prompt:
"set as default? (Y/n): ": "Y"
- sh:
command: sdk use jbang ${{JBANG_VERSION:0.121.0}}
install-hyperfoil-catalog:
- script: sdk-select-jbang
# it should be able to automatically fetch it by running the following cmd
- sh: jbang catalog list hyperfoil
extract-service-pid:
# CONTAINER_ID: the id of the running container
# STATE_PID: the state where the pid should be saved to
- sh: ${{CONTAINER_RUNTIME}} inspect --format='{{.State.Pid}}' ${{CONTAINER_ID}}
- regex: (^[1-9][0-9]*$)
then:
- set-state: ${{STATE_PID}}
# if we have wrappers as entrypoint we should find the java process
- js: ${{IS_ENTRYPOINT_WRAPPER}}
then:
- set-signal: stop 1
- repeat-until: stop
then:
- sh: ps --ppid ${{${{STATE_PID}}}} -o pid= | awk '{print $1}'
then:
- for-each: pid
then:
- regex: (^[1-9][0-9]*$)
then:
- set-state: ${{STATE_PID}}
- sh: ps --pid ${{${{STATE_PID}}}} -o cmd=
- regex: java
then:
- signal: stop
# inspect the pid
- sh: ps -p ${{${{STATE_PID}}}}
parse-pidstat-results:
# PIDSTAT_FILE: pidstat file to parse
# MAX_STATE: where to save the max result
# AVG_STATE: where to save the avg result
- sh: echo $(cat ${{PIDSTAT_FILE}} | awk '{print $9}')
silent: true
then:
- js: |
(input, state) => {
let cpuResults = input.split(" ").map(v => parseFloat(v)).filter(v => !Number.isNaN(v))
if (cpuResults.length > 0) {
// max cpu usage
state.${{MAX_STATE}} = Math.max(...cpuResults)
// avg cpu usage
state.${{AVG_STATE}} = cpuResults.reduce((all, v) => all + v, 0) / cpuResults.length
} else {
state.${{MAX_STATE}} = "NaN"
state.${{AVG_STATE}} = "NaN"
}
}
parse-rss-results:
# RSS_FILE: rss file to parse
# MAX_STATE: where to save the max result
# AVG_STATE: where to save the avg result
- sh: echo $(cat ${{RSS_FILE}} | awk '{print $6}')
silent: true
then:
- js: |
(input, state) => {
let rssResults = input.split(" ").map(v => parseInt(v)).filter(v => !Number.isNaN(v))
if (rssResults.length > 0) {
// max cpu usage
state.${{MAX_STATE}} = Math.max(...rssResults)
// avg cpu usage
state.${{AVG_STATE}} = rssResults.reduce((all, v) => all + v, 0) / rssResults.length
} else {
state.${{MAX_STATE}} = "NaN"
state.${{AVG_STATE}} = "NaN"
}
}
states:
JBANG_VERSION: "0.121.0"
JAVA_VERSION: "21.0.5-tem"
# set to true if the container entrypoints are wrappers
# i.e., the main process is not the entrypoint itself
IS_ENTRYPOINT_WRAPPER: false