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