def _zlogin(self): try: self.zapi = ZenossAPI(Server=self.server) except Exception: result, error = self.Error(sys.exc_info()) return Result(result=result, error=error)
class ZenossServer(GenericServer): TYPE = 'Zenoss' zapi = None SEVERITY_MAP = {0: 'OK', 1: 'UNKNOWN', 2: 'UNKNOWN', 3: 'WARNING', 4: 'WARNING', 5: 'CRITICAL'} MENU_ACTIONS = ['Monitor', 'Acknowledge'] def __init__(self, **kwds): GenericServer.__init__(self, **kwds) # Prepare all urls needed by nagstamon self.urls = {} self.statemap = {} self.server = Server() if ":" in conf.servers[self.get_name()].monitor_url: self.server.server_url, self.server.server_port = conf.servers[self.get_name()].monitor_url.split(':') else: self.server.server_url = conf.servers[self.get_name()].monitor_url self.server.server_port = 8080 #the default is 8080 self.server.username = conf.servers[self.get_name()].username self.server.password = conf.servers[self.get_name()].password # Entries for monitor default actions in context menu self.MENU_ACTIONS = ["Acknowledge"] def _zlogin(self): try: self.zapi = ZenossAPI(Server=self.server) except Exception: result, error = self.Error(sys.exc_info()) return Result(result=result, error=error) def _get_status(self): nagitems = {"services":[], "hosts":[]} self.new_hosts = dict() try: hosts = self._get_all_events() if 'events' in hosts: hosts = hosts['events'] for host in hosts: n = dict() n['evid'] = host['evid'] n['host'] = host['device']['text'] n['service'] = host['eventClass']['text'] n['status'] = self.SEVERITY_MAP.get(host['severity']) n['last_check'] = host['lastTime'] duration = self._calc_duration(host['firstTime'], host['lastTime']) if (duration == None): continue #Zenoss needs a length to cause an error n['duration'] = duration n["status_information"] = host['message'] n["attempt"] = str(host['count'])+"/1" # needs a / with a number on either side to work n["passiveonly"] = False n["notifications_disabled"] = False n["flapping"] = False n["acknowledged"] = (host['eventState'] == 'Acknowledged') n["scheduled_downtime"] = False nagitems["hosts"].append(n) new_host = n["host"] if not new_host in self.new_hosts: self.new_hosts[new_host] = GenericHost() self.new_hosts[new_host].name = new_host if not new_host in self.new_hosts[new_host].services: new_service = new_host self.new_hosts[new_host].services[new_service] = GenericService() self.new_hosts[new_host].services[new_service].host = new_host self.new_hosts[new_host].services[new_service].evid = n['evid'] self.new_hosts[new_host].services[new_service].name = n["service"] self.new_hosts[new_host].services[new_service].server = self.name self.new_hosts[new_host].services[new_service].status = n["status"] self.new_hosts[new_host].services[new_service].last_check = n["last_check"] self.new_hosts[new_host].services[new_service].duration = n["duration"] self.new_hosts[new_host].services[new_service].status_information= n["status_information"].encode("utf-8") self.new_hosts[new_host].services[new_service].attempt = n["attempt"] self.new_hosts[new_host].services[new_service].passiveonly = n["passiveonly"] self.new_hosts[new_host].services[new_service].notifications_disabled = n["notifications_disabled"] self.new_hosts[new_host].services[new_service].flapping = n["flapping"] self.new_hosts[new_host].services[new_service].acknowledged = n["acknowledged"] self.new_hosts[new_host].services[new_service].scheduled_downtime = n["scheduled_downtime"] del n except: self.isChecking = False result, error = self.Error(sys.exc_info()) print(traceback.format_exc()) return Result(result=result, error=error) del nagitems return Result(error="") def get_username(self): return str(self.server.username) def get_password(self): return str(self.server.password) def set_acknowledge(self, info_dict): if info_dict['host'] in self.hosts: evid = self.hosts[info_dict['host']].services[info_dict['host']].evid self.zapi.set_event_ack(evid) def _open_browser(self, url): webbrowser.open(self.monitor_url) def _get_all_events(self): if self.zapi is None: self._zlogin() events = self.zapi.get_event() return events ##http://stackoverflow.com/questions/538666/python-format-timedelta-to-string def _calc_duration(self, startStr, endStr): # like: '2016-10-2213: 53: 43' (that day/hour gap..) start = datetime.strptime(startStr, '%Y-%m-%d %H:%M:%S') end = datetime.strptime(endStr, '%Y-%m-%d %H:%M:%S') sec = (int)((end - start).total_seconds()) days, rem = divmod(sec, 60*60*24) hours, rem = divmod(rem, 60*60) mins, sec = divmod(rem, 60) if (days == 0 and hours == 0 and mins == 0 and sec == 0): return None return '%sd %sh %sm %ss' % (days,hours,mins,sec) #Note these methods are invalid for the zenoss api that this uses def set_recheck(self, info_dict): pass def set_downtime(self, host, service, author, comment, fixed, start_time, end_time, hours, minutes): pass def set_submit_check_result(self, info_dict): pass def get_start_end(self, host): pass
def _zlogin(self): self.zapi = ZenossAPI(Server=self.server)
class ZenossServer(GenericServer): TYPE = 'Zenoss' zapi = None SEVERITY_MAP = {0: 'OK', 1: 'UNKNOWN', 2: 'UNKNOWN', 3: 'WARNING', 4: 'CRITICAL', 5: 'CRITICAL'} def __init__(self, **kwds): GenericServer.__init__(self, **kwds) # Prepare all urls needed by nagstamon self.urls = {} self.statemap = {} self.MENU_ACTIONS = ["Recheck", "Acknowledge", "Downtime"] self.server = Server() self.server.server_url, self.server.server_port = conf.servers[self.get_name()].monitor_url.split(':') self.server.username = conf.servers[self.get_name()].username self.server.password = conf.servers[self.get_name()].password # Entries for monitor default actions in context menu self.MENU_ACTIONS = ["Recheck", "Acknowledge", "Downtime"] def _zlogin(self): self.zapi = ZenossAPI(Server=self.server) def _get_status(self): nagitems = {"services":[], "hosts":[]} self.new_hosts = dict() try: hosts = self._get_all_events()['events'] for host in hosts: n = dict() n['host'] = host['device']['text'] n['service'] = host['eventClass']['text'] n['status'] = self.SEVERITY_MAP.get(host['severity']) n['last_check'] = host['lastTime'] n['duration'] = self._calc_duration(host['firstTime'], host['lastTime']) n["status_information"] = host['message'] n["attempt"] = str(host['count'])+"/1"# TODO: n["passiveonly"] = False n["notifications_disabled"] = False n["flapping"] = False n["acknowledged"] = False n["scheduled_downtime"] = False nagitems["hosts"].append(n) new_host = n["host"] if not new_host in self.new_hosts: self.new_hosts[new_host] = GenericHost() self.new_hosts[new_host].name = new_host if not new_host in self.new_hosts[new_host].services: new_service = new_host self.new_hosts[new_host].services[new_service] = GenericService() self.new_hosts[new_host].services[new_service].host = new_host self.new_hosts[new_host].services[new_service].name = n["service"] self.new_hosts[new_host].services[new_service].server = self.name self.new_hosts[new_host].services[new_service].status = n["status"] self.new_hosts[new_host].services[new_service].last_check = n["last_check"] self.new_hosts[new_host].services[new_service].duration = n["duration"] self.new_hosts[new_host].services[new_service].status_information= n["status_information"].encode("utf-8") self.new_hosts[new_host].services[new_service].attempt = n["attempt"] self.new_hosts[new_host].services[new_service].passiveonly = n["passiveonly"] self.new_hosts[new_host].services[new_service].notifications_disabled = n["notifications_disabled"] self.new_hosts[new_host].services[new_service].flapping = n["flapping"] self.new_hosts[new_host].services[new_service].acknowledged = n["acknowledged"] self.new_hosts[new_host].services[new_service].scheduled_downtime = n["scheduled_downtime"] del n except: self.isChecking = False result, error = self.Error(sys.exc_info()) print(traceback.format_exc()) return Result(result=result, error=error) del nagitems return Result(error="") def _get_all_events(self): if self.zapi is None: self._zlogin() events = self.zapi.get_event() return events ##http://stackoverflow.com/questions/538666/python-format-timedelta-to-string def _calc_duration(self, startStr, endStr): # like: '2016-10-2213: 53: 43' (that day/hour gap..) start = datetime.strptime(startStr, '%Y-%m-%d %H:%M:%S') end = datetime.strptime(endStr, '%Y-%m-%d %H:%M:%S') sec = (int)((end - start).total_seconds()) days, rem = divmod(sec, 60*60*24) hours, rem = divmod(rem, 60*60) mins, sec = divmod(rem, 60) return '%sd %sh %sm %ss' % (days,hours,mins,sec)
class ZenossServer(GenericServer): TYPE = 'Zenoss' zapi = None SEVERITY_MAP = { 0: 'OK', 1: 'UNKNOWN', 2: 'UNKNOWN', 3: 'WARNING', 4: 'CRITICAL', 5: 'CRITICAL' } def __init__(self, **kwds): GenericServer.__init__(self, **kwds) # Prepare all urls needed by nagstamon self.urls = {} self.statemap = {} self.MENU_ACTIONS = ["Recheck", "Acknowledge", "Downtime"] self.server = Server() self.server.server_url, self.server.server_port = conf.servers[ self.get_name()].monitor_url.split(':') self.server.username = conf.servers[self.get_name()].username self.server.password = conf.servers[self.get_name()].password # Entries for monitor default actions in context menu self.MENU_ACTIONS = ["Recheck", "Acknowledge", "Downtime"] def _zlogin(self): self.zapi = ZenossAPI(Server=self.server) def _get_status(self): nagitems = {"services": [], "hosts": []} self.new_hosts = dict() try: hosts = self._get_all_events()['events'] for host in hosts: n = dict() n['host'] = host['device']['text'] n['service'] = host['eventClass']['text'] n['status'] = self.SEVERITY_MAP.get(host['severity']) n['last_check'] = host['lastTime'] n['duration'] = self._calc_duration(host['firstTime'], host['lastTime']) n["status_information"] = host['message'] n["attempt"] = str(host['count']) + "/1" # TODO: n["passiveonly"] = False n["notifications_disabled"] = False n["flapping"] = False n["acknowledged"] = False n["scheduled_downtime"] = False nagitems["hosts"].append(n) new_host = n["host"] if not new_host in self.new_hosts: self.new_hosts[new_host] = GenericHost() self.new_hosts[new_host].name = new_host if not new_host in self.new_hosts[new_host].services: new_service = new_host self.new_hosts[new_host].services[ new_service] = GenericService() self.new_hosts[new_host].services[ new_service].host = new_host self.new_hosts[new_host].services[new_service].name = n[ "service"] self.new_hosts[new_host].services[ new_service].server = self.name self.new_hosts[new_host].services[new_service].status = n[ "status"] self.new_hosts[new_host].services[ new_service].last_check = n["last_check"] self.new_hosts[new_host].services[ new_service].duration = n["duration"] self.new_hosts[new_host].services[ new_service].status_information = n[ "status_information"].encode("utf-8") self.new_hosts[new_host].services[new_service].attempt = n[ "attempt"] self.new_hosts[new_host].services[ new_service].passiveonly = n["passiveonly"] self.new_hosts[new_host].services[ new_service].notifications_disabled = n[ "notifications_disabled"] self.new_hosts[new_host].services[ new_service].flapping = n["flapping"] self.new_hosts[new_host].services[ new_service].acknowledged = n["acknowledged"] self.new_hosts[new_host].services[ new_service].scheduled_downtime = n[ "scheduled_downtime"] del n except: self.isChecking = False result, error = self.Error(sys.exc_info()) print(traceback.format_exc()) return Result(result=result, error=error) del nagitems return Result(error="") def _get_all_events(self): if self.zapi is None: self._zlogin() events = self.zapi.get_event() return events ##http://stackoverflow.com/questions/538666/python-format-timedelta-to-string def _calc_duration( self, startStr, endStr): # like: '2016-10-2213: 53: 43' (that day/hour gap..) start = datetime.strptime(startStr, '%Y-%m-%d %H:%M:%S') end = datetime.strptime(endStr, '%Y-%m-%d %H:%M:%S') sec = (int)((end - start).total_seconds()) days, rem = divmod(sec, 60 * 60 * 24) hours, rem = divmod(rem, 60 * 60) mins, sec = divmod(rem, 60) return '%sd %sh %sm %ss' % (days, hours, mins, sec)