Skip to content

Commit 18e0189

Browse files
changes for UCP metrics
1 parent 96d6f95 commit 18e0189

File tree

12 files changed

+164
-83
lines changed

12 files changed

+164
-83
lines changed

cloudbank-v4/account/pom.xml

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,7 @@
2222
<artifactId>spring-boot-starter-data-jpa</artifactId>
2323
</dependency>
2424
<dependency>
25-
<groupId>com.oracle.database.spring</groupId>
26-
<artifactId>oracle-spring-boot-starter-ucp</artifactId>
27-
<version>${oracle-springboot-starter.version}</version>
28-
<type>pom</type>
29-
</dependency>
30-
<dependency>
31-
<groupId>com.oracle.database.spring</groupId>
25+
<groupId>com.oracle.database.spring</groupId>
3226
<artifactId>oracle-spring-boot-starter-wallet</artifactId>
3327
<version>${oracle-springboot-starter.version}</version>
3428
<type>pom</type>

cloudbank-v4/account/src/main/java/com/example/accounts/AccountsApplication.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
1-
// Copyright (c) 2023, Oracle and/or its affiliates.
1+
// Copyright (c) 2023, 2025, Oracle and/or its affiliates.
22
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
33

44
package com.example.accounts;
55

66
import com.example.common.filter.LoggingFilterConfig;
7+
import com.example.common.ucp.UCPTelemetry;
78
import org.springframework.boot.SpringApplication;
89
import org.springframework.boot.autoconfigure.SpringBootApplication;
910
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
1011
import org.springframework.context.annotation.Import;
1112

1213
@EnableDiscoveryClient
1314
@SpringBootApplication
14-
@Import(LoggingFilterConfig.class)
15+
@Import({ LoggingFilterConfig.class, UCPTelemetry.class })
1516
public class AccountsApplication {
1617

1718
public static void main(String[] args) {

cloudbank-v4/checks/pom.xml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,6 @@ https://oss.oracle.com/licenses/upl. -->
3030
<groupId>org.springframework.boot</groupId>
3131
<artifactId>spring-boot-starter-data-jdbc</artifactId>
3232
</dependency>
33-
<dependency>
34-
<groupId>com.oracle.database.spring</groupId>
35-
<artifactId>oracle-spring-boot-starter-ucp</artifactId>
36-
<version>${oracle-springboot-starter.version}</version>
37-
</dependency>
3833
<dependency>
3934
<groupId>com.example</groupId>
4035
<artifactId>common</artifactId>

cloudbank-v4/checks/src/main/java/com/example/checks/ChecksApplication.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import javax.sql.DataSource;
88

99
import com.example.common.filter.LoggingFilterConfig;
10+
import com.example.common.ucp.UCPTelemetry;
1011
import jakarta.jms.ConnectionFactory;
1112
import jakarta.jms.JMSException;
1213
import lombok.extern.slf4j.Slf4j;
@@ -30,7 +31,7 @@
3031
@EnableFeignClients
3132
@EnableJms
3233
@EnableDiscoveryClient
33-
@Import(LoggingFilterConfig.class)
34+
@Import({ LoggingFilterConfig.class, UCPTelemetry.class })
3435
@Slf4j
3536
public class ChecksApplication {
3637

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
// Copyright (c) 2025, Oracle and/or its affiliates.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
3+
4+
package com.example.common.ucp;
5+
6+
import javax.sql.DataSource;
7+
8+
import io.opentelemetry.api.OpenTelemetry;
9+
import io.opentelemetry.api.common.Attributes;
10+
import io.opentelemetry.api.metrics.BatchCallback;
11+
import io.opentelemetry.api.metrics.DoubleHistogram;
12+
import io.opentelemetry.api.metrics.LongCounter;
13+
import io.opentelemetry.api.metrics.ObservableLongMeasurement;
14+
import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbConnectionPoolMetrics;
15+
import io.opentelemetry.instrumentation.oracleucp.v11_2.OracleUcpTelemetry;
16+
import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration;
17+
import jakarta.annotation.PostConstruct;
18+
import jakarta.annotation.PreDestroy;
19+
import lombok.extern.slf4j.Slf4j;
20+
import oracle.ucp.UniversalConnectionPool;
21+
import oracle.ucp.admin.UniversalConnectionPoolManagerImpl;
22+
import oracle.ucp.jdbc.PoolDataSource;
23+
import org.springframework.beans.factory.annotation.Autowired;
24+
import org.springframework.boot.autoconfigure.AutoConfiguration;
25+
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
26+
import org.springframework.stereotype.Component;
27+
28+
@Slf4j
29+
@Component
30+
@AutoConfigureAfter(OpenTelemetryAutoConfiguration.class)
31+
@AutoConfiguration
32+
public class UCPTelemetry {
33+
34+
@Autowired
35+
private DataSource connectionPool;
36+
37+
private OracleUcpTelemetry ucpTelemetry;
38+
private OpenTelemetry openTelemetry;
39+
40+
public UCPTelemetry(OpenTelemetry openTelemetry) {
41+
this.ucpTelemetry = OracleUcpTelemetry.create(openTelemetry);
42+
this.openTelemetry = openTelemetry;
43+
}
44+
45+
private BatchCallback additionMetrics;
46+
47+
@PostConstruct
48+
protected void configure() throws Exception {
49+
UniversalConnectionPool universalConnectionPool = UniversalConnectionPoolManagerImpl
50+
.getUniversalConnectionPoolManager()
51+
.getConnectionPool(connectionPool.unwrap(PoolDataSource.class).getConnectionPoolName());
52+
this.ucpTelemetry.registerMetrics(universalConnectionPool);
53+
DbConnectionPoolMetrics metrics = DbConnectionPoolMetrics.create(
54+
openTelemetry, "obaas-ucp", universalConnectionPool.getName());
55+
56+
DoubleHistogram connectionCreateTime = metrics.connectionCreateTime();
57+
DoubleHistogram connectionUseTime = metrics.connectionUseTime();
58+
LongCounter connectionTimeOuts = metrics.connectionTimeouts();
59+
DoubleHistogram connectionWaitTime = metrics.connectionWaitTime();
60+
ObservableLongMeasurement connections = metrics.connections();
61+
62+
Attributes attributes = metrics.getAttributes();
63+
64+
additionMetrics = metrics.batchCallback(
65+
() -> {
66+
connectionUseTime.record(
67+
universalConnectionPool.getStatistics().getCumulativeConnectionUseTime(), attributes);
68+
connectionWaitTime.record(
69+
universalConnectionPool.getStatistics().getCumulativeConnectionWaitTime(), attributes);
70+
connectionCreateTime.record(universalConnectionPool.getStatistics().getAverageConnectionWaitTime(),
71+
attributes);
72+
connectionTimeOuts.add(
73+
universalConnectionPool.getStatistics().getCumulativeFailedConnectionWaitCount(),
74+
attributes);
75+
76+
}, connections);
77+
}
78+
79+
@PreDestroy
80+
protected void shutdown() throws Exception {
81+
UniversalConnectionPool universalConnectionPool = UniversalConnectionPoolManagerImpl
82+
.getUniversalConnectionPoolManager()
83+
.getConnectionPool(this.connectionPool.unwrap(PoolDataSource.class).getConnectionPoolName());
84+
this.ucpTelemetry.unregisterMetrics(universalConnectionPool);
85+
if (this.additionMetrics != null) {
86+
this.additionMetrics.close();
87+
}
88+
}
89+
90+
}

cloudbank-v4/customer/pom.xml

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<!-- Copyright (c) 2023, 2024, Oracle and/or its affiliates. -->
2+
<!-- Copyright (c) 2023, 2025, Oracle and/or its affiliates. -->
33
<!-- Licensed under the Universal Permissive License v 1.0 as shown at
44
https://oss.oracle.com/licenses/upl/ -->
55
<project xmlns="http://maven.apache.org/POM/4.0.0"
@@ -23,12 +23,6 @@ https://oss.oracle.com/licenses/upl/ -->
2323
<groupId>org.springframework.boot</groupId>
2424
<artifactId>spring-boot-starter-data-jpa</artifactId>
2525
</dependency>
26-
<dependency>
27-
<groupId>com.oracle.database.spring</groupId>
28-
<artifactId>oracle-spring-boot-starter-ucp</artifactId>
29-
<version>${oracle-springboot-starter.version}</version>
30-
<type>pom</type>
31-
</dependency>
3226
<dependency>
3327
<groupId>com.oracle.database.spring</groupId>
3428
<artifactId>oracle-spring-boot-starter-wallet</artifactId>

cloudbank-v4/customer/src/main/java/com/example/customer/CustomerApplication.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
1-
// Copyright (c) 2023, Oracle and/or its affiliates.
1+
// Copyright (c) 2023, 2025, Oracle and/or its affiliates.
22
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
33

44
package com.example.customer;
55

66
import com.example.common.filter.LoggingFilterConfig;
7+
import com.example.common.ucp.UCPTelemetry;
78
import org.springframework.boot.SpringApplication;
89
import org.springframework.boot.autoconfigure.SpringBootApplication;
910
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
1011
import org.springframework.context.annotation.Import;
1112

1213
@SpringBootApplication
1314
@EnableDiscoveryClient
14-
@Import(LoggingFilterConfig.class)
15+
@Import({ LoggingFilterConfig.class, UCPTelemetry.class })
1516
public class CustomerApplication {
1617

1718
public static void main(String[] args) {

cloudbank-v4/customer32/pom.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,6 @@ https://oss.oracle.com/licenses/upl/ -->
2626
<groupId>org.springframework.boot</groupId>
2727
<artifactId>spring-boot-starter-jdbc</artifactId>
2828
</dependency>
29-
<dependency>
30-
<groupId>com.oracle.database.spring</groupId>
31-
<artifactId>oracle-spring-boot-starter-ucp</artifactId>
32-
<version>${oracle-springboot-starter.version}</version>
33-
<type>pom</type>
34-
</dependency>
3529
<dependency>
3630
<groupId>com.oracle.database.spring</groupId>
3731
<artifactId>oracle-spring-boot-starter-wallet</artifactId>

cloudbank-v4/customer32/src/main/java/com/example/customer32/Customer32Application.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
1-
// Copyright (c) 2024, Oracle and/or its affiliates.
1+
// Copyright (c) 2024, 2025, Oracle and/or its affiliates.
22
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
33

44
package com.example.customer32;
55

6+
import com.example.common.filter.LoggingFilterConfig;
7+
import com.example.common.ucp.UCPTelemetry;
68
import org.springframework.boot.SpringApplication;
79
import org.springframework.boot.autoconfigure.SpringBootApplication;
810
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
11+
import org.springframework.context.annotation.Import;
912

1013
@SpringBootApplication
1114
@EnableDiscoveryClient
15+
@Import({ LoggingFilterConfig.class, UCPTelemetry.class })
1216
public class Customer32Application {
1317

1418
public static void main(String[] args) {

cloudbank-v4/pom.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,17 @@
141141
<groupId>io.github.openfeign</groupId>
142142
<artifactId>feign-micrometer</artifactId>
143143
</dependency>
144+
<dependency>
145+
<groupId>com.oracle.database.spring</groupId>
146+
<artifactId>oracle-spring-boot-starter-ucp</artifactId>
147+
<version>${oracle-springboot-starter.version}</version>
148+
<type>pom</type>
149+
</dependency>
150+
<dependency>
151+
<groupId>io.opentelemetry.instrumentation</groupId>
152+
<artifactId>opentelemetry-oracle-ucp-11.2</artifactId>
153+
<version>2.13.1-alpha</version>
154+
</dependency>
144155
</dependencies>
145156

146157
<dependencyManagement>

0 commit comments

Comments
 (0)