Warning
This document is for an in-development version of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for galaxy.webapps.reports.controllers.home
import calendar
import logging
from datetime import (
datetime,
timedelta,
)
import sqlalchemy as sa
from galaxy import model
from galaxy.webapps.base.controller import (
BaseUIController,
web,
)
from galaxy.webapps.reports.controllers.query import ReportQueryBuilder
log = logging.getLogger(__name__)
[docs]class HomePage(BaseUIController, ReportQueryBuilder):
[docs] @web.expose
def run_stats(self, trans, **kwd):
message = ""
end_date = datetime.utcnow()
end_date = datetime(end_date.year, end_date.month, end_date.day, end_date.hour)
end_date_buffer = datetime(end_date.year, end_date.month, end_date.day, end_date.hour + 1)
start_hours = end_date - timedelta(1)
start_days = end_date - timedelta(30)
jf_hr_data = [0] * 24
jf_dy_data = [0] * 30
jc_hr_data = [0] * 24
jc_dy_data = [0] * 30
et_hr_data = []
et_dy_data = []
recent_jobs = sa.select(
model.Job.id, model.Job.create_time.label("create_time"), model.Job.update_time.label("update_time")
)
for job in trans.sa_session.execute(recent_jobs):
if job.create_time >= start_days and job.create_time < end_date_buffer:
if job.create_time >= start_hours and job.create_time < end_date_buffer:
# Get the creation time for the jobs in the past day
end_day = end_date.day
start_day = job.create_time.day
end_hour = end_date.hour
start_hour = job.create_time.hour
if end_day != start_day:
hours = (end_hour + 24) - start_hour
else:
hours = end_hour - start_hour
if hours < 24:
jc_hr_data[int(hours)] += 1
else:
jc_dy_data[23] += 1
# Get the creation time for jobs in the past 30 days
end_month = end_date.month
start_month = job.create_time.month
end_day = end_date.day
start_day = job.create_time.day
if end_month != start_month:
month_weekday, month_range = calendar.monthrange(job.create_time.year, job.create_time.month)
day = (end_day + month_range) - start_day
else:
day = end_day - start_day
if day < 30:
jc_dy_data[int(day)] += 1
if job.update_time >= start_days and job.update_time < end_date_buffer:
if job.update_time >= start_hours and job.update_time < end_date_buffer:
# Get the time finishedfor the jobs in the past day
end_day = end_date.day
start_day = job.update_time.day
end_hour = end_date.hour
start_hour = job.update_time.hour
if end_day != start_day:
hours = (end_hour + 23) - start_hour
else:
hours = end_hour - start_hour
if hours < 24:
jf_hr_data[int(hours)] += 1
# Get the Elapsed Time for said job
time = job.update_time - job.create_time
seconds = time.seconds
minutes = seconds // 60
et_hr_data.append(minutes)
# Get the time the job finished and run time in the 30 days
end_month = end_date.month
start_month = job.update_time.month
end_day = end_date.day
start_day = job.update_time.day
if end_month != start_month:
month_weekday, month_range = calendar.monthrange(job.update_time.year, job.update_time.month)
day = (end_day + (month_range - 1)) - start_day
else:
day = end_day - start_day
if day < 30:
jf_dy_data[int(day)] += 1
# Get the Elapsed Time for said job
time = job.update_time - job.create_time
seconds = time.seconds
minutes = seconds // 60
et_dy_data.append(minutes)
return trans.fill_template(
"/webapps/reports/run_stats.mako",
jf_hr_data=jf_hr_data,
jf_dy_data=jf_dy_data,
jc_hr_data=jc_hr_data,
jc_dy_data=jc_dy_data,
et_hr_data=et_hr_data,
et_dy_data=et_dy_data,
message=message,
)