diff options
Diffstat (limited to 'scripts/buildstats-diff')
| -rwxr-xr-x | scripts/buildstats-diff | 34 |
1 files changed, 3 insertions, 31 deletions
diff --git a/scripts/buildstats-diff b/scripts/buildstats-diff index f918a6d5e0..5cea184eb2 100755 --- a/scripts/buildstats-diff +++ b/scripts/buildstats-diff | |||
| @@ -22,7 +22,6 @@ import os | |||
| 22 | import re | 22 | import re |
| 23 | import sys | 23 | import sys |
| 24 | from collections import namedtuple | 24 | from collections import namedtuple |
| 25 | from datetime import datetime, timedelta, tzinfo | ||
| 26 | from operator import attrgetter | 25 | from operator import attrgetter |
| 27 | 26 | ||
| 28 | # Setup logging | 27 | # Setup logging |
| @@ -35,38 +34,11 @@ class ScriptError(Exception): | |||
| 35 | pass | 34 | pass |
| 36 | 35 | ||
| 37 | 36 | ||
| 38 | class TimeZone(tzinfo): | ||
| 39 | """Simple fixed-offset tzinfo""" | ||
| 40 | def __init__(self, seconds, name): | ||
| 41 | self._offset = timedelta(seconds=seconds) | ||
| 42 | self._name = name | ||
| 43 | |||
| 44 | def utcoffset(self, dt): | ||
| 45 | return self._offset | ||
| 46 | |||
| 47 | def tzname(self, dt): | ||
| 48 | return self._name | ||
| 49 | |||
| 50 | def dst(self, dt): | ||
| 51 | return None | ||
| 52 | |||
| 53 | TIMEZONES = {'UTC': TimeZone(0, 'UTC'), | ||
| 54 | 'EET': TimeZone(7200, 'EET'), | ||
| 55 | 'EEST': TimeZone(10800, 'EEST')} | ||
| 56 | |||
| 57 | taskdiff_fields = ('pkg', 'pkg_op', 'task', 'task_op', 'value1', 'value2', | 37 | taskdiff_fields = ('pkg', 'pkg_op', 'task', 'task_op', 'value1', 'value2', |
| 58 | 'absdiff', 'reldiff') | 38 | 'absdiff', 'reldiff') |
| 59 | TaskDiff = namedtuple('TaskDiff', ' '.join(taskdiff_fields)) | 39 | TaskDiff = namedtuple('TaskDiff', ' '.join(taskdiff_fields)) |
| 60 | 40 | ||
| 61 | 41 | ||
| 62 | def to_datetime_obj(obj): | ||
| 63 | """Helper for getting timestamps in datetime format""" | ||
| 64 | if isinstance(obj, datetime): | ||
| 65 | return obj | ||
| 66 | else: | ||
| 67 | return datetime.utcfromtimestamp(obj).replace(tzinfo=TIMEZONES['UTC']) | ||
| 68 | |||
| 69 | |||
| 70 | class BSTask(dict): | 42 | class BSTask(dict): |
| 71 | def __init__(self, *args, **kwargs): | 43 | def __init__(self, *args, **kwargs): |
| 72 | self['start_time'] = None | 44 | self['start_time'] = None |
| @@ -86,7 +58,7 @@ class BSTask(dict): | |||
| 86 | @property | 58 | @property |
| 87 | def walltime(self): | 59 | def walltime(self): |
| 88 | """Elapsed wall clock time""" | 60 | """Elapsed wall clock time""" |
| 89 | return self['elapsed_time'].total_seconds() | 61 | return self['elapsed_time'] |
| 90 | 62 | ||
| 91 | @property | 63 | @property |
| 92 | def read_bytes(self): | 64 | def read_bytes(self): |
| @@ -118,10 +90,10 @@ def read_buildstats_file(buildstat_file): | |||
| 118 | key, val = line.split(':', 1) | 90 | key, val = line.split(':', 1) |
| 119 | val = val.strip() | 91 | val = val.strip() |
| 120 | if key == 'Started': | 92 | if key == 'Started': |
| 121 | start_time = to_datetime_obj(float(val)) | 93 | start_time = float(val) |
| 122 | bs_task['start_time'] = start_time | 94 | bs_task['start_time'] = start_time |
| 123 | elif key == 'Ended': | 95 | elif key == 'Ended': |
| 124 | end_time = to_datetime_obj(float(val)) | 96 | end_time = float(val) |
| 125 | elif key.startswith('IO '): | 97 | elif key.startswith('IO '): |
| 126 | split = key.split() | 98 | split = key.split() |
| 127 | bs_task['iostat'][split[1]] = int(val) | 99 | bs_task['iostat'][split[1]] = int(val) |
