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