From: Sage Weil Date: Fri, 4 Oct 2019 20:17:07 +0000 (-0500) Subject: telemetry/server: add device report endpoint X-Git-Tag: v15.1.0~1293^2~1 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=877183f64249a17b2fd8e0aef5e51595a341b7f2;p=ceph-ci.git telemetry/server: add device report endpoint Add a standalone endpoint to report device telemetry. Signed-off-by: Sage Weil --- diff --git a/src/telemetry/server/ceph_telemetry/app.py b/src/telemetry/server/ceph_telemetry/app.py index f2c2b997377..0d2b5e1d760 100755 --- a/src/telemetry/server/ceph_telemetry/app.py +++ b/src/telemetry/server/ceph_telemetry/app.py @@ -2,7 +2,7 @@ import argparse from flask_restful import Api from flask import Flask -from ceph_telemetry.rest import Index, Report +from ceph_telemetry.rest import Index, Report, Device def create_app(name): @@ -10,6 +10,7 @@ def create_app(name): api = Api(app, catch_all_404s=True) api.add_resource(Index, '/') api.add_resource(Report, '/report') + api.add_resource(Device, '/device') return app diff --git a/src/telemetry/server/ceph_telemetry/rest/device.py b/src/telemetry/server/ceph_telemetry/rest/device.py new file mode 100644 index 00000000000..02506c0e655 --- /dev/null +++ b/src/telemetry/server/ceph_telemetry/rest/device.py @@ -0,0 +1,40 @@ +from flask import request, jsonify +from flask_restful import Resource +import datetime +import hashlib +import json +import copy +import psycopg2 + +class Device(Resource): + def __init__(self, report=None): + super(Device, self).__init__() + self.report = report + with open('/opt/telemetry/pg_pass.txt', 'r') as f: + p = f.read() + self.pg_password = p.strip() + + def put(self): + self.report = request.get_json(force=True) + + self.post_to_postgres() + + return jsonify(status=True) + + def _connect_pg(self): + return psycopg2.connect( + host='localhost', + database='telemetry', + user='telemetry', + password=self.pg_password, + ) + + def post_to_postgres(self): + conn = self._connect_pg() + cur = conn.cursor() + for devid, devinfo in self.report: + for stamp, report in devinfo: + cur.execute( + 'INSERT INTO device_report (device_id, report_stamp, report) VALUES (%s,%s,%s) ON CONFLICT DO NOTHING', + (devid, stamp, report)) + conn.commit()