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.
@@ -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
- client.metric(
76
- "evt_metric_http_server_duration",
77
- "2026-06-02T10:00:05Z",
78
- name: "http.server.duration",
79
- kind: "histogram",
80
- value: 183.4,
81
- unit: "ms",
82
- temporality: "delta",
83
- metadata: {
84
- method: "POST",
85
- routeTemplate: route_template,
86
- statusCode: 202,
87
- traceId: trace_context.trace_id
88
- }
89
- )
90
- client.span(
91
- "evt_span_checkout_request",
92
- "2026-06-02T10:00:06Z",
93
- LogBrew::Traceparent.span_attributes_from_traceparent(
94
- trace_context,
95
- LogBrew::TraceparentSpanInput.new(
96
- name: "POST /checkout/:cart_id",
97
- span_id: child_span_id,
98
- duration_ms: 183.4,
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
- sampled: trace_context.sampled,
102
+ method: "POST",
101
103
  routeTemplate: route_template,
102
- sessionId: session_id
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
 
@@ -61,6 +61,7 @@ app = lambda do |env|
61
61
  "evt_metric_checkout_trace",
62
62
  "2026-06-02T10:00:05Z",
63
63
  name: "http.server.duration",
64
+ description: "Duration of one completed server request.",
64
65
  kind: "histogram",
65
66
  value: 183.4,
66
67
  unit: "ms",
@@ -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)
@@ -55,7 +55,8 @@ if __FILE__ == $PROGRAM_NAME
55
55
  client = LogBrew::Client.create(
56
56
  api_key: "LOGBREW_API_KEY",
57
57
  sdk_name: "logbrew-ruby",
58
- sdk_version: "0.1.0"
58
+ sdk_version: "0.1.0",
59
+ capture_runtime_context: false
59
60
  )
60
61
  enqueue_all(client)
61
62
 
@@ -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(
@@ -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("LOGBREW_API_KEY"),
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