blob: b5785d0ba6ddd8ed7f6116e99f467d668352e9b0 [file] [log] [blame]
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import re
import time
_INTEGER_PARAMETERS = (
'build',
'device_shard',
'host_shard',
'status',
)
# TODO(dtu): Pull these from table.
_STRING_PARAMETERS = (
'benchmark',
'builder',
'configuration',
'device_id',
'hostname',
'master',
'os',
'os_version',
'role',
)
def Filters(request):
filters = {}
for parameter_name in _INTEGER_PARAMETERS:
parameter_values = request.get_all(parameter_name)
if parameter_values:
filters[parameter_name] = map(int, parameter_values)
for parameter_name in _STRING_PARAMETERS:
parameter_values = request.get_all(parameter_name)
if parameter_values:
for parameter_value in parameter_values:
if re.search(r'[^A-Za-z0-9\(\)-_. ]', parameter_value):
raise ValueError('invalid %s: "%s"' %
(parameter_name, parameter_value))
filters[parameter_name] = parameter_values
start_time = request.get('start_time')
if start_time:
filters['start_time'] = _ParseTime(start_time)
return filters
def _ParseTime(time_parameter):
units = {
's': 1,
'm': 60,
'h': 60 * 60,
'd': 60 * 60 * 24,
'w': 60 * 60 * 24 * 7,
}
unit = time_parameter[-1]
if unit in units:
time_delta = -abs(float(time_parameter[:-1]))
time_parameter = time_delta * units[unit]
else:
time_parameter = float(time_parameter)
if time_parameter < 0:
time_parameter = time.time() + time_parameter
return time_parameter