|
|
|
#!/usr/bin/env python
|
|
|
|
"""Part of the Weir project."""
|
|
|
|
|
|
|
|
import logging
|
|
|
|
from datetime import datetime
|
|
|
|
import os
|
|
|
|
|
|
|
|
import pdb
|
|
|
|
|
|
|
|
import json
|
|
|
|
import sqlite3
|
|
|
|
from flask import Flask, request
|
|
|
|
|
|
|
|
|
|
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
|
|
app = Flask(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
def parse_incoming_post(body):
|
|
|
|
"""given a body of a request, convert it from json to pydict"""
|
|
|
|
json_dict = json.loads(body)
|
|
|
|
return json_dict
|
|
|
|
|
|
|
|
|
|
|
|
def check_if_db_exists(dbpath):
|
|
|
|
"""checks to see if the db exists"""
|
|
|
|
if os.path.exists(dbpath):
|
|
|
|
return True
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
def init_new_db(dbpath):
|
|
|
|
"""when you create a DB connection with SQLite3 you
|
|
|
|
will automatically create a db file if one is not there.
|
|
|
|
This function handles explicitly creating the folder structure
|
|
|
|
and inniting the connection as required.
|
|
|
|
|
|
|
|
You can specify your own dbpath, or you can use the default dbpath."""
|
|
|
|
|
|
|
|
# directory handling will go here
|
|
|
|
|
|
|
|
# handle the DB stuff
|
|
|
|
conn = None
|
|
|
|
|
|
|
|
try:
|
|
|
|
conn = sqlite3.connect(dbpath)
|
|
|
|
cur = conn.cursor()
|
|
|
|
cur.execute("""CREATE TABLE weir (date, hostname, metadata)""")
|
|
|
|
conn.commit()
|
|
|
|
logging.debug(sqlite3.version)
|
|
|
|
logging.debug("Creating new weir table.")
|
|
|
|
|
|
|
|
conn.close()
|
|
|
|
except sqlite3.OperationalError as error:
|
|
|
|
logging.error(error)
|
|
|
|
|
|
|
|
|
|
|
|
def write_to_db(data, dbpath):
|
|
|
|
"""given a python dict and a path for the db, writes dict to db.
|
|
|
|
calls out to create a new db if one doesn't exist."""
|
|
|
|
pdb.set_trace()
|
|
|
|
if check_if_db_exists(dbpath) is not True:
|
|
|
|
init_new_db(dbpath)
|
|
|
|
|
|
|
|
conn = sqlite3.connect(dbpath)
|
|
|
|
cur = conn.cursor()
|
|
|
|
|
|
|
|
right_now = datetime.utcnow().strftime("%Y%m%d")
|
|
|
|
sql_inputs = [(right_now, data["hostname"], data["metadata"])]
|
|
|
|
cur.executemany("INSERT INTO weir VALUES (?,?,?)", sql_inputs)
|
|
|
|
conn.commit()
|
|
|
|
|
|
|
|
# always make sure to close db connection after you're done
|
|
|
|
conn.close()
|
|
|
|
|
|
|
|
|
|
|
|
@app.route("/")
|
|
|
|
def test():
|
|
|
|
"""healthcheck endpoint with no logic; useful for loadbalancing checks."""
|
|
|
|
return "the website is up you little bitch"
|
|
|
|
|
|
|
|
|
|
|
|
@app.route("/weir", methods=["POST"])
|
|
|
|
def weir():
|
|
|
|
"""Primary app route."""
|
|
|
|
try:
|
|
|
|
python_dict = request.get_json()
|
|
|
|
write_to_db(python_dict, "warren.db")
|
|
|
|
return "OK"
|
|
|
|
except Exception as error:
|
|
|
|
return f"Error: {error}.", 400
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
app.run(debug=True)
|