Actions API: Implemented downtimes + ack deletes
Change-Id: I0d6772968f22dea9fe5b21d3e3480c4d5828c714
This commit is contained in:
parent
60058195b0
commit
052ac2fde3
@ -15,10 +15,12 @@
|
||||
from pecan import rest
|
||||
|
||||
from surveil.api.controllers.v2.actions import acknowledge
|
||||
from surveil.api.controllers.v2.actions import downtime
|
||||
|
||||
|
||||
class ActionsController(rest.RestController):
|
||||
acknowledge = acknowledge.AcknowledgeController()
|
||||
downtime = downtime.DowntimeController()
|
||||
# externalcommands = ExternalCommandsController()
|
||||
# engine = EngineController()
|
||||
pass
|
||||
|
@ -37,4 +37,20 @@ class AcknowledgeController(rest.RestController):
|
||||
data=data
|
||||
)
|
||||
|
||||
return info.Info(message='Acknowledgement received. %s' % data)
|
||||
return info.Info(message='Acknowledgement received.')
|
||||
|
||||
@wsme_pecan.wsexpose(info.Info,
|
||||
body=acknowledgement.Acknowledgement,
|
||||
status_code=200)
|
||||
def delete(self, ack):
|
||||
"""Delete a host/service acknowledgement."""
|
||||
|
||||
data = ack.as_dict()
|
||||
data.update({'action': 'delete'})
|
||||
|
||||
requests.post(
|
||||
pecan.request.ws_arbiter_url + "/acknowledge",
|
||||
data=data
|
||||
)
|
||||
|
||||
return info.Info(message='Acknowledgement received.')
|
||||
|
56
surveil/api/controllers/v2/actions/downtime.py
Normal file
56
surveil/api/controllers/v2/actions/downtime.py
Normal file
@ -0,0 +1,56 @@
|
||||
# Copyright 2015 - Savoir-Faire Linux inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import pecan
|
||||
from pecan import rest
|
||||
import requests
|
||||
import wsmeext.pecan as wsme_pecan
|
||||
|
||||
from surveil.api.datamodel.actions import downtime
|
||||
from surveil.api.datamodel import info
|
||||
|
||||
|
||||
class DowntimeController(rest.RestController):
|
||||
|
||||
@wsme_pecan.wsexpose(info.Info,
|
||||
body=downtime.Downtime,
|
||||
status_code=200)
|
||||
def post(self, dt):
|
||||
"""Put a host/service in downtime."""
|
||||
|
||||
data = dt.as_dict()
|
||||
data.update({'action': 'add'})
|
||||
|
||||
requests.post(
|
||||
pecan.request.ws_arbiter_url + "/downtime",
|
||||
data=data
|
||||
)
|
||||
|
||||
return info.Info(message='Downtime received.')
|
||||
|
||||
@wsme_pecan.wsexpose(info.Info,
|
||||
body=downtime.Downtime,
|
||||
status_code=200)
|
||||
def delete(self, dt):
|
||||
"""Delete a host/service downtime."""
|
||||
|
||||
data = dt.as_dict()
|
||||
data.update({'action': 'delete'})
|
||||
|
||||
requests.post(
|
||||
pecan.request.ws_arbiter_url + "/downtime",
|
||||
data=data
|
||||
)
|
||||
|
||||
return info.Info(message='Downtime received.')
|
63
surveil/api/datamodel/actions/downtime.py
Normal file
63
surveil/api/datamodel/actions/downtime.py
Normal file
@ -0,0 +1,63 @@
|
||||
# Copyright 2015 - Savoir-Faire Linux inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import wsme
|
||||
import wsme.types as wtypes
|
||||
|
||||
from surveil.api.datamodel import types
|
||||
|
||||
|
||||
class Downtime(types.Base):
|
||||
host_name = wsme.wsattr(wtypes.text, mandatory=True)
|
||||
"""The name of the host"""
|
||||
|
||||
service_description = wsme.wsattr(wtypes.text, mandatory=False)
|
||||
"""Ther service description"""
|
||||
|
||||
time_stamp = wsme.wsattr(wtypes.text, mandatory=False)
|
||||
"""Time stamp for the downtime"""
|
||||
|
||||
start_time = wsme.wsattr(int, mandatory=False)
|
||||
"""When to start the downtime"""
|
||||
|
||||
end_time = wsme.wsattr(int, mandatory=False)
|
||||
"""When to end the downtime"""
|
||||
|
||||
fixed = wsme.wsattr(int, mandatory=False)
|
||||
|
||||
duration = wsme.wsattr(int, mandatory=False)
|
||||
"""The duration of the downtime, in seconds"""
|
||||
|
||||
trigger_id = wsme.wsattr(int, mandatory=False)
|
||||
|
||||
author = wsme.wsattr(wtypes.text, mandatory=False)
|
||||
"""The author of the downtime"""
|
||||
|
||||
comment = wsme.wsattr(wtypes.text, mandatory=False)
|
||||
"""Comment for the downtime"""
|
||||
|
||||
@classmethod
|
||||
def sample(cls):
|
||||
return cls(
|
||||
host_name="localhost",
|
||||
service_description="ws-arbiter",
|
||||
time_stamp=1430150469,
|
||||
start_time=1430150469,
|
||||
end_time=1430150469,
|
||||
fixed=1,
|
||||
duration=86400,
|
||||
trigger_id=0,
|
||||
author='aviau',
|
||||
comment='No comment.'
|
||||
)
|
@ -20,7 +20,7 @@ from surveil.tests.api import functionalTest
|
||||
class TestAcknowledgeController(functionalTest.FunctionalTest):
|
||||
|
||||
@httpretty.activate
|
||||
def test_acknowledge(self):
|
||||
def test_acknowledge_add(self):
|
||||
httpretty.register_uri(httpretty.POST,
|
||||
self.ws_arbiter_url + "/acknowledge")
|
||||
|
||||
@ -36,3 +36,21 @@ class TestAcknowledgeController(functionalTest.FunctionalTest):
|
||||
'action=add&host_name=localhost')
|
||||
self.assertEqual(httpretty.last_request().path,
|
||||
'/acknowledge')
|
||||
|
||||
@httpretty.activate
|
||||
def test_acknowledge_delete(self):
|
||||
httpretty.register_uri(httpretty.POST,
|
||||
self.ws_arbiter_url + "/downtime")
|
||||
|
||||
ack = {
|
||||
"host_name": "localhost",
|
||||
}
|
||||
|
||||
response = self.app.delete_json("/v2/actions/downtime/", params=ack)
|
||||
|
||||
self.assertEqual(response.status_int, 200)
|
||||
|
||||
self.assertEqual(httpretty.last_request().body,
|
||||
'duration=86400&action=delete&host_name=localhost')
|
||||
self.assertEqual(httpretty.last_request().path,
|
||||
'/downtime')
|
||||
|
58
surveil/tests/api/controllers/v2/actions/test_downtime.py
Normal file
58
surveil/tests/api/controllers/v2/actions/test_downtime.py
Normal file
@ -0,0 +1,58 @@
|
||||
# Copyright 2015 - Savoir-Faire Linux inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import httpretty
|
||||
|
||||
from surveil.tests.api import functionalTest
|
||||
|
||||
|
||||
class TestDowntimeController(functionalTest.FunctionalTest):
|
||||
|
||||
@httpretty.activate
|
||||
def test_downtime_post(self):
|
||||
httpretty.register_uri(httpretty.POST,
|
||||
self.ws_arbiter_url + "/downtime")
|
||||
|
||||
dt = {
|
||||
"host_name": "localhost",
|
||||
"duration": 86400
|
||||
}
|
||||
|
||||
response = self.app.post_json("/v2/actions/downtime/", params=dt)
|
||||
|
||||
self.assertEqual(response.status_int, 200)
|
||||
|
||||
self.assertEqual(httpretty.last_request().body,
|
||||
'duration=86400&action=add&host_name=localhost')
|
||||
self.assertEqual(httpretty.last_request().path,
|
||||
'/downtime')
|
||||
|
||||
@httpretty.activate
|
||||
def test_downtime_delete(self):
|
||||
httpretty.register_uri(httpretty.POST,
|
||||
self.ws_arbiter_url + "/downtime")
|
||||
|
||||
dt = {
|
||||
"host_name": "localhost",
|
||||
"duration": 86400
|
||||
}
|
||||
|
||||
response = self.app.delete_json("/v2/actions/downtime/", params=dt)
|
||||
|
||||
self.assertEqual(response.status_int, 200)
|
||||
|
||||
self.assertEqual(httpretty.last_request().body,
|
||||
'duration=86400&action=delete&host_name=localhost')
|
||||
self.assertEqual(httpretty.last_request().path,
|
||||
'/downtime')
|
Loading…
x
Reference in New Issue
Block a user