Initial commit, 90% there
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
#!/usr/bin/env python3
|
||||
import json
|
||||
|
||||
with open('/home/mdares/.node-red/flows.json', 'r') as f:
|
||||
flows = json.load(f)
|
||||
|
||||
# SQL to create the table
|
||||
create_table_sql = """CREATE TABLE IF NOT EXISTS anomaly_events (
|
||||
event_id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
timestamp BIGINT NOT NULL,
|
||||
work_order_id VARCHAR(50),
|
||||
anomaly_type VARCHAR(50) NOT NULL,
|
||||
severity ENUM('info', 'warning', 'critical') NOT NULL DEFAULT 'warning',
|
||||
title VARCHAR(200) NOT NULL,
|
||||
description TEXT,
|
||||
data_json TEXT,
|
||||
kpi_snapshot_json TEXT,
|
||||
status ENUM('active', 'acknowledged', 'resolved') DEFAULT 'active',
|
||||
acknowledged_at BIGINT,
|
||||
resolved_at BIGINT,
|
||||
auto_resolved BOOLEAN DEFAULT FALSE,
|
||||
cycle_count INT,
|
||||
occurrence_count INT DEFAULT 1,
|
||||
last_occurrence BIGINT,
|
||||
notes TEXT,
|
||||
INDEX idx_timestamp (timestamp),
|
||||
INDEX idx_work_order (work_order_id),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_type (anomaly_type),
|
||||
INDEX idx_severity (severity)
|
||||
)"""
|
||||
|
||||
# Find the tab where we'll add the setup node (use the same tab as other nodes)
|
||||
tab_id = None
|
||||
for node in flows:
|
||||
if node.get('type') == 'tab':
|
||||
tab_id = node['id']
|
||||
break
|
||||
|
||||
if not tab_id:
|
||||
print("✗ Could not find a tab to add the node to")
|
||||
exit(1)
|
||||
|
||||
# Create an inject node to trigger the table creation
|
||||
inject_node = {
|
||||
"id": "create_table_inject_temp",
|
||||
"type": "inject",
|
||||
"z": tab_id,
|
||||
"name": "CREATE anomaly_events table (run once)",
|
||||
"props": [{"p": "payload"}],
|
||||
"repeat": "",
|
||||
"crontab": "",
|
||||
"once": False,
|
||||
"onceDelay": 0.1,
|
||||
"topic": "",
|
||||
"payload": "",
|
||||
"payloadType": "date",
|
||||
"x": 250,
|
||||
"y": 900,
|
||||
"wires": [["create_table_function_temp"]]
|
||||
}
|
||||
|
||||
# Create a function node with the SQL
|
||||
function_node = {
|
||||
"id": "create_table_function_temp",
|
||||
"type": "function",
|
||||
"z": tab_id,
|
||||
"name": "Create Table SQL",
|
||||
"func": f"""// Create anomaly_events table
|
||||
msg.topic = `{create_table_sql}`;
|
||||
msg.payload = [];
|
||||
return msg;""",
|
||||
"outputs": 1,
|
||||
"timeout": 0,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 500,
|
||||
"y": 900,
|
||||
"wires": [["create_table_mysql_temp"]]
|
||||
}
|
||||
|
||||
# Create a MySQL node to execute the SQL
|
||||
mysql_node = {
|
||||
"id": "create_table_mysql_temp",
|
||||
"type": "mysql",
|
||||
"z": tab_id,
|
||||
"mydb": "00d8ad2b0277f906",
|
||||
"name": "Execute Create Table",
|
||||
"x": 730,
|
||||
"y": 900,
|
||||
"wires": [["create_table_debug_temp"]]
|
||||
}
|
||||
|
||||
# Create a debug node to show result
|
||||
debug_node = {
|
||||
"id": "create_table_debug_temp",
|
||||
"type": "debug",
|
||||
"z": tab_id,
|
||||
"name": "Table Created",
|
||||
"active": True,
|
||||
"tosidebar": True,
|
||||
"console": False,
|
||||
"tostatus": False,
|
||||
"complete": "true",
|
||||
"targetType": "full",
|
||||
"statusVal": "",
|
||||
"statusType": "auto",
|
||||
"x": 960,
|
||||
"y": 900,
|
||||
"wires": []
|
||||
}
|
||||
|
||||
# Add all nodes to flows
|
||||
flows.extend([inject_node, function_node, mysql_node, debug_node])
|
||||
|
||||
with open('/home/mdares/.node-red/flows.json', 'w') as f:
|
||||
json.dump(flows, f, indent=4)
|
||||
|
||||
print("✓ Added CREATE TABLE nodes to flows.json")
|
||||
print(" - Inject node: 'CREATE anomaly_events table (run once)'")
|
||||
print(" - After Node-RED restarts, click this inject button ONCE to create the table")
|
||||
print(" - Check debug panel to confirm table creation")
|
||||
print(" - These temporary nodes can be deleted after use")
|
||||
Reference in New Issue
Block a user