def check(self, instance):
host, port, user, password, connect_timeout, server_name = self._get_config(instance)
tags = instance.get('tags', [])
tags = tags + ['server_name:%s' % server_name]
service_check_tags = tags + ['url:%s' % host]
version = self._get_version(instance, service_check_tags)
usrPass = user + ":" + password
b64Val = base64.b64encode(usrPass)
if version > 2:
checkURL = host + ":" + str(port) + "/db/data/transaction/commit"
else:
checkURL = host + ":" + str(port) + "/v1/service/metrics"
# Neo specific
# Create payload using built-in Neo4j queryJmx stored procedure
try:
payload = {"statements" : [{"statement" : "CALL dbms.queryJmx('org.neo4j:*') yield attributes with keys(attributes) as k, attributes unwind k as row return row, attributes[row]['value'];"}]}
headers_sent = {'Content-Type':'application/json','Authorization':'Basic ' + b64Val + '','Content-Type':'application/json'}
r = requests.post(checkURL, data=json.dumps(payload),headers=headers_sent)
except (socket.timeout, socket.error, HttpLib2Error) as e:
msg = "Unable to fetch Neo4j stats: %s" % str(e)
self._critical_service_check(service_check_tags, msg)
raise
if r.status_code != 200:
msg = "nexpected status of {0} when fetching Neo4j stats, response: {1}"
msg = msg.format(r.status_code, r.text)
self._critical_service_check(service_check_tags, msg)
r.raise_for_status()
stats = r.json()
self.service_check(
self.SERVICE_CHECK_NAME, AgentCheck.OK, tags=service_check_tags)
for doc in stats['results'][0]['data']:
if doc['row'][0].lower() in self.keys:
self.gauge(self.display.get(doc['row'][0].lower(),""), doc['row'][1], tags=tags)
评论列表
文章目录