unix - Groovy:导出数据 - 如何设置从现在到过去某个时间点的 unix 开始时间?
问题描述
我目前正在从 Grafana 导出数据。我使用一个看起来像这样的脚本来做到这一点:
JsonSlurper slurper = new JsonSlurper()
println "Collect list of servers:"
def result = slurper.parse(new URL('http://xyz'))
def servers = [:].withDefault { [] }
result.data.each{ it ->
servers[it.server] = "${it.server};${it.app};${it.team}"
}
servers.sort().each { k, v -> println v}
println "Collect data for servers:"
Date currentDate = new Date();
Date fromDate = currentDate - 30
long unixTimeNow = currentDate.getTime() / 1000
long unixFromDate = fromDate.getTime() / 1000
long stepSec = 7200
boolean header = true
servers.sort().each{ server, label ->
File resultFile = new File("C:\\Users\\GrafanaExport${server}.csv")
if(resultFile.exists()) {
resultFile.delete()
}
def queries = [
['node_load1',"http://abc{server}.start${unixFromDate}&end=${unixTimeNow}&step=${stepSec}"],]
def resultTable = [:].withDefault { [";",";",";"] }
queries.eachWithIndex { q, i ->
println(q)
result = slurper.parse(new URL(q[1]))
result?.data?.result[0]?.values?.each{ it ->
resultTable[it[0]][i] = it[1] + ";"
}
}
if(header) {
resultFile << "timestamp;" + queries.collect{it[0]}.join(';') + '\n'
header = false
}
resultFile << label + '\n'
resultTable.sort().each { k, v ->
resultFile << "${k};${v.join('')}\n"
}
}
这很好用,但我想得到的不是从现在到一段时间前的数据,而是从某个时间戳到一段时间前的数据。因为以前我已经导出了数据,并且我想为数据获取相同的日期/时间戳。先前导出的数据带有此时间戳(示例时间戳的片段):
这意味着数据每两小时导出一次(因为这是一个 7200 秒的步骤),并且每隔一个完整时间和 unix 时间每隔偶数小时导出一次。我现在想知道我需要如何修改我的代码以获取与以前相同的时间戳的数据?
非常感谢!
解决方案
推荐阅读
- mongodb - 从嵌套数组聚合、查找和 addField
- node.js - 我如何将规范化的 json 数据插入 mongod
- c - Piketec TPT java自动化
- mongodb - 在 MongoDB 中,如何增加可以在 shell 上打印的信息行数?
- r - R将循环中实现的字符串操作重写为R方式
- cakephp - CakePHP 将数据保存到多个表
- java - 如何使用 Hibernate 条件实现此多项选择和查询?
- java - PrintWriter 中的 java HttpsURLConnection setRequestProperty 等效项
- javascript - 在 html 中连接 Js
- python - PySide2:QOpenGLContext'对象没有属性'functions'