solid_observer 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +34 -0
  3. data/README.md +195 -82
  4. data/app/assets/javascripts/solid_observer/live_poll.js +3 -1
  5. data/app/controllers/solid_observer/application_controller.rb +1 -0
  6. data/app/controllers/solid_observer/cable_dashboard_controller.rb +52 -0
  7. data/app/controllers/solid_observer/cable_operations_controller.rb +16 -0
  8. data/app/controllers/solid_observer/cache_dashboard_controller.rb +52 -0
  9. data/app/controllers/solid_observer/cache_operations_controller.rb +24 -0
  10. data/app/controllers/solid_observer/dashboard_controller.rb +38 -1
  11. data/app/controllers/solid_observer/storages_controller.rb +1 -1
  12. data/app/helpers/solid_observer/application_helper.rb +268 -5
  13. data/app/helpers/solid_observer/dashboard_helper.rb +30 -11
  14. data/app/models/solid_observer/cable_event.rb +13 -0
  15. data/app/models/solid_observer/cable_metric.rb +12 -0
  16. data/app/models/solid_observer/cache_event.rb +15 -0
  17. data/app/models/solid_observer/cache_metric.rb +13 -0
  18. data/app/models/solid_observer/storage_info.rb +4 -1
  19. data/app/views/layouts/solid_observer/application.html.erb +157 -19
  20. data/app/views/solid_observer/cable_dashboard/_charts.html.erb +31 -0
  21. data/app/views/solid_observer/cable_dashboard/_recent_events.html.erb +34 -0
  22. data/app/views/solid_observer/cable_dashboard/_summary.html.erb +34 -0
  23. data/app/views/solid_observer/cable_dashboard/index.html.erb +118 -0
  24. data/app/views/solid_observer/cache_dashboard/_charts.html.erb +40 -0
  25. data/app/views/solid_observer/cache_dashboard/_recent_events.html.erb +34 -0
  26. data/app/views/solid_observer/cache_dashboard/_summary.html.erb +39 -0
  27. data/app/views/solid_observer/cache_dashboard/index.html.erb +62 -0
  28. data/app/views/solid_observer/cache_operations/_confirm_clear.html.erb +6 -0
  29. data/app/views/solid_observer/cache_operations/index.html.erb +60 -0
  30. data/app/views/solid_observer/dashboard/_queue_table.html.erb +1 -0
  31. data/app/views/solid_observer/dashboard/index.html.erb +32 -5
  32. data/app/views/solid_observer/events/index.html.erb +1 -0
  33. data/app/views/solid_observer/jobs/index.html.erb +1 -0
  34. data/app/views/solid_observer/jobs/show.html.erb +3 -3
  35. data/app/views/solid_observer/storages/show.html.erb +90 -32
  36. data/config/routes.rb +7 -0
  37. data/db/migrate/20260601000001_create_solid_observer_cache_events.rb +22 -0
  38. data/db/migrate/20260601000002_create_solid_observer_cache_metrics.rb +18 -0
  39. data/db/migrate/20260602000001_add_component_to_solid_observer_storage_infos.rb +8 -0
  40. data/db/migrate/20260612000001_add_event_type_recorded_at_index_to_cache_events.rb +21 -0
  41. data/db/migrate/20260619000001_create_solid_observer_cable_events.rb +22 -0
  42. data/db/migrate/20260619000002_create_solid_observer_cable_metrics.rb +17 -0
  43. data/lib/generators/solid_observer/install_generator.rb +8 -1
  44. data/lib/generators/solid_observer/templates/initializer.rb.tt +20 -4
  45. data/lib/solid_observer/base_event.rb +1 -1
  46. data/lib/solid_observer/base_metric.rb +1 -1
  47. data/lib/solid_observer/base_record.rb +8 -0
  48. data/lib/solid_observer/cable_event_buffer.rb +28 -0
  49. data/lib/solid_observer/cable_metric_buffer.rb +230 -0
  50. data/lib/solid_observer/cable_subscriber.rb +57 -0
  51. data/lib/solid_observer/cache_event_buffer.rb +28 -0
  52. data/lib/solid_observer/cache_metric_buffer.rb +229 -0
  53. data/lib/solid_observer/cache_subscriber.rb +47 -0
  54. data/lib/solid_observer/chart_buffer.rb +84 -27
  55. data/lib/solid_observer/cli/storage.rb +16 -13
  56. data/lib/solid_observer/configuration.rb +67 -5
  57. data/lib/solid_observer/engine.rb +70 -15
  58. data/lib/solid_observer/event_buffer_core.rb +218 -0
  59. data/lib/solid_observer/queue_event_buffer.rb +9 -201
  60. data/lib/solid_observer/services/cable_operations.rb +74 -0
  61. data/lib/solid_observer/services/cable_stats.rb +385 -0
  62. data/lib/solid_observer/services/cache_operations.rb +115 -0
  63. data/lib/solid_observer/services/cache_stats.rb +346 -0
  64. data/lib/solid_observer/services/cleanup_storage.rb +98 -47
  65. data/lib/solid_observer/services/database_size.rb +13 -8
  66. data/lib/solid_observer/services/flush_cable_event_buffer.rb +54 -0
  67. data/lib/solid_observer/services/flush_cable_metrics.rb +54 -0
  68. data/lib/solid_observer/services/flush_cache_event_buffer.rb +54 -0
  69. data/lib/solid_observer/services/flush_cache_metrics.rb +56 -0
  70. data/lib/solid_observer/services/record_cable_event.rb +114 -0
  71. data/lib/solid_observer/services/record_cable_metric.rb +73 -0
  72. data/lib/solid_observer/services/record_cache_event.rb +165 -0
  73. data/lib/solid_observer/services/record_cache_metric.rb +66 -0
  74. data/lib/solid_observer/services/storage_info_snapshot.rb +216 -0
  75. data/lib/solid_observer/version.rb +1 -1
  76. data/lib/solid_observer.rb +36 -11
  77. data/lib/tasks/solid_observer.rake +111 -21
  78. metadata +47 -5
  79. data/bin/console +0 -11
  80. data/bin/quality_gate +0 -95
  81. data/bin/setup +0 -8
data/bin/quality_gate DELETED
@@ -1,95 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- # SolidObserver Quality Gate Suite
5
- # Runs all non-negotiable gates in sequence.
6
- # Usage: bin/quality_gate [--skip-appraisal]
7
- #
8
- # Individual gates can be run via:
9
- # bin/quality_gate rspec
10
- # bin/quality_gate standardrb
11
- # bin/quality_gate reek
12
- # bin/quality_gate appraisal
13
- # bin/quality_gate audit
14
-
15
- SKIP_APPRAISAL=false
16
- SINGLE_GATE=""
17
-
18
- for arg in "$@"; do
19
- case "$arg" in
20
- --skip-appraisal) SKIP_APPRAISAL=true ;;
21
- rspec|standardrb|reek|appraisal|audit) SINGLE_GATE="$arg" ;;
22
- esac
23
- done
24
-
25
- red() { printf '\033[31m%s\033[0m\n' "$*" >&2; }
26
- green() { printf '\033[32m%s\033[0m\n' "$*"; }
27
- dim() { printf '\033[2m%s\033[0m\n' "$*"; }
28
-
29
- run_gate() {
30
- local label="$1"; shift
31
- dim "⏳ ${label}..."
32
- if "$@" > /dev/null 2>&1; then
33
- green "✅ ${label}"
34
- return 0
35
- else
36
- red "❌ ${label} FAILED — check output above"
37
- return 1
38
- fi
39
- }
40
-
41
- gate_rspec() {
42
- run_gate "RSpec" bundle exec rspec
43
- }
44
-
45
- gate_standardrb() {
46
- run_gate "StandardRB" bundle exec standardrb
47
- }
48
-
49
- gate_reek() {
50
- run_gate "Reek" bundle exec reek lib/ app/ db/
51
- }
52
-
53
- gate_appraisal() {
54
- run_gate "Rails 8.0 appraisal" bundle exec appraisal rails-8.0 rspec \
55
- && run_gate "Rails 8.1 appraisal" bundle exec appraisal rails-8.1 rspec
56
- }
57
-
58
- gate_audit() {
59
- dim "⏳ bundler-audit: updating advisory DB..."
60
- bundle exec bundler-audit update > /dev/null 2>&1 || true
61
- run_gate "bundler-audit" bundle exec bundler-audit check
62
- }
63
-
64
- run_all() {
65
- local failed=0
66
-
67
- gate_rspec || failed=$((failed + 1))
68
- gate_standardrb || failed=$((failed + 1))
69
- gate_reek || failed=$((failed + 1))
70
-
71
- if [ "$SKIP_APPRAISAL" = false ]; then
72
- gate_appraisal || failed=$((failed + 1))
73
- else
74
- dim "⏭️ Skipping appraisal (--skip-appraisal)"
75
- fi
76
-
77
- gate_audit || failed=$((failed + 1))
78
-
79
- echo ""
80
- if [ "$failed" -eq 0 ]; then
81
- green "All quality gates passed"
82
- else
83
- red "${failed} gate(s) failed"
84
- return 1
85
- fi
86
- }
87
-
88
- case "$SINGLE_GATE" in
89
- rspec) gate_rspec ;;
90
- standardrb) gate_standardrb ;;
91
- reek) gate_reek ;;
92
- appraisal) gate_appraisal ;;
93
- audit) gate_audit ;;
94
- "") run_all ;;
95
- esac
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here