Skip to content

Commit 600e923

Browse files
committed
Flushing metrics out when connection is closed
1 parent d76de89 commit 600e923

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.databricks.jdbc.core.types.CompressionType;
1313
import com.databricks.jdbc.core.types.ComputeResource;
1414
import com.databricks.jdbc.driver.IDatabricksConnectionContext;
15+
import com.databricks.jdbc.telemetry.DatabricksMetrics;
1516
import com.databricks.sdk.support.ToStringer;
1617
import com.google.common.annotations.VisibleForTesting;
1718
import java.util.HashMap;
@@ -148,13 +149,27 @@ public void open() throws DatabricksSQLException {
148149
@Override
149150
public void close() throws DatabricksSQLException {
150151
LoggingUtil.log(LogLevel.DEBUG, "public void close()");
152+
System.out.println("close() session");
151153
// TODO: check for any pending query executions
152154
synchronized (this) {
153155
if (isSessionOpen) {
154156
// TODO: handle closed connections by server
155157
databricksClient.deleteSession(this, computeResource);
156158
this.sessionInfo = null;
157159
this.isSessionOpen = false;
160+
161+
// Flush out metrics when connection is closed
162+
DatabricksMetrics metricsExporter = connectionContext.getMetricsExporter();
163+
if (metricsExporter != null) {
164+
try {
165+
metricsExporter.sendRequest(
166+
metricsExporter.getGaugeMetrics(), DatabricksMetrics.MetricsType.GAUGE);
167+
metricsExporter.sendRequest(
168+
metricsExporter.getCounterMetrics(), DatabricksMetrics.MetricsType.COUNTER);
169+
} catch (Exception e) {
170+
throw new RuntimeException("Failed to flush out metrics", e);
171+
}
172+
}
158173
}
159174
}
160175
}

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,11 @@
1818
import org.apache.http.impl.client.DefaultHttpClient;
1919
import org.apache.http.util.EntityUtils;
2020

21-
// TODO (Bhuvan) Flush out metrics once the driver connection is closed
2221
public class DatabricksMetrics {
2322
private final String URL =
2423
"https://aa87314c1e33d4c1f91a919f8cf9c4ba-387609431.us-west-2.elb.amazonaws.com:443/api/2.0/oss-sql-driver-telemetry/metrics";
25-
public final Map<String, Double> gaugeMetrics = new HashMap<>();
26-
public final Map<String, Double> counterMetrics = new HashMap<>();
24+
private final Map<String, Double> gaugeMetrics = new HashMap<>();
25+
private final Map<String, Double> counterMetrics = new HashMap<>();
2726
private final long intervalDurationForSendingReq =
2827
TimeUnit.SECONDS.toMillis(10 * 60); // 10 minutes
2928
private final ObjectMapper objectMapper = new ObjectMapper();
@@ -33,6 +32,14 @@ public class DatabricksMetrics {
3332
private String workspaceId = null;
3433
private DefaultHttpClient telemetryClient = null;
3534

35+
public Map<String, Double> getGaugeMetrics() {
36+
return gaugeMetrics;
37+
}
38+
39+
public Map<String, Double> getCounterMetrics() {
40+
return counterMetrics;
41+
}
42+
3643
private void setWorkspaceId(String workspaceId) {
3744
this.workspaceId = workspaceId;
3845
}

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)