Ejemplo n.º 1
0
def get_usage_by_users_json( request, allocation_id=None):
    start_date = request.GET.get('from')
    end_date = request.GET.get('to')
    project_id = request.GET.get('projectId')
    if not (allocation_admin_or_superuser(request.user) or is_project_pi(user=request.user, project_id=project_id)):
        return HttpResponseRedirect('/admin/usage/denied/')
    if not re.match(r'^\d{4}-\d{2}-\d{2}', start_date) or not re.match(r'^\d{4}-\d{2}-\d{2}', end_date):
        raise Exception('Start date and end date params must be in the format: YYYY-MM-dd')
    logger.info( 'Usage by users requested for allocation id: %s, from: %s, to: %s', allocation_id, start_date, end_date)
    resp = {}
    try:
        tas = JobsClient()
        logger.debug(
            "Getting some jobs for chameleon, start=" + start_date + ", end=" + end_date + ", allocation=" + allocation_id)
        jobs = tas.get_jobs(resource='chameleon', start=start_date, end=end_date, allocation_id=allocation_id)
        logger.debug("Done fetching jobs")
        logger.info( 'Total jobs: %s', len( jobs ) )
        for job in jobs:
            username = job.get('userLogin')
            queueName = job.get('queueName')
            if username not in resp:
                resp[username] = {}
            if queueName not in resp[username]:
                resp[username][queueName] = job.get('suCharge')
            else:
                resp[username][queueName] += job.get('suCharge')
    except Exception as e:
        traceback.print_exc()
        raise Exception('Error fetching jobs.')
    return HttpResponse(json.dumps(resp), content_type="application/json")
Ejemplo n.º 2
0
def get_allocation_usage_json( request, allocation_id=None, username=None, queue=None, **kwargs ):
    logger.info( 'Allocations requested.')
    data = []
    try:
        jobsClient = JobsClient()
        start_date = request.GET.get('from')
        end_date = request.GET.get('to')
        logger.debug("Getting some jobs for chameleon, start=" + start_date + ", end=" + end_date)
        if allocation_id is not None:
            logger.debug("allocation=" + allocation_id)
        if username is not None:
            logger.debug("username="******"queue=" + queue)
        jobs = jobsClient.get_jobs(resource='chameleon', start=start_date, end=end_date, allocation_id=allocation_id, username=username, queue=queue)
        logger.debug("Done fetching jobs")
        logger.info( 'Total jobs: %s', len( jobs ) )
        data = []
        for job in jobs:
            logger.info('endDate: %s', job.get('endDate'))
            endDate = calendar.timegm(time.strptime( job.get('endDate'), "%Y-%m-%dT%H:%M:%S" )) * 1000
            sus = job.get('suCharge')
            item = [endDate, sus]
            data.append(item)
    except Exception as e:
        traceback.print_exc()
        raise Exception('Error fetching jobs.')
    return HttpResponse(json.dumps(data), content_type="application/json")
Ejemplo n.º 3
0
def get_usage_by_users_json(request, allocation_id=None):
    start_date = request.GET.get('from')
    end_date = request.GET.get('to')
    if not re.match(r'^\d{4}-\d{2}-\d{2}', start_date) or not re.match(
            r'^\d{4}-\d{2}-\d{2}', end_date):
        raise Exception(
            'Start date and end date params must be in the format: YYYY-MM-dd')
    logger.info(
        'Usage by users requested for allocation id: %s, from: %s, to: %s',
        allocation_id, start_date, end_date)
    resp = {}
    try:
        #tas = TASClient()
        tas = JobsClient()
        logger.debug("Getting some jobs for chameleon, start=" + start_date +
                     ", end=" + end_date + ", allocation=" + allocation_id)
        jobs = tas.get_jobs(resource='chameleon',
                            start=start_date,
                            end=end_date,
                            allocation_id=allocation_id)
        logger.debug("Done fetching jobs")
        logger.info('Total jobs: %s', len(jobs))
        for job in jobs:
            username = job.get('userLogin')
            queueName = job.get('queueName')
            if username not in resp:
                resp[username] = {}
            if queueName not in resp[username]:
                resp[username][queueName] = job.get('suCharge')
            else:
                resp[username][queueName] += job.get('suCharge')
    except Exception as e:
        traceback.print_exc()
        raise Exception('Error fetching jobs.')
    return HttpResponse(json.dumps(resp), content_type="application/json")
Ejemplo n.º 4
0
def get_daily_usage_json(request):
    start_date_str = request.GET.get('from')
    end_date_str = request.GET.get('to')

    resp = {}
    resp['result'] = None
    resp['status'] = 'error'
    if start_date_str is None or end_date_str is None:
        resp['message'] = 'Start and end date are required.'

    queue = request.GET.get('queue')
    resource = 'chameleon'
    logger.info('Daily usage requested from: %s, to: %s for queue: %s',
                start_date_str, end_date_str, queue)

    if start_date_str is not None:
        start_date = datetime.strptime(start_date_str, '%Y-%m-%d')
    else:
        start_date = datetime.now() - timedelta(days=7)
        start_date_str = start_date.strftime('%Y-%m-%d')

    if end_date_str is not None:
        end_date = datetime.strptime(end_date_str, '%Y-%m-%d')
    else:
        end_date = datetime.now()
        end_date_str = end_date.strftime('%Y-%m-%d')
    if start_date > end_date:
        resp['message'] = 'Start date must be before end date.'
    temp = {}
    while (end_date >= start_date):
        index = start_date.strftime('%Y-%m-%d')
        temp[index] = {}
        temp[index]['date'] = index
        temp[index]['nodes_used'] = 0
        start_date += timedelta(days=1)
    try:
        #tas = TASClient()
        tas = JobsClient()
        # use start, end date and queue here to get jobs
        jobs = tas.get_jobs(resource=resource,
                            start=start_date_str,
                            end=end_date_str,
                            queue=queue)
        for job in jobs:
            job_end_date_str = job.get('endDate')
            sus = job.get('suCharge')
            if job_end_date_str:
                time_index = job_end_date_str.index('T')
                job_end_date_str = job_end_date_str[:time_index]
                if job_end_date_str in temp:
                    temp[job_end_date_str]['nodes_used'] += math.ceil(sus)

        resp['result'] = temp.values()
        resp['status'] = 'success'
        resp['message'] = ''
    except Exception as e:
        traceback.print_exc()
        raise Exception('Error fetching jobs.')
    return HttpResponse(json.dumps(resp), content_type="application/json")
Ejemplo n.º 5
0
def get_daily_usage_json( request):
    start_date_str = request.GET.get('from')
    end_date_str = request.GET.get('to')

    resp = {}
    resp['result'] = None
    resp['status'] = 'error'
    if start_date_str is None or end_date_str is None:
        resp['message'] = 'Start and end date are required.'

    queue = request.GET.get('queue')
    resource = 'chameleon'
    logger.info( 'Daily usage requested from: %s, to: %s for queue: %s', start_date_str, end_date_str, queue)

    if start_date_str is not None:
        start_date = datetime.strptime(start_date_str, '%Y-%m-%d')
    else:
        start_date = datetime.now() - timedelta(days=7)
        start_date_str = start_date.strftime('%Y-%m-%d')

    if end_date_str is not None:
        end_date = datetime.strptime(end_date_str, '%Y-%m-%d')
    else:
        end_date = datetime.now()
        end_date_str = end_date.strftime('%Y-%m-%d')
    if start_date > end_date:
        resp['message'] = 'Start date must be before end date.'
    temp = {}
    while(end_date >= start_date):
        index = start_date.strftime('%Y-%m-%d')
        temp[index] = {}
        temp[index]['date'] = index
        temp[index]['nodes_used'] = 0
        start_date += timedelta(days=1)
    try:
        #tas = TASClient()
        tas = JobsClient()
        # use start, end date and queue here to get jobs
        jobs = tas.get_jobs(resource=resource, start=start_date_str, end=end_date_str, queue=queue)
        for job in jobs:
            job_end_date_str = job.get('endDate')
            sus = job.get('suCharge')
            if job_end_date_str:
                time_index = job_end_date_str.index('T')
                job_end_date_str = job_end_date_str[:time_index]
                if job_end_date_str in temp:
                    temp[job_end_date_str]['nodes_used'] += math.ceil(sus)

        resp['result'] = temp.values()
        resp['status'] = 'success'
        resp['message'] = ''
    except Exception as e:
        traceback.print_exc()
        raise Exception('Error fetching jobs.')
    return HttpResponse(json.dumps(resp), content_type="application/json")
Ejemplo n.º 6
0
def get_daily_usage_user_breakdown_json(request):
    start_date_str = request.GET.get('from')
    end_date_str = request.GET.get('to')

    resp = {}
    resp['result'] = None
    resp['status'] = 'error'
    if start_date_str is None or end_date_str is None:
        resp['message'] = 'Start and end date are required.'

    queue = request.GET.get('queue')
    resource = 'chameleon'
    logger.info('Daily usage requested from: %s, to: %s for queue: %s',
                start_date_str, end_date_str, queue)

    temp = {}
    try:
        #tas = TASClient()
        tas = JobsClient()
        # use start, end date and queue here to get jobs
        jobs = tas.get_jobs(resource=resource,
                            start=start_date_str,
                            end=end_date_str,
                            queue=queue)
        logger.debug(jobs)
        for job in jobs:
            username = job.get('userLogin')
            sus = job.get('suCharge')
            if username:
                if username in temp:
                    temp[username]['nodes_used'] += math.ceil(sus)
                else:
                    temp[username] = {}
                    temp[username]['username'] = username
                    temp[username]['nodes_used'] = math.ceil(sus)
                    temp[username]['queue'] = job.get('queueName').lower()

        resp['result'] = temp.values()
        resp['status'] = 'success'
        resp['message'] = ''
    except Exception as e:
        traceback.print_exc()
        raise Exception('Error fetching jobs.')
    return HttpResponse(json.dumps(resp), content_type="application/json")
Ejemplo n.º 7
0
def get_daily_usage_user_breakdown_json( request):
    start_date_str = request.GET.get('from')
    end_date_str = request.GET.get('to')

    resp = {}
    resp['result'] = None
    resp['status'] = 'error'
    if start_date_str is None or end_date_str is None:
        resp['message'] = 'Start and end date are required.'

    queue = request.GET.get('queue')
    resource = 'chameleon'
    logger.info( 'Daily usage requested from: %s, to: %s for queue: %s', start_date_str, end_date_str, queue)

    temp = {}
    try:
        #tas = TASClient()
        tas = JobsClient()
        # use start, end date and queue here to get jobs
        jobs = tas.get_jobs(resource=resource, start=start_date_str, end=end_date_str, queue=queue)
        logger.debug(jobs)
        for job in jobs:
            username = job.get('userLogin')
            sus = job.get('suCharge')
            if username:
                if username in temp:
                    temp[username]['nodes_used'] += math.ceil(sus)
                else:
                    temp[username] = {}
                    temp[username]['username'] = username
                    temp[username]['nodes_used'] = math.ceil(sus)
                    temp[username]['queue'] = job.get('queueName').lower()

        resp['result'] = temp.values()
        resp['status'] = 'success'
        resp['message'] = ''
    except Exception as e:
        traceback.print_exc()
        raise Exception('Error fetching jobs.')
    return HttpResponse(json.dumps(resp), content_type="application/json")
Ejemplo n.º 8
0
def get_allocation_usage_json(request,
                              allocation_id=None,
                              username=None,
                              queue=None,
                              **kwargs):
    logger.info('Allocations requested.')
    data = []
    try:
        jobsClient = JobsClient()
        start_date = request.GET.get('from')
        end_date = request.GET.get('to')
        logger.debug("Getting some jobs for chameleon, start=" + start_date +
                     ", end=" + end_date)
        if allocation_id is not None:
            logger.debug("allocation=" + allocation_id)
        if username is not None:
            logger.debug("username="******"queue=" + queue)
        jobs = jobsClient.get_jobs(resource='chameleon',
                                   start=start_date,
                                   end=end_date,
                                   allocation_id=allocation_id,
                                   username=username,
                                   queue=queue)
        logger.debug("Done fetching jobs")
        logger.info('Total jobs: %s', len(jobs))
        data = []
        for job in jobs:
            logger.info('endDate: %s', job.get('endDate'))
            endDate = calendar.timegm(
                time.strptime(job.get('endDate'), "%Y-%m-%dT%H:%M:%S")) * 1000
            sus = job.get('suCharge')
            item = [endDate, sus]
            data.append(item)
    except Exception as e:
        traceback.print_exc()
        raise Exception('Error fetching jobs.')
    return HttpResponse(json.dumps(data), content_type="application/json")