97 percentile and median
This commit is contained in:
parent
1ff0e44392
commit
0c7cc64622
@ -13,7 +13,7 @@ from stacktach import image_type
|
|||||||
from stacktach import models
|
from stacktach import models
|
||||||
|
|
||||||
|
|
||||||
def make_report(yesterday=None, start_hour=0, hours=24, percentile=90,
|
def make_report(yesterday=None, start_hour=0, hours=24, percentile=97,
|
||||||
store=False, region=None):
|
store=False, region=None):
|
||||||
if not yesterday:
|
if not yesterday:
|
||||||
yesterday = datetime.datetime.utcnow().date() - \
|
yesterday = datetime.datetime.utcnow().date() - \
|
||||||
@ -149,7 +149,7 @@ def make_report(yesterday=None, start_hour=0, hours=24, percentile=90,
|
|||||||
report.append(details)
|
report.append(details)
|
||||||
|
|
||||||
failure_types = ["4xx", "5xx", "> 60", "state"]
|
failure_types = ["4xx", "5xx", "> 60", "state"]
|
||||||
cols = ["Operation", "Image", "Min*", "Max*", "Avg*",
|
cols = ["Operation", "Image", "Min", "Max", "Med", "%d%%" % percentile,
|
||||||
"Requests"]
|
"Requests"]
|
||||||
for failure_type in failure_types:
|
for failure_type in failure_types:
|
||||||
cols.append("%s" % failure_type)
|
cols.append("%s" % failure_type)
|
||||||
@ -178,10 +178,6 @@ def make_report(yesterday=None, start_hour=0, hours=24, percentile=90,
|
|||||||
# N-th % of durations ...
|
# N-th % of durations ...
|
||||||
_values = durations[key]
|
_values = durations[key]
|
||||||
_values.sort()
|
_values.sort()
|
||||||
_outliers = int(float(len(_values)) * pct)
|
|
||||||
if _outliers > 0:
|
|
||||||
before = len(_values)
|
|
||||||
_values = _values[_outliers:-_outliers]
|
|
||||||
_min = 99999999
|
_min = 99999999
|
||||||
_max = 0
|
_max = 0
|
||||||
_total = 0.0
|
_total = 0.0
|
||||||
@ -189,12 +185,20 @@ def make_report(yesterday=None, start_hour=0, hours=24, percentile=90,
|
|||||||
_min = min(_min, value)
|
_min = min(_min, value)
|
||||||
_max = max(_max, value)
|
_max = max(_max, value)
|
||||||
_total += float(value)
|
_total += float(value)
|
||||||
_avg = float(_total) / float(len(_values))
|
_num = len(_values)
|
||||||
|
_avg = float(_total) / float(_num)
|
||||||
|
half = _num / 2
|
||||||
|
_median = _values[half]
|
||||||
|
_percentile_index = int((float(percentile) / 100.0) * float(_num))
|
||||||
|
_percentile = _values[_percentile_index]
|
||||||
|
|
||||||
_fmin = dt.sec_to_str(_min)
|
_fmin = dt.sec_to_str(_min)
|
||||||
_fmax = dt.sec_to_str(_max)
|
_fmax = dt.sec_to_str(_max)
|
||||||
_favg = dt.sec_to_str(_avg)
|
_favg = dt.sec_to_str(_avg)
|
||||||
|
_fmedian = dt.sec_to_str(_median)
|
||||||
|
_fpercentile = dt.sec_to_str(_percentile)
|
||||||
|
|
||||||
row = [operation, image, _fmin, _fmax, _favg, count]
|
row = [operation, image, _fmin, _fmax, _fmedian, _fpercentile, count]
|
||||||
for failure_count, failure_percentage in this_failure_pair:
|
for failure_count, failure_percentage in this_failure_pair:
|
||||||
row.append(failure_count)
|
row.append(failure_count)
|
||||||
row.append(failure_percentage)
|
row.append(failure_percentage)
|
||||||
@ -237,7 +241,7 @@ if __name__ == '__main__':
|
|||||||
help='Starting hour 0-23. Default: 0', default=0,
|
help='Starting hour 0-23. Default: 0', default=0,
|
||||||
type=int)
|
type=int)
|
||||||
parser.add_argument('--percentile',
|
parser.add_argument('--percentile',
|
||||||
help='Percentile for timings. Default: 90', default=90,
|
help='Percentile for timings. Default: 97', default=97,
|
||||||
type=int)
|
type=int)
|
||||||
parser.add_argument('--store',
|
parser.add_argument('--store',
|
||||||
help='Store report in database. Default: False',
|
help='Store report in database. Default: False',
|
||||||
@ -268,7 +272,7 @@ if __name__ == '__main__':
|
|||||||
'created': dt.dt_to_decimal(datetime.datetime.utcnow()),
|
'created': dt.dt_to_decimal(datetime.datetime.utcnow()),
|
||||||
'period_start': start,
|
'period_start': start,
|
||||||
'period_end': end,
|
'period_end': end,
|
||||||
'version': 2,
|
'version': 3,
|
||||||
'name': 'summary for region: %s' % region_name}
|
'name': 'summary for region: %s' % region_name}
|
||||||
report = models.JsonReport(**values)
|
report = models.JsonReport(**values)
|
||||||
report.save()
|
report.save()
|
||||||
@ -287,11 +291,9 @@ if __name__ == '__main__':
|
|||||||
p.align[c] = 'r'
|
p.align[c] = 'r'
|
||||||
p.sortby = cols[0]
|
p.sortby = cols[0]
|
||||||
|
|
||||||
print "* Using %d-th percentile for results (+/-%.1f%% cut)" % \
|
|
||||||
(percentile, pct * 100.0)
|
|
||||||
for row in raw_report[2:]:
|
for row in raw_report[2:]:
|
||||||
frow = row[:]
|
frow = row[:]
|
||||||
for col in [7, 9, 11]:
|
for col in [8, 10, 12, 14]:
|
||||||
frow[col] = "%.1f%%" % (row[col] * 100.0)
|
frow[col] = "%.1f%%" % (row[col] * 100.0)
|
||||||
p.add_row(frow)
|
p.add_row(frow)
|
||||||
print p
|
print p
|
||||||
|
Loading…
x
Reference in New Issue
Block a user