56 lines
1.6 KiB
Nim
56 lines
1.6 KiB
Nim
|
import json, parseopt, strutils
|
||
|
|
||
|
# usage: process_dashboard --nodes=2 --in=node0_dashboard.json --out=all_nodes_dashboard.json
|
||
|
var
|
||
|
p = initOptParser()
|
||
|
nodes: int
|
||
|
inputFileName, outputFilename: string
|
||
|
|
||
|
while true:
|
||
|
p.next()
|
||
|
case p.kind:
|
||
|
of cmdEnd:
|
||
|
break
|
||
|
of cmdShortOption, cmdLongOption:
|
||
|
if p.key == "nodes":
|
||
|
nodes = p.val.parseInt()
|
||
|
elif p.key == "in":
|
||
|
inputFileName = p.val
|
||
|
elif p.key == "out":
|
||
|
outputFileName = p.val
|
||
|
else:
|
||
|
echo "unsupported argument: ", p.key
|
||
|
of cmdArgument:
|
||
|
echo "unsupported argument: ", p.key
|
||
|
|
||
|
var
|
||
|
inputData = parseFile(inputFileName)
|
||
|
panels = inputData["panels"].copy()
|
||
|
numPanels = len(panels)
|
||
|
gridHeight = 0
|
||
|
outputData = inputData
|
||
|
|
||
|
for panel in panels:
|
||
|
if panel["gridPos"]["x"].getInt() == 0:
|
||
|
gridHeight += panel["gridPos"]["h"].getInt()
|
||
|
|
||
|
outputData["panels"] = %* []
|
||
|
for nodeNum in 0 .. (nodes - 1):
|
||
|
var
|
||
|
nodePanels = panels.copy()
|
||
|
panelIndex = 0
|
||
|
for panel in nodePanels.mitems:
|
||
|
panel["title"] = %* replace(panel["title"].getStr(), "#0", "#" & $nodeNum)
|
||
|
panel["id"] = %* (panelIndex + (nodeNum * numPanels))
|
||
|
panel["gridPos"]["y"] = %* (panel["gridPos"]["y"].getInt() + (nodeNum * gridHeight))
|
||
|
var targets = panel["targets"]
|
||
|
for target in targets.mitems:
|
||
|
target["expr"] = %* replace(target["expr"].getStr(), "{node=\"0\"}", "{node=\"" & $nodeNum & "\"}")
|
||
|
outputData["panels"].add(panel)
|
||
|
panelIndex.inc()
|
||
|
|
||
|
outputData["uid"] = %* (outputData["uid"].getStr() & "a")
|
||
|
outputData["title"] = %* (outputData["title"].getStr() & " (all nodes)")
|
||
|
writeFile(outputFilename, pretty(outputData))
|
||
|
|