xref: /aosp_15_r20/external/autotest/site_utils/count_jobs.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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