We now have working api and simple webpages to view the data.
This commit is contained in:
@ -0,0 +1,81 @@
|
||||
from flask import Flask
|
||||
from .database.SlidingSqlite.SlidingSqlite import SlidingSQLite
|
||||
import os
|
||||
import configparser
|
||||
import json
|
||||
|
||||
def load_admin_api_key(app):
|
||||
"""Load admin API key from config file, env var, or database."""
|
||||
admin_key = None
|
||||
|
||||
# 1. Try environment variable
|
||||
admin_key = os.getenv('ADMIN_API_KEY')
|
||||
if admin_key:
|
||||
app.config['ADMIN_API_KEY'] = admin_key
|
||||
return
|
||||
|
||||
# 2. Try config file (e.g., /app/config.ini or /app/config.json)
|
||||
config_file = '/app/config.ini'
|
||||
if os.path.exists(config_file):
|
||||
config = configparser.ConfigParser()
|
||||
config.read(config_file)
|
||||
admin_key = config.get('auth', 'admin_api_key', fallback=None)
|
||||
elif os.path.exists('/app/config.json'):
|
||||
config_file = '/app/config.json'
|
||||
with open(config_file, 'r') as f:
|
||||
config = json.load(f)
|
||||
admin_key = config.get('auth', {}).get('admin_api_key')
|
||||
|
||||
if admin_key:
|
||||
app.config['ADMIN_API_KEY'] = admin_key
|
||||
return
|
||||
|
||||
# Check database
|
||||
query = "SELECT api_key FROM admin_keys LIMIT 1"
|
||||
result = app.db.execute_read_sync(query)
|
||||
if result.success and result.data:
|
||||
app.config['ADMIN_API_KEY'] = result.data[0][0]
|
||||
return
|
||||
|
||||
# Generate and store a new key
|
||||
import secrets
|
||||
default_key = secrets.token_hex(16)
|
||||
app.config['ADMIN_API_KEY'] = default_key
|
||||
app.db.execute_write(
|
||||
"INSERT INTO admin_keys (api_key, description) VALUES (?, ?)",
|
||||
(default_key, "Default admin key created on bootstrap")
|
||||
)
|
||||
# Log the default key (in a real app, you'd log this securely)
|
||||
print(f"Generated and stored default admin API key: {default_key}")
|
||||
|
||||
def create_app():
|
||||
app = Flask(__name__)
|
||||
|
||||
# Configuration
|
||||
# app.config['DB_DIR'] = '/home/kalzu/src/ai-coding/node-monitor/temp_data/data/db' # Change this for container!
|
||||
app.config['DB_DIR'] = '/data/db' # This is container version
|
||||
app.config['RETENTION_PERIOD'] = 604800 # 7 days
|
||||
app.config['ROTATION_INTERVAL'] = 3600 # 1 hour
|
||||
|
||||
# Load schema
|
||||
with open(os.path.join(os.path.dirname(__file__), 'database', 'schema.sql'), 'r') as f:
|
||||
schema = f.read()
|
||||
|
||||
# Initialize SlidingSQLite
|
||||
app.db = SlidingSQLite(
|
||||
db_dir=app.config['DB_DIR'],
|
||||
schema=schema,
|
||||
retention_period=app.config['RETENTION_PERIOD'],
|
||||
rotation_interval=app.config['ROTATION_INTERVAL']
|
||||
)
|
||||
|
||||
# Load admin API key
|
||||
load_admin_api_key(app)
|
||||
|
||||
# Register blueprints
|
||||
from .api import routes as api_routes
|
||||
from .web import routes as web_routes
|
||||
app.register_blueprint(api_routes.bp)
|
||||
app.register_blueprint(web_routes.bp)
|
||||
|
||||
return app
|
||||
|
Reference in New Issue
Block a user