def institute_users(request, machine_category_id, institute_id): if not getattr(settings, 'USAGE_IS_PUBLIC', False): return HttpResponseForbidden('<h1>Access Denied</h1>') result = progress(request) if result is not None: return result machine_category = get_object_or_404(MachineCategory, pk=machine_category_id) start, end = get_date_range(request) result = gen_cache_for_machine_category(request, start, end, machine_category) if result is not None: return result institute = get_object_or_404(Institute, pk=institute_id) if not institute.can_view(request.user) and not getattr(settings, 'USAGE_IS_PUBLIC', False): return HttpResponseForbidden('<h1>Access Denied</h1>') start, end = get_date_range(request) mc_cache = usage.get_machine_category_usage(machine_category, start, end) available_time = mc_cache.available_time person_list = [] person_total, person_total_jobs = 0, 0 for u in cache.PersonCache.objects.order_by('-cpu_time').filter(start=start, end=end).filter( machine_category=machine_category).filter(person__institute=institute).filter(no_jobs__gt=0): person_total = person_total + u.cpu_time person_total_jobs = person_total_jobs + u.no_jobs person_list.append({'person': u.person, 'project': u.project, 'usage': u.cpu_time, 'jobs': u.no_jobs, 'percent': ((u.cpu_time / available_time) * 100)}) if available_time != 0: person_percent = (person_total / available_time) * 100 else: person_percent = 0 return render_to_response('usage/institute_users.html', locals(), context_instance=RequestContext(request))
def top_users(request, machine_category_id, count=20): if not getattr(settings, 'USAGE_IS_PUBLIC', False): return HttpResponseForbidden('<h1>Access Denied</h1>') result = progress(request) if result is not None: return result machine_category = MachineCategory.objects.get(pk=machine_category_id) start, end = get_date_range(request) result = gen_cache_for_machine_category(request, start, end, machine_category) if result is not None: return result start, end = get_date_range(request) mc_cache = usage.get_machine_category_usage(machine_category, start, end) available_time = mc_cache.available_time person_list = [] person_total, person_total_jobs = 0, 0 for u in cache.PersonCache.objects.order_by('-cpu_time').filter(start=start, end=end).filter( machine_category=machine_category)[:count]: if u.cpu_time: person_total += u.cpu_time person_total_jobs += u.no_jobs person_list.append({ 'person': u.person, 'project': u.project, 'usage': u.cpu_time, 'jobs': u.no_jobs, 'percent': ((u.cpu_time / available_time) * 100) }) person_percent = (person_total / available_time) * 100 return render_to_response('usage/top_users.html', locals(), context_instance=RequestContext(request))
def do_availablity_test(self, start, end, mc, expected_time, expected_cpu): from karaage.cache.usage import get_machine_category_usage cache = get_machine_category_usage(mc, start.date(), end.date()) available_time = cache.available_time self.assertEqual(available_time, expected_time)
def institute_usage(request, institute_id, machine_category_id): if not getattr(settings, 'USAGE_IS_PUBLIC', False): return HttpResponseForbidden('<h1>Access Denied</h1>') result = progress(request) if result is not None: return result machine_category = get_object_or_404(MachineCategory, pk=machine_category_id) institute = get_object_or_404(Institute, pk=institute_id) start, end = get_date_range(request) result = gen_cache_for_machine_category(request, start, end, machine_category) if result is not None: return result result = gen_cache_for_institute(request, start, end, institute, machine_category) if result is not None: return result project_list = [] institute_list = Institute.active.all() if not institute.can_view(request.user) and not getattr(settings, 'USAGE_IS_PUBLIC', False): return HttpResponseForbidden('<h1>Access Denied</h1>') mc_cache = usage.get_machine_category_usage(machine_category, start, end) available_time = mc_cache.available_time quota = get_object_or_404(InstituteQuota, institute=institute, machine_category=machine_category) i_usage, i_jobs = usage.get_institute_usage(institute, start, end, machine_category) for p_cache in cache.ProjectCache.objects.filter(project__institute=institute, machine_category=machine_category, date=datetime.date.today(), start=start, end=end): p = p_cache.project p_usage = p_cache.cpu_time p_jobs = p_cache.no_jobs try: chunk = p.projectquota_set.get(machine_category=machine_category) except ProjectQuota.DoesNotExist: chunk = None if chunk is None and p_usage==0 and p_jobs==0: continue if chunk is not None: mpots = mc_cache.get_project_mpots(chunk, start, end) percent = mc_cache.get_project_cap_percent(chunk, start, end) else: mpots = None percent = None if available_time > 0 and quota.quota > 0: quota_percent = p_usage / (available_time * quota.quota) * 10000 else: quota_percent = 0 project_list.append( {'project': p, 'usage': p_usage, 'jobs': p_jobs, 'percent': percent, 'quota_percent': quota_percent, }) person_list = [] person_total, person_total_jobs = 0, 0 for u in cache.PersonCache.objects.order_by('-cpu_time').filter(project__institute=institute, machine_category=machine_category, date=datetime.date.today(), start=start, end=end)[:5]: person_total += u.cpu_time person_total_jobs += u.no_jobs if i_usage > 0: i_percent = (u.cpu_time / i_usage) * 100 else: i_percent = None if available_time > 0 and quota.quota > 0: quota_percent = u.cpu_time / (available_time * quota.quota) * 10000 else: quota_percent = 0 person_list.append( {'person': u.person, 'project': u.project, 'usage': u.cpu_time, 'jobs': u.no_jobs, 'percent': i_percent, 'quota_percent': quota_percent, }) if i_usage > 0: person_percent = (person_total / i_usage) * 100 else: person_percent = None graph = graphs.get_institute_trend_graph_url(institute, start, end, machine_category) return render_to_response('usage/usage_institute_detail.html', locals(), context_instance=RequestContext(request))
def index(request, machine_category_id): if not getattr(settings, 'USAGE_IS_PUBLIC', False): return HttpResponseForbidden('<h1>Access Denied</h1>') machine_category = get_object_or_404(MachineCategory, pk=machine_category_id) mc_list = MachineCategory.objects.exclude(id__exact=machine_category_id) result = progress(request) if result is not None: return result start, end = get_date_range(request) result = gen_cache_for_machine_category(request, start, end, machine_category) if result is not None: return result show_zeros = True institute_list = Institute.active.all() i_list = [] m_list = [] mc_cache = usage.get_machine_category_usage(machine_category, start, end) total = mc_cache.cpu_time total_jobs = mc_cache.no_jobs available_time = mc_cache.available_time avg_cpus = available_time / (60*24*24) / ((end-start).days + 1) for m_cache in cache.MachineCache.objects.filter(machine__category=machine_category, date=datetime.date.today(), start=start, end=end): m = m_cache.machine time = m_cache.cpu_time jobs = m_cache.no_jobs m_list.append({'machine': m, 'usage': time, 'jobs': jobs}) for i_cache in cache.InstituteCache.objects.filter(machine_category=machine_category, date=datetime.date.today(), start=start, end=end): i = i_cache.institute time = i_cache.cpu_time jobs = i_cache.no_jobs try: quota = InstituteQuota.objects.get(institute=i, machine_category=machine_category) display_quota = quota.quota except InstituteQuota.DoesNotExist: display_quota = None if display_quota is None and time==0 and jobs==0: continue data_row = {'institute': i, 'usage': time, 'jobs': jobs, 'quota': display_quota} if available_time != 0: data_row['percent'] = Decimal(time) / Decimal(available_time) * 100 else: data_row['percent'] = 0 if data_row['quota'] is not None: if data_row['quota'] != 0: data_row['p_used'] = (data_row['percent'] / data_row['quota']) * 100 else: data_row['p_used'] = None data_row['diff'] = data_row['percent'] - data_row['quota'] if data_row['diff'] <= 0: data_row['class'] = 'green' else: data_row['class'] = 'red' else: data_row['class'] = 'green' data_row['diff'] = None data_row['p_used'] = None i_list.append(data_row) # Unused Entry unused = {'usage': available_time - total, 'quota': 0} try: unused['percent'] = (unused['usage'] / available_time) * 100 except ZeroDivisionError: unused['percent'] = 0 unused['diff'] = unused['percent'] - unused['quota'] / 100 if unused['diff'] <= 0: unused['class'] = 'green' else: unused['class'] = 'red' if available_time != 0: utilization = (Decimal(total) / available_time) * 100 else: utilization = 0 institutes_graph = graphs.get_institute_graph_url(start, end, machine_category) machines_graph = graphs.get_machine_graph_url(start, end, machine_category) trend_graph = graphs.get_trend_graph_url(start, end, machine_category) return render_to_response('usage/usage_institute_list.html', locals(), context_instance=RequestContext(request))