Skip to content

Commit

Permalink
wip: define telemetry components
Browse files Browse the repository at this point in the history
  • Loading branch information
frascuchon committed Aug 23, 2022
1 parent 6a1d9bf commit e96f61e
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 4 deletions.
6 changes: 2 additions & 4 deletions src/rubrix/server/apis/v0/handlers/users.py
Expand Up @@ -22,10 +22,7 @@


@router.get(
"/me",
response_model=User,
response_model_exclude_none=True,
operation_id="whoami",
"/me", response_model=User, response_model_exclude_none=True, operation_id="whoami"
)
async def whoami(current_user: User = Security(auth.get_user, scopes=[])):
"""
Expand All @@ -41,4 +38,5 @@ async def whoami(current_user: User = Security(auth.get_user, scopes=[])):
The current user
"""

return current_user
Empty file.
66 changes: 66 additions & 0 deletions src/rubrix/server/commons/telemetry.py
@@ -0,0 +1,66 @@
import dataclasses
import uuid
from typing import Any, Dict, Optional

from rubrix.server.errors import RubrixServerError
from rubrix.server.services.tasks.commons import TaskType
from rubrix.server.settings import settings


@dataclasses.dataclass
class _TelemetryClient:

__API_KEY__ = "C6FkcaoCbt78rACAgvyBxGBcMB3dM3nn"

__server_id__: Optional[uuid.UUID] = dataclasses.field(init=False, default=None)

__INSTANCE__: "_TelemetryClient" = None

@classmethod
def get(cls):
if settings.enable_telemetry:
if cls.__INSTANCE__ is None:
cls.__INSTANCE__ = cls()
return cls.__INSTANCE__

def __post_init__(self):
import platform
import sys

import analytics

from rubrix import __version__

analytics.write_key = self.__API_KEY__
self.__server_id__ = uuid.UUID(int=uuid.getnode())
self.__system_info__ = {
"system": platform.system(),
"machine": platform.machine(),
"platform": platform.platform(),
"python_version": sys.version,
"sys_version": platform.version(),
"rubrix_version": __version__,
}

def track_data(self, action: str, data: Dict[str, Any]):
import analytics

analytics.track(self.__server_id__, action, {**data, **self.__system_info__})


async def track_error(error: RubrixServerError):
client = _TelemetryClient.get()
if client:
client.track_data("ServerError", {"code": error.code})


async def track_bulk(task: TaskType, records: int):
client = _TelemetryClient.get()
if client:
client.track_data("BulkData", {"task": task, records: records})


async def track_login():
client = _TelemetryClient.get()
if client:
client.track_data("UserLogged", {})
1 change: 1 addition & 0 deletions src/rubrix/server/errors/api_errors.py
Expand Up @@ -40,6 +40,7 @@ class APIErrorHandler:
async def common_exception_handler(request: Request, error: Exception):
"""Wraps errors as custom generic error"""
rubrix_error = exception_to_rubrix_error(error)

return await http_exception_handler(
request, RubrixServerHTTPException(rubrix_error)
)
2 changes: 2 additions & 0 deletions src/rubrix/server/settings.py
Expand Up @@ -82,6 +82,8 @@ class ApiSettings(BaseSettings):
default=50, gt=0, le=100, description="Max number of fields in metadata"
)

enable_telemetry: bool = True

@validator("disable_es_index_template_creation", always=True)
def check_index_template_creation_value(cls, value):

Expand Down

0 comments on commit e96f61e

Please sign in to comment.