Skip to content

Commit 16e6b62

Browse files
authored
Merge pull request #117 from Helene/metric_spec
Add methods to get metric attributes
2 parents f4d80b6 + 4086a1b commit 16e6b62

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

source/messages.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,5 +63,6 @@
6363
'PathNoCfgFiles': 'The path does not contain any configuration files.',
6464
'NewKeyDetected': 'Detected not known single ts identifiers {}.',
6565
'NewKeyAlreadyReported': 'Single ts identifiers {} already reported as not known.',
66-
'UnhandledError': 'Unhandled error: {}'
66+
'UnhandledError': 'Unhandled error: {}',
67+
'DataWrongFormat': 'Content could not be parsed: {}'
6768
}

source/zimonGrafanaIntf.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ def __init__(self, **kwargs):
5353
self.__qh = None
5454
self.__sensorsConf = None
5555
self.__metaData = None
56+
self.__metricsDesc = {}
5657
self.logger = kwargs['logger']
5758
self.server = kwargs['server']
5859
self.port = kwargs['port']
@@ -63,6 +64,7 @@ def __init__(self, **kwargs):
6364
self.sleepTime = kwargs.get('sleepTime', 60)
6465

6566
self.__initializeTables()
67+
self.__getSupportedMetrics()
6668

6769
@property
6870
def qh(self):
@@ -82,6 +84,50 @@ def SensorsConfig(self):
8284
def metaData(self):
8385
return self.__metaData
8486

87+
@property
88+
def metricsDesc(self):
89+
return self.__metricsDesc
90+
91+
def getSensorPeriod(self, metric):
92+
bucketSize = 0
93+
sensor = self.metaData.getSensorForMetric(metric)
94+
if not sensor:
95+
self.logger.error(MSG['MetricErr'].format(metric))
96+
raise cherrypy.HTTPError(404, MSG['MetricErr'].format(metric))
97+
elif sensor in ('GPFSPoolCap', 'GPFSInodeCap'):
98+
sensor = 'GPFSDiskCap'
99+
elif sensor in ('GPFSNSDFS', 'GPFSNSDPool'):
100+
sensor = 'GPFSNSDDisk'
101+
elif sensor == 'DomainStore':
102+
return 1
103+
104+
for sensorAttr in self.SensorsConfig:
105+
if sensorAttr['name'] == str('\"%s\"' % sensor):
106+
bucketSize = int(sensorAttr['period'])
107+
return bucketSize
108+
109+
def __getSupportedMetrics(self):
110+
"""retrieve all defined (enabled and disabled) metrics list by querying topo -m"""
111+
112+
metricSpec = {}
113+
114+
outp = self.qh.getAvailableMetrics()
115+
116+
if not outp or outp == "" or outp.startswith("Error:"):
117+
self.logger.warning(MSG['NoData'])
118+
return
119+
120+
for line in outp.split("\n"):
121+
if len(line) > 0:
122+
tokens = line.split(";")
123+
if tokens and len(tokens) > 2:
124+
name = tokens[0]
125+
desc = tokens[2] or "No description provided"
126+
metricSpec[name] = desc
127+
else:
128+
self.logger.warning(MSG['DataWrongFormat'].format(line))
129+
self.__metricsDesc = metricSpec
130+
85131
def __initializeTables(self):
86132
'''Read the topology from ZIMon and (re-)construct
87133
the tables for metrics, keys, key elements (tag keys)

0 commit comments

Comments
 (0)