Procházet zdrojové kódy

Added anonymous telemetry helpers. (#340)

Alek Petuskey před 2 roky
rodič
revize
cb61579f53
5 změnil soubory, kde provedl 139 přidání a 502 odebrání
  1. 53 500
      poetry.lock
  2. 38 0
      pynecone/telemetry.py
  3. 0 2
      pynecone/utils.py
  4. 1 0
      pyproject.toml
  5. 47 0
      tests/test_telemetry.py

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 53 - 500
poetry.lock


+ 38 - 0
pynecone/telemetry.py

@@ -0,0 +1,38 @@
+"""Anonymous telemetry for Pynecone."""
+
+import platform
+import psutil
+import multiprocessing
+
+from pynecone import constants
+from pynecone.base import Base
+
+
+class Telemetry(Base):
+    """Anonymous telemetry for Pynecone."""
+
+    user_os: str = ""
+    cpu_count: int = 0
+    memory: int = 0
+    pynecone_version: str = ""
+    python_version: str = ""
+
+    def get_os(self) -> None:
+        """Get the operating system."""
+        self.user_os = platform.system()
+
+    def get_python_version(self) -> None:
+        """Get the Python version."""
+        self.python_version = platform.python_version()
+
+    def get_pynecone_version(self) -> None:
+        """Get the Pynecone version."""
+        self.pynecone_version = constants.VERSION
+
+    def get_cpu_count(self) -> None:
+        """Get the number of CPUs."""
+        self.cpu_count = multiprocessing.cpu_count()
+
+    def get_memory(self) -> None:
+        """Get the total memory in MB."""
+        self.memory = psutil.virtual_memory().total >> 20

+ 0 - 2
pynecone/utils.py

@@ -1,6 +1,4 @@
 """General utility functions."""
-
-
 from __future__ import annotations
 
 import contextlib

+ 1 - 0
pyproject.toml

@@ -35,6 +35,7 @@ rich = "^12.6.0"
 redis = "^4.3.5"
 httpx = "^0.23.1"
 websockets = "^10.4"
+psutil = "^5.9.4"
 
 [tool.poetry.dev-dependencies]
 pytest = "^7.1.2"

+ 47 - 0
tests/test_telemetry.py

@@ -0,0 +1,47 @@
+import pytest
+
+from pynecone import telemetry
+import json
+
+
+def versiontuple(v):
+    return tuple(map(int, (v.split("."))))
+
+
+def test_telemetry():
+    """Test that telemetry is sent correctly."""
+    tel = telemetry.Telemetry()
+
+    # Check that the user OS is one of the supported operating systems.
+    tel.get_os()
+
+    assert tel.user_os != None
+    assert tel.user_os in ["Linux", "Darwin", "Java", "Windows"]
+
+    # Check that the CPU count and memory are greater than 0.
+    tel.get_cpu_count()
+
+    assert tel.cpu_count > 0
+
+    # Check that the available memory is greater than 0
+    tel.get_memory()
+
+    assert tel.memory > 0
+
+    # Check that the Pynecone version is not None.
+    tel.get_python_version()
+    assert tel.pynecone_version != None
+
+    # Check that the Python version is greater than 3.7.
+    tel.get_pynecone_version()
+
+    assert tel.python_version != None
+    assert versiontuple(tel.python_version) >= versiontuple("3.7")
+
+    # Check the json method.
+    tel_json = json.loads(tel.json())
+    assert tel_json["user_os"] == tel.user_os
+    assert tel_json["cpu_count"] == tel.cpu_count
+    assert tel_json["memory"] == tel.memory
+    assert tel_json["pynecone_version"] == tel.pynecone_version
+    assert tel_json["python_version"] == tel.python_version

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů