Skip to content

Commit 872b583

Browse files
authored
SNOW-1886694 - Track whether snowpark is running in an interactive environment (#2879)
SNOW-1886694 - Track whether snowpark is running in an interactive environment In order to improve interactive performance we need to track it, particularly for snowpandas. We use sys "ps1" and sys.flags.interactive for most runtime environments, but for snowbook we also look for a module availability. Snowbook notebooks can also run non-interactively; but snowbook does not set sys.flags.interactive right now. So this might over-count for snowbook until the flags are set properly. pre-review checklist: - [x] I am adding a new automated test(s) to verify correctness of my new code - [ ] If this test skips Local Testing mode, I'm requesting review from @snowflakedb/local-testing - [ ] I am adding new logging messages - [x] I am adding a new telemetry message - [ ] I am adding new credentials - [ ] I am adding a new dependency - [ ] If this is a new feature/behavior, I'm adding the Local Testing parity changes. - [x] I acknowledge that I have ensured my changes to be thread-safe. Follow the link for more information: [Thread-safe Developer Guidelines](https://github.com/snowflakedb/snowpark-python/blob/main/CONTRIBUTING.md#thread-safe-development)
1 parent 7af90b1 commit 872b583

File tree

4 files changed

+14
-0
lines changed

4 files changed

+14
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
- Added support for `contains_null` parameter to ArrayType.
6060
- Added support for creating a temporary view via `DataFrame.create_or_replace_temp_view` from a DataFrame created by reading a file from a stage.
6161
- Added support for `value_contains_null` parameter to MapType.
62+
- Added `interactive` to telemetry that indicates whether the current environment is an interactive one.
6263

6364
#### Bug Fixes
6465

src/snowflake/snowpark/_internal/telemetry.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
get_python_version,
2929
get_version,
3030
is_in_stored_procedure,
31+
is_interactive,
3132
)
3233

3334

@@ -63,6 +64,7 @@ class TelemetryField(Enum):
6364
KEY_PYTHON_VERSION = "python_version"
6465
KEY_CLIENT_LANGUAGE = "client_language"
6566
KEY_OS = "operating_system"
67+
KEY_IS_INTERACTIVE = "interactive"
6668
KEY_DATA = "data"
6769
KEY_CATEGORY = "category"
6870
KEY_CREATED_BY_SNOWPARK = "created_by_snowpark"
@@ -308,6 +310,7 @@ def __init__(self, conn: SnowflakeConnection) -> None:
308310
self.version: str = get_version()
309311
self.python_version: str = get_python_version()
310312
self.os: str = get_os_name()
313+
self.is_interactive = is_interactive()
311314

312315
def send(self, msg: Dict, timestamp: Optional[int] = None):
313316
if self.telemetry:
@@ -323,6 +326,9 @@ def _create_basic_telemetry_data(self, telemetry_type: str) -> Dict[str, Any]:
323326
TelemetryField.KEY_PYTHON_VERSION.value: self.python_version,
324327
TelemetryField.KEY_OS.value: self.os,
325328
PCTelemetryField.KEY_TYPE.value: telemetry_type,
329+
TelemetryField.KEY_IS_INTERACTIVE.value: PCTelemetryData.TRUE
330+
if self.is_interactive
331+
else PCTelemetryData.FALSE,
326332
}
327333
return message
328334

src/snowflake/snowpark/_internal/utils.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import random
1919
import re
2020
import string
21+
import sys
2122
import threading
2223
import traceback
2324
import zipfile
@@ -309,6 +310,11 @@ def get_python_version() -> str:
309310
return platform.python_version()
310311

311312

313+
@lru_cache
314+
def is_interactive() -> bool:
315+
return hasattr(sys, "ps1") or sys.flags.interactive or "snowbook" in sys.modules
316+
317+
312318
@lru_cache
313319
def get_connector_version() -> str:
314320
return ".".join([str(d) for d in connector_version if d is not None])

tests/integ/modin/test_telemetry.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ def test_send_snowpark_pandas_telemetry_helper(send_mock):
189189
"python_version": ANY,
190190
"operating_system": ANY,
191191
"type": "test_send_type",
192+
"interactive": ANY,
192193
"data": {
193194
"func_name": "test_send_func",
194195
"category": "snowpark_pandas",

0 commit comments

Comments
 (0)