Apply cloud stats work from ticket 3893. Thanks doteast and many others that worked on this!
This commit is contained in:
parent
059821a1de
commit
a3d652e9af
4 changed files with 108 additions and 0 deletions
|
@ -45,3 +45,11 @@
|
||||||
handlers:
|
handlers:
|
||||||
- include: "{{ handlers }}/restart_services.yml"
|
- include: "{{ handlers }}/restart_services.yml"
|
||||||
- include: "{{ handlers }}/semanage.yml"
|
- include: "{{ handlers }}/semanage.yml"
|
||||||
|
|
||||||
|
- name: Cloud Image stats
|
||||||
|
hosts: log01.phx2.fedoraproject.org
|
||||||
|
user: root
|
||||||
|
gather_facts: False
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- cloudstats
|
||||||
|
|
1
roles/cloudstats/files/cloud-image-stat.cron
Normal file
1
roles/cloudstats/files/cloud-image-stat.cron
Normal file
|
@ -0,0 +1 @@
|
||||||
|
0 0 1 * * root /usr/bin/python /usr/local/bin/cloud-image-stat.py >& /dev/null
|
84
roles/cloudstats/files/cloud-image-stat.py
Normal file
84
roles/cloudstats/files/cloud-image-stat.py
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
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()
|
15
roles/cloudstats/tasks/main.yml
Normal file
15
roles/cloudstats/tasks/main.yml
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
- name: Install the cloud-image-stat script
|
||||||
|
copy: >
|
||||||
|
src=cloud-image-stat.py dest=/usr/local/bin/cloud-image-stat.py
|
||||||
|
owner=root group=root mode=0755
|
||||||
|
tags:
|
||||||
|
- files
|
||||||
|
- cloudstats
|
||||||
|
|
||||||
|
- name: Install the cloud-image-stats cronjob to collect stats from log01
|
||||||
|
copy: >
|
||||||
|
src=cloud-image-stat.cron dest=/etc/cron.d/cloud-image-stat.cron
|
||||||
|
owner=root group=root mode=0644
|
||||||
|
tags:
|
||||||
|
- cron
|
||||||
|
- cloudstats
|
Loading…
Add table
Add a link
Reference in a new issue