Skip to content

Commit 801379f

Browse files
committed
fix issue in parsing sensor config
1 parent 49dca9f commit 801379f

File tree

3 files changed

+30
-23
lines changed

3 files changed

+30
-23
lines changed

source/messages.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
'InconsistentParams': 'Received parameters {} inconsistent with request parameters {}',
4343
'SensorDisabled': 'Sensor for metric {} is disabled',
4444
'NoData': 'Empty results received', # Please check the pmcollector is properly configured and running.
45+
'NoSensorConfigData': 'No sensor configuration data parsed',
4546
'NoDataStartNextAttempt': 'No Metadata results received from the pmcollector. Start retry attempt {} in 60s (MAX_ATTEMPTS_COUNT:{})',
4647
'BucketsizeChange': 'Based on requested downsample value: {} the bucketsize will be set: {}',
4748
'BucketsizeToPeriod': 'Bucketsize will be set to sensors period: {}',

source/queryHandler/SensorConfig.py

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,11 @@ def readSensorsConfigFromMMSDRFS(logger=None):
5050
with open(mmsdrfsFile) as f:
5151
data = data.join([line.split(":")[4] for line in f if "PERFMONCFG" in line])
5252
except (Exception, IOError) as error:
53-
logger.error("failed trying read %s with reason: %s", mmsdrfsFile, error)
53+
logger.details("failed trying read %s with reason: %s", mmsdrfsFile, error)
5454
return []
5555

56-
sensors = []
57-
sensorsStr = data[data.find("sensors"):data.find("smbstat")]
58-
sensorsList = re.findall('(?P<sensor>{.*?})', sensorsStr)
59-
for sensorString in sensorsList:
60-
sensorAttr = re.findall(r'(?P<name>\w+) = (?P<value>\"[\S]*\"|\d+)', sensorString)
61-
d = {}
62-
for attr in sensorAttr:
63-
d[attr[0]] = attr[1]
64-
sensors.append(d)
65-
return sensors
56+
# parse config file in a list of dictionaries format
57+
return parseSensorsConfig(data, logger)
6658

6759

6860
def readSensorsConfig(logger=None):
@@ -73,7 +65,7 @@ def readSensorsConfig(logger=None):
7365
logger = SysmonLogger.getLogger(__name__)
7466

7567
if not os.path.isfile(zimonFile):
76-
logger.error("ZiMon sensor configuration file not found (%s) ", zimonFile)
68+
logger.details("ZiMon sensor configuration file not found (%s) ", zimonFile)
7769
print("ZiMon sensor configuration file not found")
7870
raise OSError(2, 'No such file or directory', zimonFile)
7971

@@ -83,19 +75,29 @@ def readSensorsConfig(logger=None):
8375
with open(zimonFile) as myfile:
8476
data = myfile.read().replace('\n', '')
8577
except (Exception, IOError) as error:
86-
logger.error("failed trying read %s with reason: %s", zimonFile, error)
78+
logger.details("failed trying read %s with reason: %s", zimonFile, error)
8779
return []
80+
# parse config file in a list of dictionaries format
81+
return parseSensorsConfig(data, logger)
8882

89-
sensors = []
90-
sensorsStr = data[data.find("sensors"):data.find("smbstat")]
91-
sensorsList = re.findall('(?P<sensor>{.*?})', sensorsStr)
92-
for sensorString in sensorsList:
93-
sensorAttr = re.findall(r'(?P<name>\w+) = (?P<value>\"[\S]*\"|\d+)', sensorString)
94-
d = {}
95-
for attr in sensorAttr:
96-
d[attr[0]] = attr[1]
97-
sensors.append(d)
98-
return sensors
83+
84+
def parseSensorsConfig(sensorsConfig, logger):
85+
""" Returns a list of dicts, describing definitions of sensors """
86+
logger.debug("invoke parseSensorsConfig")
87+
try:
88+
sensors = []
89+
sensorsStr = sensorsConfig[sensorsConfig.find("sensors"):sensorsConfig.find("smbstat")]
90+
sensorsList = re.findall('(?P<sensor>{.*?})(?:,|$)', sensorsStr)
91+
for sensorString in sensorsList:
92+
sensorAttr = re.findall(r'(?P<name>\w+) = (?P<value>\"\S*\"|\d+)', sensorString)
93+
d = {}
94+
for attr in sensorAttr:
95+
d[attr[0]] = attr[1]
96+
sensors.append(d)
97+
return sensors
98+
except (Exception, IOError) as error:
99+
logger.details("failed parsing sensors config content with reason: %s", error)
100+
return []
99101

100102

101103
def getCollectorPorts(logger=None):

source/zimonGrafanaIntf.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ def qh(self):
6868
def SensorsConfig(self):
6969
if not self.__sensorsConf or len(self.__sensorsConf) == 0:
7070
self.__sensorsConf = SensorConfig.readSensorsConfigFromMMSDRFS(self.logger)
71+
if not self.__sensorsConf:
72+
raise ValueError(MSG['NoSensorConfigData'])
7173
return self.__sensorsConf
7274

7375
@property
@@ -81,6 +83,8 @@ def __initializeTables(self):
8183

8284
self.__qh = QueryHandler(self.server, self.port, self.logger, self.apiKeyName, self.apiKeyValue)
8385
self.__sensorsConf = SensorConfig.readSensorsConfigFromMMSDRFS(self.logger)
86+
if not self.__sensorsConf:
87+
raise ValueError(MSG['NoSensorConfigData'])
8488
MAX_ATTEMPTS_COUNT = 3
8589
for attempt in range(1, MAX_ATTEMPTS_COUNT + 1):
8690
tstart = timer()

0 commit comments

Comments
 (0)