Skip to content

Commit c0e3a43

Browse files
samikshya-dbclaude
andcommitted
Add connection open latency tracking and enable telemetry by default
Changes: - Track and export connection open latency (session creation time) - Enable telemetry by default (was false), gated by feature flag - Update design doc to document connection latency Implementation: - DBSQLClient.openSession(): Track start time and calculate latency - TelemetryEventEmitter: Accept latencyMs in connection event - MetricsAggregator: Include latency in connection metrics - DatabricksTelemetryExporter: Export operation_latency_ms for connections Config changes: - telemetryEnabled: true by default (in DBSQLClient and types.ts) - Feature flag check still gates initialization for safe rollout Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> Signed-off-by: samikshya-chand_data <samikshya.chand@databricks.com>
1 parent 29cc1b2 commit c0e3a43

6 files changed

Lines changed: 20 additions & 4 deletions

File tree

lib/DBSQLClient.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ export default class DBSQLClient extends EventEmitter implements IDBSQLClient, I
118118
useLZ4Compression: true,
119119

120120
// Telemetry defaults
121-
telemetryEnabled: false, // Initially disabled for safe rollout
121+
telemetryEnabled: true, // Enabled by default, gated by feature flag
122122
telemetryBatchSize: 100,
123123
telemetryFlushIntervalMs: 5000,
124124
telemetryMaxRetries: 3,
@@ -447,6 +447,9 @@ export default class DBSQLClient extends EventEmitter implements IDBSQLClient, I
447447
* const session = await client.openSession();
448448
*/
449449
public async openSession(request: OpenSessionRequest = {}): Promise<IDBSQLSession> {
450+
// Track connection open latency
451+
const startTime = Date.now();
452+
450453
// Prepare session configuration
451454
const configuration = request.configuration ? { ...request.configuration } : {};
452455

@@ -473,12 +476,14 @@ export default class DBSQLClient extends EventEmitter implements IDBSQLClient, I
473476
// Emit connection.open telemetry event
474477
if (this.telemetryEmitter && this.host) {
475478
try {
479+
const latencyMs = Date.now() - startTime;
476480
const workspaceId = this.extractWorkspaceId(this.host);
477481
const driverConfig = this.buildDriverConfiguration();
478482
this.telemetryEmitter.emitConnectionOpen({
479483
sessionId: session.id,
480484
workspaceId,
481485
driverConfig,
486+
latencyMs,
482487
});
483488
} catch (error: any) {
484489
// CRITICAL: All telemetry exceptions swallowed

lib/telemetry/DatabricksTelemetryExporter.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,10 @@ export default class DatabricksTelemetryExporter {
289289
char_set_encoding: metric.driverConfig.charSetEncoding,
290290
process_name: metric.driverConfig.processName,
291291
};
292+
// Include connection open latency
293+
if (metric.latencyMs !== undefined) {
294+
log.entry.sql_driver_log.operation_latency_ms = metric.latencyMs;
295+
}
292296
} else if (metric.metricType === 'statement') {
293297
log.entry.sql_driver_log.operation_latency_ms = metric.latencyMs;
294298

lib/telemetry/MetricsAggregator.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ export default class MetricsAggregator {
124124
sessionId: event.sessionId,
125125
workspaceId: event.workspaceId,
126126
driverConfig: event.driverConfig,
127+
latencyMs: event.latencyMs,
127128
};
128129

129130
this.addPendingMetric(metric);

lib/telemetry/TelemetryEventEmitter.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,12 @@ export default class TelemetryEventEmitter extends EventEmitter {
4545
*
4646
* @param data Connection event data including sessionId, workspaceId, and driverConfig
4747
*/
48-
emitConnectionOpen(data: { sessionId: string; workspaceId: string; driverConfig: DriverConfiguration }): void {
48+
emitConnectionOpen(data: {
49+
sessionId: string;
50+
workspaceId: string;
51+
driverConfig: DriverConfiguration;
52+
latencyMs: number;
53+
}): void {
4954
if (!this.enabled) return;
5055

5156
const logger = this.context.getLogger();
@@ -56,6 +61,7 @@ export default class TelemetryEventEmitter extends EventEmitter {
5661
sessionId: data.sessionId,
5762
workspaceId: data.workspaceId,
5863
driverConfig: data.driverConfig,
64+
latencyMs: data.latencyMs,
5965
};
6066
this.emit(TelemetryEventType.CONNECTION_OPEN, event);
6167
} catch (error: any) {

lib/telemetry/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ export interface TelemetryConfiguration {
6565
* Default telemetry configuration values
6666
*/
6767
export const DEFAULT_TELEMETRY_CONFIG: Required<TelemetryConfiguration> = {
68-
enabled: false, // Initially disabled for safe rollout
68+
enabled: true, // Enabled by default, gated by feature flag
6969
batchSize: 100,
7070
flushIntervalMs: 5000,
7171
maxRetries: 3,

spec/telemetry-design.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1212,7 +1212,7 @@ The driver emits events at key operations:
12121212

12131213
| Event | When | Data Collected |
12141214
|-------|------|----------------|
1215-
| `connection.open` | Connection established | session_id, workspace_id, driver config |
1215+
| `connection.open` | Session opened | session_id, workspace_id, driver config, latency_ms |
12161216
| `statement.start` | Statement execution begins | statement_id, session_id, operation_type |
12171217
| `statement.complete` | Statement execution ends | statement_id, latency, result_format, poll_count |
12181218
| `cloudfetch.chunk` | CloudFetch chunk downloaded | statement_id, chunk_index, latency, bytes |

0 commit comments

Comments
 (0)