solid_observer 0.4.0 → 0.6.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +30 -0
- data/README.md +100 -25
- data/app/assets/javascripts/solid_observer/live_poll.js +3 -1
- data/app/controllers/solid_observer/application_controller.rb +1 -0
- data/app/controllers/solid_observer/cable_dashboard_controller.rb +52 -0
- data/app/controllers/solid_observer/cable_operations_controller.rb +16 -0
- data/app/controllers/solid_observer/cache_dashboard_controller.rb +33 -40
- data/app/controllers/solid_observer/dashboard_controller.rb +21 -13
- data/app/controllers/solid_observer/traces_controller.rb +17 -0
- data/app/helpers/solid_observer/application_helper.rb +145 -3
- data/app/models/solid_observer/cable_event.rb +13 -0
- data/app/models/solid_observer/cable_metric.rb +12 -0
- data/app/models/solid_observer/cache_metric.rb +1 -2
- data/app/models/solid_observer/storage_info.rb +1 -1
- data/app/views/layouts/solid_observer/application.html.erb +35 -9
- data/app/views/solid_observer/cable_dashboard/_charts.html.erb +31 -0
- data/app/views/solid_observer/cable_dashboard/_recent_events.html.erb +39 -0
- data/app/views/solid_observer/cable_dashboard/_summary.html.erb +34 -0
- data/app/views/solid_observer/cable_dashboard/index.html.erb +118 -0
- data/app/views/solid_observer/cache_dashboard/_recent_events.html.erb +6 -1
- data/app/views/solid_observer/dashboard/_component_cards.html.erb +18 -0
- data/app/views/solid_observer/dashboard/_health.html.erb +6 -0
- data/app/views/solid_observer/dashboard/_home.html.erb +10 -0
- data/app/views/solid_observer/dashboard/_queue.html.erb +138 -0
- data/app/views/solid_observer/dashboard/_queue_table.html.erb +1 -0
- data/app/views/solid_observer/dashboard/_unified_feed.html.erb +38 -0
- data/app/views/solid_observer/dashboard/index.html.erb +3 -139
- data/app/views/solid_observer/events/index.html.erb +7 -1
- data/app/views/solid_observer/jobs/index.html.erb +1 -0
- data/app/views/solid_observer/storages/show.html.erb +29 -3
- data/app/views/solid_observer/traces/show.html.erb +80 -0
- data/config/routes.rb +3 -0
- data/db/migrate/20260612000001_add_event_type_recorded_at_index_to_cache_events.rb +21 -0
- data/db/migrate/20260619000001_create_solid_observer_cable_events.rb +22 -0
- data/db/migrate/20260619000002_create_solid_observer_cable_metrics.rb +17 -0
- data/db/migrate/20260630000001_add_correlation_id_to_cache_events.rb +8 -0
- data/db/migrate/20260630000002_add_correlation_id_to_cable_events.rb +8 -0
- data/lib/generators/solid_observer/install_generator.rb +8 -1
- data/lib/generators/solid_observer/templates/initializer.rb.tt +24 -5
- data/lib/solid_observer/base_event.rb +1 -1
- data/lib/solid_observer/base_metric.rb +1 -1
- data/lib/solid_observer/base_record.rb +8 -0
- data/lib/solid_observer/cable_event_buffer.rb +28 -0
- data/lib/solid_observer/cable_metric_buffer.rb +230 -0
- data/lib/solid_observer/cable_subscriber.rb +57 -0
- data/lib/solid_observer/cache_event_buffer.rb +11 -36
- data/lib/solid_observer/cache_metric_buffer.rb +229 -0
- data/lib/solid_observer/chart_buffer.rb +84 -27
- data/lib/solid_observer/cli/health.rb +49 -0
- data/lib/solid_observer/cli/trace.rb +106 -0
- data/lib/solid_observer/configuration.rb +47 -7
- data/lib/solid_observer/correlated.rb +23 -0
- data/lib/solid_observer/engine.rb +46 -28
- data/lib/solid_observer/event_buffer_core.rb +218 -0
- data/lib/solid_observer/queries/trace_query.rb +151 -0
- data/lib/solid_observer/queue_event_buffer.rb +9 -201
- data/lib/solid_observer/services/cable_operations.rb +74 -0
- data/lib/solid_observer/services/cable_stats.rb +385 -0
- data/lib/solid_observer/services/cache_stats.rb +35 -18
- data/lib/solid_observer/services/cleanup_storage.rb +82 -47
- data/lib/solid_observer/services/flush_cable_event_buffer.rb +54 -0
- data/lib/solid_observer/services/flush_cable_metrics.rb +54 -0
- data/lib/solid_observer/services/flush_cache_metrics.rb +56 -0
- data/lib/solid_observer/services/health_score.rb +85 -0
- data/lib/solid_observer/services/record_cable_event.rb +115 -0
- data/lib/solid_observer/services/record_cable_metric.rb +73 -0
- data/lib/solid_observer/services/record_cache_event.rb +24 -0
- data/lib/solid_observer/services/record_cache_metric.rb +13 -21
- data/lib/solid_observer/services/storage_info_snapshot.rb +103 -15
- data/lib/solid_observer/services/unified_feed.rb +101 -0
- data/lib/solid_observer/version.rb +1 -1
- data/lib/solid_observer.rb +42 -11
- data/lib/tasks/solid_observer.rake +97 -21
- metadata +41 -6
- data/app/assets/stylesheets/solid_observer/application.css +0 -18
- data/bin/console +0 -11
- data/bin/quality_gate +0 -95
- data/bin/setup +0 -8
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
.so-sidebar__nav .active {
|
|
2
|
-
font-weight: 600;
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
.so-sidebar__nav a:focus-visible {
|
|
6
|
-
outline: 2px solid var(--so-info);
|
|
7
|
-
outline-offset: 2px;
|
|
8
|
-
box-shadow: 0 0 0 3px var(--so-focus-ring);
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
.so-sidebar__section {
|
|
12
|
-
font-size: 0.7rem;
|
|
13
|
-
text-transform: uppercase;
|
|
14
|
-
letter-spacing: 0.08em;
|
|
15
|
-
color: var(--so-text-muted);
|
|
16
|
-
padding: 0.5rem 0.75rem 0.25rem;
|
|
17
|
-
margin: 0.5rem 0.75rem 0.25rem;
|
|
18
|
-
}
|
data/bin/console
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
# frozen_string_literal: true
|
|
3
|
-
|
|
4
|
-
require "bundler/setup"
|
|
5
|
-
require "solid_observer"
|
|
6
|
-
|
|
7
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
|
8
|
-
# with your gem easier. You can also use a different console, if you like.
|
|
9
|
-
|
|
10
|
-
require "irb"
|
|
11
|
-
IRB.start(__FILE__)
|
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/
|
|
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
|