Skip to content

Commit 9aa7ed5

Browse files
committed
Merge pull request #7 from kovacshuni/arrays
Changing form [] to () because of Nagios issues. Fixes.
2 parents c678dfd + 4fa2c3b commit 9aa7ed5

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,14 @@ optional arguments:
8989
(key,UnitOfMeasure,Min,Max).
9090
-s, --ssl HTTPS mode.
9191
-f SEPARATOR, --field_separator SEPARATOR
92-
Json Field separator, defaults to "."
92+
Json Field separator, defaults to "." ; Select element
93+
in an array with "(" ")"
9394
-d, --debug Debug mode.
9495
```
9596

97+
Access a specific JSON field by following this syntax: `alpha.beta.gamma(3).theta.omega(0)`
98+
Dots are field separators (changeable), parantheses are for entering arrays.
99+
96100
More info about Nagios Range format and Units of Measure can be found at [https://nagios-plugins.org/doc/guidelines.html](https://nagios-plugins.org/doc/guidelines.html).
97101

98102
### Docker Info Example Plugin

check_http_json.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ class JsonHelper:
4545
def __init__(self, json_data, separator):
4646
self.data = json_data
4747
self.separator = separator
48+
self.arrayOpener = '('
49+
self.arrayCloser = ')'
4850

4951
def getSubElement(self, key, data):
5052
separatorIndex = key.find(self.separator)
@@ -56,9 +58,12 @@ def getSubElement(self, key, data):
5658
return (None, 'not_found')
5759

5860
def getSubArrayElement(self, key, data):
59-
subElemKey = key[:key.find('[')]
60-
index = int(key[key.find('[') + 1:key.find(']')])
61-
remainingKey = key[key.find('].') + 2:]
61+
subElemKey = key[:key.find(self.arrayOpener)]
62+
index = int(key[key.find(self.arrayOpener) + 1:key.find(self.arrayCloser)])
63+
remainingKey = key[key.find(self.arrayCloser + self.separator) + 2:]
64+
if key.find(self.arrayCloser + self.separator) == -1:
65+
remainingKey = key[key.find(self.arrayCloser) + 1:]
66+
6267
if subElemKey in data:
6368
if index < len(data[subElemKey]):
6469
return self.get(remainingKey, data[subElemKey][index])
@@ -81,16 +86,16 @@ def get(self, key, temp_data=''):
8186
if len(key) <= 0:
8287
return data
8388

84-
if key.find(self.separator) != -1 and key.find('[') != -1 :
85-
if key.find(self.separator) < key.find('[') :
89+
if key.find(self.separator) != -1 and key.find(self.arrayOpener) != -1 :
90+
if key.find(self.separator) < key.find(self.arrayOpener) :
8691
return self.getSubElement(key, data)
8792
else:
8893
return self.getSubArrayElement(key, data)
8994
else:
9095
if key.find(self.separator) != -1 :
9196
return self.getSubElement(key, data)
9297
else:
93-
if key.find('[') != -1 :
98+
if key.find(self.arrayOpener) != -1 :
9499
return self.getSubArrayElement(key, data)
95100
else:
96101
if key in data:
@@ -196,7 +201,7 @@ def parseArgs():
196201
More information about Range format and units of measure for nagios can be found at https://nagios-plugins.org/doc/guidelines.html\
197202
Additional formats for this parameter are: (key), (key,UnitOfMeasure), (key,UnitOfMeasure,Min,Max).')
198203
parser.add_argument('-s', '--ssl', action='store_true', help='HTTPS mode.')
199-
parser.add_argument('-f', '--field_separator', dest='separator', help='Json Field separator, defaults to "."')
204+
parser.add_argument('-f', '--field_separator', dest='separator', help='Json Field separator, defaults to "." ; Select element in an array with "(" ")"')
200205
parser.add_argument('-d', '--debug', action='store_true', help='Debug mode.')
201206

202207
return parser.parse_args()

0 commit comments

Comments
 (0)