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 # AUTO-DETECTION JOBS
newsblur: app_servers:
name: "NewsBlur Data" # the JOB's name as it will appear on the dashboard name: "app servers" # the JOB's name as it will appear on the dashboard
update_every: 1 # the JOB's data collection frequency update_every: 1 # the JOB's data collection frequency
priority: 60000 # the JOB's order on the dashboard 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 from bases.FrameworkServices.SimpleService import SimpleService
import os import os
import requests import requests
class Monitor():
MONITOR_URL = os.getenv("MONITOR_URL") MONITOR_URL = os.getenv("MONITOR_URL")
if MONITOR_URL == "https://haproxy:443/monitor": if MONITOR_URL == "https://haproxy:443/monitor":
verify = False verify = False
else: else:
verify = False verify = False
def __init__(self):
endpoints = { endpoints = {
"app_servers": "/app-servers", "app_servers": "/app-servers",
"app_times": "/app-times", "app_times": "/app-times",
"classifiers": "/classifiers", "classifiers": "/classifiers",
"db_times": "/db-times", "db_times": "/db-times",
"errors": "/errors", "errors": "/errors",
"feed_counts": "/feed-counts", "feed_counts": "/feed-counts",
"feeds": "/feeds", "feeds": "/feeds",
"load_times": "/load-times", "load_times": "/load-times",
"stories": "/stories", "stories": "/stories",
"task_codes": "/task-codes", "task_codes": "/task-codes",
"task_pipeline": "/task-pipeline", "task_pipeline": "/task-pipeline",
"task_servers": "/task-servers", "task_servers": "/task-servers",
"task_times": "/task-times", "task_times": "/task-times",
"updates": "/updates", "updates": "/updates",
"users": "/users", "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']
]
}
} }
def call_monitor(endpoint):
uri = MONITOR_URL + endpoint
res = requests.get(uri, verify=verify)
return res.json()
class Service(SimpleService): class Service(SimpleService):
def __init__(self, configuration=None, name=None): def __init__(self, configuration=None, name=None):
SimpleService.__init__(self, configuration=configuration, name=name) SimpleService.__init__(self, configuration=configuration, name=name)
self.order = ORDER self.order = [
self.definitions = CHARTS "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.random = SystemRandom()
self.monitor = Monitor()
@staticmethod @staticmethod
def check(): def check():
return True return True
def get_data(self): def get_data(self):
data = {}
api_data = call_monitor(endpoints['app_servers'])
data = dict() for key in call_monitor(endpoints['app_servers']).keys():
charts = { dimension_id = key
"app-servers": "app servers total",
"app-times": "app times total",
"classifiers": "classifiers feeds"
}
for chart, dimension_id in charts.items():
if dimension_id not in self.charts[chart]: if dimension_id not in self.charts['app-servers']:
self.charts[chart].add_dimension([dimension_id]) self.charts['app-servers'].add_dimension([dimension_id])
data[dimension_id] = self.random.randint(0, 100) data[dimension_id] = api_data[dimension_id]
return data
return data