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")
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")
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")
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")
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")
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")
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")
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")