Esempio n. 1
0
def task_save_redis_requests_statistics_to_db(statistics_date=None):
    """
    Task that saves redis requests statistics data to DB. Doesn't remove data in Redis.
    """
    if settings.ANALYTICS_REQUESTS_TURNED_ON:
        statistics_date = statistics_date or now().date()
        daily_requests_statistics = (DailyRequestsStatistics.objects.filter(
            created__date=statistics_date).first())
        r = redis_client()
        redis_path_key_pattern = 'analytics.requests_statistics.path:'
        paths_keys = r.keys(redis_path_key_pattern + '*')
        json_data = {}
        for path_key in paths_keys:
            path = path_key.split(redis_path_key_pattern)[1]
            path_data = r.hgetall(path_key)
            json_data.update({
                path: {
                    'hits': path_data.get('hits'),
                    'unique_visitors': path_data.get('unique_visitors')
                }
            })
        if daily_requests_statistics:
            (DailyRequestsStatistics.objects.filter(
                id=daily_requests_statistics.id).update(json_data=json_data))
        else:
            DailyRequestsStatistics.objects.create(json_data=json_data)

        redis_publish(
            'admin.notifications', {
                'is_browser_notification': True,
                'title': 'Admin notification',
                'message': 'Request statistics was updated'
            })
def task_save_redis_requests_statistics_to_db(statistics_date=None):
    """
    Task that saves redis requests statistics data to DB. Doesn't remove data in Redis.
    """
    if settings.ANALYTICS_REQUESTS_TURNED_ON:
        statistics_date = statistics_date or now().date()
        daily_requests_statistics = (DailyRequestsStatistics.objects
                                                            .filter(created__date=statistics_date)
                                                            .first())
        r = redis_client()
        redis_path_key_pattern = 'analytics.requests_statistics.path:'
        paths_keys = r.keys(redis_path_key_pattern + '*')
        json_data = {}
        for path_key in paths_keys:
            path = path_key.split(redis_path_key_pattern)[1]
            path_data = r.hgetall(path_key)
            json_data.update({path: {'hits': path_data.get('hits'),
                                     'unique_visitors': path_data.get('unique_visitors')
                                     }
                              })
        if daily_requests_statistics:
            (DailyRequestsStatistics.objects
                                    .filter(id=daily_requests_statistics.id)
                                    .update(json_data=json_data))
        else:
            DailyRequestsStatistics.objects.create(json_data=json_data)

        redis_publish('admin.notifications',
                      {'is_browser_notification': True,
                       'title': 'Admin notification',
                       'message': 'Request statistics was updated'})
Esempio n. 3
0
 def process_request(self, request):
     if settings.ANALYTICS_AB_TESTS_TURNED_ON:
         ab_test_uid = request.GET.get('abtu')
         ab_test_action_id = request.GET.get('abau')
         if ab_test_uid and ab_test_action_id:
             r = redis_client()
             r.hincrby('analytics.ab_tests.uid:{}'.format(ab_test_uid),
                       ab_test_action_id, 1)
def task_save_redis_requests_statistics_to_db_at_end_of_day():
    """
    Daily task that saves data to DB and remove all requests statistics data from Redis.
    """
    if settings.ANALYTICS_REQUESTS_TURNED_ON:
        previous_date = now().date() - datetime.timedelta(days=1)
        task_save_redis_requests_statistics_to_db(statistics_date=previous_date)

        r = redis_client()
        paths_keys = r.keys('analytics.requests_statistics.*')
        if paths_keys:
            r.delete(*paths_keys)
Esempio n. 5
0
def task_save_redis_ab_statistics_to_db_at_end_of_day():
    """
    Daily task that saves data to DB and remove all ab statistics data from Redis.
    """
    if settings.ANALYTICS_AB_TESTS_TURNED_ON:
        previous_date = now().date() - datetime.timedelta(days=1)
        task_save_redis_ab_statistics_to_db(statistics_date=previous_date)

        r = redis_client()
        paths_keys = r.keys('analytics.ab_tests.*')
        if paths_keys:
            r.delete(*paths_keys)
Esempio n. 6
0
    def process_response(self, request, response):
        ip = request.META.get('REMOTE_ADDR')
        path = request.path
        if settings.ANALYTICS_REQUESTS_TURNED_ON and \
                (str(response.status_code) not in settings.ANALYTICS_IGNORE_RESPONSE_STATUSES) and \
                (ip not in settings.ANALYTICS_IGNORE_IP) and \
                (path not in settings.ANALYTICS_IGNORE_PATH):
            r = redis_client()
            path_key = 'analytics.requests_statistics.path:{}'.format(path)
            r.hincrby(path_key, 'hits', 1)
            if r.sadd(
                    'analytics.requests_statistics.path_ip_set:{}'.format(
                        path), ip):
                r.hincrby(path_key, 'unique_visitors', 1)

        return response
Esempio n. 7
0
def task_save_redis_ab_statistics_to_db(statistics_date=None):
    """
    Task that saves redis AB statistics data to DB. Doesn't remove data in Redis.
    """
    if settings.ANALYTICS_AB_TESTS_TURNED_ON:
        statistics_date = statistics_date or now().date()
        r = redis_client()
        redis_ab_tests_key_pattern = 'analytics.ab_tests.uid_total_hits:'
        ab_tests_keys = r.keys(redis_ab_tests_key_pattern + '*')
        for ab_test_key in ab_tests_keys:
            ab_test_uid = ab_test_key.split(redis_ab_tests_key_pattern)[1]
            ab_test = ABTest.objects.actual_list().filter(
                uid=ab_test_uid).first()

            if ab_test:
                daily_ab_statistics = (DailyABStatistics.objects.filter(
                    ab_test=ab_test, created__date=statistics_date).first())

                ab_test_data = r.hgetall(
                    'analytics.ab_tests.uid:{}'.format(ab_test_uid))
                for key in ab_test_data.keys():
                    if key not in ab_test.json_description:
                        del ab_test_data[key]

                ab_test_data_hits = r.hgetall(ab_test_key)

                if ab_test_data_hits:
                    ab_test_data.update(ab_test_data_hits)

                if daily_ab_statistics:
                    (DailyABStatistics.objects.filter(
                        id=daily_ab_statistics.id).update(
                            json_data=ab_test_data))
                else:
                    ab_test.daily_ab_statistics.create(json_data=ab_test_data)

        redis_publish(
            'admin.notifications', {
                'is_browser_notification': True,
                'title': 'Admin notification',
                'message': 'AB statistics was updated'
            })
def task_save_redis_ab_statistics_to_db(statistics_date=None):
    """
    Task that saves redis AB statistics data to DB. Doesn't remove data in Redis.
    """
    if settings.ANALYTICS_AB_TESTS_TURNED_ON:
        statistics_date = statistics_date or now().date()
        r = redis_client()
        redis_ab_tests_key_pattern = 'analytics.ab_tests.uid_total_hits:'
        ab_tests_keys = r.keys(redis_ab_tests_key_pattern + '*')
        for ab_test_key in ab_tests_keys:
            ab_test_uid = ab_test_key.split(redis_ab_tests_key_pattern)[1]
            ab_test = ABTest.objects.actual_list().filter(uid=ab_test_uid).first()

            if ab_test:
                daily_ab_statistics = (DailyABStatistics.objects
                                                        .filter(ab_test=ab_test,
                                                                created__date=statistics_date)
                                                        .first())

                ab_test_data = r.hgetall('analytics.ab_tests.uid:{}'.format(ab_test_uid))
                for key in ab_test_data.keys():
                    if key not in ab_test.json_description:
                        del ab_test_data[key]

                ab_test_data_hits = r.hgetall(ab_test_key)

                if ab_test_data_hits:
                    ab_test_data.update(ab_test_data_hits)

                if daily_ab_statistics:
                    (DailyABStatistics.objects
                                      .filter(id=daily_ab_statistics.id)
                                      .update(json_data=ab_test_data))
                else:
                    ab_test.daily_ab_statistics.create(json_data=ab_test_data)

        redis_publish('admin.notifications',
                      {'is_browser_notification': True,
                       'title': 'Admin notification',
                       'message': 'AB statistics was updated'})
Esempio n. 9
0
def get_ab_test_case(request, ab_test_uid):
    a_b = request.session.get('ab_test')
    if a_b:
        r = redis_client()
        r.hincrby('analytics.ab_tests.uid_total_hits:{}'.format(ab_test_uid), '{}_hits'.format(a_b), 1)
    return a_b