databricks-cli/cmd
shreyas-goenka 06b71fe5da
Add synchronous logger for telemetry (#2432)
## Changes
This PR adds a synchronous telemetry logger for the CLI with a max
timeout of 3 seconds. Due to the 3-second timeout configuration, this is
only meant to be used in long-running commands.

This is a short-term solution. Eventually, we'd like to transition to a
daemon process to upload the telemetry logs to amortise the costs of
configuring authentication and maintaining a warm pool of HTTP
connections, as well as a better UX for the end user.

Note that users can set the `DATABRICKS_CLI_DISABLE_TELEMETRY`
environment variable to disable telemetry collection.

## Why
To collect telemetry, which was previously inaccessible to us, and
answer questions like which templates customers like to use and which
DABs features would be safe to deprecate.

## Tests
Unit and acceptance tests. 

Also manually verified that the telemetry upload works:
```
(artifact-playground) ➜  cli git:(sync-logger) cli selftest send-telemetry --debug
15:58:20 Info: start pid=40386 version=0.0.0-dev+a2825ca89a23 args="cli, selftest, send-telemetry, --debug"
15:58:20 Debug: Loading DEFAULT profile from /Users/shreyas.goenka/.databrickscfg pid=40386 sdk=true
15:58:20 Info: completed execution pid=40386 exit_code=0
15:58:21 Debug: POST /telemetry-ext
> {
>   "items": null,
>   "protoLogs": [
>     "{\"frontend_log_event_id\":\"82d29b3a-d5ff-48f3-8a21-dae6e08d2999\",\"entry\":{\"databricks_cli_log\":{\"... (232 more bytes)",
>     "{\"frontend_log_event_id\":\"d6be8220-7db8-45d9-97d6-4c09c25e2664\",\"entry\":{\"databricks_cli_log\":{\"... (232 more bytes)"
>   ],
>   "uploadTime": 1741186700967
> }
< HTTP/2.0 200 OK
< {
<   "errors": null,
<   "numProtoSuccess": 2,
<   "numSuccess": 0
< } pid=40386 sdk=true
```
2025-03-12 13:05:10 +00:00
..
account Upgrade Go SDK to 0.59.0 (#2425) 2025-03-05 10:20:51 +00:00
api Bump github.com/databricks/databricks-sdk-go from 0.55.0 to 0.56.1 (#2238) 2025-01-27 13:11:07 +00:00
auth Add library to store cmd-exec-id in context (#2439) 2025-03-10 13:11:24 +00:00
bundle Remove bundle.{Parallel,ReadOnlyBundle} (#2414) 2025-03-03 13:35:36 +00:00
configure Add library to store cmd-exec-id in context (#2439) 2025-03-10 13:11:24 +00:00
fs Move `WorkspaceClient` to `libs/command` (#2444) 2025-03-07 16:47:19 +00:00
labs Enable offline install of labs projects (#2049) 2025-03-10 10:01:17 +00:00
root Add synchronous logger for telemetry (#2432) 2025-03-12 13:05:10 +00:00
selftest Add synchronous logger for telemetry (#2432) 2025-03-12 13:05:10 +00:00
sync Move `WorkspaceClient` to `libs/command` (#2444) 2025-03-07 16:47:19 +00:00
version Add usage string when command fails with incorrect arguments (#1276) 2024-03-12 14:12:34 +00:00
workspace Fixed "can't evaluate field Name in type interface{}" for `databricks queries list` (#2451) 2025-03-10 08:05:15 +00:00
cmd.go Recover from panic gracefully (#2353) 2025-02-27 13:27:36 +00:00