HOME


Mini Shell 1.0
DIR: /opt/cloudlinux/venv/lib64/python3.11/site-packages/xray/analytics/
Upload File :
Current File : //opt/cloudlinux/venv/lib64/python3.11/site-packages/xray/analytics/__init__.py
# -*- coding: utf-8 -*-

# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2021 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# http://cloudlinux.com/docs/LICENSE.TXT

import json
import logging
import dataclasses
from typing import Any, Optional
from xray.apiclient import get_client
from .models.analytics_data import AnalyticsData


def report_analytics(data: str, advice_id: int, source: str, event: Optional[str] = None) -> Any:
    """
    Receives analytics data as a JSON string
    """
    if data is None:
        return
    logger = logging.getLogger('analytics')
    data = _parse(data, logger)
    if data is not None:
        if source == 'WORDPRESS_PLUGIN':
            data['source'] = 'wp_smartadvice'
        data['advice_id'] = advice_id
        if event is not None:
            data['event'] = event
        validated_data = _validate(data, logger)
        if validated_data is not None and validated_data is not None:
            api_client_object = get_client('adviser')
            client = api_client_object()
            return client.report(validated_data)

def _parse(data: str, logger: logging.Logger) -> Optional[dict]:
    """
    Trying to parse receiving JSON
    """
    try:
        v = json.loads(data)
    except ValueError as e:
        logger.error('[Analytics] Decoding analytics JSON has failed',
                            extra={'err': str(e)})
    else:
        return v

def _validate(data: dict, logger: logging.Logger) -> Optional[dict]:
    """
    validate data.
    """
    try:
        validated_data = AnalyticsData(**data)
    except TypeError as e:
        logger.error('[Analytics] Not supported field detected',
                            extra={'err': str(e)})
    else:
        return dataclasses.asdict(validated_data)