logbrew-sdk 0.1.2 → 0.1.4
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/README.md +334 -63
- data/examples/Makefile +5 -1
- data/examples/automatic_delivery.rb +1 -1
- data/examples/first_useful_telemetry.rb +90 -72
- data/examples/http_trace_correlation.rb +1 -0
- data/examples/issue_diagnostics.rb +55 -0
- data/examples/readme_example.rb +2 -1
- data/examples/real_user_smoke.rb +4 -2
- data/examples/sidekiq_tracing.rb +1 -1
- data/lib/logbrew/issue_diagnostics.rb +576 -0
- data/lib/logbrew/product_timeline.rb +24 -3
- data/lib/logbrew/rails.rb +105 -0
- data/lib/logbrew/rails_integration.rb +643 -0
- data/lib/logbrew/telemetry.rb +60 -0
- data/lib/logbrew/telemetry_context.rb +306 -0
- data/lib/logbrew/telemetry_context_value.rb +152 -0
- data/lib/logbrew/telemetry_resource.rb +161 -0
- data/lib/logbrew/version.rb +5 -0
- data/lib/logbrew-sdk.rb +4 -0
- data/lib/logbrew.rb +180 -48
- metadata +14 -4
|
@@ -13,97 +13,115 @@ outgoing_headers = LogBrew::Traceparent.create_headers(
|
|
|
13
13
|
)
|
|
14
14
|
session_id = "sess_checkout_123"
|
|
15
15
|
route_template = "/checkout/:cart_id"
|
|
16
|
+
service_resource = LogBrew::TelemetryResource.create
|
|
17
|
+
.with_service(name: "checkout-service", version: "1.2.3")
|
|
18
|
+
.with_deployment(environment: "production", release: "checkout@1.2.3")
|
|
19
|
+
.with_framework(name: "rack")
|
|
20
|
+
.build
|
|
21
|
+
service_context = LogBrew::TelemetryContext.create
|
|
22
|
+
.with_resource(service_resource)
|
|
23
|
+
.with_tag("region", "global")
|
|
24
|
+
.build
|
|
25
|
+
request_context = LogBrew::TelemetryContext.create
|
|
26
|
+
.with_session(id: session_id)
|
|
27
|
+
.with_subject(id: "subject_checkout_123", kind: "user")
|
|
28
|
+
.with_tags("journey" => "checkout", "surface" => "payment")
|
|
29
|
+
.build
|
|
30
|
+
active_trace = LogBrew::Trace.create(
|
|
31
|
+
trace_id: trace_context.trace_id,
|
|
32
|
+
span_id: child_span_id,
|
|
33
|
+
parent_span_id: trace_context.parent_span_id,
|
|
34
|
+
trace_flags: trace_context.trace_flags
|
|
35
|
+
)
|
|
16
36
|
|
|
17
37
|
client = LogBrew::Client.create(
|
|
18
38
|
api_key: "LOGBREW_API_KEY",
|
|
19
39
|
sdk_name: "checkout-service",
|
|
20
|
-
sdk_version: "1.2.3"
|
|
40
|
+
sdk_version: "1.2.3",
|
|
41
|
+
context: service_context
|
|
21
42
|
)
|
|
22
43
|
client.release(
|
|
23
44
|
"evt_release_checkout",
|
|
24
45
|
"2026-06-02T10:00:00Z",
|
|
25
46
|
version: "1.2.3",
|
|
26
|
-
commit: "abc123def456"
|
|
27
|
-
metadata: { service: "checkout-service" }
|
|
47
|
+
commit: "abc123def456"
|
|
28
48
|
)
|
|
29
49
|
client.environment(
|
|
30
50
|
"evt_environment_checkout",
|
|
31
51
|
"2026-06-02T10:00:01Z",
|
|
32
52
|
name: "production",
|
|
33
|
-
region: "global"
|
|
34
|
-
metadata: { service: "checkout-service" }
|
|
35
|
-
)
|
|
36
|
-
client.log(
|
|
37
|
-
"evt_log_checkout_started",
|
|
38
|
-
"2026-06-02T10:00:02Z",
|
|
39
|
-
message: "checkout request started",
|
|
40
|
-
level: "info",
|
|
41
|
-
logger: "checkout",
|
|
42
|
-
metadata: {
|
|
43
|
-
traceId: trace_context.trace_id,
|
|
44
|
-
sessionId: session_id,
|
|
45
|
-
routeTemplate: route_template
|
|
46
|
-
}
|
|
47
|
-
)
|
|
48
|
-
client.action(
|
|
49
|
-
"evt_action_checkout_submit",
|
|
50
|
-
"2026-06-02T10:00:03Z",
|
|
51
|
-
LogBrew::ProductTimeline.product_action(
|
|
52
|
-
name: "checkout.submit",
|
|
53
|
-
route_template: "https://shop.example/checkout/:cart_id?coupon=sample#review",
|
|
54
|
-
session_id: session_id,
|
|
55
|
-
trace_id: trace_context.trace_id,
|
|
56
|
-
screen: "Checkout",
|
|
57
|
-
funnel: "checkout",
|
|
58
|
-
step: "submit",
|
|
59
|
-
metadata: { cartTier: "gold" }
|
|
60
|
-
)
|
|
61
|
-
)
|
|
62
|
-
client.action(
|
|
63
|
-
"evt_action_payment_api",
|
|
64
|
-
"2026-06-02T10:00:04Z",
|
|
65
|
-
LogBrew::ProductTimeline.network_milestone(
|
|
66
|
-
route_template: "https://api.example/payments/:payment_id?card=sample",
|
|
67
|
-
method: "post",
|
|
68
|
-
status_code: 202,
|
|
69
|
-
duration_ms: 183.4,
|
|
70
|
-
session_id: session_id,
|
|
71
|
-
trace_id: trace_context.trace_id,
|
|
72
|
-
metadata: { dependency: "payments" }
|
|
73
|
-
)
|
|
53
|
+
region: "global"
|
|
74
54
|
)
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
55
|
+
LogBrew::Telemetry.with_context(request_context) do
|
|
56
|
+
LogBrew::Trace.with_context(active_trace) do
|
|
57
|
+
client.log(
|
|
58
|
+
"evt_log_checkout_started",
|
|
59
|
+
"2026-06-02T10:00:02Z",
|
|
60
|
+
message: "checkout request started",
|
|
61
|
+
level: "info",
|
|
62
|
+
logger: "checkout",
|
|
63
|
+
metadata: { routeTemplate: route_template }
|
|
64
|
+
)
|
|
65
|
+
client.action(
|
|
66
|
+
"evt_action_checkout_submit",
|
|
67
|
+
"2026-06-02T10:00:03Z",
|
|
68
|
+
LogBrew::ProductTimeline.product_action(
|
|
69
|
+
name: "checkout.submit",
|
|
70
|
+
route_template: "https://shop.example/checkout/:cart_id?coupon=sample#review",
|
|
71
|
+
session_id: session_id,
|
|
72
|
+
trace_id: trace_context.trace_id,
|
|
73
|
+
screen: "Checkout",
|
|
74
|
+
funnel: "checkout",
|
|
75
|
+
step: "submit",
|
|
76
|
+
metadata: { cartTier: "gold" }
|
|
77
|
+
)
|
|
78
|
+
)
|
|
79
|
+
client.action(
|
|
80
|
+
"evt_action_payment_api",
|
|
81
|
+
"2026-06-02T10:00:04Z",
|
|
82
|
+
LogBrew::ProductTimeline.network_milestone(
|
|
83
|
+
route_template: "https://api.example/payments/:payment_id?card=sample",
|
|
84
|
+
method: "post",
|
|
85
|
+
status_code: 202,
|
|
86
|
+
duration_ms: 183.4,
|
|
87
|
+
session_id: session_id,
|
|
88
|
+
trace_id: trace_context.trace_id,
|
|
89
|
+
metadata: { dependency: "payments" }
|
|
90
|
+
)
|
|
91
|
+
)
|
|
92
|
+
client.metric(
|
|
93
|
+
"evt_metric_http_server_duration",
|
|
94
|
+
"2026-06-02T10:00:05Z",
|
|
95
|
+
name: "http.server.duration",
|
|
96
|
+
description: "Duration of one completed server request.",
|
|
97
|
+
kind: "histogram",
|
|
98
|
+
value: 183.4,
|
|
99
|
+
unit: "ms",
|
|
100
|
+
temporality: "delta",
|
|
99
101
|
metadata: {
|
|
100
|
-
|
|
102
|
+
method: "POST",
|
|
101
103
|
routeTemplate: route_template,
|
|
102
|
-
|
|
104
|
+
statusCode: 202
|
|
103
105
|
}
|
|
104
106
|
)
|
|
105
|
-
|
|
106
|
-
|
|
107
|
+
client.span(
|
|
108
|
+
"evt_span_checkout_request",
|
|
109
|
+
"2026-06-02T10:00:06Z",
|
|
110
|
+
LogBrew::Traceparent.span_attributes_from_traceparent(
|
|
111
|
+
trace_context,
|
|
112
|
+
LogBrew::TraceparentSpanInput.new(
|
|
113
|
+
name: "POST /checkout/:cart_id",
|
|
114
|
+
span_id: child_span_id,
|
|
115
|
+
duration_ms: 183.4,
|
|
116
|
+
metadata: {
|
|
117
|
+
sampled: trace_context.sampled,
|
|
118
|
+
routeTemplate: route_template
|
|
119
|
+
}
|
|
120
|
+
)
|
|
121
|
+
)
|
|
122
|
+
)
|
|
123
|
+
end
|
|
124
|
+
end
|
|
107
125
|
|
|
108
126
|
puts client.preview_json
|
|
109
127
|
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "json"
|
|
4
|
+
require "logbrew"
|
|
5
|
+
|
|
6
|
+
module CheckoutFailureFixture
|
|
7
|
+
def self.fail_checkout
|
|
8
|
+
raise RuntimeError, "sensitive provider response fixture"
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
client = LogBrew::Client.create(
|
|
13
|
+
api_key: "LOGBREW_API_KEY",
|
|
14
|
+
sdk_name: "checkout-ruby-service",
|
|
15
|
+
sdk_version: "1.4.2"
|
|
16
|
+
)
|
|
17
|
+
breadcrumbs = [
|
|
18
|
+
LogBrew::IssueDiagnostics.breadcrumb(
|
|
19
|
+
timestamp: "2026-08-02T10:14:58.125+00:00",
|
|
20
|
+
category: "checkout.navigation",
|
|
21
|
+
type: "navigation",
|
|
22
|
+
level: "info",
|
|
23
|
+
message: "User reached payment review",
|
|
24
|
+
data: { step: "payment" }
|
|
25
|
+
),
|
|
26
|
+
LogBrew::IssueDiagnostics.breadcrumb(
|
|
27
|
+
timestamp: "2026-08-02T10:14:59Z",
|
|
28
|
+
category: "checkout.request",
|
|
29
|
+
type: "http",
|
|
30
|
+
level: "warn",
|
|
31
|
+
data: { method: "POST", statusCode: 503 }
|
|
32
|
+
)
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
begin
|
|
36
|
+
CheckoutFailureFixture.fail_checkout
|
|
37
|
+
rescue RuntimeError => error
|
|
38
|
+
client.issue(
|
|
39
|
+
"evt_issue_checkout_failure",
|
|
40
|
+
"2026-08-02T10:15:00Z",
|
|
41
|
+
LogBrew::IssueDiagnostics.from_exception(
|
|
42
|
+
error,
|
|
43
|
+
message: "Checkout could not be completed.",
|
|
44
|
+
mechanism_type: "ruby.exception",
|
|
45
|
+
handled: true,
|
|
46
|
+
metadata: { routeTemplate: "/checkout/:cart_id" },
|
|
47
|
+
breadcrumbs: breadcrumbs
|
|
48
|
+
)
|
|
49
|
+
)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
puts client.preview_json
|
|
53
|
+
|
|
54
|
+
response = client.shutdown(LogBrew::RecordingTransport.always_accept)
|
|
55
|
+
warn JSON.generate(ok: true, status: response.status_code, events: 1)
|
data/examples/readme_example.rb
CHANGED
data/examples/real_user_smoke.rb
CHANGED
|
@@ -12,7 +12,8 @@ require_relative "readme_example"
|
|
|
12
12
|
client = LogBrew::Client.create(
|
|
13
13
|
api_key: "LOGBREW_API_KEY",
|
|
14
14
|
sdk_name: "logbrew-ruby",
|
|
15
|
-
sdk_version: "0.1.0"
|
|
15
|
+
sdk_version: "0.1.0",
|
|
16
|
+
capture_runtime_context: false
|
|
16
17
|
)
|
|
17
18
|
enqueue_all(client)
|
|
18
19
|
|
|
@@ -22,7 +23,8 @@ response = client.shutdown(LogBrew::RecordingTransport.always_accept)
|
|
|
22
23
|
retry_client = LogBrew::Client.create(
|
|
23
24
|
api_key: "LOGBREW_API_KEY",
|
|
24
25
|
sdk_name: "logbrew-ruby",
|
|
25
|
-
sdk_version: "0.1.0"
|
|
26
|
+
sdk_version: "0.1.0",
|
|
27
|
+
capture_runtime_context: false
|
|
26
28
|
)
|
|
27
29
|
enqueue_all(retry_client)
|
|
28
30
|
retry_response = retry_client.flush(
|
data/examples/sidekiq_tracing.rb
CHANGED
|
@@ -6,7 +6,7 @@ require "sidekiq"
|
|
|
6
6
|
|
|
7
7
|
transport = LogBrew::HttpTransport.new(timeout: 10)
|
|
8
8
|
client = LogBrew::Client.create_automatic(
|
|
9
|
-
api_key: ENV.fetch("
|
|
9
|
+
api_key: ENV.fetch("LOGBREW_SERVER_API_KEY"),
|
|
10
10
|
sdk_name: "checkout-worker",
|
|
11
11
|
sdk_version: "1.0.0",
|
|
12
12
|
transport: transport
|