from flask import Flask, render_template_string from apscheduler.schedulers.background import BackgroundScheduler import subprocess from datetime import datetime app = Flask(__name__) execution_logs = [] MAX_LOG_ENTRIES = 20 def run_cli_script(): timestamp = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S UTC") log_entry = {'time': timestamp, 'output': '', 'error': ''} try: result = subprocess.run( ["python", "cli.py"], capture_output=True, text=True, timeout=300 ) log_entry['output'] = result.stdout log_entry['error'] = result.stderr except Exception as e: log_entry['error'] = str(e) finally: execution_logs.append(log_entry) if len(execution_logs) > MAX_LOG_ENTRIES: execution_logs.pop(0) # Initialize scheduler with a named job scheduler = BackgroundScheduler(daemon=True) scheduler.add_job( run_cli_script, 'interval', hours=3, id='main_job', next_run_time=datetime.now() # Initial run time ) scheduler.start() run_cli_script() # Initial run @app.route('/') def home(): # Get the specific job by ID job = scheduler.get_job('main_job') next_run = job.next_run_time.strftime('%Y-%m-%d %H:%M:%S UTC') if job else 'N/A' return render_template_string('''
Next run: {{ next_run }}