def get(self, jwt, host_id, page_id, host_name=None): data = [] # If page_id is None do it the slow way. if page_id is None: # If no host_id is passed in get all hosts. if (host_id is None) and (host_name is None): # This is slow so lets just return an error # hosts = Host.get_all() return jsonify( error=True, msg= "Getting all hosts is slow. Please use the pagination endpoint at ./manage_host/page/" ) elif host_id: if Host.get_by_id(host_id): hosts = [Host.get_by_id(host_id)] else: hosts = [] elif host_name: hosts = [Host.get_by_hostname(host_name)] # Loop over results and get json form of host to return. if len(hosts) > 0: for host in hosts: temp_data = host.serialize() temp_data_services = Service.get_all_by_host_name( host.host_name) temp_data["all_services"] = [] for tds in temp_data_services: temp_data["all_services"].append(tds.serialize()) data.append(temp_data) pass return jsonify(data=data) else: return jsonify(error=True, msg="Host does not exist.") else: per_page = 10 totalhosts = Host.get_count() total_pages = floor(totalhosts / per_page) hosts = Host.get_by_page((page_id * per_page), per_page) if hosts is not None: for host in hosts: temp_data = host.serialize() temp_data_services = Service.get_all_by_host_name( host.host_name) temp_data["all_services"] = [] for tds in temp_data_services: temp_data["all_services"].append(tds.serialize()) data.append(temp_data) return jsonify({ "data": data, "totalhosts": totalhosts, "this_page": page_id, "more": (page_id < total_pages) })
def delete(self, jwt, host_name, host_id, page_id): # if host_name is None: # return jsonify(error=True) if host_id is not None: host = Host.get_by_id(host_id) elif host_name is not None: host = Host.get_by_hostname(host_name) else: return jsonify(error=True) if host is None: return jsonify(error=True) else: try: host_id = host.id relations = HostService.query.filter_by(host_id=host_id).all() relation_service_ids = [] if relations is not None: for relation in relations: relation_service_ids.append(relation.service_id) relationgroups = HostgroupHost.query.filter_by( host_id=host_id).all() relation_hostgroup_ids = [] if relationgroups is not None: for relationgroup in relationgroups: relation_hostgroup_ids.append( relationgroup.hostgroup_id) # delete all relations Host.delete_all_host_service_relations(host_id) Host.delete_all_contact_relations(host_id) Host.delete_all_contactgroup_relations(host_id) Host.delete_all_host_template_relations(host_id) Host.delete_all_hostgroup_host_relations(host_id) host = Host.get_by_id(host_id) deleteNagiosConfigFile(host) host.delete() for relation in relation_service_ids: service = Service.get_by_id(relation) if not service: continue hosts = HostService.get_all_by_sevice(service.id) if hosts: host_ids = [h.id for h in hosts] host_names_str = ','.join(host_ids) service.host_name = host_names_str tmp_check_interval = service.check_interval service.check_interval = round( int(service.check_interval) / 60, 1) writeNagiosServicesConfigFile(service) service.check_interval = tmp_check_interval service.update() else: deleteNagiosServicesConfigFile(service) service.delete() for relation in relation_hostgroup_ids: host_group = Hostgroup.get_by_id(relation) if not host_group: continue host_group_hosts = HostgroupHost.get_all_by_hostgroup( host_group.id) if host_group_hosts: host_ids = [h.id for h in host_group_hosts] host_names_str = ','.join(host_ids) host_group.members = host_names_str writeNagiosHostgroupsConfigFile(host_group) host_group.update() else: deleteNagiosHostgroupsConfigFile(host_group) host_group.delete() if not restartNagios(): syncNagiosAllConfigWithDb() return jsonify(error=True, msg="Invalid process") return jsonify(error=False) except Exception as e: syncNagiosAllConfigWithDb() print(e.__dict__) return jsonify(error=True, msg=str(e))
def put(self, jwt, host_id, host_name, page_id): if request.is_json and request.get_json(silent=True) is not None: try: post_data = request.get_json() host = None hostname_org = None index = post_data.get('index') if index is not None: host = Host.get_by_id(index) if host is None: return jsonify(error=True) hostname_org = host.host_name host_name = post_data.get('host_name') alias = post_data.get('alias') address = post_data.get('address') contact_groups = post_data.get('contact_groups') contacts = post_data.get('contacts') sms = post_data.get('sms') street_address = post_data.get('street_address', '') notes = post_data.get('notes') notes_url = post_data.get('notes_url') hosttemplates = post_data.get('use') notification_period = "24x7" if post_data.get('notification_period') is not None and len( post_data.get('notification_period')) > 0: notification_period = post_data.get('notification_period') notification_options = "d,u,r" if post_data.get('notification_options') is not None and len( post_data.get('notification_options')) > 0: notification_options = ','.join( post_data.get('notification_options')) notifications_enabled = 1 if post_data.get('notifications_enabled') is not None and len( str(post_data.get('notifications_enabled'))) > 0: notifications_enabled = 1 if post_data.get( 'notifications_enabled') == True else 0 check_interval = 5 if post_data.get('check_interval') is not None and len( str(post_data.get('check_interval'))) > 0: check_interval = post_data.get('check_interval') retry_interval = 1 if post_data.get('retry_interval') is not None and len( str(post_data.get('retry_interval'))) > 0: retry_interval = post_data.get('retry_interval') max_check_attempts = 5 if post_data.get('max_check_attempts') is not None and len( str(post_data.get('max_check_attempts'))) > 0: max_check_attempts = post_data.get('max_check_attempts') notification_interval = 120 if post_data.get('notification_interval') is not None and len( str(post_data.get('notification_interval'))) > 0: notification_interval = post_data.get( 'notification_interval') check_command = "check-host-alive" if post_data.get('check_command') is not None and len( post_data.get('check_command')) > 0: check_command = post_data.get('check_command') _SNMPVERSION = "2c" if post_data.get('_SNMPVERSION') is not None and len( post_data.get('_SNMPVERSION')) > 0: _SNMPVERSION = post_data.get('_SNMPVERSION') _SNMPCOMMUNITY = "" if post_data.get('_SNMPCOMMUNITY') is not None and len( post_data.get('_SNMPCOMMUNITY')) > 0: _SNMPCOMMUNITY = post_data.get('_SNMPCOMMUNITY') # Confirm this hostname doesn't already exist first. if hostname_org != host_name and Host.get_by_hostname( host_name): return jsonify(error=True, msg="Hostname already exists.") if host_name is None: return jsonify(error=True, msg="Missing host_name required field.") if alias is None: return jsonify(error=True, msg="Missing alias required field.") if address is None: return jsonify(error=True, msg="Missing address required field.") host.host_name = host_name.strip() host.alias = alias.strip() host.address = address.strip() if contact_groups is not None: host.contact_groups = ','.join(contact_groups) if contacts is not None: host.contacts = ','.join(contacts) if sms is not None: host.sms = sms.strip() if street_address is not None: host.street_address = street_address.strip() if notes is not None: host.notes = notes.strip() if notes_url is not None: host.notes_url = notes_url.strip() host_templates_str = host.use if hosttemplates is not None: host_templates_str = ','.join(hosttemplates) host.use = host_templates_str host.notification_period = notification_period.strip() host.notification_options = notification_options host.notifications_enabled = notifications_enabled host.check_interval = check_interval host.retry_interval = retry_interval host.max_check_attempts = max_check_attempts host.notification_interval = notification_interval host.check_command = check_command.strip() host._SNMPVERSION = _SNMPVERSION host._SNMPCOMMUNITY = _SNMPCOMMUNITY writeNagiosConfigFile(host) host_id = host.update() # update host_contact table Host.delete_all_contact_relations(host_id) Host.delete_all_contactgroup_relations(host_id) Host.delete_all_host_template_relations(host_id) Host.create_contacts_relations(host_id, contacts) Host.create_contactgroups_relations(host_id, contact_groups) Host.create_hosttemplate_relations(host_id, hosttemplates) # re-name of host in services table if hostname_org != host_name: services = Service.get_by_hostname_keyword(hostname_org) for service in services: hostnames = service.host_name hostnames = hostnames.replace(hostname_org, host.host_name) service.host_name = hostnames tmp_checkInterval = service.check_interval service.check_interval = round( int(service.check_interval) / 60, 1) writeNagiosServicesConfigFile(service) service.check_interval = tmp_checkInterval service.update() # re-name of host in hostgroups table hostgroups = Hostgroup.get_by_hostname_keyword( hostname_org) for hostgroup in hostgroups: hostnames = hostgroup.members hostnames = hostnames.replace(hostname_org, host.host_name) hostgroup.members = hostnames hostgroup.update() writeNagiosHostgroupsConfigFile(hostgroup) if not restartNagios(): syncNagiosAllConfigWithDb() return jsonify(error=True, msg="Invalid process") if host_id: host = Host.get_by_id(host_id) return jsonify(data=host.serialize()) except Exception as e: syncNagiosAllConfigWithDb() return jsonify(error=True, msg=str(e)) return jsonify(error=True)