feb git sync

This commit is contained in:
2026-02-11 14:00:11 -08:00
parent 94c31f4be3
commit 978f640e96
13 changed files with 571 additions and 139 deletions

99
files/oop_code/ssd_api.py Normal file
View File

@ -0,0 +1,99 @@
from flask import Flask, jsonify, request
import sqlite3
import redis, json, time
from SSDObject import *
from flask_apscheduler import APScheduler
from HostRedis import *
app = Flask(__name__)
debug_output = False
secure_api = False
push_redis = True
####################################################
### Flask Routes
####################################################
# Route to check if a serial number exists in the database
@app.route('/check', methods=['GET'])
def check():
serial_lookup = request.args.get('serial_lookup')
if debug_output:
print(f"Serial to check: {serial_lookup}")
if not serial_lookup:
return jsonify({'error': 'No serial number provided'}), 400
exists = check_serial_exists(serial_lookup)
return jsonify({'serial_number_exists': exists, 'serial_lookup': serial_lookup})
# Route to get all drive records in JSON format
@app.route('/drives', methods=['GET'])
def index():
return get_all_drive_records()
# Route to return active drives
@app.route('/list_active_drives', methods=['GET'])
def list_active_drives():
return jsonify(list_disk_and_serial())
# host stats
@app.route('/host_stats', methods=['GET'])
def host_stats():
if push_redis:
update_stats_redis()
return jsonify(get_host_stats())
# test route
@app.route('/test', methods=['GET'])
def test():
db_check = "SELECT name FROM sqlite_master WHERE type='table';"
return query_db(db_check)
####################################################
### Flask Scheduler Handlers
####################################################
def ssd_scan():
disk_list_command = "ls -lo /dev/sd? | awk '{print $9}' | cut -d/ -f3"
disk_list = run_command(disk_list_command, zero_only = False)
disk_objects = []
for disk in disk_list:
if debug_output:
print(disk)
try:
disk_objects.append(SSDObject(dev_id = disk))
except (TypeError, ValueError, KeyError, OSError) as e:
print(f"Error - {e}")
if debug_output:
for disk in disk_objects:
print(disk)
print(list_disk_and_serial())
if push_redis:
update_stats_redis()
update_disk_redis()
time.sleep(0.2)
if __name__ == '__main__':
# send immediate stats update to redis
if push_redis:
update_stats_redis()
# Flask scheduler for scanner
scheduler = APScheduler()
scheduler.add_job(id='ssd_check',
func=ssd_scan,
trigger='interval',
seconds=1)
scheduler.init_app(app)
scheduler.start()
if secure_api:
app.run(debug=True, host='172.17.0.1', port=5000)
else:
app.run(debug=True, host='0.0.0.0', port=5000)