Skip to content

Commit

Permalink
Fix #245: protect against too much metrics in performance data:
Browse files Browse the repository at this point in the history
 - increment the loop index only if warning/critical exists
  - set a blank ref if we got too much metrics (more than 26), Grafana supports empty string as a metric reference
  • Loading branch information
mohierf committed Jan 17, 2017
1 parent d518307 commit 5c02abe
Showing 1 changed file with 66 additions and 17 deletions.
83 changes: 66 additions & 17 deletions alignak_backend/grafana.py
Expand Up @@ -104,33 +104,57 @@ def create_dashboard(self, host_id, graphite_prefix='', statsd_prefix=''):
while mytarget.startswith('.'):
mytarget = mytarget[1:]

elements = {'measurement': fields['name'], 'refid': refids[num], 'mytarget': mytarget}
try:
elements = {'measurement': fields['name'], 'refid': refids[num],
'mytarget': mytarget}
except IndexError as e:
print("-----\nToo much metrics in the performance data for '%s'!\n-----"
% (host['name']))
elements = {'measurement': fields['name'], 'refid': '', 'mytarget': mytarget}

targets.append(self.generate_target(elements, {"host": hostname},
ObjectId(host['_realm'])))
num += 1
if fields['warning'] is not None:
num += 1
# Add statsd, graphite and realm prefixes
mytarget = '.'.join([statsd_prefix, graphite_prefix])
mytarget += '.' + Timeseries.get_realms_prefix(host['_realm']) + '.' + hostname
mytarget += '.' + fields['name'] + '_warning'
while mytarget.startswith('.'):
mytarget = mytarget[1:]

elements = {'measurement': fields['name'] + '_warning', 'refid': refids[num],
'mytarget': mytarget}
try:
elements = {'measurement': fields['name'] + '_warning', 'refid': refids[num],
'mytarget': mytarget}
except IndexError as e:
print("-----\nToo much metrics (warning) in the "
"performance data for '%s'!\n-----"
% (host['name']))
elements = {'measurement': fields['name'] + '_warning', 'refid': '',
'mytarget': mytarget}

targets.append(self.generate_target(elements, {"host": hostname},
ObjectId(host['_realm'])))
num += 1

if fields['critical'] is not None:
num += 1
# Add statsd, graphite and realm prefixes
mytarget = '.'.join([statsd_prefix, graphite_prefix])
mytarget += '.' + Timeseries.get_realms_prefix(host['_realm']) + '.' + hostname
mytarget += '.' + fields['name'] + '_critical'
while mytarget.startswith('.'):
mytarget = mytarget[1:]

elements = {'measurement': fields['name'] + '_critical', 'refid': refids[num],
'mytarget': mytarget}
try:
elements = {'measurement': fields['name'] + '_critical', 'refid': refids[num],
'mytarget': mytarget}
except IndexError as e:
print("-----\nToo much metrics (critical) in the "
"performance data for '%s'!\n-----"
% (host['name']))
elements = {'measurement': fields['name'] + '_critical', 'refid': '',
'mytarget': mytarget}

targets.append(self.generate_target(elements, {"host": hostname},
ObjectId(host['_realm'])))
num += 1
Expand Down Expand Up @@ -164,38 +188,63 @@ def create_dashboard(self, host_id, graphite_prefix='', statsd_prefix=''):
while mytarget.startswith('.'):
mytarget = mytarget[1:]

elements = {'measurement': fields['name'], 'refid': refids[num],
'mytarget': mytarget}
try:
elements = {'measurement': fields['name'], 'refid': refids[num],
'mytarget': mytarget}
except IndexError as e:
print("-----\nToo much metrics in the performance data for '%s/%s'!\n-----"
% (host['name'], service['name']))
elements = {'measurement': fields['name'], 'refid': '',
'mytarget': mytarget}

targets.append(self.generate_target(elements,
{"host": hostname,
"service": service['name']},
ObjectId(service['_realm'])))
num += 1
if fields['warning'] is not None:
num += 1
# Add statsd, graphite and realm prefixes
mytarget = '.'.join([statsd_prefix, graphite_prefix])
mytarget += '.' + Timeseries.get_realms_prefix(host['_realm']) + '.' + hostname
mytarget += '.' + Timeseries.get_realms_prefix(host['_realm'])
mytarget += '.' + hostname
mytarget += '.' + service['name'] + '.' + fields['name'] + "_warning"
while mytarget.startswith('.'):
mytarget = mytarget[1:]

elements = {'measurement': fields['name'] + "_warning",
'refid': refids[num], 'mytarget': mytarget}
try:
elements = {'measurement': fields['name'] + "_warning",
'refid': refids[num], 'mytarget': mytarget}
except IndexError as e:
print("-----\nToo much metrics (warning) in the "
"performance data for '%s/%s'!\n-----"
% (host['name'], service['name']))
elements = {'measurement': fields['name'] + "_warning",
'refid': '', 'mytarget': mytarget}

targets.append(self.generate_target(elements,
{"host": hostname,
"service": service['name']},
ObjectId(service['_realm'])))
num += 1
if fields['critical'] is not None:
num += 1
# Add statsd, graphite and realm prefixes
mytarget = '.'.join([statsd_prefix, graphite_prefix])
mytarget += '.' + Timeseries.get_realms_prefix(host['_realm']) + '.' + hostname
mytarget += '.' + Timeseries.get_realms_prefix(host['_realm'])
mytarget += '.' + hostname
mytarget += '.' + service['name'] + '.' + fields['name'] + "_critical"
while mytarget.startswith('.'):
mytarget = mytarget[1:]

elements = {'measurement': fields['name'] + "_critical",
'refid': refids[num], 'mytarget': mytarget}
try:
elements = {'measurement': fields['name'] + "_critical",
'refid': refids[num], 'mytarget': mytarget}
except IndexError as e:
print("-----\nToo much metrics (critical) in the "
"performance data for '%s/%s'!\n-----"
% (host['name'], service['name']))
elements = {'measurement': fields['name'] + "_critical",
'refid': '', 'mytarget': mytarget}

targets.append(self.generate_target(elements,
{"host": hostname,
"service": service['name']},
Expand Down

0 comments on commit 5c02abe

Please sign in to comment.