commit
bbd3c995f4
@ -0,0 +1 @@
|
|||||||
|
env/
|
@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2021 jlj
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
@ -0,0 +1,103 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
"""Listen for stuff with flask!
|
||||||
|
This will listen on two endpoints, and when data is
|
||||||
|
posted to the proper one, matching a particular format,
|
||||||
|
it will save that data to a local sqlite3 db."""
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from flask import Flask, redirect, url_for, request
|
||||||
|
import json
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
import pdb
|
||||||
|
|
||||||
|
__version__ = "0.1.0"
|
||||||
|
|
||||||
|
logging.basicConfig(level=logging.DEBUG)
|
||||||
|
|
||||||
|
dbpath = "warren.db"
|
||||||
|
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
|
||||||
|
else:
|
||||||
|
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."""
|
||||||
|
|
||||||
|
# TODO: write directory handling shit
|
||||||
|
|
||||||
|
# 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:
|
||||||
|
logging.error(logging.ERROR[0])
|
||||||
|
|
||||||
|
|
||||||
|
def write_to_db(data, dbpath):
|
||||||
|
|
||||||
|
pdb.set_trace()
|
||||||
|
if check_if_db_exists(dbpath) != True:
|
||||||
|
db = 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()
|
||||||
|
logging.INFO(cur.lastrowid)
|
||||||
|
|
||||||
|
# always make sure to close db connection after you're done
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/')
|
||||||
|
def test():
|
||||||
|
return 'the website is up you little bitch'
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/weir',methods = ['POST'])
|
||||||
|
def weir():
|
||||||
|
""""""
|
||||||
|
try:
|
||||||
|
python_dict = request.get_json()
|
||||||
|
write_to_db(python_dict, "warren.db")
|
||||||
|
return "OK"
|
||||||
|
except:
|
||||||
|
return "Error.", 400
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app.run(debug = True)
|
@ -0,0 +1,11 @@
|
|||||||
|
[build-system]
|
||||||
|
requires = ["flit_core >=2,<4"]
|
||||||
|
build-backend = "flit_core.buildapi"
|
||||||
|
|
||||||
|
[tool.flit.metadata]
|
||||||
|
module = "warren"
|
||||||
|
author = "jlj"
|
||||||
|
author-email = "me@jowj.net"
|
||||||
|
home-page = "https://jowj.net"
|
||||||
|
classifiers = [ "License :: OSI Approved :: MIT License",]
|
||||||
|
|
@ -0,0 +1,12 @@
|
|||||||
|
* warren is the server part of weir
|
||||||
|
Listen for http posts on two routes,
|
||||||
|
** roadmap
|
||||||
|
- [X] listen for posts on a specific url
|
||||||
|
- [X] save data extracted from body of post to sqlite
|
||||||
|
- [ ] Write directory handling stuff for new db create
|
||||||
|
- [ ] Make sure logging is working as expected; i think i've done something wrong with naming with caps.
|
||||||
|
- [ ] Migrate away from flask's dev server and use a real WSGI server per the in-app warning
|
||||||
|
- [ ] ^^ but postgresql and in a managed instance
|
||||||
|
- [ ] gui front end for sql queries
|
||||||
|
** references
|
||||||
|
gonna try this new packaging paradigm: https://antonz.org/python-packaging/
|
Reference in new issue