Example #1
0
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))
Example #2
0
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))
Example #3
0
 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)
Example #4
0
 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)
Example #5
0
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))
Example #6
0
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))