replace api call for service states
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
- pip3 install requests
|
||||
"""
|
||||
|
||||
__version__ = '0.2.0'
|
||||
__version__ = '0.3.0'
|
||||
__author__ = 'anima'
|
||||
|
||||
# imports
|
||||
@@ -72,9 +72,13 @@ class SwarmpitAPI:
|
||||
return self.__query('stats')
|
||||
|
||||
def tasks(self):
|
||||
"""Task list - aka running services"""
|
||||
"""Task list"""
|
||||
return self.__query('tasks')
|
||||
|
||||
def services(self):
|
||||
"""Service list"""
|
||||
return self.__query('services')
|
||||
|
||||
|
||||
#
|
||||
# Check Swarm Cores
|
||||
@@ -109,15 +113,14 @@ class DockerSwarmServiceStatesResource(nagiosplugin.Resource):
|
||||
Returns:
|
||||
Generator[nagisplugin.Metric]: multiple metric elements (yield)
|
||||
"""
|
||||
response = self.api.tasks()
|
||||
response = self.api.services()
|
||||
|
||||
for service in response:
|
||||
data = dict()
|
||||
data['name'] = service['serviceName']
|
||||
data['image'] = service['repository']['image']
|
||||
data['state'] = service['state']
|
||||
data['desiredState'] = service['desiredState']
|
||||
data['error'] = service['status']['error']
|
||||
data['status'] = service['status']['tasks']
|
||||
yield nagiosplugin.Metric(name='docker_service', value=data, context='docker_service')
|
||||
|
||||
|
||||
@@ -126,11 +129,11 @@ class DockerSwarmServiceStatesContext(nagiosplugin.Context):
|
||||
super().__init__(name, fmt_metric='{name} is', result_cls=DockerSwarmServiceStatesResult)
|
||||
|
||||
def evaluate(self, metric, resource):
|
||||
if metric.value['state'] == metric.value['desiredState']:
|
||||
if metric.value['error'] == None:
|
||||
return self.result_cls(nagiosplugin.Ok, "ok", metric)
|
||||
else:
|
||||
if metric.value['state'] in ['running']:
|
||||
if metric.value['status']['running'] < metric.value['status']['total']:
|
||||
return self.result_cls(nagiosplugin.Warn, "warning", metric)
|
||||
else:
|
||||
return self.result_cls(nagiosplugin.Ok, "ok", metric)
|
||||
else:
|
||||
return self.result_cls(nagiosplugin.Critical, "critical", metric)
|
||||
|
||||
@@ -139,13 +142,13 @@ class DockerSwarmServiceStatesContext(nagiosplugin.Context):
|
||||
|
||||
class DockerSwarmServiceStatesResult(nagiosplugin.Result):
|
||||
def __str__(self):
|
||||
if self.metric.value['state'] == self.metric.value['desiredState']:
|
||||
if self.metric.value['error'] == None:
|
||||
if self.metric.value['state'] in ['running']:
|
||||
if self.metric.value['status']['running'] < self.metric.value['status']['total']:
|
||||
return f'Service {self.metric.value["name"]} ({self.metric.value["image"]}) is {self.metric.value["state"]} with {self.metric.value['status']['running']} of {self.metric.value['status']['total']} replicas'
|
||||
else:
|
||||
return f'Service {self.metric.value["name"]} ({self.metric.value["image"]}) is {self.metric.value["state"]}'
|
||||
else:
|
||||
return f'Service {self.metric.value["name"]} ({self.metric.value["image"]}) is {self.metric.value["state"]} with error {self.metric.value["error"]}'
|
||||
else:
|
||||
return f'Service {self.metric.value["name"]} ({self.metric.value["image"]}) is {self.metric.value["state"]} (desired: {self.metric.value["desiredState"]}) with error {self.metric.value["error"]}'
|
||||
return f'Service {self.metric.value["name"]} ({self.metric.value["image"]}) is {self.metric.value["state"]}'
|
||||
|
||||
|
||||
#
|
||||
@@ -215,7 +218,6 @@ def main():
|
||||
|
||||
# dice which check will be run bases on check_mode
|
||||
api = SwarmpitAPI(host=args.api_host, token=args.api_token, port=args.api_port, ssl=args.api_ssl)
|
||||
api.tasks()
|
||||
match args.check_mode:
|
||||
case 'load':
|
||||
check = nagiosplugin.Check(
|
||||
|
||||
Reference in New Issue
Block a user