Example #1
0
 def handle(self, *args, **options):
     output_cfg = {}
     sql_conditions = {}
     find_type = 'normal'
     code = 0
 
     CollectorRegistry.load()
     if options.get('list_stats'):
         cols = CollectorRegistry.all()
         print 'Available Statistics:'
         for col in cols:
            print "{0:20} - {1}".format(col.stat.collector, col.desc)
         sys.exit(0)
         
     since_regex = re.search('(\d+(?:\.?\d+)?)([hdwm])?', options.get('since', ''))
     if options.get('since') == 'last':
         find_type = 'last'
     elif since_regex is not None:
         num, unit = since_regex.groups()
         num = float(num)
         if unit == 'h':
             time = datetime.now() - timedelta(hours=num)
         elif unit == 'd':
             time = datetime.now() - timedelta(days=num)
         elif unit == 'w':
             time = datetime.now() - timedelta(weeks=num)
         elif unit == 'm':
             time = datetime.now() - timedelta(minutes=num)
         else:
             time = datetime.now() - timedelta(seconds=num)
         sql_conditions['since'] = time
             
     if options.get('where') is not None:
         sql_conditions['where'] = options.get('where')
     
     if options.get('group_by') is not None:
         sql_conditions['group'] = options.get('group_by')
         
     if options.get('select_columns') is not None:
         sql_conditions['select'] = options.get('select_columns')
         
     if options.get('order_by') is not None:
         sql_conditions['order'] = options.get('order_by')
         
     if options.get('limit') is not None:
         sql_conditions['limit'] = options.get('limit')
     
     for k,v in settings.REPORT_OPTIONS.items():
         output_cfg[k] = v
             
     output_cfg['full'] = options.get('output_full')
     output_cfg['raw'] = options.get('output_raw')
     output_cfg['display_width'] = options.get('output_width')
     
     output = Formatter.get_runner_for(options.get('output'))(sys.stderr)
     
     try:
         Model = TrackingTable._TrackingTable__tables.get(options.get('stat', 'definition'))
         if find_type == 'normal':
             query = Model.objects.all()
         else:
             query = Model.objects.find_most_recent_versions(Model)
         
         if sql_conditions.get('since') is not None:
             query = query.filter(run_time__gte=sql_conditions.get('since'))
         
         if sql_conditions.get('where') is not None:
             query = query.extra(where=[sql_conditions.get('where'),])
         
         if sql_conditions.get('order') is not None:
             cols = sql_conditions.get('order').split(',')
             query = query.order_by(*cols)
         
         # Do reject_ignores filter before limit
         if not output_cfg.get('raw', False):
             if settings.USE_INCLUDE_NOT_IGNORE:
                 query = output.report_include(query)
             else:
                 query = output.reject_ignores(query)
         if sql_conditions.get('limit') is not None:
             query = query[:sql_conditions.get('limit')]
         code = output.format(query, output_cfg)
     except Exception, e:
         tb = traceback.format_exc()
         if settings.SEND_CRASHREPORTS:
             logger = logging.getLogger('tableizer')
         else:
             logger = logging.getLogger('management_command')
         logger.error(tb)