This is an automated email from the ASF dual-hosted git repository. jiayu pushed a commit to branch scarf in repository https://gitbox.apache.org/repos/asf/sedona.git
commit a2287a52b42c328561cfa058989017f68edaed01 Author: Jia Yu <[email protected]> AuthorDate: Mon Sep 8 21:31:12 2025 -0700 Add Scarf --- python/sedona/db/__init__.py | 6 +++++ python/sedona/db/telemetry.py | 61 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/python/sedona/db/__init__.py b/python/sedona/db/__init__.py index 569579f975..d47e53c0ff 100644 --- a/python/sedona/db/__init__.py +++ b/python/sedona/db/__init__.py @@ -15,6 +15,12 @@ # specific language governing permissions and limitations # under the License. +# Send telemetry on import +from .telemetry import track_package_import + +track_package_import() + +# Import the actual sedonadb functions from sedonadb import connect, context, dataframe __all__ = [ diff --git a/python/sedona/db/telemetry.py b/python/sedona/db/telemetry.py new file mode 100644 index 0000000000..5238db75ac --- /dev/null +++ b/python/sedona/db/telemetry.py @@ -0,0 +1,61 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +""" +Simple Scarf telemetry for sedona.db package. +""" + +import os +import platform +import threading +import urllib.request + + +def _send_telemetry(): + """Send simple telemetry data to Scarf gateway.""" + # Check if telemetry is disabled + if os.getenv("SCARF_NO_ANALYTICS", "").lower() in ("true", "1", "yes") or os.getenv( + "DO_NOT_TRACK", "" + ).lower() in ("true", "1", "yes"): + return + + try: + # Build URL with system info (replace spaces with underscores) + arch = platform.machine().lower().replace(" ", "_") + os_name = platform.system().lower().replace(" ", "_") + language = "python" + url = f"https://sedona.gateway.scarf.sh/sedona-db/{arch}/{os_name}/{language}" + + # Send simple GET request in background + def _send(): + try: + # Only allow HTTPS requests for security + if url.startswith("https://"): + urllib.request.urlopen(url, timeout=5) # nosec B310 + except Exception: # nosec B110 + pass # Silently fail + + thread = threading.Thread(target=_send, daemon=True) + thread.start() + + except Exception: # nosec B110 + pass # Silently fail + + +def track_package_import(): + """Track when the sedona.db package is imported.""" + _send_telemetry()
