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