]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
telemetry/server: add device report endpoint
authorSage Weil <sage@redhat.com>
Fri, 4 Oct 2019 20:17:07 +0000 (15:17 -0500)
committerSage Weil <sage@redhat.com>
Thu, 10 Oct 2019 02:30:13 +0000 (21:30 -0500)
Add a standalone endpoint to report device telemetry.

Signed-off-by: Sage Weil <sage@redhat.com>
src/telemetry/server/ceph_telemetry/app.py
src/telemetry/server/ceph_telemetry/rest/device.py [new file with mode: 0644]

index f2c2b99737733aafe2098b235a34e29341cacae0..0d2b5e1d7603eecbd753e9b553448b69eed40ed6 100755 (executable)
@@ -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 (file)
index 0000000..02506c0
--- /dev/null
@@ -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()