Skip to content

Commit eb4a047

Browse files
authored
Merge pull request #31 from Helene/7.0.1a
merge changes fron v6.1.3
2 parents 382821a + a6302b7 commit eb4a047

File tree

10 files changed

+83
-9
lines changed

10 files changed

+83
-9
lines changed

docs/CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,17 @@ Expanded test module with unit tests for the apiKeyValue verification
1010

1111

1212

13+
# Version 6.1.3 (05/21/2021)
14+
15+
Added support for the 'includeDiskData' command line argument.
16+
- using the 'includeDiskData' option allows to query and fetch data from the archived (on disk data) for better precision.
17+
18+
Expanded test module with more unit tests
19+
20+
Tested with Grafana 7.5.1 version
21+
22+
23+
1324
# Version 6.1.2 (03/20/2021)
1425

1526
Removed the "switching to the multi-threaded zimon port automatically" feature

docs/SUPPORT_MATRIX.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ The following matrix gives a quick overview of the supported software for the IB
55
- IBM Spectrum Scale system must run 5.1.1 and above
66
- Grafana 7.1.0 and above
77

8+
# Version 6.1.3 (05/21/2021)
9+
- Python 3.6
10+
- CherryPy 18.6.0
11+
- IBM Spectrum Scale system must run 5.1.0 and above or
12+
- IBM Spectrum Scale Container Native Storage Access(CNSA) devices having minReleaseLevel 5.1.0.1
13+
- Grafana 7.5.0 and above
14+
815
# Version 6.1.2 (03/20/2021)
916
- Python 3.6
1017
- CherryPy 18.6.0

source/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@
2020
@author: HWASSMAN
2121
'''
2222

23-
__version__ = '7.0'
23+
__version__ = '7.0.1'

source/confParser.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ def merge_defaults_and_args(defaults, args):
7979
brConfig = dict(defaults)
8080
args = vars(args)
8181
brConfig.update({k: v for k, v in args.items() if v is not None and not (v == str(None))})
82+
for k, v in brConfig.items():
83+
if v == "no":
84+
brConfig[k] = False
85+
elif v == "yes":
86+
brConfig[k] = True
8287
return brConfig
8388

8489

@@ -179,6 +184,7 @@ def parse_cmd_args(argv):
179184
parser.add_argument('-m', '--tlsCertFile', action="store", default=None, help='Name of TLS certificate file, f.e.: cert.pem (Required only for HTTPS port 8443)')
180185
parser.add_argument('-n', '--apiKeyName', action="store", default=None, help='Name of api key file (Default from config.ini: \'scale_grafana\')')
181186
parser.add_argument('-v', '--apiKeyValue', action=Password, nargs='?', dest='apiKeyValue', default=None, help='Enter your apiKey value:')
187+
parser.add_argument('-d', '--includeDiskData', action="store", choices=["yes", "no"], default=None, help='Use or not the historical data from disk (Default from config.ini: "no")')
182188

183189
args = parser.parse_args(argv)
184190
return args, ''

source/config.ini

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,12 @@ apiKeyName = scale_grafana
3131
# The REST HTTPS API key value, f.e:
3232
# apiKeyValue = e40960c9-de0a-4c75-bc71-0bcae6db23b2
3333

34-
#################################### Logging ##################################
34+
#################################### GPFS Server data query settings ###########
35+
[query]
36+
# Use or not the historical data from disk (default: no)
37+
includeDiskData = no
38+
39+
#################################### Logging ###################################
3540
[logging]
3641
# Directory where the bridge can store logs
3742
logPath = /var/log/ibm_bridge_for_grafana

source/queryHandler/Query.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,11 @@ class Query(object):
4949
"operation", "protocol", "waiters_time_threshold", "export",
5050
"nodegroup", "account", "filesystem", "tct_csap", "tct_operation", "cloud_nodeclass"])
5151

52-
def __init__(self, metrics=None, bucketsize=1, filters=None, groupby=None, includeDiskDate=False):
52+
def __init__(self, metrics=None, bucketsize=1, filters=None, groupby=None, includeDiskData=False):
5353
'''
5454
Constructor, filters and groupby must be preformmated
5555
'''
56-
self.includeDiskData = includeDiskDate # disk or archived data (False or True)
56+
self.includeDiskData = includeDiskData # disk or archived data (False or True)
5757
self.bucket_size = bucketsize # bucket size
5858

5959
self.metrics = [] # list of string metrics

source/zimonGrafanaIntf.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141

4242
class MetadataHandler():
4343

44-
def __init__(self, logger, server, port, apiKeyName, apiKeyValue):
44+
def __init__(self, logger, server, port, apiKeyName, apiKeyValue, includeDiskData=False):
4545
self.__qh = None
4646
self.__sensorsConf = None
4747
self.__metaData = None
@@ -50,6 +50,7 @@ def __init__(self, logger, server, port, apiKeyName, apiKeyValue):
5050
self.port = port
5151
self.apiKeyName = apiKeyName
5252
self.apiKeyValue = apiKeyValue
53+
self.includeDiskData = includeDiskData
5354

5455
self.__initializeTables()
5556

@@ -232,6 +233,10 @@ def __init__(self, logger, mdHandler):
232233
def qh(self):
233234
return self.__md.qh
234235

236+
@property
237+
def md(self):
238+
return self.__md
239+
235240
@property
236241
def sensorsConf(self):
237242
return self.__md.SensorsConfig
@@ -299,7 +304,7 @@ def _validateQueryFilters(self, metricName, query):
299304

300305
def _createZimonQuery(self, q, start, end):
301306
'''Creates zimon query string '''
302-
query = Query()
307+
query = Query(includeDiskData=self.md.includeDiskData)
303308
query.normalize_rates = False
304309
bucketSize = 1 # default
305310
inMetric = q.get('metric')
@@ -584,7 +589,7 @@ def main(argv):
584589
logger.info("%s", MSG['BridgeVersionInfo'].format(__version__))
585590
logger.details('zimonGrafanaItf invoked with parameters:\n %s', "\n".join("{}={}".format(k, v) for k, v in args.items()))
586591
# logger.details('zimonGrafanaItf invoked with parameters:\n %s', "\n".join("{}={}".format(k, type(v)) for k, v in args.items()))
587-
mdHandler = MetadataHandler(logger, args.get('server'), args.get('serverPort'), args.get('apiKeyName'), args.get('apiKeyValue'))
592+
mdHandler = MetadataHandler(logger, args.get('server'), args.get('serverPort'), args.get('apiKeyName'), args.get('apiKeyValue'), args.get('includeDiskData'))
588593
except (AttributeError, TypeError, ValueError) as e:
589594
logger.details('%s', MSG['IntError'].format(str(e)))
590595
logger.error(MSG['MetaError'])

tests/test_cli_parser.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@
66

77

88
def my_setup():
9-
global a, b, c, d, e, f, g
9+
global a, b, c, d, e, f, g, h
1010
a = ['-p', '8443', '-t', '/etc/my_tls']
1111
b = ['-a']
1212
c = ['-a', 'abc']
1313
d = ['-c', '10', '-v', '/opt/registry/certs']
1414
e = ['-c', '10', '-t', '/opt/registry/certs']
1515
f = ['-c', '10', '-s', '9.155.108.199', '-p', '8443', '-t', '/opt/registry/certs', '--tlsKeyFile', 'privkey.pem', '--tlsCertFile', 'cert.pem']
1616
g = ['-p', '4242', '-P', '9084']
17+
h = ['-d', 'no']
1718

1819

1920
def test_case01():
@@ -76,3 +77,18 @@ def test_case07():
7677
assert len(result.keys()) > 0
7778
assert 'port' in result.keys()
7879
assert result.get('port') == 8443
80+
81+
82+
def test_case08():
83+
args, msg = parse_cmd_args([])
84+
result = vars(args)
85+
assert 'includeDiskData' in result.keys()
86+
assert result.get('includeDiskData') is None
87+
88+
89+
@with_setup(my_setup)
90+
def test_case09():
91+
args, msg = parse_cmd_args(h)
92+
result = vars(args)
93+
assert 'includeDiskData' in result.keys()
94+
assert result.get('includeDiskData') == 'no'

tests/test_configManager.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,10 @@ def test_case10():
7171
assert int(result['port']) == 4242 and int(result['serverPort']) == 9084
7272
else:
7373
assert int(result['port']) == 4242 and int(result['serverPort']) == 9980
74+
75+
76+
def test_case11():
77+
cm = ConfigManager()
78+
result = cm.defaults
79+
assert 'includeDiskData' in result.keys()
80+
assert result['includeDiskData'] == 'no'

tests/test_params.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33

44

55
def my_setup():
6-
global a, b, c, d, e, f, g
6+
global a, b, c, d, e, f, g, m, n
77
a = ConfigManager().defaults
88
b, c = parse_cmd_args([])
99
d, e = parse_cmd_args(['-p', '8443', '-t', '/etc/my_tls'])
1010
f, g = parse_cmd_args(['-p', '8443', '-t', None, '-k', 'None', '-m', "None"])
11+
m, n = parse_cmd_args(['-d', 'yes'])
1112

1213

1314
@with_setup(my_setup)
@@ -43,3 +44,19 @@ def test_case04():
4344
assert 'tlsKeyFile' not in result.keys()
4445
assert 'tlsCertFile' not in result.keys()
4546
assert result.get('port') == 8443
47+
48+
49+
@with_setup(my_setup)
50+
def test_case05():
51+
result = merge_defaults_and_args(a, f)
52+
assert len(result.keys()) > 0
53+
assert 'includeDiskData' in result.keys()
54+
assert result.get('includeDiskData') == False
55+
56+
57+
@with_setup(my_setup)
58+
def test_case06():
59+
result = merge_defaults_and_args(a, m)
60+
assert len(result.keys()) > 0
61+
assert 'includeDiskData' in result.keys()
62+
assert result.get('includeDiskData') == True

0 commit comments

Comments
 (0)