161 lines
6.9 KiB
Python
161 lines
6.9 KiB
Python
#!/usr/bin/env python
|
|
|
|
# Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
# This file defines script for getting entries from ES concerning reboot time.
|
|
|
|
"""
|
|
Example usage:
|
|
python analyze_reboot_time.py -l 12 --server cautotest --board daisy_spring
|
|
|
|
Usage: analyze_reboot_time.py [-h] [-l LAST] --server AUTOTEST_SERVER
|
|
[--board BOARD] [--pool POOL] [--start START]
|
|
[--end END] [--gte GTE] [--lte LTE] [-n SIZE]
|
|
[--hosts HOSTS [HOSTS ...]]
|
|
|
|
optional arguments:
|
|
-h, --help show this help message and exit
|
|
-l LAST last hours to search results across
|
|
--server AUTOTEST_SERVER
|
|
Enter Autotest instance name, e.g. "cautotest".
|
|
--board BOARD restrict query by board, not implemented yet
|
|
--pool POOL restrict query by pool, not implemented yet
|
|
--start START Enter start time as: yyyy-mm-dd hh-mm-ss,defualts to
|
|
24h ago.
|
|
--end END Enter end time as: yyyy-mm-dd hh-mm-ss,defualts to
|
|
current time.
|
|
--gte GTE Enter lower bound on reboot time for entries to
|
|
return.
|
|
--lte LTE Enter upper bound on reboot time for entries to
|
|
return.
|
|
-n SIZE Maximum number of entries to return.
|
|
--hosts HOSTS [HOSTS ...]
|
|
Enter space deliminated hostnames
|
|
"""
|
|
|
|
import argparse
|
|
import time
|
|
|
|
import common
|
|
import host_history
|
|
from autotest_lib.client.common_lib import time_utils
|
|
from autotest_lib.client.common_lib.cros.graphite import autotest_es
|
|
|
|
|
|
def get_entries(time_start, time_end, gte, lte, size, index, hostname):
|
|
"""Gets all entries from es db with the given constraints.
|
|
|
|
@param time_start: Earliest time entry was recorded
|
|
@param time_end: Latest time entry was recorded
|
|
@param gte: Lowest reboot_time to return
|
|
@param lte: Highest reboot_time to return
|
|
@param size: Max number of entries to return
|
|
@param index: es db index to get entries for, i.e. 'cautotest'
|
|
@param hostname: string representing hostname to query for
|
|
@returns: Entries from esdb.
|
|
"""
|
|
time_start_epoch = time_utils.to_epoch_time(time_start)
|
|
time_end_epoch = time_utils.to_epoch_time(time_end)
|
|
gte_epoch = time_utils.to_epoch_time(gte)
|
|
lte_epoch = time_utils.to_epoch_time(lte)
|
|
return autotest_es.query(
|
|
index=index,
|
|
fields_returned=['hostname', 'time_recorded', 'value'],
|
|
equality_constraints=[('_type', 'reboot_total'),
|
|
('hostname', hostname)],
|
|
range_constraints=[('time_recorded', time_start_epoch, time_end_epoch),
|
|
('value', gte_epoch, lte_epoch)],
|
|
size=size,
|
|
sort_specs=[{'hostname': 'asc'}, {'value': 'desc'}])
|
|
return results
|
|
|
|
|
|
def get_results_string(hostname, time_start, time_end, results):
|
|
"""Prints entries from esdb in a readable fashion.
|
|
|
|
@param hostname: Hostname of DUT we are printing result for.
|
|
@param time_start: Earliest time entry was recorded
|
|
@param time_end: Latest time entry was recorded
|
|
@param gte: Lowest reboot_time to return
|
|
@param lte: Highest reboot_time to return
|
|
@param size: Max number of entries to return
|
|
@returns: String reporting reboot times for this host.
|
|
"""
|
|
return_string = ' Host: %s \n Number of entries: %s \n' % (
|
|
hostname, results.total)
|
|
return_string += ' %s - %s \n' % (
|
|
time_utils.epoch_time_to_date_string(time_start),
|
|
time_utils.epoch_time_to_date_string(time_end))
|
|
if results.total <= 0:
|
|
return return_string
|
|
for result in results.hits:
|
|
time_recorded = result['time_recorded'][0]
|
|
time_string = time_utils.epoch_time_to_date_string(
|
|
time_recorded)
|
|
reboot_total = result['value'][0]
|
|
spaces = (15 - len(str(time_string))) * ' '
|
|
return_string += ' %s Reboot_time: %.3fs\n' % (
|
|
time_string, reboot_total)
|
|
return return_string
|
|
|
|
|
|
if __name__ == '__main__':
|
|
"""main script"""
|
|
t_now = time.time()
|
|
t_now_minus_one_day = t_now - 3600 * 24
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('-l', type=float, dest='last',
|
|
help='last hours to search results across',
|
|
default=24)
|
|
parser.add_argument('--server', type=str, dest='autotest_server',
|
|
required=True,
|
|
help='Enter Autotest instance name, e.g. "cautotest".')
|
|
parser.add_argument('--board', type=str, dest='board',
|
|
help='restrict query by board, not implemented yet',
|
|
default=None)
|
|
parser.add_argument('--pool', type=str, dest='pool',
|
|
help='restrict query by pool, not implemented yet',
|
|
default=None)
|
|
parser.add_argument('--start', type=str, dest='start',
|
|
help=('Enter start time as: yyyy-mm-dd hh-mm-ss,'
|
|
'defualts to 24h ago.'),
|
|
default=t_now_minus_one_day)
|
|
parser.add_argument('--end', type=str, dest='end',
|
|
help=('Enter end time as: yyyy-mm-dd hh-mm-ss,'
|
|
'defualts to current time.'),
|
|
default=t_now)
|
|
parser.add_argument('--gte', type=float, dest='gte',
|
|
help=('Enter lower bound on reboot time '
|
|
'for entries to return.'),
|
|
default=0)
|
|
parser.add_argument('--lte', type=float, dest='lte',
|
|
help=('Enter upper bound on reboot time '
|
|
'for entries to return.'),
|
|
default=None)
|
|
parser.add_argument('-n', type=int, dest='size',
|
|
help='Maximum number of entries to return.',
|
|
default=10000)
|
|
parser.add_argument('--hosts', nargs='+', dest='hosts',
|
|
help='Enter space deliminated hostnames',
|
|
default=[])
|
|
options = parser.parse_args()
|
|
|
|
if options.last:
|
|
t_start = t_now - 3600 * options.last
|
|
t_end = t_now
|
|
else:
|
|
t_start = time_utils.to_epoch_time(options.start)
|
|
t_end = time_utils.to_epoch_time(options.end)
|
|
if options.hosts:
|
|
hosts = options.hosts
|
|
else:
|
|
hosts = host_history.get_matched_hosts(options.autotest_server,
|
|
options.board, options.pool)
|
|
|
|
for hostname in hosts:
|
|
results = get_entries(
|
|
t_start, t_end, options.gte, options.lte, options.size,
|
|
options.autotest_server, hostname)
|
|
print get_results_string(hostname, t_start, t_end, results)
|