get app servers monitor working, but the monitor will stop collecting data when it needs to handle a request on nb.local.com.... this needs a bugfix

This commit is contained in:
Jonathan Math 2021-04-07 10:15:51 -05:00
parent 20fccca17c
commit 9d9dbff224
2 changed files with 49 additions and 79 deletions

View file

@ -68,8 +68,8 @@
# ----------------------------------------------------------------------
# AUTO-DETECTION JOBS
newsblur:
name: "NewsBlur Data" # the JOB's name as it will appear on the dashboard
app_servers:
name: "app servers" # the JOB's name as it will appear on the dashboard
update_every: 1 # the JOB's data collection frequency
priority: 60000 # the JOB's order on the dashboard

View file

@ -2,98 +2,68 @@ from random import SystemRandom
from bases.FrameworkServices.SimpleService import SimpleService
import os
import requests
class Monitor():
MONITOR_URL = os.getenv("MONITOR_URL")
if MONITOR_URL == "https://haproxy:443/monitor":
verify = False
else:
verify = False
MONITOR_URL = os.getenv("MONITOR_URL")
if MONITOR_URL == "https://haproxy:443/monitor":
verify = False
else:
verify = False
def __init__(self):
endpoints = {
"app_servers": "/app-servers",
"app_times": "/app-times",
"classifiers": "/classifiers",
"db_times": "/db-times",
"errors": "/errors",
"feed_counts": "/feed-counts",
"feeds": "/feeds",
"load_times": "/load-times",
"stories": "/stories",
"task_codes": "/task-codes",
"task_pipeline": "/task-pipeline",
"task_servers": "/task-servers",
"task_times": "/task-times",
"updates": "/updates",
"users": "/users",
}
for name, endpoint in endpoints.items():
setattr(self, name, self.call_monitor(endpoint))
def call_monitor(self, endpoint):
uri = self.MONITOR_URL + endpoint
res = requests.get(uri, verify=self.verify)
return res.json()
priority = 90000
ORDER = [
'app-servers',
'app-times',
'classifiers'
]
CHARTS = {
'app-servers': {
# 'options': [name, title, units, family, context, charttype]
'options': [None, 'App Server Page Loads', None, None, 'context', 'stacked'], # line indicates that it is a line graph
'lines': [
['app servers total'] #must be a valid key in 'get_data()'s return
]
},
'app-times': {
'options': [None, 'NewsBlur App Times', None, None, 'context', 'stacked'], # line indicates that it is a line graph
'lines': [
['app times total']
]
},
'classifiers': {
'options': [None, 'Classifiers', None, None, 'context', 'stacked'], # line indicates that it is a line graph
'lines': [
['classifiers feeds']
]
}
endpoints = {
"app_servers": "/app-servers",
"app_times": "/app-times",
"classifiers": "/classifiers",
"db_times": "/db-times",
"errors": "/errors",
"feed_counts": "/feed-counts",
"feeds": "/feeds",
"load_times": "/load-times",
"stories": "/stories",
"task_codes": "/task-codes",
"task_pipeline": "/task-pipeline",
"task_servers": "/task-servers",
"task_times": "/task-times",
"updates": "/updates",
"users": "/users",
}
def call_monitor(endpoint):
uri = MONITOR_URL + endpoint
res = requests.get(uri, verify=verify)
return res.json()
class Service(SimpleService):
def __init__(self, configuration=None, name=None):
SimpleService.__init__(self, configuration=configuration, name=name)
self.order = ORDER
self.definitions = CHARTS
self.order = [
"app-servers"
]
self.definitions = {
'app-servers': {
# 'options': [name, title, units, family, context, charttype]
'options': [None, 'App Server Page Loads', None, None, 'context', 'stacked'], # line indicates that it is a line graph
'lines': [[key] for key in call_monitor(endpoints['app_servers'])] #must be a valid key in 'get_data()'s return
}
}
self.random = SystemRandom()
self.monitor = Monitor()
@staticmethod
def check():
return True
def get_data(self):
data = {}
api_data = call_monitor(endpoints['app_servers'])
data = dict()
charts = {
"app-servers": "app servers total",
"app-times": "app times total",
"classifiers": "classifiers feeds"
}
for chart, dimension_id in charts.items():
for key in call_monitor(endpoints['app_servers']).keys():
dimension_id = key
if dimension_id not in self.charts[chart]:
self.charts[chart].add_dimension([dimension_id])
if dimension_id not in self.charts['app-servers']:
self.charts['app-servers'].add_dimension([dimension_id])
data[dimension_id] = self.random.randint(0, 100)
return data
data[dimension_id] = api_data[dimension_id]
return data