1*9c5db199SXin Li#!/usr/bin/python3 2*9c5db199SXin Li 3*9c5db199SXin Li# Copyright 2015 The Chromium OS Authors. All rights reserved. 4*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be 5*9c5db199SXin Li# found in the LICENSE file. 6*9c5db199SXin Li 7*9c5db199SXin Li"""Counts the number of jobs created in the last 24 hours.""" 8*9c5db199SXin Li 9*9c5db199SXin Liimport argparse 10*9c5db199SXin Lifrom datetime import datetime, timedelta 11*9c5db199SXin Liimport sys 12*9c5db199SXin Li 13*9c5db199SXin Liimport common 14*9c5db199SXin Lifrom autotest_lib.frontend import setup_django_environment 15*9c5db199SXin Lifrom autotest_lib.frontend.afe import models 16*9c5db199SXin Lifrom autotest_lib.server import site_utils 17*9c5db199SXin Li 18*9c5db199SXin Litry: 19*9c5db199SXin Li from autotest_lib.utils.frozen_chromite.lib import metrics 20*9c5db199SXin Liexcept ImportError: 21*9c5db199SXin Li metrics = site_utils.metrics_mock 22*9c5db199SXin Li 23*9c5db199SXin Li 24*9c5db199SXin Lidef number_of_jobs_since(delta): 25*9c5db199SXin Li """Returns the number of jobs kicked off in the last |duration| minutes. 26*9c5db199SXin Li 27*9c5db199SXin Li @param delta: A timedelta which indicates the maximum age of the jobs to count 28*9c5db199SXin Li """ 29*9c5db199SXin Li cutoff = datetime.now() - delta 30*9c5db199SXin Li return models.Job.objects.filter(created_on__gt=cutoff).count() 31*9c5db199SXin Li 32*9c5db199SXin Li 33*9c5db199SXin Lidef main(): 34*9c5db199SXin Li """Counts the number of AFE jobs in the last day and report to monarch.""" 35*9c5db199SXin Li parser = argparse.ArgumentParser( 36*9c5db199SXin Li description=('A script which records the number of afe jobs run in a time interval.')) 37*9c5db199SXin Li parser.parse_args(sys.argv[1:]) 38*9c5db199SXin Li count = number_of_jobs_since(timedelta(days=1)) 39*9c5db199SXin Li 40*9c5db199SXin Li with site_utils.SetupTsMonGlobalState('count_jobs', short_lived=True): 41*9c5db199SXin Li # TODO: Reporting a stat for each job created from the afe directly could be better. 42*9c5db199SXin Li # More discussions are needed to decide whether to remove this file. 43*9c5db199SXin Li metrics.Gauge('chromeos/autotest/experimental/jobs_rate/afe_daily_count').set(count) 44*9c5db199SXin Li 45*9c5db199SXin Li 46*9c5db199SXin Liif __name__ == '__main__': 47*9c5db199SXin Li main() 48