Skip to content

Commit

Permalink
Merge pull request #7 from kovacshuni/arrays
Browse files Browse the repository at this point in the history
Changing form [] to () because of Nagios issues. Fixes.
  • Loading branch information
drewkerrigan committed May 5, 2015
2 parents c678dfd + 4fa2c3b commit 9aa7ed5
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 8 deletions.
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,14 @@ optional arguments:
(key,UnitOfMeasure,Min,Max).
-s, --ssl HTTPS mode.
-f SEPARATOR, --field_separator SEPARATOR
Json Field separator, defaults to "."
Json Field separator, defaults to "." ; Select element
in an array with "(" ")"
-d, --debug Debug mode.
```

Access a specific JSON field by following this syntax: `alpha.beta.gamma(3).theta.omega(0)`
Dots are field separators (changeable), parantheses are for entering arrays.

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).

### Docker Info Example Plugin
Expand Down
19 changes: 12 additions & 7 deletions check_http_json.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ class JsonHelper:
def __init__(self, json_data, separator):
self.data = json_data
self.separator = separator
self.arrayOpener = '('
self.arrayCloser = ')'

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

def getSubArrayElement(self, key, data):
subElemKey = key[:key.find('[')]
index = int(key[key.find('[') + 1:key.find(']')])
remainingKey = key[key.find('].') + 2:]
subElemKey = key[:key.find(self.arrayOpener)]
index = int(key[key.find(self.arrayOpener) + 1:key.find(self.arrayCloser)])
remainingKey = key[key.find(self.arrayCloser + self.separator) + 2:]
if key.find(self.arrayCloser + self.separator) == -1:
remainingKey = key[key.find(self.arrayCloser) + 1:]

if subElemKey in data:
if index < len(data[subElemKey]):
return self.get(remainingKey, data[subElemKey][index])
Expand All @@ -81,16 +86,16 @@ def get(self, key, temp_data=''):
if len(key) <= 0:
return data

if key.find(self.separator) != -1 and key.find('[') != -1 :
if key.find(self.separator) < key.find('[') :
if key.find(self.separator) != -1 and key.find(self.arrayOpener) != -1 :
if key.find(self.separator) < key.find(self.arrayOpener) :
return self.getSubElement(key, data)
else:
return self.getSubArrayElement(key, data)
else:
if key.find(self.separator) != -1 :
return self.getSubElement(key, data)
else:
if key.find('[') != -1 :
if key.find(self.arrayOpener) != -1 :
return self.getSubArrayElement(key, data)
else:
if key in data:
Expand Down Expand Up @@ -196,7 +201,7 @@ def parseArgs():
More information about Range format and units of measure for nagios can be found at https://nagios-plugins.org/doc/guidelines.html\
Additional formats for this parameter are: (key), (key,UnitOfMeasure), (key,UnitOfMeasure,Min,Max).')
parser.add_argument('-s', '--ssl', action='store_true', help='HTTPS mode.')
parser.add_argument('-f', '--field_separator', dest='separator', help='Json Field separator, defaults to "."')
parser.add_argument('-f', '--field_separator', dest='separator', help='Json Field separator, defaults to "." ; Select element in an array with "(" ")"')
parser.add_argument('-d', '--debug', action='store_true', help='Debug mode.')

return parser.parse_args()
Expand Down

0 comments on commit 9aa7ed5

Please sign in to comment.