4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# File 'lib/generators/decision_agent/install/templates/monitoring_migration.rb', line 4
def change
create_table :decision_logs do |t|
t.string :decision, null: false
t.float :confidence
t.integer :evaluations_count, default: 0
t.float :duration_ms
t.string :status
t.text :context
t.text :metadata
t.timestamps
end
add_index :decision_logs, :decision
add_index :decision_logs, :status
add_index :decision_logs, :confidence
add_index :decision_logs, :created_at
add_index :decision_logs, i[decision created_at]
add_index :decision_logs, i[status created_at]
create_table :evaluation_metrics do |t|
t.references :decision_log, foreign_key: true, index: true
t.string :evaluator_name, null: false
t.float :score
t.boolean :success
t.float :duration_ms
t.text :details
t.timestamps
end
add_index :evaluation_metrics, :evaluator_name
add_index :evaluation_metrics, :success
add_index :evaluation_metrics, :created_at
add_index :evaluation_metrics, i[evaluator_name created_at]
add_index :evaluation_metrics, i[evaluator_name success]
create_table :performance_metrics do |t|
t.string :operation, null: false
t.float :duration_ms
t.string :status
t.text :metadata
t.timestamps
end
add_index :performance_metrics, :operation
add_index :performance_metrics, :status
add_index :performance_metrics, :duration_ms
add_index :performance_metrics, :created_at
add_index :performance_metrics, i[operation created_at]
add_index :performance_metrics, i[status created_at]
create_table :error_metrics do |t|
t.string :error_type, null: false
t.text :message
t.text :stack_trace
t.string :severity
t.text :context
t.timestamps
end
add_index :error_metrics, :error_type
add_index :error_metrics, :severity
add_index :error_metrics, :created_at
add_index :error_metrics, i[error_type created_at]
add_index :error_metrics, i[severity created_at]
return unless adapter_name == "PostgreSQL"
execute " CREATE INDEX index_decision_logs_on_recent\n ON decision_logs (created_at DESC)\n WHERE created_at >= NOW() - INTERVAL '7 days';\n SQL\n\n execute <<-SQL\n CREATE INDEX index_performance_metrics_on_recent\n ON performance_metrics (created_at DESC)\n WHERE created_at >= NOW() - INTERVAL '7 days';\n SQL\n\n execute <<-SQL\n CREATE INDEX index_error_metrics_on_recent_critical\n ON error_metrics (created_at DESC)\n WHERE severity IN ('high', 'critical') AND created_at >= NOW() - INTERVAL '7 days';\n SQL\n\n # Consider table partitioning for large-scale deployments\n # Example: Partition by month for decision_logs\n # This is commented out by default - enable if needed\n # execute <<-SQL\n # CREATE TABLE decision_logs_partitioned (LIKE decision_logs INCLUDING ALL)\n # PARTITION BY RANGE (created_at);\n # SQL\nend\n"
|