[Feature]: Add posthog anonymous telemetry and update docs (#867)
This commit is contained in:
@@ -14,3 +14,10 @@ def setup():
|
||||
clean_db()
|
||||
yield
|
||||
clean_db()
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def disable_telemetry():
|
||||
os.environ["EC_TELEMETRY"] = "false"
|
||||
yield
|
||||
del os.environ["EC_TELEMETRY"]
|
||||
|
||||
62
tests/telemetry/test_posthog.py
Normal file
62
tests/telemetry/test_posthog.py
Normal file
@@ -0,0 +1,62 @@
|
||||
import os
|
||||
import logging
|
||||
from embedchain.telemetry.posthog import AnonymousTelemetry
|
||||
|
||||
|
||||
class TestAnonymousTelemetry:
|
||||
def test_init(self, mocker):
|
||||
# Enable telemetry specifically for this test
|
||||
os.environ["EC_TELEMETRY"] = "true"
|
||||
mock_posthog = mocker.patch("embedchain.telemetry.posthog.Posthog")
|
||||
telemetry = AnonymousTelemetry()
|
||||
assert telemetry.project_api_key == "phc_XnMmNHzwxE7PVHX4mD2r8K6nfxVM48a2sq2U3N1p2lO"
|
||||
assert telemetry.host == "https://app.posthog.com"
|
||||
assert telemetry.enabled is True
|
||||
assert telemetry.user_id
|
||||
mock_posthog.assert_called_once_with(project_api_key=telemetry.project_api_key, host=telemetry.host)
|
||||
|
||||
def test_init_with_disabled_telemetry(self, mocker, monkeypatch):
|
||||
mocker.patch("embedchain.telemetry.posthog.Posthog")
|
||||
telemetry = AnonymousTelemetry()
|
||||
assert telemetry.enabled is False
|
||||
assert telemetry.posthog.disabled is True
|
||||
|
||||
def test_get_user_id(self, mocker, tmpdir):
|
||||
mock_uuid = mocker.patch("embedchain.telemetry.posthog.uuid.uuid4")
|
||||
mock_uuid.return_value = "unique_user_id"
|
||||
config_file = tmpdir.join("config.json")
|
||||
mocker.patch("embedchain.telemetry.posthog.CONFIG_FILE", str(config_file))
|
||||
telemetry = AnonymousTelemetry()
|
||||
|
||||
user_id = telemetry.get_user_id()
|
||||
assert user_id == "unique_user_id"
|
||||
assert config_file.read() == '{"user_id": "unique_user_id"}'
|
||||
|
||||
def test_capture(self, mocker):
|
||||
# Enable telemetry specifically for this test
|
||||
os.environ["EC_TELEMETRY"] = "true"
|
||||
mock_posthog = mocker.patch("embedchain.telemetry.posthog.Posthog")
|
||||
telemetry = AnonymousTelemetry()
|
||||
event_name = "test_event"
|
||||
properties = {"key": "value"}
|
||||
telemetry.capture(event_name, properties)
|
||||
|
||||
mock_posthog.assert_called_once_with(
|
||||
project_api_key=telemetry.project_api_key,
|
||||
host=telemetry.host,
|
||||
)
|
||||
mock_posthog.return_value.capture.assert_called_once_with(
|
||||
telemetry.user_id,
|
||||
event_name,
|
||||
properties,
|
||||
)
|
||||
|
||||
def test_capture_with_exception(self, mocker, caplog):
|
||||
mock_posthog = mocker.patch("embedchain.telemetry.posthog.Posthog")
|
||||
mock_posthog.return_value.capture.side_effect = Exception("Test Exception")
|
||||
telemetry = AnonymousTelemetry()
|
||||
event_name = "test_event"
|
||||
properties = {"key": "value"}
|
||||
with caplog.at_level(logging.ERROR):
|
||||
telemetry.capture(event_name, properties)
|
||||
assert "Failed to send telemetry event" in caplog.text
|
||||
@@ -76,7 +76,7 @@ class TestQdrantDB(unittest.TestCase):
|
||||
qdrant_client_mock.return_value.upsert.assert_called_once_with(
|
||||
collection_name="embedchain-store-1526",
|
||||
points=Batch(
|
||||
ids=["def", "ghi"],
|
||||
ids=["abc", "def"],
|
||||
payloads=[
|
||||
{
|
||||
"identifier": "123",
|
||||
|
||||
Reference in New Issue
Block a user