ansible/roles/cloudstats/files/cloud-image-stat.py

84 lines
2.9 KiB
Python

from glob import glob
from datetime import date
from os import walk,listdir
from os.path import exists
from bz2 import BZ2File
import smtplib
from email.mime.text import MIMEText
stat_qcow2_x86_64 = 0
stat_rawxz_x86_64 = 0
stat_qcow2_i386 = 0
stat_rawxz_i386 = 0
stat_x86_64 = 0
stat_i386 = 0
stat_qcow2 = 0
stat_rawxz = 0
email_sender = 'cloud-image-stat-cron@fedoraproject.org'
email_receiver = 'cloud@lists.fedoraproject.org'
log_file = 'download.fedoraproject.org-access.log.bz2'
proxy_logs = glob('/var/log/hosts/proxy*')
date = date.today()
year,month,day = date.isoformat().split('-')
if month == '01': # in case it is january
qyear = str(date.year-1)
qmonth = '12'
else: # for all other months
qyear = year
qmonth = str(date.month-1)
if int(qmonth) < 10:
qmonth = '0'+qmonth
for proxy_log in (proxy_log for proxy_log in proxy_logs if '.stg.' not in proxy_log):
proxy_month_log = '{0}/{1}/{2}'.format(proxy_log,qyear,qmonth)
if exists(proxy_month_log):
for day in listdir(proxy_month_log):
proxy_download_log = '{0}/{1}/{2}/{3}'.format(proxy_month_log,day,'http',log_file)
if exists(proxy_download_log):
fd = BZ2File(proxy_download_log,'r')
try:
for line in fd:
if 'sda.qcow2' in line:
if 'x86_64' in line:
stat_qcow2_x86_64 += 1
elif 'i386' in line:
stat_qcow2_i386 += 1
elif 'sda.raw.xz' in line:
if 'x86_64' in line:
stat_rawxz_x86_64 += 1
elif 'i386' in line:
stat_rawxz_i386 += 1
finally:
fd.close()
stat_x86_64 = stat_qcow2_x86_64 + stat_rawxz_x86_64
stat_i386 = stat_qcow2_i386 + stat_rawxz_i386
stat_qcow2 = stat_qcow2_x86_64 + stat_qcow2_i386
stat_rawxz = stat_rawxz_x86_64 + stat_rawxz_i386
report = '''Download statistics for cloud images in month {0}-{1} :\n
- 32-bit arch :\n
total = {2}, qcow2 = {3}, raw.xz = {4}\n
- 64-bit arch :\n
total = {5}, qcow2 = {6}, raw.xz = {7}\n
- qcow2 images :\n
total = {8}, 32-bit = {9}, 64-bit = {10}\n
- raw.xz images :\n
total = {11}, 32-bit = {12}, 64-bit = {13}\n'''
report = report.format(qmonth, qyear,
stat_i386, stat_qcow2_i386, stat_rawxz_i386,
stat_x86_64, stat_qcow2_x86_64, stat_rawxz_x86_64,
stat_qcow2, stat_qcow2_i386, stat_qcow2_x86_64,
stat_rawxz, stat_rawxz_i386, stat_rawxz_x86_64)
email = MIMEText(report)
email['Subject'] = 'Monthly download statistics for cloud images'
email['From'] = email_sender
email['To'] = email_receiver
server = smtplib.SMTP('localhost')
server.sendmail(email_sender,email_receiver,email.as_string())
server.quit()