我可以通过curl使用Rest API获取jenkins构建持续时间,但时间以毫秒为单位。
curl -s "$JOB_URL/$BUILD_NUMBER/api/json?tree=duration
我正在寻找一种以标准格式获取时间的方法,即 hr:min:sec 我试过这个直到现在
curl -s "$JOB_URL/$BUILD_NUMBER/api/json?tree=duration | awk -F : '{ print $2 }' | awk -F } '{ printf "%i hr %i min %i sec", ($1 / 3600000), ($1 % 3600000)/60000 , ($1 % 100)}'
这绝对不正确,因为网址以毫秒为单位的时间为417597
,但它在 hr:min:sec 中提供为0 hr 6 min 97 sec
curl -s $JOB_URL/3458/api/json?tree=duration
{"duration":417597}
curl -s $JOB_URL/3458/api/json?tree=duration | awk -F : '{ print $2 }' | awk -F } '{ printf "%i hr %i min %i sec", ($1 / 3600000), ($1 % 3600000)/60000 , ($1 % 100)}'
0 hr 6 min 97 sec
分钟和小时转换是正确的。 我被困在秒转换中 有人可以建议这里有什么问题。 提前谢谢。
答案 0 :(得分:0)
2
返回
echo 417597 | awk '
{ t_sec = int($0/1000)
divmod(t_sec, 60); t_min = Q; sec = R
divmod(t_min, 60); hr = Q; min = R
printf "%s hr %s min %s sec\n", hr, min, sec
}
function divmod(a, b) { # quotient and remainder
Q = int(a / b)
R = a - Q * b
}'
答案 1 :(得分:0)
从持续时间值中,您可以简单地以groovy:D
计算值def duration = 635309
// Roud the hour
double hour = Double.valueOf((duration / 3600000)).round()
def hourStr = hour > 0 ? " ${hour}h" : ""
// Handle minute parts
double totalMin = Double.valueOf((duration % 3600000)/60000).round(2)
def realMin = "${totalMin}".split("\\.")
def min = Integer.valueOf(realMin[0])
def minStr = Integer.valueOf(min) > 0 ? "${min}min" : ""
// Handle the reminder of seconds
def realSec = realMin[1]
double secVal = Double.valueOf("0.${realSec}") * 60
def sec = "${secVal}".split("\\.")[0]
sec = Integer.valueOf(sec) > 0 ? "${sec}sec" : ""
println "Duration is Build time${hourStr} ${minStr} ${sec}"
持续时间为构建时间10分钟35秒