Initial release
This commit is contained in:
commit
d777f715c7
|
|
@ -0,0 +1,3 @@
|
||||||
|
/config.yaml
|
||||||
|
/.idea/
|
||||||
|
/.venv/
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
server:
|
||||||
|
token: TACTICAL_API_TOKEN
|
||||||
|
url: https://api.tactical.example.com/
|
||||||
|
verify_ssl: True # TODO Implement this
|
||||||
|
telegraf:
|
||||||
|
host: localhost
|
||||||
|
port: 8092
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
pytelegraf>=0.3.3
|
||||||
|
PyYAML>=6.0
|
||||||
|
|
@ -0,0 +1,99 @@
|
||||||
|
import urllib.request as urllib
|
||||||
|
import json
|
||||||
|
from telegraf.client import TelegrafClient
|
||||||
|
import yaml
|
||||||
|
from logging import log
|
||||||
|
|
||||||
|
with open('config.yaml') as f:
|
||||||
|
config = yaml.load(f, Loader=yaml.FullLoader)
|
||||||
|
|
||||||
|
URL = config['server']['url']
|
||||||
|
TOKEN = config['server']['token']
|
||||||
|
VERIFY_SSL = config['server']['verify_ssl']
|
||||||
|
|
||||||
|
|
||||||
|
class Api(object):
|
||||||
|
"""Handle all RMM api Connections"""
|
||||||
|
|
||||||
|
def __init__(self, url, apikey):
|
||||||
|
self.url = url
|
||||||
|
self.apikey = apikey
|
||||||
|
|
||||||
|
def get_request(self, url):
|
||||||
|
"""
|
||||||
|
Handles adding auth ticket to API request
|
||||||
|
:param url: url to create request to
|
||||||
|
:return: request to handle with urlopen
|
||||||
|
"""
|
||||||
|
req = urllib.Request(url)
|
||||||
|
req.add_header('X-API-KEY', self.apikey)
|
||||||
|
return req
|
||||||
|
|
||||||
|
def get_agent_list(self):
|
||||||
|
url = self.url + 'agents'
|
||||||
|
response = json.load(urllib.urlopen(self.get_request(url)))
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
class Agent(object):
|
||||||
|
|
||||||
|
def __init__(self, agent_json, api_object):
|
||||||
|
self.api = api_object
|
||||||
|
self.agent_json = agent_json
|
||||||
|
self.agent_id = agent_json['agent_id']
|
||||||
|
self.hostname = agent_json['hostname']
|
||||||
|
self.site_name = agent_json['site_name']
|
||||||
|
self.client_name = agent_json['client_name']
|
||||||
|
self.monitoring_type = agent_json['monitoring_type']
|
||||||
|
self.description = agent_json['description']
|
||||||
|
self.status = agent_json['status']
|
||||||
|
self.details = self.download_agent_details()
|
||||||
|
self.wmi_details = self.extract_wmi_details()
|
||||||
|
|
||||||
|
def download_agent_details(self):
|
||||||
|
url = self.api.url + 'agents' + '/' + str(self.agent_id)
|
||||||
|
response = urllib.urlopen(self.api.get_request(url))
|
||||||
|
return json.load(response)
|
||||||
|
|
||||||
|
def extract_wmi_details(self):
|
||||||
|
try:
|
||||||
|
wmi_details = self.details['wmi_detail']
|
||||||
|
except KeyError:
|
||||||
|
log(30, "No WMI details in this agent, continuing")
|
||||||
|
wmi_details = {}
|
||||||
|
pass
|
||||||
|
wmi_dict = {}
|
||||||
|
for k, v in wmi_details.items():
|
||||||
|
try:
|
||||||
|
value = v[0][0]
|
||||||
|
except IndexError:
|
||||||
|
value = dict()
|
||||||
|
wmi_dict[k] = value
|
||||||
|
return wmi_dict
|
||||||
|
|
||||||
|
def get_agent_metrics(self):
|
||||||
|
new_values = {'agent_id': self.agent_id, 'hostname': self.hostname, 'site_name': self.site_name,
|
||||||
|
'client_name': self.client_name, 'status': self.status}
|
||||||
|
agent_details = self.wmi_details
|
||||||
|
agent_details['agent_info'] = new_values
|
||||||
|
return agent_details
|
||||||
|
|
||||||
|
def send_agent_metrics(self, telegraf_client_object):
|
||||||
|
for k, v in self.get_agent_metrics().items():
|
||||||
|
telegraf_client_object.metric(str(k), v,
|
||||||
|
tags={
|
||||||
|
'hdn': str(str(self.hostname) + '/' + str(self.client_name) + '/' + str(
|
||||||
|
self.site_name))})
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
params = [self.agent_id, self.hostname, self.site_name, self.client_name, self.status]
|
||||||
|
return str(params)
|
||||||
|
|
||||||
|
|
||||||
|
api = Api(URL, TOKEN)
|
||||||
|
agent_list = api.get_agent_list()
|
||||||
|
telegraf_client = TelegrafClient(host=config['telegraf']['host'], port=config['telegraf']['port'])
|
||||||
|
|
||||||
|
for agent in agent_list:
|
||||||
|
a = Agent(agent, api)
|
||||||
|
a.send_agent_metrics(telegraf_client)
|
||||||
Loading…
Reference in New Issue