Skip to content

Commit b85b5da

Browse files
authored
Merge pull request #755 from dahlia/feature/otel-meter
OpenTelemetry: ActivityPub federation metrics
2 parents ab2fa4a + f386a47 commit b85b5da

27 files changed

Lines changed: 1446 additions & 177 deletions

CHANGES.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,43 @@ To be released.
2222
and delayed counts, and `ParallelMessageQueue` delegates depth reporting
2323
to its wrapped queue when supported. [[#735], [#748]]
2424

25+
- Added OpenTelemetry metrics for ActivityPub delivery attempts, permanent
26+
delivery failures, inbox listener processing duration, and HTTP Signature
27+
verification failures. Applications can pass the new `meterProvider`
28+
option to `createFederation()`, and `Context.meterProvider` exposes the
29+
provider available to request, inbox, and outbox code.
30+
[[#316], [#619], [#755]]
31+
32+
- Added the `activitypub.delivery.failed` span event to queued outbox
33+
delivery spans so retry and permanent-failure decisions include the
34+
remote host, attempt number, and HTTP status code when available.
35+
[[#316], [#619], [#755]]
36+
37+
- *Breaking change*: Changed the `activitypub.activity.sent` span event to
38+
record delivery metadata (`activitypub.inbox.url` and
39+
`activitypub.activity.id`) instead of the full `activitypub.activity.json`
40+
payload. `FedifySpanExporter` now stores outbound records from those
41+
attributes, and `TraceActivityRecord.activityJson` is present only when the
42+
span event includes full activity JSON. [[#316], [#619], [#755]]
43+
44+
[#316]: https://github.com/fedify-dev/fedify/issues/316
45+
[#619]: https://github.com/fedify-dev/fedify/issues/619
2546
[#735]: https://github.com/fedify-dev/fedify/issues/735
2647
[#748]: https://github.com/fedify-dev/fedify/pull/748
2748
[#752]: https://github.com/fedify-dev/fedify/issues/752
2849
[#753]: https://github.com/fedify-dev/fedify/pull/753
50+
[#755]: https://github.com/fedify-dev/fedify/pull/755
51+
52+
### @fedify/fixture
53+
54+
- Added `createTestMeterProvider()` and `TestMetricRecorder` helpers for
55+
asserting OpenTelemetry metric measurements in runtime-agnostic tests.
56+
[[#316], [#619], [#755]]
57+
58+
### @fedify/testing
59+
60+
- Added a `meterProvider` option to `createFederation()` so mock contexts can
61+
expose a test OpenTelemetry meter provider. [[#316], [#619], [#755]]
2962

3063
### @fedify/amqp
3164

deno.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
"@opentelemetry/api": "npm:@opentelemetry/api@^1.9.0",
4848
"@opentelemetry/context-async-hooks": "npm:@opentelemetry/context-async-hooks@^2.5.0",
4949
"@opentelemetry/core": "npm:@opentelemetry/core@^2.5.0",
50+
"@opentelemetry/sdk-metrics": "npm:@opentelemetry/sdk-metrics@2.5.0",
5051
"@opentelemetry/sdk-trace-base": "npm:@opentelemetry/sdk-trace-base@^2.5.0",
5152
"@opentelemetry/semantic-conventions": "npm:@opentelemetry/semantic-conventions@^1.39.0",
5253
"@optique/config": "jsr:@optique/config@^1.0.2",

deno.lock

Lines changed: 36 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/manual/federation.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,18 @@ For more information, see the [*OpenTelemetry* section](./opentelemetry.md).
444444

445445
[`trace.getTracerProvider()`]: https://open-telemetry.github.io/opentelemetry-js/classes/_opentelemetry_api._opentelemetry_api.TraceAPI.html#gettracerprovider
446446

447+
### `meterProvider`
448+
449+
*This API is available since Fedify 2.3.0.*
450+
451+
The OpenTelemetry meter provider that the `Federation` object uses to record
452+
Fedify metrics. If omitted, it is configured to use the default meter provider
453+
(i.e., [`metrics.getMeterProvider()`]).
454+
455+
For more information, see the [*OpenTelemetry* section](./opentelemetry.md).
456+
457+
[`metrics.getMeterProvider()`]: https://open-telemetry.github.io/opentelemetry-js/classes/_opentelemetry_api._opentelemetry_api.MetricsAPI.html#getmeterprovider
458+
447459

448460
Builder pattern for structuring
449461
-------------------------------

0 commit comments

Comments
 (0)