Skip to content

Commit

Permalink
opae.io: flask server: add Grafana SimpleJson api (#2637)
Browse files Browse the repository at this point in the history
Add a hacky, yet functional back-end implementation for the Grafana
SimpleJson plugin, to track the N3000 sensors using sensors -j.

Signed-off-by: Tim Whisonant <tim.whisonant@intel.com>
  • Loading branch information
tswhison committed Mar 24, 2023
1 parent fdb865c commit 9ace595
Showing 1 changed file with 69 additions and 1 deletion.
70 changes: 69 additions & 1 deletion binaries/opae.io/opae/io/run.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
import json
from flask import Flask, request, abort
import os
from pprint import pprint
import subprocess
import sys
import tempfile
import time
from flask import Flask, request, abort, jsonify
from opae import fpga

DEFAULT_SRV_PORT = 8080
Expand Down Expand Up @@ -34,6 +40,68 @@
}


# For grafana SimpleJson data source

def now_in_milliseconds():
return int(time.time()) * 1000


def get_sensors_json():
tmpfile = tempfile.NamedTemporaryFile(mode='w+',
encoding=sys.getdefaultencoding(), newline='\n')
subprocess.run(['sensors', '-j'], stdout=tmpfile, stderr=subprocess.DEVNULL)
tmpfile.seek(0, os.SEEK_SET)
data = json.load(tmpfile)
tmpfile.close()
return data


@app.route('/', methods=['GET', 'POST'])
def test():
return 'OK'

datapoints = {}

@app.route('/search', methods=['GET', 'POST'])
def search():
j = request.get_json()

result = []
for x in j['targets']:
target = x['target']
if target not in datapoints:
datapoints[target] = []
result.append(target)

return jsonify(result)


@app.route('/query', methods=['GET', 'POST'])
def query():
j = request.get_json()
s = get_sensors_json()
n = s['n3000bmc_hwmon-isa-0000']

result = []
for x in j['targets']:
target = x['target']
if target not in datapoints:
datapoints[target] = []

value = 0.0
for k in n[target].keys():
if '_input' in k:
value = n[target][k]
break

datapoints[target].append([value, now_in_milliseconds()])
result.append({'target': target, 'datapoints': datapoints[target] })

return jsonify(result)

# End grafana SimpleJson data source


def token_info(t: fpga.token):
p = fpga.properties(t)
info = {}
Expand Down

0 comments on commit 9ace595

Please sign in to comment.