예제 #1
0
    def handle(self, *args, **options):
        dry_run = options['dry_run']
        creds_path = get_creds_path()

        key_file_location = os.path.join(creds_path,
                                         'open-canada-analytics.p12')

        if not os.path.isfile(key_file_location):
            raise ImproperlyConfigured(
                '{} must be a file which contains your api key.'.format(
                    key_file_location))

        scopes = ['https://www.googleapis.com/auth/analytics.readonly']
        service_account_email = get_service_account_email()

        service = utils.get_service('analytics', 'v3', scopes,
                                    key_file_location, service_account_email)

        profile = utils.get_first_profile_id(service)

        days = options['days']
        start_time = now() - datetime.timedelta(days)
        start_date = start_time.strftime('%Y-%m-%d')

        data = service.data().ga().get(
            ids='ga:' + profile,
            start_date=start_date,
            end_date='today',
            dimensions='ga:pagePath',
            metrics='ga:sessions',
            sort='-ga:sessions',
            filters='ga:sessions>=1',
        ).execute()

        if dry_run:
            for row in data['rows']:
                url, session = row
                print('{}: {}'.format(url, session))
            sys.exit(0)

        with transaction.atomic():
            pages = dict([(page.url, page) for page in Page.objects.live()])
            utils.reset_analytics(pages)
            for row in data['rows']:
                url, sessions = row
                if url not in pages:
                    continue

                page = pages[url]

                analytics = utils.get_analytics(page)
                analytics.last_period_views = sessions
                analytics.save()

        purge_url_from_cache(settings.BASE_URL + 'most-popular/')
        for page in HomePage.objects.live():
            purge_page_from_cache(page)
예제 #2
0
def purge(request):
    if request.method == "POST":
        form = PurgePathForm(request.POST)
        if form.is_valid():
            URL = form.cleaned_data["URL"]
            purge_url_from_cache(URL)
            messages.success(request,
                             _("Purge request submitted for %s") % URL)
            return redirect("purge")
    else:
        form = PurgePathForm()
    return render(
        request,
        "index.html",
        {
            "form": form,
        },
    )
예제 #3
0
def invalidate_frontend_cache_for_site(sender, instance, **kwargs):
    # Purge site-specific score breakdown page
    purge_url_from_cache(reverse(instance.site))

    # Purge the leaderboard
    purge_url_from_cache(reverse('sites:index'))

    # Purge the home page because it displays a subset of
    # the leaderboard, as well as some summary statistics.
    purge_url_from_cache('/')
예제 #4
0
def purge_document_from_cache(instance, **kwargs):
    if not kwargs.get('created', False):
        base_url = get_base_url()
        purge_url_from_cache(base_url + reverse('wagtailapi_v2:documents:detail', args=(instance.id, )))
예제 #5
0
def purge_page_from_cache(instance, **kwargs):
    base_url = get_base_url()
    purge_url_from_cache(base_url + reverse('wagtailapi_v2:pages:detail', args=(instance.id, )))
예제 #6
0
def purge_cache_on_all_sites(path):
    if settings.DEBUG:
        return

    for site in Site.objects.all():
        purge_url_from_cache("%s%s" % (site.root_url.rstrip("/"), path))
예제 #7
0
 def handle(self, *args, **options):
     page_url = options['url']
     purge_url_from_cache(page_url)
예제 #8
0
    def handle(self, *args, **options):
        dry_run = options['dry_run']
        creds_path = get_creds_path()

        key_file_location = os.path.join(creds_path, 'open-canada-analytics.p12')

        if not os.path.isfile(key_file_location):
            raise ImproperlyConfigured(
                '{} must be a file which contains your api key.'.format(key_file_location)
            )

        scopes = ['https://www.googleapis.com/auth/analytics.readonly']
        service_account_email = get_service_account_email()

        service = utils.get_service(
            'analytics',
            'v3',
            scopes,
            key_file_location,
            service_account_email
        )

        profile = utils.get_first_profile_id(service)

        days = options['days']
        start_time = now() - datetime.timedelta(days)
        start_date = start_time.strftime('%Y-%m-%d')

        data = service.data().ga().get(
            ids='ga:' + profile,
            start_date=start_date,
            end_date='today',
            dimensions='ga:pagePath',
            metrics='ga:sessions',
            sort='-ga:sessions',
            filters='ga:sessions>=1',
        ).execute()

        if dry_run:
            for row in data['rows']:
                url, session = row
                print('{}: {}'.format(url, session))
            sys.exit(0)

        with transaction.atomic():
            pages = dict([(page.url, page) for page in Page.objects.live()])
            utils.reset_analytics(pages)
            for row in data['rows']:
                url, sessions = row
                if url not in pages:
                    continue

                page = pages[url]

                analytics = utils.get_analytics(page)
                analytics.last_period_views = sessions
                analytics.save()

        purge_url_from_cache(settings.BASE_URL + 'most-popular/')
        for page in HomePage.objects.live():
            purge_page_from_cache(page)
예제 #9
0
def purge_cache_on_all_sites(path):
    if settings.DEBUG:
        return

    for site in Site.objects.all():
        purge_url_from_cache('%s%s' % (site.root_url.rstrip('/'), path))
예제 #10
0
def purge_image_from_cache(instance, **kwargs):
    if not kwargs.get("created", False):
        base_url = get_base_url()
        purge_url_from_cache(
            base_url +
            reverse("wagtailapi_v2:images:detail", args=(instance.id, )))