Commit a0b17f3c authored by Vincent Pelletier's avatar Vincent Pelletier

Also error error count to hit plot.

So apdex score impact of errors vs. slowness can be easily estimated.
parent 06b24373
......@@ -142,30 +142,47 @@ def getClassForStatusHit(hit, status):
return 'problem'
return ''
def getDataPoints(apdex_dict):
def getDataPoints(apdex_dict, status_period_dict={}):
period_error_dict = defaultdict(int)
for status, period_dict in status_period_dict.iteritems():
if statusIsError(status):
for period, hit in period_dict.iteritems():
period_error_dict[period] += hit
try:
# If there was an error, there was a hit, and apdex_dict must contain it
# (at same date).
assert len(set(period_error_dict) - set(apdex_dict)) == 0
except:
import pdb; pdb.set_trace()
raise
return [
(value_date, apdex.getApdex() * 100, apdex.hit) for value_date, apdex
in sorted(apdex_dict.iteritems(), key=ITEMGETTER0)]
(
value_date,
apdex.getApdex() * 100,
apdex.hit,
period_error_dict.get(value_date, 0),
) for value_date, apdex in sorted(apdex_dict.iteritems(), key=ITEMGETTER0)
]
def prepareDataForGraph(daily_data, date_format, placeholder_delta,
coefficient_callback, x_min=None, x_max=None):
current_date = datetime.strptime(x_min or daily_data[0][0], date_format)
new_daily_data = []
append = new_daily_data.append
for (measure_date_string, apdex, hit) in daily_data:
for (measure_date_string, apdex, hit, error_hit) in daily_data:
measure_date = datetime.strptime(measure_date_string, date_format)
if current_date < measure_date:
append((current_date.strftime(date_format), 100, 0))
append((current_date.strftime(date_format), 100, 0, 0))
placeholder_end_date = measure_date - placeholder_delta
if placeholder_end_date > current_date:
append((placeholder_end_date.strftime(date_format), 100, 0))
append((measure_date_string, apdex,
hit * coefficient_callback(measure_date)))
append((placeholder_end_date.strftime(date_format), 100, 0, 0))
coef = coefficient_callback(measure_date)
append((measure_date_string, apdex, hit * coef, error_hit * coef))
current_date = measure_date + placeholder_delta
if x_max is not None and current_date < datetime.strptime(x_max,
date_format):
append((current_date.strftime(date_format), 100, 0))
append((x_max, 100, 0))
append((current_date.strftime(date_format), 100, 0, 0))
append((x_max, 100, 0, 0))
return new_daily_data
def graphPair(daily_data, date_format, graph_period, apdex_y_min=None,
......@@ -200,7 +217,17 @@ def graphPair(daily_data, date_format, graph_period, apdex_y_min=None,
},
},
) + graph('Hits (per %s)' % graph_period,
[zip(date_list, (x[2] for x in daily_data))],
[
{
'label': 'Errors',
'data': zip(date_list, (x[3] for x in daily_data)),
'color': 'red',
},
{
'label': 'Hits',
'data': zip(date_list, (x[2] for x in daily_data)),
},
],
{
'xaxis': {
'mode': 'time',
......@@ -221,6 +248,7 @@ def graphPair(daily_data, date_format, graph_period, apdex_y_min=None,
},
)
def graph(title, data, options={}):
result = []
append = result.append
......@@ -369,7 +397,7 @@ class GenericSiteStats(object):
self.user_agent_counter[match.group('agent')] += 1
def getApdexData(self):
return getDataPoints(self.apdex)
return getDataPoints(self.apdex, self.status)
def asHTML(self, date_format, placeholder_delta, graph_period,
graph_coefficient, encoding, stat_filter=lambda x: x,
......@@ -1043,7 +1071,7 @@ def asHTML(out, encoding, per_site, args, default_site, period_parameter_dict,
if apdex_data_list:
x_min = min(x_min, apdex_data_list[0][0])
x_max = max(x_max, apdex_data_list[-1][0])
for hit_date, _, hit in apdex_data_list:
for hit_date, _, hit, _ in apdex_data_list:
hit_per_day[decimator(hit_date)] += hit
if x_min == LARGER_THAN_INTEGER_STR:
x_min = None
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment