Class: CreateDecisionAgentMonitoringTables

Inherits:
Object
  • Object
show all
Defined in:
lib/generators/decision_agent/install/templates/monitoring_migration.rb

Instance Method Summary collapse

Instance Method Details

#changeObject



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
  # Decision logs table
  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 # success, failure, error
    t.text :context # JSON
    t.text :metadata # JSON

    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]

  # Evaluation metrics table
  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 # JSON

    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]

  # Performance metrics table
  create_table :performance_metrics do |t|
    t.string :operation, null: false
    t.float :duration_ms
    t.string :status # success, failure, error
    t.text :metadata # JSON

    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]

  # Error metrics table
  create_table :error_metrics do |t|
    t.string :error_type, null: false
    t.text :message
    t.text :stack_trace # JSON array
    t.string :severity # low, medium, high, critical
    t.text :context # JSON

    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]

  # PostgreSQL-specific optimizations (optional)
  return unless adapter_name == "PostgreSQL"

  # Partial indexes for active records (recent data)
  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"