def get_page(): # First we look for the user sid # so we bail out if it's a false one user = app.get_user_auth() if not user: app.bottle.redirect("/user/login") all_imp_impacts = only_related_to(app.datamgr.get_important_elements(), user) all_imp_impacts.sort(hst_srv_sort) #all_imp_impacts.sort(hst_srv_sort) #all_imp_impacts = app.datamgr.get_services() #important_elements() impacts = all_imp_impacts ## for imp in all_imp_impacts: ## safe_print("FIND A BAD SERVICE IN IMPACTS", imp.get_dbg_name()) ## d = {'name': imp.get_full_name().encode('utf8', 'ignore'), ## "title": "My Image 3", "thumb": "/static/images/state_flapping.png", "zoom": "/static/images/state_flapping.png", ## "html": get_div(imp)} ## impacts.append(d) # Got in json format #j_impacts = json.dumps(impacts) #print "Return impact in json", j_impacts all_pbs = only_related_to(app.datamgr.get_all_problems(), user) now = time.time() # Get only the last 10min errors all_pbs = [pb for pb in all_pbs if pb.last_state_change > now - 600] # And sort it all_pbs.sort(hst_srv_sort) # sort_by_last_state_change) return {'app': app, 'user': user, 'impacts': impacts, 'problems': all_pbs}
def get_page(): # First we look for the user sid # so we bail out if it's a false one user = app.get_user_auth() if not user: app.bottle.redirect("/user/login") all_imp_impacts = only_related_to(app.datamgr.get_important_elements(), user) all_imp_impacts.sort(hst_srv_sort) #all_imp_impacts.sort(hst_srv_sort) #all_imp_impacts = app.datamgr.get_services() #important_elements() impacts = all_imp_impacts ## for imp in all_imp_impacts: ## safe_print("FIND A BAD SERVICE IN IMPACTS", imp.get_dbg_name()) ## d = {'name': imp.get_full_name().encode('utf8', 'ignore'), ## "title": "My Image 3", "thumb": "/static/images/state_flapping.png", "zoom": "/static/images/state_flapping.png", ## "html": get_div(imp)} ## impacts.append(d) # Got in json format #j_impacts = json.dumps(impacts) #print "Return impact in json", j_impacts all_pbs = only_related_to(app.datamgr.get_all_problems(),user) now = time.time() # Get only the last 10min errors all_pbs = [pb for pb in all_pbs if pb.last_state_change > now - 600] # And sort it all_pbs.sort(hst_srv_sort) # sort_by_last_state_change) return {'app': app, 'user': user, 'impacts': impacts, 'problems': all_pbs}
def get_page(): # First we look for the user sid # so we bail out if it's a false one # sid = app.request.get_cookie("sid") user = app.get_user_auth() if not user: redirect("/user/login") # return {'app' : app, 'pbs' : [], 'valid_user' : False, 'user' : None, 'navi' : None} #We want to limit the number of elements start = int(app.request.GET.get('start', '0')) end = int(app.request.GET.get('end', '30')) search = app.request.GET.get('search', '') pbs = app.datamgr.get_all_problems() # Filter with the user interests pbs = only_related_to(pbs, user) # Ok, if need, appli the search filter if search: print "SEARCHING FOR", search print "Before filtering", len(pbs) # We compile the patern pat = re.compile(search, re.IGNORECASE) new_pbs = [] for p in pbs: if pat.search(p.get_full_name()): new_pbs.append(p) continue to_add = False for imp in p.impacts: if pat.search(imp.get_full_name()): to_add = True for src in p.source_problems: if pat.search(src.get_full_name()): to_add = True if to_add: new_pbs.append(p) pbs = new_pbs print "After filtering", len(pbs) total = len(pbs) # If we overflow, came back as normal if start > total: start = 0 end = 30 navi = app.helper.get_navi(total, start, step=30) pbs = pbs[start:end] # print "get all problems:", pbs # for pb in pbs : # print pb.get_name() return {'app' : app, 'pbs' : pbs, 'valid_user' : True, 'user' : user, 'navi' : navi, 'search' : search, 'page' : 'problems'}
def get_last_errors_widget(): user = app.get_user_auth() if not user: app.bottle.redirect("/user/login") # We want to limit the number of elements, The user will be able to increase it nb_elements = max(0, int(app.request.GET.get('nb_elements', '10'))) pbs = app.datamgr.get_problems_time_sorted() # Filter with the user interests pbs = only_related_to(pbs, user) # Keep only nb_elements pbs = pbs[:nb_elements] wid = app.request.GET.get('wid', 'widget_last_problems_' + str(int(time.time()))) collapsed = (app.request.GET.get('collapsed', 'False') == 'True') options = {'nb_elements': {'value': nb_elements, 'type': 'int', 'label': 'Max number of elements to show'}, } title = 'Last IT problems' return {'app': app, 'pbs': pbs, 'user': user, 'page': 'problems', 'wid': wid, 'collapsed': collapsed, 'options': options, 'base_url': '/widget/last_problems', 'title': title, }
def get_nb_all_problems(self, user): res = [] res.extend([s for s in self.rg.services if s.state not in ['OK', 'PENDING'] and not s.is_impact]) res.extend([h for h in self.rg.hosts if h.state not in ['UP', 'PENDING'] and not h.is_impact]) return len(only_related_to(res, user))
def get_last_errors_widget(): user = app.get_user_auth() if not user: redirect("/user/login") # We want to limit the number of elements, The user will be able to increase it nb_elements = max(0, int(app.request.GET.get("nb_elements", "10"))) pbs = app.datamgr.get_problems_time_sorted() # Filter with the user interests pbs = only_related_to(pbs, user) # Keep only nb_elements pbs = pbs[:nb_elements] wid = app.request.GET.get("wid", "widget_last_problems_" + str(int(time.time()))) collapsed = app.request.GET.get("collapsed", "False") == "True" options = {"nb_elements": {"value": nb_elements, "type": "int", "label": "Max number of elements to show"}} title = "Last IT problems" return { "app": app, "pbs": pbs, "user": user, "page": "problems", "wid": wid, "collapsed": collapsed, "options": options, "base_url": "/widget/last_problems", "title": title, }
def get_pbs_widget(): user = app.get_user_auth() if not user: app.bottle.redirect("/user/login") # We want to limit the number of elements, The user will be able to increase it nb_elements = max(0, int(app.request.GET.get('nb_elements', '10'))) search = app.request.GET.get('search', '') pbs = app.datamgr.get_all_problems(to_sort=False) # Filter with the user interests pbs = only_related_to(pbs, user) # Sort it now pbs.sort(hst_srv_sort) # Ok, if need, appli the search filter if search: print "SEARCHING FOR", search print "Before filtering", len(pbs) # We compile the pattern pat = re.compile(search, re.IGNORECASE) new_pbs = [] for p in pbs: if pat.search(p.get_full_name()): new_pbs.append(p) continue to_add = False for imp in p.impacts: if pat.search(imp.get_full_name()): to_add = True for src in p.source_problems: if pat.search(src.get_full_name()): to_add = True if to_add: new_pbs.append(p) pbs = new_pbs[:nb_elements] print "After filtering", len(pbs) pbs = pbs[:nb_elements] wid = app.request.GET.get('wid', 'widget_problems_' + str(int(time.time()))) collapsed = (app.request.GET.get('collapsed', 'False') == 'True') options = {'search': {'value': search, 'type': 'text', 'label': 'Filter by name'}, 'nb_elements': {'value': nb_elements, 'type': 'int', 'label': 'Max number of elements to show'}, } title = 'IT problems' if search: title = 'IT problems (%s)' % search return {'app': app, 'pbs': pbs, 'user': user, 'search': search, 'page': 'problems', 'wid': wid, 'collapsed': collapsed, 'options': options, 'base_url': '/widget/problems', 'title': title, }
def lookup(name=''): app.response.content_type = 'application/json' user = app.get_user_auth() if not user: return [] if len(name) < 3: print "Lookup %s too short, bail out" % name return [] filtered_hosts = only_related_to(app.datamgr.get_hosts(), user) hnames = (h.host_name for h in filtered_hosts) r = [n for n in hnames if n.startswith(name)] return json.dumps(r)
def get_last_errors_widget(): user = app.get_user_auth() if not user: redirect("/user/login") # We want to limit the number of elements, The user will be able to increase it nb_elements = max(0, int(app.request.GET.get('nb_elements', '10'))) pbs = app.datamgr.get_problems_time_sorted() # Filter with the user interests pbs = only_related_to(pbs, user) # Keep only nb_elements pbs = pbs[:nb_elements] wid = app.request.GET.get('wid', 'widget_last_problems_' + str(int(time.time()))) collapsed = (app.request.GET.get('collapsed', 'False') == 'True') options = { 'nb_elements': { 'value': nb_elements, 'type': 'int', 'label': 'Max number of elements to show' }, } title = 'Last IT problems' return { 'app': app, 'pbs': pbs, 'user': user, 'page': 'problems', 'wid': wid, 'collapsed': collapsed, 'options': options, 'base_url': '/widget/last_problems', 'title': title, }
def show_impacts(): # First we look for the user sid # so we bail out if it's a false one user = app.get_user_auth() if not user: app.bottle.redirect("/user/login") #return {'app': app, 'impacts': {}, 'valid_user': False, 'user': user} all_imp_impacts = only_related_to(app.datamgr.get_important_elements(),user) all_imp_impacts.sort(hst_srv_sort) impacts = {} imp_id = 0 for imp in all_imp_impacts: #safe_print("FIND A BAD SERVICE IN IMPACTS", imp.get_dbg_name()) imp_id += 1 impacts[imp_id] = imp return {'app': app, 'impacts': impacts, 'valid_user': True, 'user': user}
def get_view(page): user = app.get_user_auth() if not user: redirect("/user/login") print 'DUMP COMMON GET', app.request.GET.__dict__ # Look for the toolbar pref tool_pref = app.get_user_preference(user, 'toolbar') # If void, create an empty one if not tool_pref: app.set_user_preference(user, 'toolbar', 'show') tool_pref = 'show' toolbar = app.request.GET.get('toolbar', '') print "Toolbar", tool_pref, toolbar if toolbar != tool_pref and len(toolbar) > 0: print "Need to change user prefs for Toolbar", app.set_user_preference(user, 'toolbar', toolbar) tool_pref = app.get_user_preference(user, 'toolbar') # We want to limit the number of elements start = int(app.request.GET.get('start', '0')) end = int(app.request.GET.get('end', '30')) # We will keep a trace of our filters filters = {} ts = ['hst_srv', 'hg', 'realm', 'htag', 'ack', 'downtime', 'crit'] for t in ts: filters[t] = [] search = app.request.GET.getall('search') if search == []: search = app.request.GET.get('global_search', '') # Most of the case, search will be a simple string, if so # make it a list of this string if isinstance(search, basestring): search = [search] search_str = '&'.join(search) print 'Search str=', search_str print 'And search', search # Load the bookmarks bookmarks_r = app.get_user_preference(user, 'bookmarks') if not bookmarks_r: app.set_user_preference(user, 'bookmarks', '[]') bookmarks_r = '[]' bookmarks = json.loads(bookmarks_r) bookmarks_ro = app.get_common_preference('bookmarks') if not bookmarks_ro: bookmarks_ro = '[]' bookmarksro = json.loads(bookmarks_ro) bookmarks = json.loads(bookmarks_r) items = [] if page == 'problems': items = app.datamgr.get_all_problems(to_sort=False, get_acknowledged=True) elif page == 'all': items = app.datamgr.get_all_hosts_and_services() else: # WTF?!? redirect("/problems") # Filter with the user interests items = only_related_to(items, user) # Ok, if need, appli the search filter for s in search: s = s.strip() if not s: continue print "SEARCHING FOR", s print "Before filtering", len(items) elts = s.split(':', 1) t = 'hst_srv' if len(elts) > 1: t = elts[0] s = elts[1] print 'Search for type %s and pattern %s' % (t, s) if not t in filters: filters[t] = [] filters[t].append(s) if t == 'hst_srv': # We compile the pattern pat = re.compile(s, re.IGNORECASE) new_items = [] for i in items: if pat.search(i.get_full_name()): new_items.append(i) continue to_add = False for imp in i.impacts: if pat.search(imp.get_full_name()): to_add = True for src in i.source_problems: if pat.search(src.get_full_name()): to_add = True if to_add: new_items.append(i) items = new_items if t == 'hg': hg = app.datamgr.get_hostgroup(s) print 'And a valid hg filtering for', s items = [i for i in items if hg in i.get_hostgroups()] if t == 'realm': r = app.datamgr.get_realm(s) print 'Add a realm filter', r items = [i for i in items if i.get_realm() == r] if t == 'htag': print 'Add a htag filter', s items = [i for i in items if s in i.get_host_tags()] if t == 'ack': print "Got an ack filter", s if s == 'false': # First look for hosts, so ok for services, but remove problem_has_been_acknowledged elements items = [ i for i in items if i.__class__.my_type == 'service' or not i.problem_has_been_acknowledged ] # Now ok for hosts, but look for services, and service hosts items = [ i for i in items if i.__class__.my_type == 'host' or ( not i.problem_has_been_acknowledged and not i.host.problem_has_been_acknowledged) ] if s == 'true': # First look for hosts, so ok for services, but remove problem_has_been_acknowledged elements items = [ i for i in items if i.__class__.my_type == 'service' or i.problem_has_been_acknowledged ] # Now ok for hosts, but look for services, and service hosts items = [ i for i in items if i.__class__.my_type == 'host' or ( i.problem_has_been_acknowledged or i.host.problem_has_been_acknowledged) ] if t == 'downtime': print "Got an downtime filter", s if s == 'false': # First look for hosts, so ok for services, but remove problem_has_been_acknowledged elements items = [ i for i in items if i.__class__.my_type == 'service' or not i.in_scheduled_downtime ] # Now ok for hosts, but look for services, and service hosts items = [ i for i in items if i.__class__.my_type == 'host' or ( not i.in_scheduled_downtime and not i.host.in_scheduled_downtime) ] if s == 'true': # First look for hosts, so ok for services, but remove problem_has_been_acknowledged elements items = [ i for i in items if i.__class__.my_type == 'service' or i.in_scheduled_downtime ] # Now ok for hosts, but look for services, and service hosts items = [ i for i in items if i.__class__.my_type == 'host' or (i.in_scheduled_downtime or i.host.in_scheduled_downtime) ] if t == 'crit': print "Add a criticity filter", s items = [ i for i in items if (i.__class__.my_type == 'service' and i.state_id == 2) or ( i.__class__.my_type == 'host' and i.state_id == 1) ] print "After filtering for", t, s, 'we got', len(items) # If we are in the /problems and we do not have an ack filter # we apply by default the ack:false one print "Late problem filtering?", page == 'problems', len( filters['ack']) == 0 if page == 'problems' and len(filters['ack']) == 0: # First look for hosts, so ok for services, but remove problem_has_been_acknowledged elements items = [ i for i in items if i.__class__.my_type == 'service' or not i.problem_has_been_acknowledged ] # Now ok for hosts, but look for services, and service hosts items = [ i for i in items if i.__class__.my_type == 'host' or ( not i.problem_has_been_acknowledged and not i.host.problem_has_been_acknowledged) ] # If we are in the /problems and we do not have an ack filter # we apply by default the ack:false one print "Late problem filtering?", page == 'problems', len( filters['downtime']) == 0 if page == 'problems' and len(filters['downtime']) == 0: # First look for hosts, so ok for services, but remove problem_has_been_acknowledged elements items = [ i for i in items if i.__class__.my_type == 'service' or not i.in_scheduled_downtime ] # Now ok for hosts, but look for services, and service hosts items = [ i for i in items if i.__class__.my_type == 'host' or (not i.in_scheduled_downtime and not i.host.in_scheduled_downtime) ] # Now sort it! items.sort(hst_srv_sort) total = len(items) # If we overflow, came back as normal if start > total: start = 0 end = 30 navi = app.helper.get_navi(total, start, step=30) items = items[start:end] ## print "get all problems:", pbs ## for pb in pbs: ## print pb.get_name() print 'Give filters', filters return { 'app': app, 'pbs': items, 'user': user, 'navi': navi, 'search': search_str, 'page': page, 'filters': filters, 'bookmarks': bookmarks, 'bookmarksro': bookmarksro, 'toolbar': tool_pref }
def get_pbs_widget(): user = app.get_user_auth() if not user: redirect("/user/login") # We want to limit the number of elements, The user will be able to increase it nb_elements = max(0, int(app.request.GET.get('nb_elements', '10'))) search = app.request.GET.get('search', '') pbs = app.datamgr.get_all_problems(to_sort=False) # Filter with the user interests pbs = only_related_to(pbs, user) # Sort it now pbs.sort(hst_srv_sort) # Ok, if need, appli the search filter if search: print "SEARCHING FOR", search print "Before filtering", len(pbs) # We compile the pattern pat = re.compile(search, re.IGNORECASE) new_pbs = [] for p in pbs: if pat.search(p.get_full_name()): new_pbs.append(p) continue to_add = False for imp in p.impacts: if pat.search(imp.get_full_name()): to_add = True for src in p.source_problems: if pat.search(src.get_full_name()): to_add = True if to_add: new_pbs.append(p) pbs = new_pbs[:nb_elements] print "After filtering", len(pbs) pbs = pbs[:nb_elements] wid = app.request.GET.get('wid', 'widget_problems_' + str(int(time.time()))) collapsed = (app.request.GET.get('collapsed', 'False') == 'True') options = { 'search': { 'value': search, 'type': 'text', 'label': 'Filter by name' }, 'nb_elements': { 'value': nb_elements, 'type': 'int', 'label': 'Max number of elements to show' }, } title = 'IT problems' if search: title = 'IT problems (%s)' % search return { 'app': app, 'pbs': pbs, 'user': user, 'search': search, 'page': 'problems', 'wid': wid, 'collapsed': collapsed, 'options': options, 'base_url': '/widget/problems', 'title': title, }
def get_view(page): user = app.get_user_auth() if not user: app.bottle.redirect("/user/login") print 'DUMP COMMON GET', app.request.GET.__dict__ # Look for the toolbar pref tool_pref = app.get_user_preference(user, 'toolbar') # If void, create an empty one if not tool_pref: app.set_user_preference(user, 'toolbar', 'show') tool_pref = 'show' toolbar = app.request.GET.get('toolbar', '') print "Toolbar", tool_pref, toolbar if toolbar != tool_pref and len(toolbar) > 0: print "Need to change user prefs for Toolbar", app.set_user_preference(user, 'toolbar', toolbar) tool_pref = app.get_user_preference(user, 'toolbar') # We want to limit the number of elements start = int(app.request.GET.get('start', '0')) end = int(app.request.GET.get('end', '30')) # We will keep a trace of our filters filters = {} ts = ['hst_srv', 'hg', 'realm', 'htag', 'ack', 'downtime', 'crit'] for t in ts: filters[t] = [] search = app.request.GET.getall('search') if search == []: search = app.request.GET.get('global_search', '') # Most of the case, search will be a simple string, if so # make it a list of this string if isinstance(search, basestring): search = [search] search_str = '&'.join(search) print 'Search str=', search_str print 'And search', search # Load the bookmarks bookmarks_r = app.get_user_preference(user, 'bookmarks') if not bookmarks_r: app.set_user_preference(user, 'bookmarks', '[]') bookmarks_r = '[]' bookmarks = json.loads(bookmarks_r) bookmarks_ro = app.get_common_preference('bookmarks') if not bookmarks_ro: bookmarks_ro = '[]' bookmarksro = json.loads(bookmarks_ro) bookmarks = json.loads(bookmarks_r) items = [] if page == 'problems': items = app.datamgr.get_all_problems(to_sort=False, get_acknowledged=True) elif page == 'all': items = app.datamgr.get_all_hosts_and_services() else: # WTF?!? app.bottle.redirect("/problems") # Filter with the user interests items = only_related_to(items, user) # Ok, if need, appli the search filter for s in search: s = s.strip() if not s: continue print "SEARCHING FOR", s print "Before filtering", len(items) elts = s.split(':', 1) t = 'hst_srv' if len(elts) > 1: t = elts[0] s = elts[1] print 'Search for type %s and pattern %s' % (t, s) if not t in filters: filters[t] = [] filters[t].append(s) if t == 'hst_srv': # We compile the pattern pat = re.compile(s, re.IGNORECASE) new_items = [] for i in items: if pat.search(i.get_full_name()): new_items.append(i) continue to_add = False for imp in i.impacts: if pat.search(imp.get_full_name()): to_add = True for src in i.source_problems: if pat.search(src.get_full_name()): to_add = True if to_add: new_items.append(i) items = new_items if t == 'hg': hg = app.datamgr.get_hostgroup(s) print 'And a valid hg filtering for', s items = [i for i in items if hg in i.get_hostgroups()] if t == 'realm': r = app.datamgr.get_realm(s) print 'Add a realm filter', r items = [i for i in items if i.get_realm() == r] if t == 'htag': print 'Add a htag filter', s items = [i for i in items if s in i.get_host_tags()] if t == 'ack': print "Got an ack filter", s if s == 'false': # First look for hosts, so ok for services, but remove problem_has_been_acknowledged elements items = [i for i in items if i.__class__.my_type == 'service' or not i.problem_has_been_acknowledged] # Now ok for hosts, but look for services, and service hosts items = [i for i in items if i.__class__.my_type == 'host' or (not i.problem_has_been_acknowledged and not i.host.problem_has_been_acknowledged)] if s == 'true': # First look for hosts, so ok for services, but remove problem_has_been_acknowledged elements items = [i for i in items if i.__class__.my_type == 'service' or i.problem_has_been_acknowledged] # Now ok for hosts, but look for services, and service hosts items = [i for i in items if i.__class__.my_type == 'host' or (i.problem_has_been_acknowledged or i.host.problem_has_been_acknowledged)] if t == 'downtime': print "Got an downtime filter", s if s == 'false': # First look for hosts, so ok for services, but remove problem_has_been_acknowledged elements items = [i for i in items if i.__class__.my_type == 'service' or not i.in_scheduled_downtime] # Now ok for hosts, but look for services, and service hosts items = [i for i in items if i.__class__.my_type == 'host' or (not i.in_scheduled_downtime and not i.host.in_scheduled_downtime)] if s == 'true': # First look for hosts, so ok for services, but remove problem_has_been_acknowledged elements items = [i for i in items if i.__class__.my_type == 'service' or i.in_scheduled_downtime] # Now ok for hosts, but look for services, and service hosts items = [i for i in items if i.__class__.my_type == 'host' or (i.in_scheduled_downtime or i.host.in_scheduled_downtime)] if t == 'crit': print "Add a criticity filter", s items = [i for i in items if (i.__class__.my_type == 'service' and i.state_id == 2) or (i.__class__.my_type == 'host' and i.state_id == 1)] print "After filtering for", t, s, 'we got', len(items) # If we are in the /problems and we do not have an ack filter # we apply by default the ack:false one print "Late problem filtering?", page == 'problems', len(filters['ack']) == 0 if page == 'problems' and len(filters['ack']) == 0: # First look for hosts, so ok for services, but remove problem_has_been_acknowledged elements items = [i for i in items if i.__class__.my_type == 'service' or not i.problem_has_been_acknowledged] # Now ok for hosts, but look for services, and service hosts items = [i for i in items if i.__class__.my_type == 'host' or (not i.problem_has_been_acknowledged and not i.host.problem_has_been_acknowledged)] # If we are in the /problems and we do not have an ack filter # we apply by default the ack:false one print "Late problem filtering?", page == 'problems', len(filters['downtime']) == 0 if page == 'problems' and len(filters['downtime']) == 0: # First look for hosts, so ok for services, but remove problem_has_been_acknowledged elements items = [i for i in items if i.__class__.my_type == 'service' or not i.in_scheduled_downtime] # Now ok for hosts, but look for services, and service hosts items = [i for i in items if i.__class__.my_type == 'host' or (not i.in_scheduled_downtime and not i.host.in_scheduled_downtime)] # Now sort it! items.sort(hst_srv_sort) total = len(items) # If we overflow, came back as normal if start > total: start = 0 end = 30 navi = app.helper.get_navi(total, start, step=30) items = items[start:end] ## print "get all problems:", pbs ## for pb in pbs: ## print pb.get_name() print 'Give filters', filters return {'app': app, 'pbs': items, 'user': user, 'navi': navi, 'search': search_str, 'page': page, 'filters': filters, 'bookmarks': bookmarks, 'bookmarksro': bookmarksro, 'toolbar': tool_pref }
def get_view(page): user = app.get_user_auth() if not user: redirect("/user/login") print "DUMP COMMON GET", app.request.GET.__dict__ # We want to limit the number of elements start = int(app.request.GET.get("start", "0")) end = int(app.request.GET.get("end", "30")) # We will keep a trace of our filters filters = {} ts = ["hst_srv", "hg", "realm", "htag", "ack", "downtime"] for t in ts: filters[t] = [] search = app.request.GET.getall("search") if search == []: search = app.request.GET.get("global_search", "") # Most of the case, search will be a simple string, if so # make it a list of this string if isinstance(search, basestring): search = [search] search_str = "&".join(search) print "Search str=", search_str print "And search", search # Load the bookmarks bookmarks_r = app.get_user_preference(user, "bookmarks") if not bookmarks_r: app.set_user_preference(user, "bookmarks", "[]") bookmarks_r = "[]" bookmarks = json.loads(bookmarks_r) items = [] if page == "problems": items = app.datamgr.get_all_problems(to_sort=False, get_acknowledged=True) elif page == "all": items = app.datamgr.get_all_hosts_and_services() else: # WTF?!? redirect("/problems") # Filter with the user interests items = only_related_to(items, user) # Ok, if need, appli the search filter for s in search: s = s.strip() if not s: continue print "SEARCHING FOR", s print "Before filtering", len(items) elts = s.split(":", 1) t = "hst_srv" if len(elts) > 1: t = elts[0] s = elts[1] print "Search for type %s and patern %s" % (t, s) if not t in filters: filters[t] = [] filters[t].append(s) if t == "hst_srv": # We compile the patern pat = re.compile(s, re.IGNORECASE) new_items = [] for i in items: if pat.search(i.get_full_name()): new_items.append(i) continue to_add = False for imp in i.impacts: if pat.search(imp.get_full_name()): to_add = True for src in i.source_problems: if pat.search(src.get_full_name()): to_add = True if to_add: new_items.append(i) items = new_items if t == "hg": hg = app.datamgr.get_hostgroup(s) print "And a valid hg filtering for", s items = [i for i in items if hg in i.get_hostgroups()] if t == "realm": r = app.datamgr.get_realm(s) print "Add a realm filter", r items = [i for i in items if i.get_realm() == r] if t == "htag": print "Add a htag filter", s items = [i for i in items if s in i.get_host_tags()] if t == "ack": print "Got an ack filter", s if s == "false": # First look for hosts, so ok for services, but remove problem_has_been_acknowledged elements items = [i for i in items if i.__class__.my_type == "service" or not i.problem_has_been_acknowledged] # Now ok for hosts, but look for services, and service hosts items = [ i for i in items if i.__class__.my_type == "host" or (not i.problem_has_been_acknowledged and not i.host.problem_has_been_acknowledged) ] if s == "true": # First look for hosts, so ok for services, but remove problem_has_been_acknowledged elements items = [i for i in items if i.__class__.my_type == "service" or i.problem_has_been_acknowledged] # Now ok for hosts, but look for services, and service hosts items = [ i for i in items if i.__class__.my_type == "host" or (i.problem_has_been_acknowledged or i.host.problem_has_been_acknowledged) ] if t == "downtime": print "Got an downtime filter", s if s == "false": # First look for hosts, so ok for services, but remove problem_has_been_acknowledged elements items = [i for i in items if i.__class__.my_type == "service" or not i.in_scheduled_downtime] # Now ok for hosts, but look for services, and service hosts items = [ i for i in items if i.__class__.my_type == "host" or (not i.in_scheduled_downtime and not i.host.in_scheduled_downtime) ] if s == "true": # First look for hosts, so ok for services, but remove problem_has_been_acknowledged elements items = [i for i in items if i.__class__.my_type == "service" or i.in_scheduled_downtime] # Now ok for hosts, but look for services, and service hosts items = [ i for i in items if i.__class__.my_type == "host" or (i.in_scheduled_downtime or i.host.in_scheduled_downtime) ] print "After filtering for", t, s, "we got", len(items) # If we are in the /problems and we do not have an ack filter # we apply by default the ack:false one print "Late problem filtering?", page == "problems", len(filters["ack"]) == 0 if page == "problems" and len(filters["ack"]) == 0: # First look for hosts, so ok for services, but remove problem_has_been_acknowledged elements items = [i for i in items if i.__class__.my_type == "service" or not i.problem_has_been_acknowledged] # Now ok for hosts, but look for services, and service hosts items = [ i for i in items if i.__class__.my_type == "host" or (not i.problem_has_been_acknowledged and not i.host.problem_has_been_acknowledged) ] # If we are in the /problems and we do not have an ack filter # we apply by default the ack:false one print "Late problem filtering?", page == "problems", len(filters["downtime"]) == 0 if page == "problems" and len(filters["downtime"]) == 0: # First look for hosts, so ok for services, but remove problem_has_been_acknowledged elements items = [i for i in items if i.__class__.my_type == "service" or not i.in_scheduled_downtime] # Now ok for hosts, but look for services, and service hosts items = [ i for i in items if i.__class__.my_type == "host" or (not i.in_scheduled_downtime and not i.host.in_scheduled_downtime) ] # Now sort it! items.sort(hst_srv_sort) total = len(items) # If we overflow, came back as normal if start > total: start = 0 end = 30 navi = app.helper.get_navi(total, start, step=30) items = items[start:end] # print "get all problems:", pbs # for pb in pbs : # print pb.get_name() print "Give filters", filters return { "app": app, "pbs": items, "user": user, "navi": navi, "search": search_str, "page": page, "filters": filters, "bookmarks": bookmarks, }
def get_pbs_widget(): user = app.get_user_auth() if not user: redirect("/user/login") # We want to limit the number of elements, The user will be able to increase it nb_elements = max(0, int(app.request.GET.get("nb_elements", "10"))) search = app.request.GET.get("search", "") pbs = app.datamgr.get_all_problems(to_sort=False) # Filter with the user interests pbs = only_related_to(pbs, user) # Sort it now pbs.sort(hst_srv_sort) # Ok, if need, appli the search filter if search: print "SEARCHING FOR", search print "Before filtering", len(pbs) # We compile the patern pat = re.compile(search, re.IGNORECASE) new_pbs = [] for p in pbs: if pat.search(p.get_full_name()): new_pbs.append(p) continue to_add = False for imp in p.impacts: if pat.search(imp.get_full_name()): to_add = True for src in p.source_problems: if pat.search(src.get_full_name()): to_add = True if to_add: new_pbs.append(p) pbs = new_pbs[:nb_elements] print "After filtering", len(pbs) pbs = pbs[:nb_elements] wid = app.request.GET.get("wid", "widget_problems_" + str(int(time.time()))) collapsed = app.request.GET.get("collapsed", "False") == "True" options = { "search": {"value": search, "type": "text", "label": "Filter by name"}, "nb_elements": {"value": nb_elements, "type": "int", "label": "Max number of elements to show"}, } title = "IT problems" if search: title = "IT problems (%s)" % search return { "app": app, "pbs": pbs, "user": user, "search": search, "page": "problems", "wid": wid, "collapsed": collapsed, "options": options, "base_url": "/widget/problems", "title": title, }