|
|
from django.core.management import BaseCommand
|
|
|
from django.db.models import Count
|
|
|
|
|
|
from boards.models import Attachment
|
|
|
from boards.utils import get_domain
|
|
|
|
|
|
|
|
|
class Command(BaseCommand):
|
|
|
help = 'Gather board statistics'
|
|
|
|
|
|
def handle(self, *args, **options):
|
|
|
print('* Domains and their usage')
|
|
|
domains = {}
|
|
|
for attachment in Attachment.objects.exclude(url=''):
|
|
|
domain = get_domain(attachment.url)
|
|
|
if domain in domains:
|
|
|
domains[domain] += 1
|
|
|
else:
|
|
|
domains[domain] = 1
|
|
|
|
|
|
domain_list = [(item, domains[item]) for item in domains.keys()]
|
|
|
domain_list = sorted(domain_list, key=lambda domain: -domain[1])
|
|
|
for domain in domain_list:
|
|
|
print('{}: {}'.format(domain[0], domain[1]))
|
|
|
|
|
|
print('* Overall numbers')
|
|
|
print('{} attachments in the system, {} of them as URLs'.format(
|
|
|
Attachment.objects.count(),
|
|
|
Attachment.objects.exclude(url='').count()))
|
|
|
|
|
|
print('* File types')
|
|
|
mimetypes = Attachment.objects.filter(url='')\
|
|
|
.values('mimetype').annotate(count=Count('id'))\
|
|
|
.order_by('-count')
|
|
|
for mimetype in mimetypes:
|
|
|
print('{}: {}'.format(mimetype['mimetype'], mimetype['count']))
|
|
|
|