1# 2# Copyright (c) 2014 NSONE, Inc. 3# 4# License under The MIT License (MIT). See LICENSE in project root. 5# 6 7from ns1.rest.monitoring import Monitors 8 9 10class MonitorException(Exception): 11 pass 12 13 14class Monitor(object): 15 16 """ 17 High level object representing a Monitor 18 """ 19 20 def __init__(self, config, data=None): 21 """ 22 Create a new high level Monitor object 23 24 :param ns1.config.Config config: config object 25 """ 26 self._rest = Monitors(config) 27 self.config = config 28 if data: 29 self.data = data 30 else: 31 self.data = None 32 33 def __repr__(self): 34 return "<Monitor monitor=%s with id=%s>" % ( 35 self.data["name"], 36 self.data["id"], 37 ) 38 39 def __getitem__(self, item): 40 return self.data.get(item, None) 41 42 def reload(self, callback=None, errback=None): 43 """ 44 Reload monitor data from the API. 45 """ 46 return self.load(reload=True, callback=callback, errback=errback) 47 48 def load(self, callback=None, errback=None, reload=False): 49 """ 50 Load monitor data from the API. 51 """ 52 if not reload and self.data: 53 raise MonitorException("monitor already loaded") 54 55 def success(result, *args): 56 self.data = result 57 if callback: 58 return callback(self) 59 else: 60 return self 61 62 return self._rest.retrieve( 63 self.data["id"], callback=success, errback=errback 64 ) 65 66 def delete(self, callback=None, errback=None): 67 """ 68 Delete the monitor 69 """ 70 return self._rest.delete( 71 self.data["id"], callback=callback, errback=errback 72 ) 73 74 def update(self, callback=None, errback=None, **kwargs): 75 """ 76 Update monitor configuration. Pass a list of keywords and their values to 77 update. 78 """ 79 if not self.data: 80 raise MonitorException("monitor not loaded") 81 82 def success(result, *args): 83 self.data = result 84 if callback: 85 return callback(self) 86 else: 87 return self 88 89 return self._rest.update( 90 self.data["id"], {}, callback=success, errback=errback, **kwargs 91 ) 92 93 def create(self, callback=None, errback=None, **kwargs): 94 """ 95 Create a new monitoring job. Pass a list of keywords and their values to 96 configure 97 """ 98 if self.data: 99 raise MonitorException("monitor already loaded") 100 101 def success(result, *args): 102 self.data = result 103 if callback: 104 return callback(self) 105 else: 106 return self 107 108 return self._rest.create( 109 {}, callback=success, errback=errback, **kwargs 110 ) 111