Skip to content

Commit

Permalink
Fixes #256: % formatted performance data
Browse files Browse the repository at this point in the history
Manage min and max correctly
Sanitize metrics names for Graphite/Grafana
Set version as 0.8.5.1
  • Loading branch information
mohierf committed Jan 24, 2017
1 parent 564c8fb commit 1f16c24
Show file tree
Hide file tree
Showing 5 changed files with 234 additions and 16 deletions.
2 changes: 1 addition & 1 deletion alignak_backend/__init__.py
Expand Up @@ -8,7 +8,7 @@
This module is an Alignak REST backend
"""
# Application version and manifest
VERSION = (0, 8, 4)
VERSION = (0, 8, 5, 1)

__application__ = u"Alignak_Backend"
__short_version__ = '.'.join((str(each) for each in VERSION[:2]))
Expand Down
2 changes: 2 additions & 0 deletions alignak_backend/grafana.py
Expand Up @@ -152,6 +152,8 @@ def build_target(self, item, fields):
my_target = my_target.replace("/", "-")
# space becomes a _
my_target = my_target.replace(" ", "_")
# % becomes _pct
my_target = my_target.replace("%", "_pct")
# all character not in [a-zA-Z_-0-9.] is removed
my_target = re.sub(r'[^a-zA-Z_\-0-9\.\$]', '', my_target)

Expand Down
31 changes: 19 additions & 12 deletions alignak_backend/perfdata.py
Expand Up @@ -63,7 +63,6 @@ def __init__(self, string):
self.name = self.value = self.uom = \
self.warning = self.critical = self.min = self.max = None
string = string.strip()
# print "Analysis string", string
matches = METRIC_PATTERN.match(string)
if matches:
# Get the name but remove all ' in it
Expand All @@ -74,20 +73,28 @@ def __init__(self, string):
self.critical = guess_int_or_float(matches.group(5))
self.min = guess_int_or_float(matches.group(6))
self.max = guess_int_or_float(matches.group(7))
# print 'Name', self.name
# print "Value", self.value
# print "Res", r
# print r.groups()
if self.uom == '%':
self.min = 0
self.max = 100

def __str__(self):
def __str__(self): # pragma: no cover, only for debugging purpose
string = "%s=%s%s" % (self.name, self.value, self.uom)
if self.warning:
if self.warning is not None:
string += ";%s" % (self.warning)
if self.critical:
else:
string += ";"
if self.critical is not None:
string += ";%s" % (self.critical)
else:
string += ";"
if self.min is not None:
string += ";%s" % (self.min)
else:
string += ";"
if self.max is not None:
string += ";%s" % (self.max)
else:
string += ";"
return string


Expand All @@ -106,14 +113,14 @@ def __init__(self, string):
if metric.name is not None:
self.metrics[metric.name] = metric

def __iter__(self):
def __iter__(self): # pragma: no cover, not used internally
return self.metrics.itervalues()

def __len__(self):
def __len__(self): # pragma: no cover, not used internally
return len(self.metrics)

def __getitem__(self, key):
def __getitem__(self, key): # pragma: no cover, not used internally
return self.metrics[key]

def __contains__(self, key):
def __contains__(self, key): # pragma: no cover, not used internally
return key in self.metrics
30 changes: 29 additions & 1 deletion alignak_backend/timeseries.py
Expand Up @@ -77,7 +77,19 @@ def prepare_data(item):
m = re.search(r'^(.*)\.[\d]{10}$', fields['name'])
if m:
fields['name'] = m.group(1)
fields['name'] = fields['name'].replace(" ", "_")

# Sanitize field name for Graphite:
# + becomes a _
my_target = fields['name'].replace("+", "_")
# / becomes a -
my_target = my_target.replace("/", "-")
# space becomes a _
my_target = my_target.replace(" ", "_")
# % becomes _pct
my_target = my_target.replace("%", "_pct")
# all character not in [a-zA-Z_-0-9.] is removed
my_target = re.sub(r'[^a-zA-Z_\-0-9\.\$]', '', my_target)
fields['name'] = my_target

if fields['value'] is not None:
data_timeseries['data'].append(
Expand All @@ -103,6 +115,22 @@ def prepare_data(item):
'uom': fields['uom']
}
)
if fields['min'] is not None:
data_timeseries['data'].append(
{
'name': fields['name'] + '_min',
'value': fields['min'],
'uom': fields['uom']
}
)
if fields['max'] is not None:
data_timeseries['data'].append(
{
'name': fields['name'] + '_max',
'value': fields['max'],
'uom': fields['uom']
}
)
return data_timeseries

@staticmethod
Expand Down

0 comments on commit 1f16c24

Please sign in to comment.