many refinements

This commit is contained in:
2025-11-02 15:20:34 -08:00
parent a9681e2c94
commit 982b7a374d
12 changed files with 169 additions and 170 deletions

View File

@ -19,13 +19,21 @@ container_http_port: "8088"
extra_volumes: ""
# api service vars
service_name: "drive_index"
service_folder: "/opt/ssd_health"
api_service_name: "drive_index"
api_service_folder: "{{ service_folder }}"
api_service_exe: "{{ service_folder }}/venv/bin/python {{ service_folder }}/app.py"
# kiosk service vars
kiosk_service_name: "drive_check"
kiosk_service_exe: "{{ service_folder }}/drive_check.sh"
# other vars
service_folder: "/opt/ssd_health"
db_path: "{{ service_folder }}/drive_records.db"
hello_there_url: "https://docs.theregion.beer/hello-there.png"
sector_size: "512"
install_kiosk: false
sleep_time: "5"
quick_refresh: false
...

View File

@ -28,7 +28,7 @@ function fetchSSDData() {
</head>
<body>
<div class="container">
<h1>SSD Health Dashboard</h1>
<button onclick="window.location.reload();" class="title-button"><h1>SSD Health Dashboard</h1></button>
<?php
$i=0;
$ssdData = fetchSSDData(); // Fetch data from the API

View File

@ -12,6 +12,18 @@ body {
display: none;
}
.title-button {
background-color: #34495e;
border: none;
color: white;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
margin: 4px 2px;
cursor: pointer;
}
.container {
max-width: 800px;
margin: 0 auto;

View File

@ -4,14 +4,19 @@ import json
app = Flask(__name__)
# Function to get all drive records from the database
def get_all_drive_records():
# sqlite query function
def query_db(sql_query):
conn = sqlite3.connect('drive_records.db')
cursor = conn.cursor()
cursor.execute("SELECT * FROM drive_records")
cursor.execute(sql_query)
rows = cursor.fetchall()
conn.close()
return rows
# Function to return all drive records in database
def get_all_drive_records():
get_all_drives = "SELECT * FROM drive_records"
rows = query_db(get_all_drives)
drives = []
for row in rows:
drive = {
@ -28,13 +33,8 @@ def get_all_drive_records():
# Function to check if a serial number exists in the database
def check_serial_exists(serial):
conn = sqlite3.connect('drive_records.db')
cursor = conn.cursor()
cursor.execute("SELECT * FROM drive_records WHERE serial=?", (serial,))
row = cursor.fetchone()
conn.close()
return bool(row)
return bool(query_db("SELECT * FROM drive_records WHERE serial=?", (serial,)))
# Route to check if a serial number exists in the database
@app.route('/check', methods=['GET'])
def check():

View File

@ -1,66 +0,0 @@
#!/bin/bash
# Function to display usage information
usage() {
echo "Usage: $0 -a \"serial,model,capacity,TBW,smart\""
exit 1
}
# Check if the correct number of arguments is provided
if [ "$#" -ne 2 ]; then
usage
fi
# Parse command-line arguments
while getopts ":a:" opt; do
case ${opt} in
a)
# Extract the comma-separated list of attributes
IFS=',' read -ra ATTRS <<< "$OPTARG"
;;
\?)
echo "Invalid option: $OPTARG" 1>&2
usage
;;
esac
done
shift $((OPTIND -1))
# Check if the database file exists, otherwise create it and initialize the table
DB_FILE="drive_records.db"
if [ ! -f "$DB_FILE" ]; then
sqlite3 "$DB_FILE" <<EOF
CREATE TABLE drive_records (id INTEGER PRIMARY KEY, serial TEXT NOT NULL, model TEXT NOT NULL, capacity TEXT NOT NULL, TBW TEXT NOT NULL, smart TEXT NOT NULL);
EOF
fi
# Read the input data from stdin
while read -r line; do
# Extract values for each attribute and insert into the database
VALUES=()
IFS=' ' read -ra PARTS <<< "$line"
for ((i = 0; i < ${#ATTRS[@]}; i++)); do
case "${ATTRS[i]}" in
serial)
VALUES+=("${PARTS[0]}")
;;
model)
VALUES+=("${PARTS[1]}")
;;
capacity)
VALUES+=("${PARTS[2]}")
;;
TBW)
VALUES+=("${PARTS[3]}")
;;
smart)
VALUES+=("${PARTS[4]}")
;;
esac
done
# Insert the values into the database
sqlite3 "$DB_FILE" <<EOF
INSERT INTO drive_records (serial, model, capacity, TBW, smart) VALUES ('${VALUES[0]}', '${VALUES[1]}', '${VALUES[2]}', '${VALUES[3]}', '${VALUES[4]}');
EOF
done <<< "$(cat -)"

View File

@ -36,6 +36,7 @@
# create hello_there ASCII art
- name: autologin - generate hello_there.txt for the lulz
when: not quick_refresh | bool
include_tasks: hello_there.yaml
- name: autologin - Restart getty@tty1 service

View File

@ -32,6 +32,7 @@
###############################################
- name: start drive history dashboard
when: not quick_refresh | bool
block:
- name: service_control_website - template config

View File

@ -1,7 +1,7 @@
---
- name: Drive Index - Install Packages
when: not quick_refresh | bool
apt:
name:
- "{{ ssd_health_packages_item }}"
@ -10,86 +10,129 @@
loop_control:
loop_var: ssd_health_packages_item
# Create Service Folder
- name: Drive Index - create ssd_check service folder
file:
path: "{{ service_folder }}"
state: directory
owner: "{{ autologin_user }}"
group: "{{ autologin_user }}"
mode: '0755'
- name: Drive Index - file and folder handler
block:
- name: Drive Index - copy script files
copy:
src: scripts/
dest: "{{ service_folder }}/"
owner: "{{ autologin_user }}"
group: "{{ autologin_user }}"
mode: 0755
- name: Drive Index - create ssd_check service folder
file:
path: "{{ service_folder }}"
state: directory
owner: "{{ autologin_user }}"
group: "{{ autologin_user }}"
mode: '0755'
- name: Drive Index - copy script files
copy:
src: scripts/
dest: "{{ service_folder }}/"
owner: "{{ autologin_user }}"
group: "{{ autologin_user }}"
mode: 0755
- name: Drive Index - initialize db
shell: "{{ service_folder }}/store_drive.sh -i -d {{ db_path }}"
- name: "Drive Index - template drive_check.sh"
template:
src: drive_check.sh
dest: "{{ service_folder }}/drive_check.sh"
mode: 0755
owner: "{{ autologin_user }}"
group: "{{ autologin_user }}"
# Create python service venv
- name: Drive Index - create python venv requirement file
copy:
dest: "{{ service_folder }}/requirements.txt"
content: |
flask
pytz
requests
opencv-python
owner: "{{ autologin_user }}"
group: "{{ autologin_user }}"
mode: 0644
- name: Drive Index - Python venv handler
when: not quick_refresh | bool
block:
# build venv
- name: Drive Index - build python venv
pip:
virtualenv: "{{ service_folder }}/venv"
requirements: "{{ service_folder }}/requirements.txt"
virtualenv_command: python3 -m venv
state: present
- name: Drive Index - create python venv requirement file
copy:
dest: "{{ service_folder }}/requirements.txt"
content: |
flask
pytz
requests
opencv-python
owner: "{{ autologin_user }}"
group: "{{ autologin_user }}"
mode: 0644
# stop service
- name: "Drive Index - {{ service_name }} api - stop api service if running"
ignore_errors: yes
systemd:
name: "{{ service_name }}.service"
state: stopped
- name: Drive Index - build python venv
pip:
virtualenv: "{{ service_folder }}/venv"
requirements: "{{ service_folder }}/requirements.txt"
virtualenv_command: python3 -m venv
state: present
# Create service_control api service
- name: "Drive Index - template {{ service_name }}.service"
template:
src: drive_index.service
dest: /etc/systemd/system/drive_index.service
mode: 0644
- name: Drive Index - api service handler
block:
# Create drive_check.sh
- name: "Drive Index - template drive_check.sh"
template:
src: drive_check.sh
dest: "{{ service_folder }}/drive_check.sh"
mode: 0755
owner: "{{ autologin_user }}"
group: "{{ autologin_user }}"
- name: "Drive Index - {{ api_service_name }} - stop service if running"
ignore_errors: yes
systemd:
name: "{{ api_service_name }}.service"
state: stopped
# daemon reload
- name: "Drive Index - {{ service_name }} api - daemon reload"
systemd:
daemon_reload: yes
- name: "Drive Index - template {{ api_service_name }}.service"
vars:
service_name: "{{ api_service_name }}"
service_working_folder: "{{ api_service_folder }}"
service_exe: "{{ api_service_exe }}"
template:
src: "service_template.service"
dest: "/etc/systemd/system/{{ api_service_name }}.service"
mode: 0644
# Enable and start
- name: "Drive Index - {{ service_name }} api - enable and start service api"
systemd:
name: "{{ service_name }}.service"
state: started
enabled: yes
- name: "Drive Index - {{ api_service_name }} - daemon reload"
systemd:
daemon_reload: yes
- name: "Drive Index - {{ service_name }} api - enable and start service timeoue api"
systemd:
name: "{{ service_name }}.service"
state: started
enabled: yes
- name: "Drive Index - {{ api_service_name }} - enable and start service"
systemd:
name: "{{ api_service_name }}.service"
state: started
enabled: yes
- name: Drive Index - initialize db
shell: "{{ service_folder }}/store_drive.sh -i -d {{ db_path }}"
- name: Drive Index - kiosk mode handler
when: install_kiosk | bool
block:
- name: Drive Index - set sleep_time to 1
set_fact:
sleep_time: "1"
- name: "Drive Index - template drive_check.sh again"
template:
src: drive_check.sh
dest: "{{ service_folder }}/drive_check.sh"
mode: 0755
owner: "{{ autologin_user }}"
group: "{{ autologin_user }}"
- name: "Drive Index - {{ kiosk_service_name }}.service - stop service if running"
ignore_errors: yes
systemd:
name: "{{ kiosk_service_name }}.service"
state: stopped
- name: "Drive Index - template {{ kiosk_service_name }}.service"
vars:
service_name: "{{ kiosk_service_name }}"
service_working_folder: "{{ service_folder }}"
service_exe: "{{ kiosk_service_exe }}"
template:
src: "service_template.service"
dest: "/etc/systemd/system/{{ kiosk_service_name }}.service"
mode: 0644
- name: "Drive Index - {{ kiosk_service_name }} - daemon reload"
systemd:
daemon_reload: yes
- name: "Drive Index - {{ kiosk_service_name }} - enable and start service api"
systemd:
name: "{{ kiosk_service_name }}.service"
state: started
enabled: yes
...

View File

@ -2,6 +2,7 @@
# create and configure user account
- name: Drive health - set up user account
when: not quick_refresh | bool
include_tasks: user_setup.yaml
# create drive index service

View File

@ -85,7 +85,7 @@ while true; do
echo "Skipping $DISK, not SATA SSD or NVMe"
fi
done
# wait 15 seconds, loop again
echo "Sleeping 15 seconds so you can read this"
sleep 15
# wait {{ sleep_time }} seconds, loop again
echo "Sleeping {{ sleep_time }} seconds"
sleep {{ sleep_time }}
done

View File

@ -1,16 +0,0 @@
[Unit]
Description={{ service_name }}
git remote add origin git@gitea.matt-cloud.com:matt/ssd_health.gitAPI
After=network.target
[Service]
User=root
Group=root
WorkingDirectory={{ service_folder }}
ExecStartPre=/bin/sleep 5
ExecStart={{ service_folder }}/venv/bin/python {{ service_folder }}/app.py
Restart=always
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,15 @@
[Unit]
Description={{ service_name }}
After=network.target
[Service]
User=root
Group=root
WorkingDirectory={{ service_working_folder }}
ExecStartPre=/bin/sleep 5
ExecStart={{ service_exe }}
Restart=always
[Install]
WantedBy=multi-user.target