def handle_purge(self):
        """Handles purge option. Removes all data if --all was used or specified
        --report-type=<id>.

        """
        if self.options['purge']:
            log.info("Removing data for {0}.".format(self.reports))
            for r in self.reports:
                ToprequestersReport.purge(r)
            self.print_status()
        return self.options['purge']
    def __cache_report(self, report_type):
        """Evaluates the report and stores it under correct cache key."""

        display_name = ToprequestersReport.display_names[report_type]
        if ToprequestersReport.is_cached(report_type):
            if self.options['force']:
                log.info('Recalculating "{0}" toprequesters report.'.format(
                    display_name))
            else:
                log.info('"{0}" toprequesters still in cache, use --force flag'
                    ' to rebuild anyway.'.format(display_name))
                return False
        else:
            log.info(('"{0}" toprequesters report missing, recalculating.'
                ).format(display_name))

        start_date = now()
        start_time = time.time()

        days = int(self.options['days'])
        data = ToprequestersReport.REPORT_FUNCTION[report_type](days)
        elapsed = time.time() - start_time
        log.info('Toprequesters report "{0}" generated in: {1}s.'.format(
            display_name, elapsed))

        # too often we get no information on the success of caching
        if not data:
            log.warning('Data returned by report function is {0}!'.format(data))
        else:
            meta = {
                'days': days,
                'to': start_date.date(),
                'from': (start_date - datetime.timedelta(days=days)).date(),
                'start_time': start_date,
                'elapsed': elapsed,
            }
            ToprequestersReport.store(report_type, data, meta)
            if not ToprequestersReport.is_cached(report_type):
                log.warning('Cache error - data could not be fetched!')
        return True
Example #3
0
def top_requesters(request, tab=None):
    """Crud handles the table rendering."""
    try:
        tab = int(tab)
    except Exception:
        pass
    if tab not in ToprequestersReport.values:
        messages.warning(request, 'Unknown report type: {0}'.format(tab))
        return redirect('graphs_top_requesters',
                        tab=ToprequestersReport.values[0])
    ctx = {
        'title': 'Top-1000 Recent Requesters',
        'tab_enum': ToprequestersReport.display_names,
        'active_tab': tab,
        'report_meta': ToprequestersReport.get_report_meta(tab),
    }
    return direct_to_template(request, 'toprequesters/crud.html', ctx)
 def print_status(self):
     """Shows report availability report."""
     log.info("Available report types: \n" +
             ToprequestersReport.get_available_as_str())