Skip to content

Commit 020711c

Browse files
Merge pull request #1056 from oracle/ucp-metrics
changes for enabling UCP metrics
2 parents 96d6f95 + 18e0189 commit 020711c

File tree

12 files changed

+164
-83
lines changed

12 files changed

+164
-83
lines changed

cloudbank-v4/account/pom.xml

+1-7
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

+3-2
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

-5
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

+2-1
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

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

+1-7
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

+3-2
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

-6
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

+5-1
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

+11
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>

cloudbank-v4/testrunner/pom.xml

+46-51
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,55 @@
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"
6-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
7-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
8-
<modelVersion>4.0.0</modelVersion>
9-
<parent>
10-
<groupId>com.example</groupId>
11-
<artifactId>cloudbank-apps</artifactId>
12-
<version>0.0.1-SNAPSHOT</version>
13-
</parent>
6+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
7+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
8+
<modelVersion>4.0.0</modelVersion>
9+
<parent>
10+
<groupId>com.example</groupId>
11+
<artifactId>cloudbank-apps</artifactId>
12+
<version>0.0.1-SNAPSHOT</version>
13+
</parent>
1414

15-
<artifactId>testrunner</artifactId>
16-
<version>0.0.1-SNAPSHOT</version>
17-
<name>testrunner</name>
18-
<description>Test Runner Application</description>
15+
<artifactId>testrunner</artifactId>
16+
<version>0.0.1-SNAPSHOT</version>
17+
<name>testrunner</name>
18+
<description>Test Runner Application</description>
1919

20-
<dependencies>
21-
<dependency>
22-
<groupId>com.oracle.database.spring</groupId>
23-
<artifactId>oracle-spring-boot-starter-aqjms</artifactId>
24-
<version>${oracle-springboot-starter.version}</version>
25-
</dependency>
26-
<dependency>
27-
<groupId>org.springframework.boot</groupId>
28-
<artifactId>spring-boot-starter-jdbc</artifactId>
29-
</dependency>
30-
<dependency>
31-
<groupId>com.oracle.database.spring</groupId>
32-
<artifactId>oracle-spring-boot-starter-wallet</artifactId>
33-
<version>${oracle-springboot-starter.version}</version>
34-
</dependency>
35-
<dependency>
36-
<groupId>com.oracle.database.spring</groupId>
37-
<artifactId>oracle-spring-boot-starter-ucp</artifactId>
38-
<version>${oracle-springboot-starter.version}</version>
39-
</dependency>
40-
<dependency>
41-
<groupId>com.example</groupId>
42-
<artifactId>common</artifactId>
43-
<version>${project.version}</version>
44-
</dependency>
45-
</dependencies>
20+
<dependencies>
21+
<dependency>
22+
<groupId>com.oracle.database.spring</groupId>
23+
<artifactId>oracle-spring-boot-starter-aqjms</artifactId>
24+
<version>${oracle-springboot-starter.version}</version>
25+
</dependency>
26+
<dependency>
27+
<groupId>org.springframework.boot</groupId>
28+
<artifactId>spring-boot-starter-jdbc</artifactId>
29+
</dependency>
30+
<dependency>
31+
<groupId>com.oracle.database.spring</groupId>
32+
<artifactId>oracle-spring-boot-starter-wallet</artifactId>
33+
<version>${oracle-springboot-starter.version}</version>
34+
</dependency>
35+
<dependency>
36+
<groupId>com.example</groupId>
37+
<artifactId>common</artifactId>
38+
<version>${project.version}</version>
39+
</dependency>
40+
</dependencies>
4641

47-
<build>
48-
<plugins>
49-
<plugin>
50-
<groupId>org.springframework.boot</groupId>
51-
<artifactId>spring-boot-maven-plugin</artifactId>
52-
</plugin>
53-
<plugin>
54-
<groupId>org.graalvm.buildtools</groupId>
55-
<artifactId>native-maven-plugin</artifactId>
56-
</plugin>
57-
</plugins>
58-
</build>
42+
<build>
43+
<plugins>
44+
<plugin>
45+
<groupId>org.springframework.boot</groupId>
46+
<artifactId>spring-boot-maven-plugin</artifactId>
47+
</plugin>
48+
<plugin>
49+
<groupId>org.graalvm.buildtools</groupId>
50+
<artifactId>native-maven-plugin</artifactId>
51+
</plugin>
52+
</plugins>
53+
</build>
5954

6055
</project>

cloudbank-v4/testrunner/src/main/java/com/example/testrunner/TestrunnerApplication.java

+2-1
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 oracle.jakarta.jms.AQjmsFactory;
@@ -25,7 +26,7 @@
2526
@SpringBootApplication
2627
@EnableJms
2728
@EnableDiscoveryClient
28-
@Import(LoggingFilterConfig.class)
29+
@Import({ LoggingFilterConfig.class, UCPTelemetry.class })
2930
public class TestrunnerApplication {
3031

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

0 commit comments

Comments
 (0)