diff --git a/Flask-monitoring/app.py b/Flask-monitoring/app.py index 5b55ec5..12a8dba 100644 --- a/Flask-monitoring/app.py +++ b/Flask-monitoring/app.py @@ -13,6 +13,14 @@ class Log(db.Model): hostname = db.Column(db.String(100), nullable=False) message = db.Column(db.String(500), nullable=False) timestamp = db.Column(db.DateTime, default=datetime.utcnow) + relay1_status = db.Column(db.String(10), default='off') + relay2_status = db.Column(db.String(10), default='off') + relay3_status = db.Column(db.String(10), default='off') + relay4_status = db.Column(db.String(10), default='off') + input1_status = db.Column(db.String(10), default='off') + input2_status = db.Column(db.String(10), default='off') + input3_status = db.Column(db.String(10), default='off') + input4_status = db.Column(db.String(10), default='off') # Create the database if it does not exist if not os.path.exists('instance/logs.db'): @@ -35,7 +43,63 @@ def log_message(): hostname = data.get('hostname') message = data.get('message') if hostname and message: - new_log = Log(hostname=hostname, message=message) + # Get the latest log for the hostname to determine the current status + latest_log = Log.query.filter_by(hostname=hostname).order_by(Log.timestamp.desc()).first() + relay1_status = latest_log.relay1_status if latest_log else 'off' + relay2_status = latest_log.relay2_status if latest_log else 'off' + relay3_status = latest_log.relay3_status if latest_log else 'off' + relay4_status = latest_log.relay4_status if latest_log else 'off' + input1_status = latest_log.input1_status if latest_log else 'off' + input2_status = latest_log.input2_status if latest_log else 'off' + input3_status = latest_log.input3_status if latest_log else 'off' + input4_status = latest_log.input4_status if latest_log else 'off' + + # Update the status based on the log message + if "Relay 1 turned ON" in message: + relay1_status = 'on' + elif "Relay 1 turned OFF" in message: + relay1_status = 'off' + if "Relay 2 turned ON" in message: + relay2_status = 'on' + elif "Relay 2 turned OFF" in message: + relay2_status = 'off' + if "Relay 3 turned ON" in message: + relay3_status = 'on' + elif "Relay 3 turned OFF" in message: + relay3_status = 'off' + if "Relay 4 turned ON" in message: + relay4_status = 'on' + elif "Relay 4 turned OFF" in message: + relay4_status = 'off' + if "Input 1 pressed" in message: + input1_status = 'on' + elif "Input 1 released" in message: + input1_status = 'off' + if "Input 2 pressed" in message: + input2_status = 'on' + elif "Input 2 released" in message: + input2_status = 'off' + if "Input 3 pressed" in message: + input3_status = 'on' + elif "Input 3 released" in message: + input3_status = 'off' + if "Input 4 pressed" in message: + input4_status = 'on' + elif "Input 4 released" in message: + input4_status = 'off' + + new_log = Log( + hostname=hostname, + message=message, + relay1_status=relay1_status, + relay2_status=relay2_status, + relay3_status=relay3_status, + relay4_status=relay4_status, + input1_status=input1_status, + input2_status=input2_status, + input3_status=input3_status, + input4_status=input4_status + ) db.session.add(new_log) db.session.commit() return jsonify({'status': 'success', 'message': 'Log saved'}), 201 @@ -73,8 +137,29 @@ def index(): @app.route('/board/') def view_board(hostname): - logs = Log.query.filter_by(hostname=hostname).order_by(Log.timestamp.desc()).all() - return render_template('board.html', hostname=hostname, logs=logs) + logs = Log.query.filter_by(hostname=hostname).order_by(Log.timestamp.asc()).all() # Order by ascending timestamp + relay_status = ['off', 'off', 'off', 'off'] + input_status = ['off', 'off', 'off', 'off'] + relay_messages = ['', '', '', ''] + input_messages = ['', '', '', ''] + + # Determine the status of each relay and input based on the latest log messages + for log in logs: + for i in range(4): + if f"Relay {i + 1} turned ON" in log.message: + relay_status[i] = 'on' + relay_messages[i] = log.message + elif f"Relay {i + 1} turned OFF" in log.message: + relay_status[i] = 'off' + relay_messages[i] = log.message + if f"Input {i + 1} pressed" in log.message: + input_status[i] = 'on' + input_messages[i] = log.message + elif f"Input {i + 1} released" in log.message: + input_status[i] = 'off' + input_messages[i] = log.message + + return render_template('board.html', hostname=hostname, logs=logs, relay_status=relay_status, input_status=input_status, relay_messages=relay_messages, input_messages=input_messages) @app.route('/delete_board/', methods=['POST']) def delete_board(hostname): @@ -85,7 +170,22 @@ def delete_board(hostname): @app.route('/board//logs', methods=['GET']) def get_board_logs(hostname): logs = Log.query.filter_by(hostname=hostname).order_by(Log.timestamp.desc()).all() - return jsonify({'logs': [{'timestamp': log.timestamp, 'message': log.message} for log in logs]}) + latest_log = logs[0] if logs else None + return jsonify({ + 'logs': [{'timestamp': log.timestamp, 'message': log.message} for log in logs], + 'relay_status': { + 'relay1': latest_log.relay1_status if latest_log else 'off', + 'relay2': latest_log.relay2_status if latest_log else 'off', + 'relay3': latest_log.relay3_status if latest_log else 'off', + 'relay4': latest_log.relay4_status if latest_log else 'off' + }, + 'input_status': { + 'input1': latest_log.input1_status if latest_log else 'off', + 'input2': latest_log.input2_status if latest_log else 'off', + 'input3': latest_log.input3_status if latest_log else 'off', + 'input4': latest_log.input4_status if latest_log else 'off' + } + }) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) \ No newline at end of file diff --git a/Flask-monitoring/templates/board.html b/Flask-monitoring/templates/board.html index a54fb83..77bbf45 100644 --- a/Flask-monitoring/templates/board.html +++ b/Flask-monitoring/templates/board.html @@ -27,6 +27,18 @@ color: #6c757d; text-align: right; } + .status-indicator { + width: 20px; + height: 20px; + display: inline-block; + border-radius: 50%; + } + .status-on { + background-color: #28a745; + } + .status-off { + background-color: #dc3545; + }