如何将jenkins Build Duration从毫秒转换为hr:min:sec

时间:2018-02-07 07:38:57

标签: curl jenkins awk

我可以通过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

分钟和小时转换是正确的。 我被困在秒转换中 有人可以建议这里有什么问题。 提前谢谢。

2 个答案:

答案 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秒