首页 > 解决方案 > 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 时间每隔偶数小时导出一次。我现在想知道我需要如何修改我的代码以获取与以前相同的时间戳的数据?

非常感谢!

标签: unixgroovytimeunix-timestampgettime

解决方案


推荐阅读