feb git sync
This commit is contained in:
99
files/oop_code/ssd_api.py
Normal file
99
files/oop_code/ssd_api.py
Normal 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)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user