99 lines
2.3 KiB
Python
99 lines
2.3 KiB
Python
"""Anonymous telemetry for Pynecone."""
|
|
|
|
import json
|
|
import multiprocessing
|
|
import platform
|
|
from datetime import datetime
|
|
|
|
import httpx
|
|
import psutil
|
|
|
|
from pynecone import constants
|
|
from pynecone.base import Base
|
|
|
|
|
|
def get_os() -> str:
|
|
"""Get the operating system.
|
|
|
|
Returns:
|
|
The operating system.
|
|
"""
|
|
return platform.system()
|
|
|
|
|
|
def get_python_version() -> str:
|
|
"""Get the Python version.
|
|
|
|
Returns:
|
|
The Python version.
|
|
"""
|
|
return platform.python_version()
|
|
|
|
|
|
def get_pynecone_version() -> str:
|
|
"""Get the Pynecone version.
|
|
|
|
Returns:
|
|
The Pynecone version.
|
|
"""
|
|
return constants.VERSION
|
|
|
|
|
|
def get_cpu_count() -> int:
|
|
"""Get the number of CPUs.
|
|
|
|
Returns:
|
|
The number of CPUs.
|
|
"""
|
|
return multiprocessing.cpu_count()
|
|
|
|
|
|
def get_memory() -> int:
|
|
"""Get the total memory in MB.
|
|
|
|
Returns:
|
|
The total memory in MB.
|
|
"""
|
|
return psutil.virtual_memory().total >> 20
|
|
|
|
|
|
class Telemetry(Base):
|
|
"""Anonymous telemetry for Pynecone."""
|
|
|
|
user_os: str = get_os()
|
|
cpu_count: int = get_cpu_count()
|
|
memory: int = get_memory()
|
|
pynecone_version: str = get_pynecone_version()
|
|
python_version: str = get_python_version()
|
|
|
|
|
|
def send(event: str, telemetry_enabled: bool) -> None:
|
|
"""Send anonymous telemetry for Pynecone.
|
|
|
|
Args:
|
|
event: The event name.
|
|
telemetry_enabled: Whether to send the telemetry.
|
|
"""
|
|
try:
|
|
if telemetry_enabled:
|
|
telemetry = Telemetry()
|
|
with open(constants.PCVERSION_APP_FILE) as f: # type: ignore
|
|
pynecone_json = json.load(f)
|
|
distinct_id = pynecone_json["project_hash"]
|
|
post_hog = {
|
|
"api_key": "phc_JoMo0fOyi0GQAooY3UyO9k0hebGkMyFJrrCw1Gt5SGb",
|
|
"event": event,
|
|
"properties": {
|
|
"distinct_id": distinct_id,
|
|
"user_os": telemetry.user_os,
|
|
"pynecone_version": telemetry.pynecone_version,
|
|
"python_version": telemetry.python_version,
|
|
"cpu_count": telemetry.cpu_count,
|
|
"memory": telemetry.memory,
|
|
},
|
|
"timestamp": datetime.utcnow().isoformat(),
|
|
}
|
|
httpx.post("https://app.posthog.com/capture/", json=post_hog)
|
|
except Exception:
|
|
pass
|