Skip to content

Commit 64166a4

Browse files
authored
Merge pull request #302 from databricks/bhu1rdb/flushmetrics
Flushing out metrics when connection is closed
2 parents ee3e52c + 881478a commit 64166a4

File tree

3 files changed

+22
-4
lines changed

3 files changed

+22
-4
lines changed

src/main/java/com/databricks/jdbc/core/DatabricksSession.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ public void close() throws DatabricksSQLException {
155155
databricksClient.deleteSession(this, computeResource);
156156
this.sessionInfo = null;
157157
this.isSessionOpen = false;
158+
this.connectionContext.getMetricsExporter().close();
158159
}
159160
}
160161
}

src/main/java/com/databricks/jdbc/telemetry/DatabricksMetrics.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.databricks.jdbc.client.DatabricksHttpException;
44
import com.databricks.jdbc.client.http.DatabricksHttpClient;
5+
import com.databricks.jdbc.commons.LogLevel;
6+
import com.databricks.jdbc.commons.util.LoggingUtil;
57
import com.databricks.jdbc.core.DatabricksSQLException;
68
import com.databricks.jdbc.driver.IDatabricksConnectionContext;
79
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -17,12 +19,11 @@
1719
import org.apache.http.client.utils.URIBuilder;
1820
import org.apache.http.util.EntityUtils;
1921

20-
// TODO (Bhuvan) Flush out metrics once the driver connection is closed
21-
public class DatabricksMetrics {
22+
public class DatabricksMetrics implements AutoCloseable {
2223
private final String URL =
2324
"https://aa87314c1e33d4c1f91a919f8cf9c4ba-387609431.us-west-2.elb.amazonaws.com:443/api/2.0/oss-sql-driver-telemetry/metrics";
24-
public final Map<String, Double> gaugeMetrics = new HashMap<>();
25-
public final Map<String, Double> counterMetrics = new HashMap<>();
25+
private final Map<String, Double> gaugeMetrics = new HashMap<>();
26+
private final Map<String, Double> counterMetrics = new HashMap<>();
2627
private final long intervalDurationForSendingReq =
2728
TimeUnit.SECONDS.toMillis(10 * 60); // 10 minutes
2829
private final ObjectMapper objectMapper = new ObjectMapper();
@@ -156,4 +157,19 @@ public void increment(String name, double value) {
156157
incCounterMetrics(name + "_" + workspaceId, value);
157158
if (!hasInitialExportOccurred) initialExport(counterMetrics, MetricsType.COUNTER);
158159
}
160+
161+
@Override
162+
public void close() {
163+
// Flush out metrics when connection is closed
164+
if (telemetryClient != null) {
165+
try {
166+
sendRequest(gaugeMetrics, DatabricksMetrics.MetricsType.GAUGE);
167+
sendRequest(counterMetrics, DatabricksMetrics.MetricsType.COUNTER);
168+
} catch (Exception e) {
169+
LoggingUtil.log(
170+
LogLevel.DEBUG,
171+
"Failed to export metrics when connection is closed. Error: " + e.getMessage());
172+
}
173+
}
174+
}
159175
}

src/test/java/com/databricks/jdbc/local/DriverTester.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ void testIfCreateSessionIsExported() throws Exception {
166166
"jdbc:databricks://e2-dogfood.staging.cloud.databricks.com:443/default;transportMode=https;ssl=1;AuthMech=3;httpPath=/sql/1.0/warehouses/791ba2a31c7fd70a;";
167167
Connection con = DriverManager.getConnection(jdbcUrl, "user", "x");
168168
System.out.println("Connection established......");
169+
con.close();
169170
}
170171

171172
@Test

0 commit comments

Comments
 (0)