15952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang#!/usr/bin/env python
25952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang
35952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang# Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
45952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang# Use of this source code is governed by a BSD-style license that can be
55952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang# found in the LICENSE file.
65952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang
75952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang# This file defines script for getting host_history for DUTs in Autotest.
85952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang
95952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang"""Script for checking host history for a selected group of hosts.
105952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang
115952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael LiangCurrently only supports aggregating stats for each host.
125952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang
135952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael LiangExample usage:
1417ecbbf63319dabd5514827a34f04b5a0b724352Dan Shi    python host_history.py -n 10000 -l 24 --board=daisy
155952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang
165952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael LiangOutput:
175952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang
185952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    trying to get all duts...
195952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    making the query...
205952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    found all duts. Time to get host_history.
215952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    usage stats for host: chromeos2-row5-rack1-host6
22dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi        2014-07-24 10:24:07 - 2014-07-25 10:24:07
23dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Verifying:        0.00 %
24dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Running:          0.00 %
25dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Ready:            100.00 %
26dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Repairing:        0.00 %
27dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Repair Failed:    0.00 %
28dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Cleaning:         0.00 %
29dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Pending:          0.00 %
30dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Resetting:        0.00 %
31dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Provisioning:     0.00 %
32dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Locked:           0.00 %
335952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    - -- --- ---- ----- ---- --- -- -
345952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang
355952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael LiangExample usage2: more than one host:
3617ecbbf63319dabd5514827a34f04b5a0b724352Dan Shi    python host_history.py -n 1000 -l 2 \
375952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    --hosts chromeos2-row5-rack4-host6 chromeos4-row12-rack11-host2
385952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang
395952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    ['chromeos2-row5-rack4-host6', 'chromeos4-row12-rack11-host2']
405952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    found all duts. Time to get host_history.
415952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    usage stats for host: chromeos2-row5-rack4-host6
425952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang     2014-07-25 13:02:22 - 2014-07-25 15:02:22
435952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang     Num entries found in this interval: 0
44dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Verifying:        0.00 %
45dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Running:          0.00 %
46dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Ready:            100.00 %
47dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Repairing:        0.00 %
48dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Repair Failed:    0.00 %
49dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Cleaning:         0.00 %
50dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Pending:          0.00 %
51dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Resetting:        0.00 %
52dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Provisioning:     0.00 %
53dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Locked:           0.00 %
545952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    - -- --- ---- ----- ---- --- -- -
555952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang
565952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    usage stats for host: chromeos4-row12-rack11-host2
575952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang     2014-07-25 13:02:22 - 2014-07-25 15:02:22
585952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang     Num entries found in this interval: 138
59dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Verifying:        0.00 %
60dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Running:          70.45 %
61dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Ready:            17.79 %
62dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Repairing:        0.00 %
63dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Repair Failed:    0.00 %
64dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Cleaning:         0.00 %
65dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Pending:          1.24 %
66dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Resetting:        10.78 %
67dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Provisioning:     0.00 %
68dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            Locked:           0.00 %
695952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    - -- --- ---- ----- ---- --- -- -
705952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang"""
715952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang
7293b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liangimport argparse
735952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liangimport time
7493b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liangimport traceback
755952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang
765952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liangimport common
77dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shifrom autotest_lib.client.common_lib import time_utils
789e0be9d048fecdf06a525bd4c31d272715494653Michael Liangfrom autotest_lib.site_utils import host_history_utils
795952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang
805952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang
8193b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liangdef print_all_stats(results, labels, t_start, t_end):
8293b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    """Prints overall stats followed by stats for each host.
8393b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang
84dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    @param results: A list of tuples of three elements.
85dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            1st element: String representing report for individual host.
86dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            2nd element: An ordered dictionary with
87dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                    key as (t_start, t_end) and value as (status, metadata)
88dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                    status = status of the host. e.g. 'Repair Failed'
89dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                    t_start is the beginning of the interval where the DUT's has
90dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                            that status
91dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                    t_end is the end of the interval where the DUT has that
92dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                            status
93dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                    metadata: A dictionary of other metadata, e.g.,
94dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                              {'task_id':123, 'task_name':'Reset'}
95dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            3rd element: hostname of the dut.
9693b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    @param labels: A list of labels useful for describing the group
9793b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang                   of hosts these overall stats represent.
9893b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    @param t_start: beginning of time period we are interested in.
9993b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    @param t_end: end of time period we are interested in.
10093b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    """
101dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    result_strs, stat_intervals_lst, hostname = zip(*results)
10293b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    overall_report_str = host_history_utils.get_overall_report(
10393b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang            labels, t_start, t_end, stat_intervals_lst)
10493b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    # Print the overall stats
10593b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    print overall_report_str
10693b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    # Print the stats for each individual host.
10793b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    for result_str in result_strs:
10893b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang        print result_str
10993b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang
11093b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang
11193b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liangdef get_host_history(input):
11293b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    """Gets the host history.
11393b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang
11493b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    @param input: A dictionary of input arguments to
11593b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang                  host_history_utils.host_history_stats.
11693b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang                  Must contain these keys:
117dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                      't_start',
118dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                      't_end',
119dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                      'hostname',
120dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                      'size,'
121dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                      'print_each_interval'
12293b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    @returns:
123dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            result_str: String reporting history for specific host.
124dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi            stat_intervals: A ordered dictionary with
125dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                    key as (t_start, t_end) and value as (status, metadata)
126dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                    status = status of the host. e.g. 'Repair Failed'
127dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                    t_start is the beginning of the interval where the DUT's has
128dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                            that status
129dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                    t_end is the end of the interval where the DUT has that
130dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                            status
131dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                    metadata: A dictionary of other metadata, e.g.,
132dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                              {'task_id':123, 'task_name':'Reset'}
13393b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    """
13493b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    try:
13593b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang        result_str, stat_intervals = host_history_utils.get_report_for_host(
136dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                **input)
137dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi        return result_str, stat_intervals, input['hostname']
13893b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    except Exception as e:
139dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi        # In case any process throws an Exception, we want to see it.
14093b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang        print traceback.print_exc()
141dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi        return None, None, None
142dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi
143dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi
14417ecbbf63319dabd5514827a34f04b5a0b724352Dan Shidef get_results(start_time, end_time, hosts=None, board=None, pool=None,
14517ecbbf63319dabd5514827a34f04b5a0b724352Dan Shi                verbose=False):
14617ecbbf63319dabd5514827a34f04b5a0b724352Dan Shi    """Get history results of specified hosts or board/pool.
147dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi
148dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    If hosts is set to None, all hosts are used, filtered by the board and pool
149dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    constraints. If board is not provided, all boards are included. If pool is
150dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    not provided, all pools are included.
151dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    If a list of hosts is provided, the board and pool constraints are ignored.
152dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi
153dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    @param hosts: A list of hosts to search for history. Default is None.
154dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    @param board: board type of hosts. Default is None.
155dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    @param pool: pool type of hosts. Default is None.
156dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    @param start_time: start time to search for history, can be string value or
157dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                       epoch time.
158dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    @param end_time: end time to search for history, can be string value or
159dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                     epoch time.
160dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    @param verbose: True to print out detail intervals of host history.
16117ecbbf63319dabd5514827a34f04b5a0b724352Dan Shi
16217ecbbf63319dabd5514827a34f04b5a0b724352Dan Shi    @returns: A dictionary of host history.
163dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    """
164dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    assert start_time and end_time
165dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    start_time = time_utils.to_epoch_time(start_time)
166dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    end_time = time_utils.to_epoch_time(end_time)
167dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    assert start_time < end_time
168dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi
16917ecbbf63319dabd5514827a34f04b5a0b724352Dan Shi    return host_history_utils.get_report(t_start=start_time, t_end=end_time,
17017ecbbf63319dabd5514827a34f04b5a0b724352Dan Shi                                          hosts=hosts, board=board, pool=pool,
17117ecbbf63319dabd5514827a34f04b5a0b724352Dan Shi                                          print_each_interval=verbose)
172dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi
173dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi
174dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shidef get_history_details(start_time, end_time, hosts=None, board=None,
17517ecbbf63319dabd5514827a34f04b5a0b724352Dan Shi                        pool=None):
176dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    """Get the details of host history.
177dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi
178dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    The return is a dictionary of host history for each host, for example,
179dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    {'172.22.33.51': [{'status': 'Resetting'
180dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                       'start_time': '2014-08-07 10:02:16',
181dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                       'end_time': '2014-08-07 10:03:16',
182dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                       'log_url': 'http://autotest/reset-546546/debug',
183dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                       'task_id': 546546},
184dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                      {'status': 'Running'
185dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                       'start_time': '2014-08-07 10:03:18',
186dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                       'end_time': '2014-08-07 10:13:00',
187dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                       'log_url': ('http://%s/tko/retrieve_logs.cgi?job=/'
188dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                                   'results/16853-debug/172.22.33.51'),
189dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                       'job_id': 16853}
190dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                     ]
191dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    }
192dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    @param start_time: start time to search for history, can be string value or
193dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                       epoch time.
194dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    @param end_time: end time to search for history, can be string value or
195dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                     epoch time.
196dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    @param hosts: A list of hosts to search for history. Default is None.
197dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    @param board: board type of hosts. Default is None.
198dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    @param pool: pool type of hosts. Default is None.
199dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    @returns: A dictionary of the host history details.
200dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    """
20117ecbbf63319dabd5514827a34f04b5a0b724352Dan Shi    results = get_results(start_time=start_time, end_time=end_time, hosts=hosts,
20217ecbbf63319dabd5514827a34f04b5a0b724352Dan Shi                          board=board, pool=pool)
2031ccb65208c26615096985b5f8b52368f7342a077Dan Shi    if not results:
2041ccb65208c26615096985b5f8b52368f7342a077Dan Shi        # No host found.
2051ccb65208c26615096985b5f8b52368f7342a077Dan Shi        return None
206dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    all_history = {}
207dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    for result_str, status_intervals, hostname in results:
208dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi        if hostname:
2091ccb65208c26615096985b5f8b52368f7342a077Dan Shi            all_history[hostname] = host_history_utils.build_history(
2101ccb65208c26615096985b5f8b52368f7342a077Dan Shi                    hostname, status_intervals)
211dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    return all_history
21293b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang
21393b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang
2145952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liangdef main():
2155952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    """main script. """
21693b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    t_now = time.time()
21793b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    t_now_minus_one_day = t_now - 3600 * 24
2185952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    parser = argparse.ArgumentParser()
2195952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    parser.add_argument('-v', action='store_true', dest='verbose',
2205952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang                        default=False,
2219e0be9d048fecdf06a525bd4c31d272715494653Michael Liang                        help='-v to print out ALL entries.')
2225952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    parser.add_argument('-l', type=float, dest='last',
2235952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang                        help='last hours to search results across',
22493b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang                        default=None)
2255952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    parser.add_argument('--board', type=str, dest='board',
2265952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang                        help='restrict query by board, not implemented yet',
2275952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang                        default=None)
2285952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    parser.add_argument('--pool', type=str, dest='pool',
2295952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang                        help='restrict query by pool, not implemented yet',
2305952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang                        default=None)
2315952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    parser.add_argument('--hosts', nargs='+', dest='hosts',
2325952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang                        help='Enter space deliminated hostnames',
2335952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang                        default=[])
23493b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    parser.add_argument('--start', type=str, dest='start',
235dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                        help=('Enter start time as: yyyy-mm-dd hh:mm:ss,'
23693b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang                              'defualts to 24h ago.'),
237dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                        default=time_utils.epoch_time_to_date_string(
238329153d2117beabee16a29f9f02c2f374fc288aeMichael Liang                                t_now_minus_one_day))
23993b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    parser.add_argument('--end', type=str, dest='end',
240dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                        help=('Enter end time in as: yyyy-mm-dd hh:mm:ss,'
24193b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang                              'defualts to current time.'),
242dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi                        default=time_utils.epoch_time_to_date_string(t_now))
2435952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    options = parser.parse_args()
2445952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang
24593b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    if options.last:
246dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi        start_time = t_now - 3600 * options.last
247dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi        end_time = t_now
2485952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang    else:
249dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi        start_time = time_utils.to_epoch_time(options.start)
250dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi        end_time = time_utils.to_epoch_time(options.end)
2515952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang
25217ecbbf63319dabd5514827a34f04b5a0b724352Dan Shi    results = get_results(hosts=options.hosts,
25317ecbbf63319dabd5514827a34f04b5a0b724352Dan Shi                          board=options.board,
25417ecbbf63319dabd5514827a34f04b5a0b724352Dan Shi                          pool=options.pool,
25517ecbbf63319dabd5514827a34f04b5a0b724352Dan Shi                          start_time=start_time,
25617ecbbf63319dabd5514827a34f04b5a0b724352Dan Shi                          end_time=end_time,
25717ecbbf63319dabd5514827a34f04b5a0b724352Dan Shi                          verbose=options.verbose)
25893b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    labels = []
25993b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    if options.board:
26093b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang        labels.append('board:%s' % (options.board))
26193b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang    if options.pool:
26293b4ba492c4af35fa025e3f995904fdeb8dbf7c4Michael Liang        labels.append('pool:%s' % (options.pool))
263dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    print_all_stats(results, labels, start_time, end_time)
2645952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang
2655952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liang
2665952fbe77ee7f33a642d19aa1d13ffeae0b92117Michael Liangif __name__ == '__main__':
267dfea368e5c830b1d7950ced5ee7b191e3b141ca3Dan Shi    main()
268