48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
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"
|