first successful test

This commit is contained in:
2025-08-24 19:49:45 -07:00
parent 96906161fd
commit cc24088bbe
9 changed files with 388 additions and 110 deletions

View File

@ -4,6 +4,7 @@ from lxml import html
from flask import Flask, request, jsonify
import json
import os
from datetime import datetime, timedelta
app = Flask(__name__)
@ -49,10 +50,81 @@ def service_status():
result = subprocess.run(command, shell=True, check=True, capture_output=True, text=True)
command = "systemctl status {{ service_control_name }} | grep Active | cut -d ':' -f 2 | cut -d ' ' -f 2"
status = subprocess.run(command, shell=True, check=True, capture_output=True, text=True)
return {"Message": result.stdout.strip('\n'), "Status": status.stdout.strip('\n')}
if status.stdout.strip('\n') == "active":
elapsed_time = check_time_elapsed(result.stdout.strip('\n'))
times_up(elapsed_time)
else:
elapsed_time = -1
return {"Elapsed_Time": elapsed_time, "Service Name": "{{ service_control_name }}", "Message": result.stdout.strip('\n'), "Status": status.stdout.strip('\n')}
except subprocess.CalledProcessError as e:
return {"Error": e.strip('\n')}
def save_duration(new_duration):
# this will be an integer from 0-3 for
# 30min, 1hr, 2hr, and 6rh respectively
seconds = 1800
if new_duration == "0":
seconds = 1800
if new_duration == "1":
seconds = 3600
if new_duration == "2":
seconds = 7200
if new_duration == "3":
seconds = 21600
info = {
"duration": new_duration,
"seconds": seconds
}
with open("duration.json", "w") as file:
json.dump(info, file, indent=4)
return {"status": "duration.json stored"}
def get_duration():
try:
with open('duration.json', 'r') as file:
data = json.load(file)
return (data)
except Exception as e:
return {"error": str(e)}, 500
def check_time_elapsed(time_str):
# Extract the time part from the string
datetime_extract = time_str.split("since ")[1].split(";")[0]
try:
time_format = "%a %Y-%m-%d %H:%M:%S %Z"
given_time = datetime.strptime(datetime_extract, time_format)
except ValueError as e:
raise ValueError(f"Error parsing the time string: {datetime_extract}" + str(e))
# Get the current time
now = datetime.now()
# Calculate the difference in seconds
delta = now - given_time
total_seconds = int(delta.total_seconds())
return total_seconds
def times_up(time_elapsed):
duration_json = get_duration()
stored_duration = duration_json["duration"]
if stored_duration == 0:
if time_elapsed > 1800:
stop_service()
elif stored_duration == 1:
if time_elapsed > 3600:
stop_service()
elif stored_duration == 2:
if time_elapsed > 7200:
stop_service()
elif stored_duration == 3:
if time_elapsed > 21600:
stop_service()
@app.route('/start', methods=['GET'])
def start():
try:
@ -77,6 +149,27 @@ def status():
print(e)
return jsonify({'error': e}), 400
@app.route('/check_duration', methods=['GET'])
def check_duration():
try:
return jsonify(get_duration())
except ValueError as e:
print(e)
return jsonify({'error': e}), 400
@app.route('/store_duration', methods=['GET'])
def store_duration():
try:
new_duration = request.args.get('new_duration')
except ValueError as e:
return jsonify({'error': e}), 400
if new_duration:
try:
return jsonify(save_duration(new_duration))
except ValueError as e:
print(e)
return jsonify({'error': e}), 400
@app.route('/test', methods=['GET'])
def test():
return jsonify({'message': 'Hello there'})

View File

@ -0,0 +1,15 @@
[Unit]
Description=VCR Streaming Service Timeout Helper
After=network.target
[Service]
Type=simple
WorkingDirectory={{ service_control_folder }}
ExecStart=/bin/bash {{ service_control_folder }}/service_timeout.sh
Restart=always
User=root
Group=root
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,17 @@
#!/bin/bash
i=1
while [ $i ]
do
TIME_ELAPSED=$(curl -s http://172.17.0.1:5000/status | jq .Elapsed_Time)
TIMEOUT_VALUE=$(cat {{ streaming_working_folder }}/service_control/duration.json | jq .seconds)
if [[ $TIME_ELAPSED -gt $TIMEOUT_VALUE ]]; then
curl -s http://172.17.0.1:5000/stop
i=0
fi
sleep 1
done