Skip to content

Commit 7fb19a1

Browse files
authored
feat(java-sdk): support OpenTelemetry metrics (#402)
2 parents 07c7c8a + d191247 commit 7fb19a1

34 files changed

+1606
-28
lines changed

config/clients/java/config.overrides.json

Lines changed: 87 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"utilPackage": "dev.openfga.sdk.util",
1313
"invokerPackage": "dev.openfga.sdk.api.client",
1414
"modelPackage": "dev.openfga.sdk.api.model",
15+
"telemetryPackage": "dev.openfga.sdk.telemetry",
1516
"snapshotVersion": false,
1617
"packageDescription": "Java SDK for OpenFGA",
1718
"artifactDescription": "Java SDK for OpenFGA",
@@ -30,6 +31,7 @@
3031
"enumUnknownDefaultCase": true,
3132
"allowUnicodeIdentifiers": true,
3233
"caseInsensitiveResponseHeaders": true,
34+
"supportsOpenTelemetry": true,
3335
"files": {
3436
"auth-model.json": {
3537
"destinationFilename": "src/test-integration/resources/auth-model.json",
@@ -343,6 +345,14 @@
343345
"destinationFilename": "src/main/java/dev/openfga/sdk/api/configuration/CredentialsMethod.java",
344346
"templateType": "SupportingFiles"
345347
},
348+
"config-TelemetryConfiguration.java.mustache": {
349+
"destinationFilename": "src/main/java/dev/openfga/sdk/api/configuration/TelemetryConfiguration.java",
350+
"templateType": "SupportingFiles"
351+
},
352+
"config-TelemetryConfigurationTest.java.mustache": {
353+
"destinationFilename": "src/test/java/dev/openfga/sdk/api/configuration/TelemetryConfigurationTest.java",
354+
"templateType": "SupportingFiles"
355+
},
346356
"errors-FgaApiAuthenticationError.java.mustache": {
347357
"destinationFilename": "src/main/java/dev/openfga/sdk/errors/FgaApiAuthenticationError.java",
348358
"templateType": "SupportingFiles"
@@ -395,6 +405,78 @@
395405
"destinationFilename": "src/main/java/dev/openfga/sdk/errors/ApiException.java",
396406
"templateType": "SupportingFiles"
397407
},
408+
"telemetry-Attribute.java.mustache": {
409+
"destinationFilename": "src/main/java/dev/openfga/sdk/telemetry/Attribute.java",
410+
"templateType": "SupportingFiles"
411+
},
412+
"telemetry-AttributeTest.java.mustache": {
413+
"destinationFilename": "src/test/java/dev/openfga/sdk/telemetry/AttributeTest.java",
414+
"templateType": "SupportingFiles"
415+
},
416+
"telemetry-Attributes.java.mustache": {
417+
"destinationFilename": "src/main/java/dev/openfga/sdk/telemetry/Attributes.java",
418+
"templateType": "SupportingFiles"
419+
},
420+
"telemetry-AttributesTest.java.mustache": {
421+
"destinationFilename": "src/test/java/dev/openfga/sdk/telemetry/AttributesTest.java",
422+
"templateType": "SupportingFiles"
423+
},
424+
"telemetry-Counter.java.mustache": {
425+
"destinationFilename": "src/main/java/dev/openfga/sdk/telemetry/Counter.java",
426+
"templateType": "SupportingFiles"
427+
},
428+
"telemetry-CounterTest.java.mustache": {
429+
"destinationFilename": "src/test/java/dev/openfga/sdk/telemetry/CounterTest.java",
430+
"templateType": "SupportingFiles"
431+
},
432+
"telemetry-Counters.java.mustache": {
433+
"destinationFilename": "src/main/java/dev/openfga/sdk/telemetry/Counters.java",
434+
"templateType": "SupportingFiles"
435+
},
436+
"telemetry-CountersTest.java.mustache": {
437+
"destinationFilename": "src/test/java/dev/openfga/sdk/telemetry/CountersTest.java",
438+
"templateType": "SupportingFiles"
439+
},
440+
"telemetry-Histogram.java.mustache": {
441+
"destinationFilename": "src/main/java/dev/openfga/sdk/telemetry/Histogram.java",
442+
"templateType": "SupportingFiles"
443+
},
444+
"telemetry-HistogramTest.java.mustache": {
445+
"destinationFilename": "src/test/java/dev/openfga/sdk/telemetry/HistogramTest.java",
446+
"templateType": "SupportingFiles"
447+
},
448+
"telemetry-Histograms.java.mustache": {
449+
"destinationFilename": "src/main/java/dev/openfga/sdk/telemetry/Histograms.java",
450+
"templateType": "SupportingFiles"
451+
},
452+
"telemetry-HistogramsTest.java.mustache": {
453+
"destinationFilename": "src/test/java/dev/openfga/sdk/telemetry/HistogramsTest.java",
454+
"templateType": "SupportingFiles"
455+
},
456+
"telemetry-Metric.java.mustache": {
457+
"destinationFilename": "src/main/java/dev/openfga/sdk/telemetry/Metric.java",
458+
"templateType": "SupportingFiles"
459+
},
460+
"telemetry-MetricTest.java.mustache": {
461+
"destinationFilename": "src/test/java/dev/openfga/sdk/telemetry/MetricTest.java",
462+
"templateType": "SupportingFiles"
463+
},
464+
"telemetry-Metrics.java.mustache": {
465+
"destinationFilename": "src/main/java/dev/openfga/sdk/telemetry/Metrics.java",
466+
"templateType": "SupportingFiles"
467+
},
468+
"telemetry-MetricsTest.java.mustache": {
469+
"destinationFilename": "src/test/java/dev/openfga/sdk/telemetry/MetricsTest.java",
470+
"templateType": "SupportingFiles"
471+
},
472+
"telemetry-Telemetry.java.mustache": {
473+
"destinationFilename": "src/main/java/dev/openfga/sdk/telemetry/Telemetry.java",
474+
"templateType": "SupportingFiles"
475+
},
476+
"telemetry-TelemetryTest.java.mustache": {
477+
"destinationFilename": "src/test/java/dev/openfga/sdk/telemetry/TelemetryTest.java",
478+
"templateType": "SupportingFiles"
479+
},
398480
"OpenFgaApiTest.java.mustache": {
399481
"destinationFilename": "src/test/java/dev/openfga/sdk/api/OpenFgaApiTest.java",
400482
"templateType": "SupportingFiles"
@@ -411,6 +493,10 @@
411493
"destinationFilename": "gradle/wrapper/gradle-wrapper.properties",
412494
"templateType": "SupportingFiles"
413495
},
496+
"docs/OpenTelemetry.md.mustache": {
497+
"destinationFilename": "docs/OpenTelemetry.md",
498+
"templateType": "SupportingFiles"
499+
},
414500
"example/Makefile": {
415501
"destinationFilename": "example/Makefile",
416502
"templateType": "SupportingFiles"
@@ -435,7 +521,7 @@
435521
"destinationFilename": "example/example1/gradlew",
436522
"templateType": "SupportingFiles"
437523
},
438-
"example/example1/build.gradle": {
524+
"example/example1/build.gradle.mustache": {
439525
"destinationFilename": "example/example1/build.gradle",
440526
"templateType": "SupportingFiles"
441527
},

config/clients/java/template/.github/dependabot.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@ updates:
88
dependencies:
99
patterns:
1010
- "*"
11+
- package-ecosystem: "gradle"
12+
directory: "/example/example1"
13+
schedule:
14+
interval: "monthly"
15+
groups:
16+
dependencies:
17+
patterns:
18+
- "*"
1119
- package-ecosystem: "github-actions"
1220
directory: "/"
1321
schedule:

config/clients/java/template/.github/workflows/fossa.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
1515

1616
- name: Set up JDK 17
17-
uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
17+
uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 # v4.2.2
1818
with:
1919
java-version: "17"
2020
distribution: "temurin"

config/clients/java/template/.github/workflows/main.yaml.mustache

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,25 @@ jobs:
1717
java: [11, 17, 21]
1818

1919
steps:
20-
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
20+
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
2121

2222
- name: Set up JDK
23-
uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
23+
uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 # v4.2.2
2424
with:
2525
java-version: ${{ matrix.java }}
2626
distribution: "temurin"
2727
cache: gradle
2828

2929
- name: Set up Gradle
30-
uses: gradle/actions/setup-gradle@db19848a5fa7950289d3668fb053140cf3028d43 # v3.3.2
30+
uses: gradle/actions/setup-gradle@dbbdc275be76ac10734476cc723d82dfe7ec6eda # v3.4.2
3131

3232
- name: Test and Build with Gradle
3333
run: |
3434
./gradlew build test-integration
3535

3636
- if: matrix.java == 11
3737
name: Upload coverage to Codecov
38-
uses: codecov/codecov-action@125fc84a9a348dbcf27191600683ec096ec9021c # v4.4.1
38+
uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0
3939
continue-on-error: true
4040
with:
4141
token: ${{ secrets.CODECOV_TOKEN }}
@@ -51,19 +51,19 @@ jobs:
5151
packages: write
5252

5353
steps:
54-
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
54+
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
5555

5656
- name: Set up JDK
57-
uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
57+
uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 # v4.2.2
5858
with:
5959
java-version: 11
6060
distribution: "temurin"
6161

6262
- name: Validate Gradle wrapper
63-
uses: gradle/actions/wrapper-validation@db19848a5fa7950289d3668fb053140cf3028d43 # v3.3.2
63+
uses: gradle/actions/wrapper-validation@dbbdc275be76ac10734476cc723d82dfe7ec6eda # v3.4.2
6464

6565
- name: Setup Gradle
66-
uses: gradle/actions/setup-gradle@db19848a5fa7950289d3668fb053140cf3028d43 # v3.3.2
66+
uses: gradle/actions/setup-gradle@dbbdc275be76ac10734476cc723d82dfe7ec6eda # v3.4.2
6767

6868
# Tasks created by https://github.com/gradle-nexus/publish-plugin
6969
- name: Publish package
@@ -84,19 +84,19 @@ jobs:
8484
packages: write
8585

8686
steps:
87-
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
87+
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
8888

8989
- name: Set up JDK
90-
uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
90+
uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 # v4.2.2
9191
with:
9292
java-version: 11
9393
distribution: "temurin"
9494

9595
- name: Validate Gradle wrapper
96-
uses: gradle/actions/wrapper-validation@db19848a5fa7950289d3668fb053140cf3028d43 # v3.3.2
96+
uses: gradle/actions/wrapper-validation@dbbdc275be76ac10734476cc723d82dfe7ec6eda # v3.4.2
9797

9898
- name: Setup Gradle
99-
uses: gradle/actions/setup-gradle@db19848a5fa7950289d3668fb053140cf3028d43 # v3.3.2
99+
uses: gradle/actions/setup-gradle@dbbdc275be76ac10734476cc723d82dfe7ec6eda # v3.4.2
100100

101101
# Tasks created by https://docs.gradle.org/current/userguide/publishing_maven.html
102102
- name: Publish package
@@ -112,7 +112,7 @@ jobs:
112112
runs-on: ubuntu-latest
113113

114114
steps:
115-
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
115+
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
116116

117117
- uses: Roang-zero1/github-create-release-action@57eb9bdce7a964e48788b9e78b5ac766cb684803 # v3.0.1
118118
with:

config/clients/java/template/OpenFgaApiTest.java.mustache

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1318,7 +1318,6 @@ public class OpenFgaApiTest {
13181318
var response = fga.check(DEFAULT_STORE_ID, request).get();
13191319
13201320
// Then
1321-
verify(mockConfiguration).getApiUrl();
13221321
verify(mockConfiguration).getReadTimeout();
13231322
mockHttpClient.verify().post(postPath).withBody(is(expectedBody)).called(1);
13241323
assertNotNull(response.getData());

config/clients/java/template/build.gradle.mustache

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ ext {
6161
{{#swagger2AnnotationLibrary}}
6262
swagger_annotations_version = "2.2.9"
6363
{{/swagger2AnnotationLibrary}}
64-
jackson_version = "2.17.1"
65-
junit_version = "5.10.2"
64+
jackson_version = "2.17.2"
65+
junit_version = "5.10.3"
6666
{{#hasFormParamsInSpec}}
6767
httpmime_version = "4.5.13"
6868
{{/hasFormParamsInSpec}}
@@ -75,12 +75,14 @@ dependencies {
7575
{{#swagger2AnnotationLibrary}}
7676
implementation "io.swagger.core.v3:swagger-annotations:$swagger_annotations_version"
7777
{{/swagger2AnnotationLibrary}}
78-
implementation "com.google.code.findbugs:jsr305:3.0.2"
78+
implementation "com.google.code.findbugs:jsr305:3.0.+"
7979
implementation "com.fasterxml.jackson.core:jackson-core:$jackson_version"
8080
implementation "com.fasterxml.jackson.core:jackson-annotations:$jackson_version"
8181
implementation "com.fasterxml.jackson.core:jackson-databind:$jackson_version"
8282
implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jackson_version"
83-
implementation "org.openapitools:jackson-databind-nullable:0.2.6"
83+
implementation "org.openapitools:jackson-databind-nullable:0.2.+"
84+
implementation platform("io.opentelemetry:opentelemetry-bom:1.41.+")
85+
implementation "io.opentelemetry:opentelemetry-api"
8486
{{#hasFormParamsInSpec}}
8587
implementation "org.apache.httpcomponents:httpmime:$httpmime_version"
8688
{{/hasFormParamsInSpec}}
@@ -96,7 +98,7 @@ testing {
9698
implementation "org.junit.jupiter:junit-jupiter:$junit_version"
9799
implementation "org.mockito:mockito-core:5.+"
98100
runtimeOnly "org.junit.platform:junit-platform-launcher"
99-
implementation "org.wiremock:wiremock:3.6.0"
101+
implementation "org.wiremock:wiremock:3.9.+"
100102
101103
// This test-only dependency is convenient but not widely used.
102104
// Review project activity before updating the version here.
@@ -122,8 +124,8 @@ testing {
122124
dependencies {
123125
implementation "com.fasterxml.jackson.core:jackson-core:$jackson_version"
124126
implementation "com.fasterxml.jackson.core:jackson-databind:$jackson_version"
125-
implementation "org.testcontainers:junit-jupiter:1.19.8"
126-
implementation "org.testcontainers:openfga:1.19.8"
127+
implementation "org.testcontainers:junit-jupiter:1.20.+"
128+
implementation "org.testcontainers:openfga:1.20.+"
127129
implementation project()
128130
}
129131

0 commit comments

Comments
 (0)