e11y 0.2.0 → 1.1.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/.rubocop.yml +130 -10
- data/CHANGELOG.md +80 -1
- data/CLAUDE.md +168 -0
- data/CONTRIBUTING.md +640 -0
- data/README.md +165 -701
- data/RELEASE.md +41 -12
- data/Rakefile +249 -57
- data/config/README.md +1 -1
- data/config/loki-local-config.yaml +12 -0
- data/config/otel-collector-config.yaml +44 -0
- data/cucumber.yml +1 -0
- data/docker-compose.yml +18 -2
- data/docs/ADAPTERS.md +76 -0
- data/docs/ADAPTIVE_SAMPLING.md +59 -0
- data/docs/COMPARISON.md +104 -0
- data/docs/CONFIGURATION.md +52 -0
- data/docs/DISTRIBUTED_TRACING.md +44 -0
- data/docs/LIMITATIONS.md +13 -0
- data/docs/METRICS_DSL.md +84 -0
- data/docs/PERFORMANCE.md +60 -0
- data/docs/PII_FILTERING.md +40 -0
- data/docs/PRESETS.md +65 -0
- data/docs/QUICK-START.md +546 -587
- data/docs/RAILS_INTEGRATION.md +79 -0
- data/docs/SCHEMA_VALIDATION.md +63 -0
- data/docs/SLO-PROMQL-ALERTS.md +161 -0
- data/docs/TESTING.md +69 -0
- data/docs/{ADR-001-architecture.md → architecture/ADR-001-architecture.md} +36 -65
- data/docs/{ADR-002-metrics-yabeda.md → architecture/ADR-002-metrics-yabeda.md} +62 -236
- data/docs/architecture/ADR-003-slo-observability.md +1402 -0
- data/docs/{ADR-004-adapter-architecture.md → architecture/ADR-004-adapter-architecture.md} +163 -146
- data/docs/{ADR-005-tracing-context.md → architecture/ADR-005-tracing-context.md} +10 -9
- data/docs/{ADR-006-security-compliance.md → architecture/ADR-006-security-compliance.md} +184 -191
- data/docs/{ADR-007-opentelemetry-integration.md → architecture/ADR-007-opentelemetry-integration.md} +3 -21
- data/docs/{ADR-008-rails-integration.md → architecture/ADR-008-rails-integration.md} +182 -743
- data/docs/{ADR-009-cost-optimization.md → architecture/ADR-009-cost-optimization.md} +45 -54
- data/docs/architecture/ADR-010-developer-experience.md +522 -0
- data/docs/{ADR-011-testing-strategy.md → architecture/ADR-011-testing-strategy.md} +44 -86
- data/docs/{ADR-012-event-evolution.md → architecture/ADR-012-event-evolution.md} +11 -11
- data/docs/{ADR-013-reliability-error-handling.md → architecture/ADR-013-reliability-error-handling.md} +37 -12
- data/docs/{ADR-014-event-driven-slo.md → architecture/ADR-014-event-driven-slo.md} +12 -24
- data/docs/{ADR-015-middleware-order.md → architecture/ADR-015-middleware-order.md} +43 -59
- data/docs/{ADR-016-self-monitoring-slo.md → architecture/ADR-016-self-monitoring-slo.md} +58 -355
- data/docs/{ADR-017-multi-rails-compatibility.md → architecture/ADR-017-multi-rails-compatibility.md} +4 -11
- data/docs/architecture/ADR-018-memory-optimization.md +366 -0
- data/docs/{ADR-INDEX.md → architecture/ADR-INDEX.md} +11 -6
- data/docs/plans/2026-03-20-browser-overlay-svelte.md +281 -0
- data/docs/{00-ICP-AND-TIMELINE.md → prd/00-ICP-AND-TIMELINE.md} +6 -6
- data/docs/{01-SCALE-REQUIREMENTS.md → prd/01-SCALE-REQUIREMENTS.md} +6 -6
- data/docs/prd/01-overview-vision.md +19 -14
- data/docs/use_cases/README.md +22 -23
- data/docs/use_cases/UC-001-request-scoped-debug-buffering.md +50 -44
- data/docs/use_cases/UC-002-business-event-tracking.md +26 -95
- data/docs/use_cases/UC-003-event-metrics.md +66 -0
- data/docs/use_cases/UC-004-zero-config-slo-tracking.md +33 -684
- data/docs/use_cases/UC-005-sentry-integration.md +13 -15
- data/docs/use_cases/UC-006-trace-context-management.md +30 -28
- data/docs/use_cases/UC-007-pii-filtering.md +35 -87
- data/docs/use_cases/UC-008-opentelemetry-integration.md +51 -89
- data/docs/use_cases/UC-009-multi-service-tracing.md +30 -178
- data/docs/use_cases/UC-010-background-job-tracking.md +24 -91
- data/docs/use_cases/UC-011-rate-limiting.md +95 -168
- data/docs/use_cases/UC-012-audit-trail.md +21 -46
- data/docs/use_cases/UC-013-high-cardinality-protection.md +29 -167
- data/docs/use_cases/UC-014-adaptive-sampling.md +2 -2
- data/docs/use_cases/UC-015-cost-optimization.md +46 -99
- data/docs/use_cases/UC-016-rails-logger-migration.md +39 -213
- data/docs/use_cases/UC-017-local-development.md +203 -777
- data/docs/use_cases/UC-018-testing-events.md +3 -3
- data/docs/use_cases/UC-019-retention-based-routing.md +53 -106
- data/docs/use_cases/UC-020-event-versioning.md +8 -9
- data/docs/use_cases/UC-021-error-handling-retry-dlq.md +18 -22
- data/docs/use_cases/UC-022-event-registry.md +15 -21
- data/docs/use_cases/backlog.md +119 -87
- data/e11y.gemspec +2 -2
- data/gems/e11y-devtools/README.md +158 -0
- data/gems/e11y-devtools/config/routes.rb +15 -0
- data/gems/e11y-devtools/e11y-devtools.gemspec +25 -0
- data/gems/e11y-devtools/exe/e11y +34 -0
- data/gems/e11y-devtools/frontend/.gitignore +24 -0
- data/gems/e11y-devtools/frontend/README.md +51 -0
- data/gems/e11y-devtools/frontend/index.html +14 -0
- data/gems/e11y-devtools/frontend/package-lock.json +3707 -0
- data/gems/e11y-devtools/frontend/package.json +28 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/events/recent.json +4205 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/interactions.json +194 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/0a2e04027cfa22d014bc22e8b27cd913/events.json +86 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/0e1543af6a630fb3af6b52283154b3e0/events.json +169 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/1838b691faa49564f97db8592ff3978d/events.json +78 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/29f198f6588dacffb687777eb5f8f118/events.json +197 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/34bc3c9c0097de28a7a6f99b90a8e7bc/events.json +194 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/3ba6c20d068ab9cee00e51b180e66444/events.json +184 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/435bfd8f17b9009146a79812d7c3726d/events.json +144 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/4c7676e3fe668e99edb2b94d7d5678a9/events.json +222 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/6daf0d47974bedfc55d5de7004a3ea9f/events.json +194 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/8a81ada42834d15f287bb40010043605/events.json +194 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/8c0a98900edaae105469df8daedccf02/events.json +198 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/8e4f645180f8a7d1dce426b07380466b/events.json +222 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/93db346fa5d44a032605a13b627f4b80/events.json +128 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/98ff6146faf7bd9be8bd03a8275817ba/events.json +223 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/9997ddd0247bc7e25f2ca7a5c415c93d/events.json +197 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/99e35f8ef3baedd798cc4fd085980ad9/events.json +194 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/b4f3095c1909924cbc98889a86c83d6d/events.json +131 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/b54b7fc32b7575a7110de809d11ccda0/events.json +128 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/c0b48033fa06746bcc5886745e053cff/events.json +169 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/c44649ac76701b4558927cd2305ab535/events.json +169 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/d601ae3320057580a39dbdac2edfdf4a/events.json +248 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/e67e724bab422d2b52eeb49635e512e1/events.json +194 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/e6c72765a28f158a8485b35fa63f73da/events.json +194 -0
- data/gems/e11y-devtools/frontend/public/mocks/v1/traces/f541b87405c9a54819b18ebe529f6419/events.json +194 -0
- data/gems/e11y-devtools/frontend/scripts/generate_mocks.rb +397 -0
- data/gems/e11y-devtools/frontend/src/App.svelte +827 -0
- data/gems/e11y-devtools/frontend/src/components/Fab.svelte +19 -0
- data/gems/e11y-devtools/frontend/src/components/FilterBar.svelte +38 -0
- data/gems/e11y-devtools/frontend/src/components/FullscreenPanel.svelte +82 -0
- data/gems/e11y-devtools/frontend/src/components/InteractionsTimeline.svelte +264 -0
- data/gems/e11y-devtools/frontend/src/components/RecentHistogram.svelte +354 -0
- data/gems/e11y-devtools/frontend/src/lib/api.ts +37 -0
- data/gems/e11y-devtools/frontend/src/lib/eventIdentity.ts +12 -0
- data/gems/e11y-devtools/frontend/src/lib/format.ts +37 -0
- data/gems/e11y-devtools/frontend/src/lib/listFilter.ts +43 -0
- data/gems/e11y-devtools/frontend/src/lib/recentVolume.ts +80 -0
- data/gems/e11y-devtools/frontend/src/lib/router.ts +12 -0
- data/gems/e11y-devtools/frontend/src/lib/transitions.ts +34 -0
- data/gems/e11y-devtools/frontend/src/lib/viewportOrigin.ts +25 -0
- data/gems/e11y-devtools/frontend/src/main.ts +8 -0
- data/gems/e11y-devtools/frontend/src/overlay-entry.ts +24 -0
- data/gems/e11y-devtools/frontend/src/overlay.css +1080 -0
- data/gems/e11y-devtools/frontend/svelte.config.js +2 -0
- data/gems/e11y-devtools/frontend/test_puppeteer.js +41 -0
- data/gems/e11y-devtools/frontend/test_scale.js +3 -0
- data/gems/e11y-devtools/frontend/tsconfig.app.json +21 -0
- data/gems/e11y-devtools/frontend/tsconfig.json +7 -0
- data/gems/e11y-devtools/frontend/tsconfig.node.json +26 -0
- data/gems/e11y-devtools/frontend/vite.config.ts +36 -0
- data/gems/e11y-devtools/lib/e11y/devtools/mcp/server.rb +96 -0
- data/gems/e11y-devtools/lib/e11y/devtools/mcp/tool_base.rb +25 -0
- data/gems/e11y-devtools/lib/e11y/devtools/mcp/tools/clear.rb +31 -0
- data/gems/e11y-devtools/lib/e11y/devtools/mcp/tools/errors.rb +35 -0
- data/gems/e11y-devtools/lib/e11y/devtools/mcp/tools/event_detail.rb +33 -0
- data/gems/e11y-devtools/lib/e11y/devtools/mcp/tools/events_by_trace.rb +33 -0
- data/gems/e11y-devtools/lib/e11y/devtools/mcp/tools/interactions.rb +40 -0
- data/gems/e11y-devtools/lib/e11y/devtools/mcp/tools/recent_events.rb +34 -0
- data/gems/e11y-devtools/lib/e11y/devtools/mcp/tools/search.rb +34 -0
- data/gems/e11y-devtools/lib/e11y/devtools/mcp/tools/stats.rb +30 -0
- data/gems/e11y-devtools/lib/e11y/devtools/overlay/assets/overlay.js +20 -0
- data/gems/e11y-devtools/lib/e11y/devtools/overlay/controller.rb +94 -0
- data/gems/e11y-devtools/lib/e11y/devtools/overlay/engine.rb +26 -0
- data/gems/e11y-devtools/lib/e11y/devtools/overlay/middleware.rb +80 -0
- data/gems/e11y-devtools/lib/e11y/devtools/overlay/rails_controller.rb +67 -0
- data/gems/e11y-devtools/lib/e11y/devtools/tui/app.rb +262 -0
- data/gems/e11y-devtools/lib/e11y/devtools/tui/grouping.rb +66 -0
- data/gems/e11y-devtools/lib/e11y/devtools/tui/widgets/event_detail.rb +62 -0
- data/gems/e11y-devtools/lib/e11y/devtools/tui/widgets/event_list.rb +70 -0
- data/gems/e11y-devtools/lib/e11y/devtools/tui/widgets/interaction_list.rb +47 -0
- data/gems/e11y-devtools/lib/e11y/devtools/version.rb +8 -0
- data/gems/e11y-devtools/lib/e11y/devtools.rb +13 -0
- data/gems/e11y-devtools/spec/e11y/devtools/mcp/tools_spec.rb +107 -0
- data/gems/e11y-devtools/spec/e11y/devtools/overlay/controller_spec.rb +91 -0
- data/gems/e11y-devtools/spec/e11y/devtools/overlay/middleware_spec.rb +46 -0
- data/gems/e11y-devtools/spec/e11y/devtools/tui/app_spec.rb +85 -0
- data/gems/e11y-devtools/spec/e11y/devtools/tui/grouping_spec.rb +64 -0
- data/gems/e11y-devtools/spec/spec_helper.rb +5 -0
- data/gems/e11y-devtools/spec/tui/widgets/event_list_spec.rb +44 -0
- data/gems/e11y-devtools/spec/tui/widgets/interaction_list_spec.rb +62 -0
- data/lib/e11y/adapters/audit_encrypted.rb +53 -11
- data/lib/e11y/adapters/base.rb +33 -34
- data/lib/e11y/adapters/dev_log/file_store.rb +143 -0
- data/lib/e11y/adapters/dev_log/query.rb +219 -0
- data/lib/e11y/adapters/dev_log.rb +118 -0
- data/lib/e11y/adapters/file.rb +3 -6
- data/lib/e11y/adapters/in_memory.rb +52 -5
- data/lib/e11y/adapters/in_memory_test.rb +29 -0
- data/lib/e11y/adapters/loki.rb +58 -23
- data/lib/e11y/adapters/null.rb +82 -0
- data/lib/e11y/adapters/opentelemetry_collector.rb +183 -0
- data/lib/e11y/adapters/otel_logs.rb +136 -23
- data/lib/e11y/adapters/sentry.rb +4 -7
- data/lib/e11y/adapters/stdout.rb +73 -7
- data/lib/e11y/adapters/yabeda.rb +153 -29
- data/lib/e11y/buffers/adaptive_buffer.rb +3 -17
- data/lib/e11y/buffers/{request_scoped_buffer.rb → ephemeral_buffer.rb} +72 -58
- data/lib/e11y/buffers/ring_buffer.rb +3 -16
- data/lib/e11y/configuration.rb +272 -0
- data/lib/e11y/console.rb +10 -17
- data/lib/e11y/current.rb +53 -1
- data/lib/e11y/debug/pipeline_inspector.rb +96 -0
- data/lib/e11y/documentation/generator.rb +48 -0
- data/lib/e11y/event/base.rb +176 -82
- data/lib/e11y/event/value_sampling_config.rb +1 -5
- data/lib/e11y/events/rails/database/query.rb +1 -4
- data/lib/e11y/events/rails/job/failed.rb +2 -0
- data/lib/e11y/instruments/active_job.rb +44 -12
- data/lib/e11y/instruments/rails_instrumentation.rb +49 -24
- data/lib/e11y/instruments/sidekiq.rb +135 -31
- data/lib/e11y/linters/base.rb +11 -0
- data/lib/e11y/linters/pii/pii_declaration_linter.rb +120 -0
- data/lib/e11y/linters/slo/config_consistency_linter.rb +76 -0
- data/lib/e11y/linters/slo/explicit_declaration_linter.rb +36 -0
- data/lib/e11y/linters/slo/slo_status_from_linter.rb +41 -0
- data/lib/e11y/logger/bridge.rb +26 -7
- data/lib/e11y/metrics/cardinality_protection.rb +10 -15
- data/lib/e11y/metrics/cardinality_tracker.rb +16 -6
- data/lib/e11y/metrics/registry.rb +3 -5
- data/lib/e11y/metrics/test_backend.rb +62 -0
- data/lib/e11y/metrics.rb +56 -10
- data/lib/e11y/middleware/adapter_resolver.rb +40 -0
- data/lib/e11y/middleware/audit_signing.rb +43 -6
- data/lib/e11y/middleware/baggage_protection.rb +75 -0
- data/lib/e11y/middleware/dev_log_source.rb +24 -0
- data/lib/e11y/middleware/event_slo.rb +23 -9
- data/lib/e11y/middleware/otel_span.rb +23 -0
- data/lib/e11y/middleware/pii_filter.rb +104 -75
- data/lib/e11y/middleware/rate_limiting.rb +54 -27
- data/lib/e11y/middleware/request.rb +70 -23
- data/lib/e11y/middleware/routing.rb +78 -21
- data/lib/e11y/middleware/sampling.rb +66 -17
- data/lib/e11y/middleware/self_monitoring_emit.rb +39 -0
- data/lib/e11y/middleware/trace_context.rb +45 -10
- data/lib/e11y/middleware/track_latency.rb +34 -0
- data/lib/e11y/middleware/validation.rb +7 -16
- data/lib/e11y/middleware/versioning.rb +26 -22
- data/lib/e11y/opentelemetry/semantic_conventions.rb +109 -0
- data/lib/e11y/opentelemetry/span_creator.rb +142 -0
- data/lib/e11y/pii/patterns.rb +12 -1
- data/lib/e11y/pipeline/builder.rb +4 -4
- data/lib/e11y/presets/audit_event.rb +13 -2
- data/lib/e11y/railtie.rb +52 -14
- data/lib/e11y/registry.rb +306 -0
- data/lib/e11y/reliability/circuit_breaker.rb +19 -21
- data/lib/e11y/reliability/dlq/base.rb +71 -0
- data/lib/e11y/reliability/dlq/file_adapter.rb +301 -0
- data/lib/e11y/reliability/dlq/file_storage.rb +63 -34
- data/lib/e11y/reliability/dlq/filter.rb +37 -54
- data/lib/e11y/reliability/retry_handler.rb +26 -29
- data/lib/e11y/reliability/retry_rate_limiter.rb +3 -11
- data/lib/e11y/sampling/error_spike_detector.rb +0 -2
- data/lib/e11y/sampling/load_monitor.rb +5 -9
- data/lib/e11y/sampling/stratified_tracker.rb +18 -0
- data/lib/e11y/self_monitoring/buffer_monitor.rb +2 -0
- data/lib/e11y/self_monitoring/performance_monitor.rb +19 -61
- data/lib/e11y/self_monitoring/reliability_monitor.rb +4 -74
- data/lib/e11y/slo/config_loader.rb +40 -0
- data/lib/e11y/slo/config_validator.rb +58 -0
- data/lib/e11y/slo/dashboard_generator.rb +122 -0
- data/lib/e11y/slo/event_driven.rb +8 -0
- data/lib/e11y/slo/tracker.rb +31 -4
- data/lib/e11y/testing/have_tracked_event_matcher.rb +190 -0
- data/lib/e11y/testing/rspec_matchers.rb +21 -0
- data/lib/e11y/testing/snapshot_matcher.rb +86 -0
- data/lib/e11y/trace_context/sampler.rb +35 -0
- data/lib/e11y/tracing/faraday_middleware.rb +31 -0
- data/lib/e11y/tracing/net_http_patch.rb +33 -0
- data/lib/e11y/tracing/propagator.rb +144 -0
- data/lib/e11y/tracing.rb +47 -0
- data/lib/e11y/version.rb +1 -1
- data/lib/e11y/versioning/version_extractor.rb +32 -0
- data/lib/e11y.rb +123 -266
- data/lib/generators/e11y/event/event_generator.rb +22 -0
- data/lib/generators/e11y/event/templates/event.rb.tt +16 -0
- data/lib/generators/e11y/grafana_dashboard/grafana_dashboard_generator.rb +30 -0
- data/lib/generators/e11y/grafana_dashboard/templates/e11y_dashboard.json +81 -0
- data/lib/generators/e11y/install/install_generator.rb +34 -0
- data/lib/generators/e11y/install/templates/e11y.rb +239 -0
- data/lib/generators/e11y/prometheus_alerts/prometheus_alerts_generator.rb +29 -0
- data/lib/generators/e11y/prometheus_alerts/templates/e11y_alerts.yml +28 -0
- data/lib/tasks/e11y_docs.rake +30 -0
- data/lib/tasks/e11y_events.rake +71 -0
- data/lib/tasks/e11y_lint.rake +91 -0
- data/lib/tasks/e11y_slo.rake +29 -0
- metadata +186 -39
- data/docs/ADR-003-slo-observability.md +0 -3337
- data/docs/ADR-010-developer-experience.md +0 -2166
- data/docs/API-REFERENCE-L28.md +0 -914
- data/docs/COMPREHENSIVE-CONFIGURATION.md +0 -2366
- data/docs/CONTRIBUTING.md +0 -312
- data/docs/IMPLEMENTATION_NOTES.md +0 -2804
- data/docs/IMPLEMENTATION_PLAN.md +0 -1971
- data/docs/IMPLEMENTATION_PLAN_ARCHITECTURE.md +0 -586
- data/docs/PLAN.md +0 -148
- data/docs/README.md +0 -296
- data/docs/design/00-memory-optimization.md +0 -593
- data/docs/guides/MIGRATION-L27-L28.md +0 -692
- data/docs/guides/PERFORMANCE-BENCHMARKS.md +0 -434
- data/docs/guides/README.md +0 -44
- data/docs/use_cases/UC-003-pattern-based-metrics.md +0 -1627
- data/lib/e11y/adapters/registry.rb +0 -141
data/docs/CONTRIBUTING.md
DELETED
|
@@ -1,312 +0,0 @@
|
|
|
1
|
-
# Contributing to E11y
|
|
2
|
-
|
|
3
|
-
Thank you for your interest in contributing to E11y! This document provides guidelines and instructions for contributing.
|
|
4
|
-
|
|
5
|
-
## 📋 Table of Contents
|
|
6
|
-
|
|
7
|
-
- [Getting Started](#getting-started)
|
|
8
|
-
- [Development Setup](#development-setup)
|
|
9
|
-
- [Running Tests](#running-tests)
|
|
10
|
-
- [Code Style](#code-style)
|
|
11
|
-
- [Submitting Changes](#submitting-changes)
|
|
12
|
-
|
|
13
|
-
## 🚀 Getting Started
|
|
14
|
-
|
|
15
|
-
### Prerequisites
|
|
16
|
-
|
|
17
|
-
- **Ruby 3.2+** (recommended: 3.3+)
|
|
18
|
-
- **Bundler 2.0+**
|
|
19
|
-
- **Docker & Docker Compose** (for integration tests)
|
|
20
|
-
- **Git**
|
|
21
|
-
|
|
22
|
-
### Fork and Clone
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
# Fork the repository on GitHub
|
|
26
|
-
# Then clone your fork
|
|
27
|
-
git clone git@github.com:YOUR_USERNAME/e11y.git
|
|
28
|
-
cd e11y
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## 🔧 Development Setup
|
|
32
|
-
|
|
33
|
-
### 1. Install Dependencies
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
# Run setup script (configures bundle, installs dependencies)
|
|
37
|
-
bin/setup
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
This will:
|
|
41
|
-
- Configure bundle to exclude integration dependencies by default
|
|
42
|
-
- Install core dependencies
|
|
43
|
-
- Display available commands
|
|
44
|
-
|
|
45
|
-
### 2. Install Integration Dependencies (Optional)
|
|
46
|
-
|
|
47
|
-
For working on Rails integration, OpenTelemetry adapter, or other integrations:
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
bundle install --with integration
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
This installs:
|
|
54
|
-
- Rails 8.0
|
|
55
|
-
- OpenTelemetry SDK
|
|
56
|
-
- RSpec Rails
|
|
57
|
-
- Database Cleaner
|
|
58
|
-
|
|
59
|
-
## 🧪 Running Tests
|
|
60
|
-
|
|
61
|
-
E11y has two types of tests:
|
|
62
|
-
|
|
63
|
-
### Unit Tests (Default)
|
|
64
|
-
|
|
65
|
-
Fast, isolated tests without external dependencies:
|
|
66
|
-
|
|
67
|
-
```bash
|
|
68
|
-
bundle exec rspec
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
- **Duration**: ~2 minutes
|
|
72
|
-
- **Coverage**: 100% required
|
|
73
|
-
- **When to run**: Before every commit
|
|
74
|
-
|
|
75
|
-
### Integration Tests
|
|
76
|
-
|
|
77
|
-
Full tests with Rails, OpenTelemetry SDK, and docker-compose services:
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
# Option 1: Using helper script (recommended)
|
|
81
|
-
bin/test-integration
|
|
82
|
-
|
|
83
|
-
# Option 2: Manual
|
|
84
|
-
docker-compose up -d
|
|
85
|
-
INTEGRATION=true bundle exec rspec --tag integration
|
|
86
|
-
docker-compose down
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
- **Duration**: ~5 minutes
|
|
90
|
-
- **When to run**: Before submitting PR, when changing integrations
|
|
91
|
-
- **Requirements**: Docker, integration dependencies installed
|
|
92
|
-
|
|
93
|
-
See [Integration Testing Guide](testing/integration-tests.md) for detailed instructions.
|
|
94
|
-
|
|
95
|
-
### Running Specific Tests
|
|
96
|
-
|
|
97
|
-
```bash
|
|
98
|
-
# Run specific file
|
|
99
|
-
bundle exec rspec spec/e11y/event/base_spec.rb
|
|
100
|
-
|
|
101
|
-
# Run specific example
|
|
102
|
-
bundle exec rspec spec/e11y/event/base_spec.rb:42
|
|
103
|
-
|
|
104
|
-
# Run tests matching pattern
|
|
105
|
-
bundle exec rspec --tag validation
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
## 📝 Code Style
|
|
109
|
-
|
|
110
|
-
E11y follows the Ruby community style guide with RuboCop:
|
|
111
|
-
|
|
112
|
-
### Run Linter
|
|
113
|
-
|
|
114
|
-
```bash
|
|
115
|
-
# Check code style
|
|
116
|
-
bundle exec rubocop
|
|
117
|
-
|
|
118
|
-
# Auto-fix issues
|
|
119
|
-
bundle exec rubocop -a
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### Key Conventions
|
|
123
|
-
|
|
124
|
-
- **100% test coverage** required
|
|
125
|
-
- **Type-safe code** - use dry-schema, dry-types
|
|
126
|
-
- **Thread-safe** - avoid shared mutable state
|
|
127
|
-
- **Performance-conscious** - zero-allocation patterns where possible
|
|
128
|
-
- **Documentation** - YARD comments for public APIs
|
|
129
|
-
|
|
130
|
-
## 🔒 Security
|
|
131
|
-
|
|
132
|
-
### Run Security Audits
|
|
133
|
-
|
|
134
|
-
```bash
|
|
135
|
-
# Check for vulnerable dependencies
|
|
136
|
-
bundle exec bundler-audit check --update
|
|
137
|
-
|
|
138
|
-
# Static security analysis
|
|
139
|
-
bundle exec brakeman
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
## 📦 Submitting Changes
|
|
143
|
-
|
|
144
|
-
### 1. Create a Branch
|
|
145
|
-
|
|
146
|
-
```bash
|
|
147
|
-
git checkout -b feature/your-feature-name
|
|
148
|
-
# or
|
|
149
|
-
git checkout -b fix/issue-description
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
### 2. Make Your Changes
|
|
153
|
-
|
|
154
|
-
- Write tests first (TDD)
|
|
155
|
-
- Ensure all tests pass
|
|
156
|
-
- Update documentation
|
|
157
|
-
- Follow code style guidelines
|
|
158
|
-
|
|
159
|
-
### 3. Commit Your Changes
|
|
160
|
-
|
|
161
|
-
```bash
|
|
162
|
-
git add .
|
|
163
|
-
git commit -m "feat: add awesome feature
|
|
164
|
-
|
|
165
|
-
- Added X functionality
|
|
166
|
-
- Updated Y documentation
|
|
167
|
-
- Fixed Z edge case
|
|
168
|
-
|
|
169
|
-
Closes #123"
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
Use [Conventional Commits](https://www.conventionalcommits.org/):
|
|
173
|
-
- `feat:` - New feature
|
|
174
|
-
- `fix:` - Bug fix
|
|
175
|
-
- `docs:` - Documentation only
|
|
176
|
-
- `refactor:` - Code refactoring
|
|
177
|
-
- `test:` - Adding tests
|
|
178
|
-
- `chore:` - Maintenance tasks
|
|
179
|
-
|
|
180
|
-
### 4. Push and Create Pull Request
|
|
181
|
-
|
|
182
|
-
```bash
|
|
183
|
-
git push origin feature/your-feature-name
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
Then create a PR on GitHub with:
|
|
187
|
-
- Clear description of changes
|
|
188
|
-
- Link to related issue
|
|
189
|
-
- Screenshots (if UI changes)
|
|
190
|
-
- Test results
|
|
191
|
-
|
|
192
|
-
### 5. PR Review Process
|
|
193
|
-
|
|
194
|
-
Your PR will be reviewed for:
|
|
195
|
-
- ✅ All tests pass (unit + integration in CI)
|
|
196
|
-
- ✅ 100% code coverage maintained
|
|
197
|
-
- ✅ RuboCop passes
|
|
198
|
-
- ✅ Security audits pass
|
|
199
|
-
- ✅ Documentation updated
|
|
200
|
-
- ✅ Follows coding conventions
|
|
201
|
-
|
|
202
|
-
## 🐛 Reporting Bugs
|
|
203
|
-
|
|
204
|
-
### Before Reporting
|
|
205
|
-
|
|
206
|
-
1. Search existing issues
|
|
207
|
-
2. Check if bug still exists in main branch
|
|
208
|
-
3. Reproduce with minimal example
|
|
209
|
-
|
|
210
|
-
### Bug Report Template
|
|
211
|
-
|
|
212
|
-
```markdown
|
|
213
|
-
**Describe the bug**
|
|
214
|
-
A clear description of what the bug is.
|
|
215
|
-
|
|
216
|
-
**To Reproduce**
|
|
217
|
-
Steps to reproduce:
|
|
218
|
-
1. Configure E11y with...
|
|
219
|
-
2. Call `SomeEvent.track(...)`
|
|
220
|
-
3. See error
|
|
221
|
-
|
|
222
|
-
**Expected behavior**
|
|
223
|
-
What you expected to happen.
|
|
224
|
-
|
|
225
|
-
**Actual behavior**
|
|
226
|
-
What actually happened.
|
|
227
|
-
|
|
228
|
-
**Environment**
|
|
229
|
-
- Ruby version: 3.3.0
|
|
230
|
-
- E11y version: 0.1.0
|
|
231
|
-
- Rails version (if applicable): 8.0.0
|
|
232
|
-
- OS: macOS 14.0
|
|
233
|
-
|
|
234
|
-
**Additional context**
|
|
235
|
-
Any other relevant information.
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
## 💡 Suggesting Features
|
|
239
|
-
|
|
240
|
-
### Feature Request Template
|
|
241
|
-
|
|
242
|
-
```markdown
|
|
243
|
-
**Problem**
|
|
244
|
-
What problem does this solve?
|
|
245
|
-
|
|
246
|
-
**Proposed Solution**
|
|
247
|
-
How should E11y solve this?
|
|
248
|
-
|
|
249
|
-
**Alternatives**
|
|
250
|
-
What alternatives have you considered?
|
|
251
|
-
|
|
252
|
-
**Additional Context**
|
|
253
|
-
Examples, use cases, references.
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
## 📚 Development Resources
|
|
257
|
-
|
|
258
|
-
### Documentation
|
|
259
|
-
|
|
260
|
-
- [Architecture Decisions (ADRs)](../docs/)
|
|
261
|
-
- [Implementation Plan](IMPLEMENTATION_PLAN.md)
|
|
262
|
-
- [API Reference](API.md)
|
|
263
|
-
- [Integration Testing Guide](testing/integration-tests.md)
|
|
264
|
-
|
|
265
|
-
### Code Structure
|
|
266
|
-
|
|
267
|
-
```
|
|
268
|
-
lib/e11y/
|
|
269
|
-
├── event/ # Event system
|
|
270
|
-
├── adapters/ # Backend adapters
|
|
271
|
-
├── buffers/ # Memory buffers
|
|
272
|
-
├── middleware/ # Pipeline middleware
|
|
273
|
-
├── reliability/ # Retry, circuit breaker, DLQ
|
|
274
|
-
├── sampling/ # Sampling strategies
|
|
275
|
-
├── self_monitoring/ # Internal metrics
|
|
276
|
-
└── slo/ # SLO tracking
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
### Useful Commands
|
|
280
|
-
|
|
281
|
-
```bash
|
|
282
|
-
# Interactive console
|
|
283
|
-
bin/console
|
|
284
|
-
|
|
285
|
-
# Generate documentation
|
|
286
|
-
bundle exec yard doc
|
|
287
|
-
|
|
288
|
-
# Performance benchmarks
|
|
289
|
-
bundle exec ruby benchmarks/run_all.rb
|
|
290
|
-
|
|
291
|
-
# Check for breaking changes
|
|
292
|
-
bundle exec ruby scripts/check_compatibility.rb
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
## 🤝 Code of Conduct
|
|
296
|
-
|
|
297
|
-
By participating in this project, you agree to abide by our [Code of Conduct](../CODE_OF_CONDUCT.md).
|
|
298
|
-
|
|
299
|
-
## 📧 Getting Help
|
|
300
|
-
|
|
301
|
-
- **Questions**: Open a GitHub Discussion
|
|
302
|
-
- **Bugs**: Open a GitHub Issue
|
|
303
|
-
- **Security**: Email security@e11y.dev (private disclosure)
|
|
304
|
-
|
|
305
|
-
## 🎉 Recognition
|
|
306
|
-
|
|
307
|
-
Contributors are recognized in:
|
|
308
|
-
- [CHANGELOG.md](../CHANGELOG.md)
|
|
309
|
-
- GitHub Contributors page
|
|
310
|
-
- Release notes
|
|
311
|
-
|
|
312
|
-
Thank you for contributing to E11y! 🚀
|