commit d409353b11290455f6e9e80b429aff4d04823830 Author: Gabriel Augendre Date: Thu Jun 11 08:42:15 2020 +0200 Add CSV stats parsing script diff --git a/main.py b/main.py new file mode 100644 index 0000000..55691c7 --- /dev/null +++ b/main.py @@ -0,0 +1,48 @@ +from flask import Flask, request +import csv +from io import StringIO +from influxdb import InfluxDBClient +import datetime +import os + + +INFLUX_USER = os.getenv("INFLUX_USER") +INFLUX_PASSWORD = os.getenv("INFLUX_PASSWORD") +INFLUX_DB = os.getenv("INFLUX_DB") + +app = Flask(__name__) + +@app.route("/stats", methods=["POST"]) +def hello_world(): + client = InfluxDBClient('localhost', 8086, INFLUX_USER, INFLUX_PASSWORD, INFLUX_DB) + influx_data = [] + time = datetime.datetime.now().astimezone().isoformat() + + data = request.data.decode("utf-8").split("\r\n") + reader = csv.DictReader(data, delimiter=",", quotechar='"') + for line in reader: + try: + view_count = int(line["view_count"]) + id_ = line["id"] + slug = line["slug"] + title = line["title"] + except (ValueError, KeyError): + continue + + influx_data.append({ + "measurement": "blog_stats", + "time": time, + "tags": { + "id": id_, + "slug": slug, + "title": title + }, + "fields": { + "value": view_count + } + }) + + if influx_data: + client.write_points(influx_data) + return "written" + return "nothing to write" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..f8ae517 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +uwsgi +influxdb +flask \ No newline at end of file