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, )