Skip to content

Commit 2491c60

Browse files
authored
Merge pull request #75 from databricks-solutions/feature/telemetry
Add User-Agent telemetry to all Databricks SDK calls
2 parents d164842 + 750a373 commit 2491c60

17 files changed

Lines changed: 57 additions & 18 deletions

File tree

backend/_telemetry.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
"""Databricks SDK telemetry constants for the genie-workbench product."""
2+
3+
PRODUCT_NAME = "genie-workbench"
4+
PRODUCT_VERSION = "0.1.0" # Keep in sync with pyproject.toml

backend/services/auth.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
from databricks.sdk import WorkspaceClient
1717
from databricks.sdk.config import Config
1818

19+
from backend._telemetry import PRODUCT_NAME, PRODUCT_VERSION
20+
1921
logger = logging.getLogger(__name__)
2022

2123
# Singleton client for local dev (or fallback when no user token is available)
@@ -55,7 +57,7 @@ def set_obo_user_token(token: str) -> None:
5557
client_id=None,
5658
client_secret=None, # gitleaks:allow
5759
)
58-
client = WorkspaceClient(config=cfg)
60+
client = WorkspaceClient(config=cfg, product=PRODUCT_NAME, product_version=PRODUCT_VERSION)
5961
_obo_client.set(client)
6062
logger.debug("OBO client set for current request (host=%s, auth=%s)", host, cfg.auth_type)
6163

@@ -70,7 +72,7 @@ def _get_default_client() -> WorkspaceClient:
7072
global _client, _auth_logged
7173

7274
if _client is None:
73-
_client = WorkspaceClient()
75+
_client = WorkspaceClient(product=PRODUCT_NAME, product_version=PRODUCT_VERSION)
7476

7577
if not _auth_logged:
7678
logger.info("=== Databricks SDK Authentication ===")
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
"""Databricks SDK telemetry constants for the genie-space-optimizer product."""
2+
3+
from genie_space_optimizer import __version__ as PRODUCT_VERSION
4+
5+
PRODUCT_NAME = "genie-space-optimizer"
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
"""Factory for creating telemetry-tagged WorkspaceClient instances."""
2+
3+
from databricks.sdk import WorkspaceClient
4+
5+
from genie_space_optimizer._telemetry import PRODUCT_NAME, PRODUCT_VERSION
6+
7+
8+
def make_workspace_client(**kwargs) -> WorkspaceClient:
9+
"""Create a WorkspaceClient tagged with GSO product telemetry."""
10+
return WorkspaceClient(
11+
product=PRODUCT_NAME,
12+
product_version=PRODUCT_VERSION,
13+
**kwargs,
14+
)

packages/genie-space-optimizer/src/genie_space_optimizer/backend/core/_defaults.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
from databricks.sdk import WorkspaceClient
77
from fastapi import Depends, FastAPI, Request
88

9+
from genie_space_optimizer._workspace_client import make_workspace_client
10+
911
from ._base import LifespanDependency
1012
from ._config import AppConfig, logger
1113
from ._headers import HeadersDependency
@@ -26,7 +28,7 @@ def __call__(request: Request) -> AppConfig:
2628
class _WorkspaceClientDependency(LifespanDependency):
2729
@asynccontextmanager
2830
async def lifespan(self, app: FastAPI) -> AsyncGenerator[None, None]:
29-
app.state.workspace_client = WorkspaceClient()
31+
app.state.workspace_client = make_workspace_client()
3032
yield
3133

3234
@staticmethod
@@ -49,10 +51,10 @@ def _get_user_ws(
4951
"OBO token not available — falling back to service principal credentials. "
5052
"User-scoped permissions will not apply."
5153
)
52-
return WorkspaceClient()
54+
return make_workspace_client()
5355

5456
host = os.environ.get("DATABRICKS_HOST", "")
55-
return WorkspaceClient(
57+
return make_workspace_client(
5658
host=host,
5759
token=headers.token.get_secret_value(),
5860
auth_type="pat",

packages/genie-space-optimizer/src/genie_space_optimizer/backend/core/lakebase.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ def validate_db(engine: Engine, db_config: DatabaseConfig) -> None:
112112
f"Validating database connection to instance {db_config.instance_name}"
113113
)
114114
try:
115-
ws = WorkspaceClient()
115+
from genie_space_optimizer._workspace_client import make_workspace_client
116+
ws = make_workspace_client()
116117
ws.database.get_database_instance(db_config.instance_name)
117118
except NotFound:
118119
raise ValueError(

packages/genie-space-optimizer/src/genie_space_optimizer/jobs/run_baseline.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,8 @@
200200

201201
# COMMAND ----------
202202

203-
w = WorkspaceClient()
203+
from genie_space_optimizer._workspace_client import make_workspace_client
204+
w = make_workspace_client()
204205
spark = SparkSession.builder.getOrCreate()
205206

206207
# Read task values from preflight

packages/genie-space-optimizer/src/genie_space_optimizer/jobs/run_cross_env_deploy.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,9 @@
152152

153153
_banner("Connecting to Target Workspace")
154154

155+
from genie_space_optimizer._workspace_client import make_workspace_client
155156
target_url = target_workspace_url.rstrip("/")
156-
target_ws = WorkspaceClient(host=target_url)
157+
target_ws = make_workspace_client(host=target_url)
157158

158159
current_user = target_ws.current_user.me()
159160
_log(

packages/genie-space-optimizer/src/genie_space_optimizer/jobs/run_deploy.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,8 @@
125125

126126
# COMMAND ----------
127127

128-
w = WorkspaceClient()
128+
from genie_space_optimizer._workspace_client import make_workspace_client
129+
w = make_workspace_client()
129130
spark = SparkSession.builder.getOrCreate()
130131

131132
# Read task values from upstream

packages/genie-space-optimizer/src/genie_space_optimizer/jobs/run_enrichment.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@
6666

6767
# COMMAND ----------
6868

69-
w = WorkspaceClient()
69+
from genie_space_optimizer._workspace_client import make_workspace_client
70+
w = make_workspace_client()
7071
spark = SparkSession.builder.getOrCreate()
7172

7273
run_id = dbutils.jobs.taskValues.get(taskKey="preflight", key="run_id")

0 commit comments

Comments
 (0)