def retrieve_link(request, link): stat,obj = views.parse() page = get_object_or_404(ConfiguratorPage, link=link) services = page.load_services() graphs = [] for service in services: service['isGraphable'] = views.is_graphable(service['host'], service['service']) service['slug'] = views.slugify(service['host'] + service['service']) servicedetail = views.servicedetail(stat, service['host'], service['service']) servicedetail['is_graphable'] = views.is_graphable(service['host'], service['service']) servicedetail['slug'] = service['slug'] service['duration'] = servicedetail['state_duration'] if '_TEST' in servicedetail: servicedetail['nagcat_template'] = servicedetail['_TEST'].split(';', 1)[-1] else: servicedetail['nagcat_template'] = '' html = render_to_response("graph.html",servicedetail).content service['html'] = html service['nagcat_template'] = servicedetail['nagcat_template'] graphs.append(service) return views.configurator(request,stat,obj,graphs=graphs, permalink=True,link=link)
def retrieve_link(request, link): stat, obj = views.parse() page = get_object_or_404(ConfiguratorPage, link=link) services = page.load_services() graphs = [] for service in services: service["isGraphable"] = views.is_graphable(service["host"], service["service"]) service["slug"] = views.slugify(service["host"] + service["service"]) servicedetail = views.servicelist_by_host_desc(stat, service["host"], service["service"])[0] servicedetail["is_graphable"] = service["isGraphable"] servicedetail["slug"] = service["slug"] service["duration"] = servicedetail["state_duration"] if "_TEST" in servicedetail: servicedetail["nagcat_template"] = servicedetail["_TEST"].split(";", 1)[-1] else: servicedetail["nagcat_template"] = "" html = render_to_response("graph.html", servicedetail).content service["html"] = html service["nagcat_template"] = servicedetail["nagcat_template"] graphs.append(service) return views.configurator(request, stat, obj, graphs=graphs, permalink=True, link=link)
def autocomplete(request, context): """ Given a query in a GET parameter, give a list of auto complete suggestions. Supports having multiple incomplete values in a comma seperated list. """ query = request.GET.get('term', '') limit = int(request.GET.get('limit', 100)) stat, obj = views.parse() choices = [] queries = [] q_results = [] queries = [q.strip() for q in query.split(',') if q.strip()] if context == 'host': choices = views.hostnames(stat) elif context == 'group': choices = [x['alias'] for x in views.grouplist(obj)] elif context == 'service': # servicesnames will return services with the sane name for different # hosts, so we make it a set to get rid of duplicate names choices = set(views.servicenames(stat)) for q in queries: matching_names = [x for x in choices if q.lower() in x.lower()] q_results.append(matching_names) # this craziness is to deal with this situation: let valid completions be # 'ab', 'ac'. User enters "a, a". Auto complete should give back ['ab, # ac'], not ['ab, ac', 'ac, ab']. memo = {} counts = {} for q in q_results: key = repr(q) # lists aren't hashable :( but strings are :) if key in counts: counts[key] += 1 else: counts[key] = 1 product_foder = [] for q in q_results: try: product_foder.append(transpose_combo(q, counts[repr(q)], memo)) except StopIteration: # That means the user entered too many of the substring. ignore an # excess entries. pass # end craziness results = itertools.product(*product_foder) results = [','.join(result).strip() for result in itertools.islice(results, limit)] result = [{"value": r} for r in results if r] result.sort(lambda x,y: cmp(len(x['value']), len(y['value']))) return HttpResponse(json.dumps(result))
def list_links(request): stat,obj = views.parse() user = get_user(request) page = ConfiguratorPage.objects.filter(user=user).order_by('-creation') template = loader.get_template('permalinks.html') services = stat['service'] context_data = {'services': services} context_data = views.add_hostlist(stat, obj, context_data) context_data['configurator_page'] = page context_data['user'] = user c = Context(context_data) return HttpResponse(template.render(c))
def list_links(request): stat, obj = views.parse() user = get_user(request) page = ConfiguratorPage.objects.filter(user=user).order_by("-creation") template = loader.get_template("permalinks.html") services = stat["service"] context_data = {"services": services} context_data = views.add_hostlist(stat, obj, context_data) context_data["configurator_page"] = page context_data["user"] = user c = Context(context_data) return HttpResponse(template.render(c))
def generate_link(request): """ Given a list of services, generates a permanent link at which the page can be viewed again by others. """ stat, obj = views.parse() source = request.POST if request.POST else request.GET services = source.get("services", "") description = source.get("description", "") user = get_user(request) link = "" while not link or is_duplicate_page(link): link = random_b64_string(LINK_LENGTH) page = ConfiguratorPage(link=link, creation=datetime.datetime.now(), user=user, description=description) page.save() # Gives it a primary key, id page.save_services(json.loads(services)) page.save() return HttpResponse(link)