import logging import requests import json from mixpanel import Mixpanel from django.conf import settings from project.celery import app logger = logging.getLogger(__name__) logger_roistat = logging.getLogger('roistat') @app.task def transaction_to_mixpanel(user_id, amount, time, product_type): mix = Mixpanel(settings.MIX_TOKEN) mix.people_track_charge( user_id, amount, { '$time': time, 'product_type': product_type, } ) @app.task def product_payment_to_mixpanel(user_id, event_name, time, properties): mix = Mixpanel(settings.MIX_TOKEN) props = { '$time': time, } props.update(properties) mix.track( user_id, event_name, properties=props, ) @app.task def transaction_to_roistat(user_id, payment_id, event_name, amount, time, status, product_type, roistat_visit): body = [{ 'id': str(payment_id), 'name': event_name, 'date_create': time, 'status': str(status), 'roistat': str(roistat_visit) if roistat_visit else None, 'price': str(amount), 'client_id': str(user_id), 'fields': { 'product_type': product_type, } }] project = settings.ROISTAT_PROJECT key = settings.ROISTAT_KEY url = settings.ROISTAT_API_URL + \ f'/project/add-orders?key={key}&project={project}' payload = json.dumps(body) headers = {'content-type': 'application/json'} resp = requests.request("POST", url, data=payload, headers=headers) try: resp_json = resp.json() except: resp_json = None if resp.status_code != 200 or not resp_json or not resp_json.get('processed'): logger.error('TRANSACTION_TO_ROISTAT for payment # %d, %s RUB: %s' % ( payment_id, amount, resp.text)) logger_roistat.debug('TRANSACTION_TO_ROISTAT for payment # %d, %s RUB: %s' % ( payment_id, amount, resp.text)) else: logger.info('TRANSACTION_TO_ROISTAT: ' + str(resp.text)) logger_roistat.debug('TRANSACTION_TO_ROISTAT: ' + str(resp.text))