-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathjobTimings
executable file
·141 lines (114 loc) · 3.97 KB
/
jobTimings
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
141
#!/bin/bash
USAGE="try 'jobTimings -h' for more information"
HELP=$'to get job timings for a single job, run: jobTimings -d <DC> -t <test user> -j <jobID>\nto get job timings for the last n jobs, run: jobTimings -d <DC> -t <test user> -n <number of jobs>\nDC is EU or US or USEAST'
# As long as there is at least one more argument, keep looping
while [[ $# -gt 0 ]]; do
key="$1"
case "$key" in
-h|--help)
echo "$HELP"
exit 1
;;
-d|--dc)
shift # past the key and to the value
DC="$1"
;;
-t|--testuser)
shift # past the key and to the value
TESTUSER="$1"
;;
-j|--jobid)
shift # past the key and to the value
JOBID="$1"
;;
-n|--numJobs)
shift # past the key and to the value
NUMJOBS="$1"
;;
-b|--brief)
shift # past the key and to the value
BRIEF=1
;;
*)
# Do whatever you want with extra options
echo "Unknown option '$key'"
;;
esac
# Shift after checking all the cases to get the next option
shift
done
if [ -z "$SAUCE_USERNAME" ]; then
echo "Need to set SAUCE_USERNAME"
exit 1
fi
if [ -z "$SAUCE_ACCESS_KEY" ]; then
echo "Need to set SAUCE_ACCESS_KEY"
exit 1
fi
if [ -z "${TESTUSER}" ]; then
echo "No test user set, " ${USAGE}
exit 1
fi
DCURL="https://api.us-west-1.saucelabs.com"
if [ "${DC}" == "EU" ]; then
DCURL="https://api.eu-central-1.saucelabs.com"
elif [[ "${DC}" == "USEAST" ]]; then
DCURL="https://api.us-east-1.saucelabs.com"
fi
JSONFILE="/tmp/log.json"
JOBSJSONFILE="/tmp/jobs.json"
DURATIONSFILE="/tmp/durations.txt"
BETWEENSFILE="/tmp/betweens.txt"
if [ ! -z "$JOBID" ]; then
echo DC URL: "${DCURL}"
echo SAUCE USERNAME: "$SAUCE_USERNAME"
echo TEST USER: "${TESTUSER}"
echo JOB ID: "${JOBID}"
echo "Getting log.json"
curl -s -u $SAUCE_USERNAME:$SAUCE_ACCESS_KEY ${DCURL}/rest/v1/${TESTUSER}/jobs/${JOBID}/assets/log.json > ${JSONFILE}
echo "Parsing commands from log.json"
jq '.[] | .duration' ${JSONFILE} > ${DURATIONSFILE}
jq '.[] | .between_commands' ${JSONFILE} > ${BETWEENSFILE}
NUMCOMMANDS=$(cat ${DURATIONSFILE} | wc -l )
TOTALDURATIONS=$(jq -s add ${DURATIONSFILE})
TOTALBETWEEN=$(jq -s add ${BETWEENSFILE})
TOTALTIME=$(dc <<<"${TOTALDURATIONS} ${TOTALBETWEEN} + p")
AVGDURATION=$(jq -s 'add/length' ${DURATIONSFILE})
AVGBETWEEN=$(jq -s 'add/length' ${BETWEENSFILE})
echo "Number of commands:" ${NUMCOMMANDS}
echo "Total test duration:" ${TOTALTIME}
echo "Total command duration:" ${TOTALDURATIONS}
echo "Average command duration:" ${AVGDURATION}
echo "Total time between commands:" ${TOTALBETWEEN}
echo "Average time between commands:" ${AVGBETWEEN}
exit
fi
if [ ! -z "$NUMJOBS" ]; then
if [ -z "$BRIEF" ]; then
echo DC URL: "${DCURL}"
echo SAUCE USERNAME: "$SAUCE_USERNAME"
echo TEST USER: "${TESTUSER}"
echo NUMBER OF JOBS: "${NUMJOBS}"
echo "Getting last" ${NUMJOBS} "job IDs"
fi
curl -s -u $SAUCE_USERNAME:$SAUCE_ACCESS_KEY ${DCURL}/rest/v1/${TESTUSER}/jobs?limit=${NUMJOBS} | jq -r '.[] .id' > ${JOBSJSONFILE}
while read p; do
JOBID=$p
curl -s -u $SAUCE_USERNAME:$SAUCE_ACCESS_KEY ${DCURL}/rest/v1/${TESTUSER}/jobs/${JOBID}/assets/log.json > ${JSONFILE}
jq '.[] | .duration' ${JSONFILE} > ${DURATIONSFILE}
jq '.[] | .between_commands' ${JSONFILE} > ${BETWEENSFILE}
NUMCOMMANDS=$(cat ${DURATIONSFILE} | wc -l )
TOTALDURATIONS=$(jq -s add ${DURATIONSFILE})
TOTALBETWEEN=$(jq -s add ${BETWEENSFILE})
TOTALTIME=$(dc <<<"${TOTALDURATIONS} ${TOTALBETWEEN} + p")
AVGDURATION=$(jq -s 'add/length' ${DURATIONSFILE})
AVGBETWEEN=$(jq -s 'add/length' ${BETWEENSFILE})
if [ ! -z "$BRIEF" ]; then
echo ${JOBID}", "$AVGDURATION
else
echo ${JOBID} "commands:" ${NUMCOMMANDS}", total time:" $TOTALTIME", total durations:" ${TOTALDURATIONS}", avg duration:" $AVGDURATION", total between:" $TOTALBETWEEN", avg between:" $AVGBETWEEN
fi
done <$JOBSJSONFILE
exit
fi
echo $USAGE