def update_service(request): builder = http.ResponseBuilder() id = request.GET.get('id',None) if not id: return builder.error('id is required').build_json() master_addr = request.GET.get('master',None) if not master_addr: return builder.error('master is required').build_json() replicate = request.GET.get('replicate',None) if not replicate: return builder.error('replicate is required').build_json() status,stat = views.get_group_quota_stat(request.job.group, {}) old_job_meta = json.loads(request.job.meta) replicate_num = int(replicate) if replicate_num > old_job_meta['replicate_count']: new_add = replicate_num - old_job_meta['replicate_count'] cpu_total_require = new_add * old_job_meta['cpu_share'] mem_total_require = old_job_meta['memory_limit'] * 1024 * 1024 * 1024 * new_add if cpu_total_require > stat['total_cpu_left']: return builder.error('cpu %s exceeds the left cpu quota %s'%(cpu_total_require, stat['total_cpu_left'])).build_json() if mem_total_require > stat['total_mem_left']: return builder.error('mem %s exceeds the left mem %s'%(mem_total_require, stat['total_mem_left'])).build_json() old_job_meta['replicate_count'] = replicate_num request.job.meta = json.dumps(old_job_meta) request.job.save() galaxy = wrapper.Galaxy(master_addr,settings.GALAXY_CLIENT_BIN) status = galaxy.update_job(id,replicate) if status: return builder.ok().build_json() else: return builder.error('fail to kill job').build_json()
def create_service(request): """ create a service """ builder = http.ResponseBuilder() data_str = request.POST.get("data",None); if not data_str: return builder.error('data is required').build_json() data = json.loads(data_str) LOG.info(data) group_id = data.get('groupId',None) if not group_id: return builder.error('groupId is required').build_json() try: #判断是否有组权限 group_member_iterator = models.GroupMember.objects.filter(user_name=request.user.username, group__id=int(group_id)) group_member = None for gm in group_member_iterator: group_member = gm if not group_member: return builder.error('group with %s does not exist'%group_id).build_json() if group_member.group.max_cpu_limit and data['cpuLimit'] > group_member.group.max_cpu_limit: return builder.error('cpu limit exceeds the max cpu limit %d'%group_member.group.max_cpu_limit).build_json() status,stat = views.get_group_quota_stat(group_member.group, {}) cpu_total_require = data['replicate'] * data['cpuShare'] mem_total_require = data['memoryLimit'] * 1024 * 1024 * 1024 * data['replicate'] if cpu_total_require > stat['total_cpu_left']: return builder.error('cpu %s exceeds the left cpu quota %s'%(cpu_total_require, stat['total_cpu_left'])).build_json() if mem_total_require > stat['total_mem_left']: return builder.error('mem %s exceeds the left mem %s'%(mem_total_require, stat['total_mem_left'])).build_json() conf = None if data['setMonitor'] : conf = helper.build_monitor_conf(data) galaxy = wrapper.Galaxy(gm.group.galaxy_master, settings.GALAXY_CLIENT_BIN) tags = [] if 'tag' in data and data['tag'].strip(): tags.append(data['tag'].strip()); status,output = galaxy.create_task(data['name'],data['pkgSrc'], data['startCmd'], data['replicate'], data['memoryLimit']*1024*1024*1024, cpu_soft_limit = data['cpuShare'], cpu_limit = data['cpuLimit'], deploy_step_size = data['deployStepSize'], one_task_per_host = data['oneTaskPerHost'], restrict_tags =tags, conf = conf) if not status: return builder.error('fail create task').build_json() galaxy_job = models.GalaxyJob(group = group_member.group , job_id = int(output), meta = json.dumps(data)) galaxy_job.save() return builder.ok().build_json() except Exception as e: return builder.error(str(e)).build_json()
def create_service(request): """ create a service """ builder = http.ResponseBuilder() group_id = request.POST.get('groupId',None) if not group_id: return builder.error('groupId is required').build_json() try: #判断是否有组权限 group_member_iterator = models.GroupMember.objects.filter(user_name=request.user.username, group__id=int(group_id)) group_member = None for gm in group_member_iterator: group_member = gm if not group_member: return builder.error('group with %s does not exist'%group_id).build_json() ret = helper.validate_init_service_group_req(request) status,stat = views.get_group_quota_stat(group_member.group, {}) cpu_total_require = ret['replicate_count'] * ret['cpu_share'] mem_total_require = ret['memory_limit'] * 1024 * 1024 * 1024 * ret['replicate_count'] if cpu_total_require > stat['total_cpu_left']: return builder.error('cpu %s exceeds the left cpu quota %s'%(cpu_total_require, stat['total_cpu_left'])).build_json() if mem_total_require > stat['total_mem_left']: return builder.error('mem %s exceeds the left mem %s'%(mem_total_require, stat['total_mem_left'])).build_json() galaxy = wrapper.Galaxy(gm.group.galaxy_master, settings.GALAXY_CLIENT_BIN) status,output = galaxy.create_task(ret['name'],ret['pkg_src'], ret['start_cmd'], ret['replicate_count'], ret['memory_limit']*1024*1024*1024, ret['cpu_share'], deploy_step_size = ret['deploy_step_size'], one_task_per_host = ret['one_task_per_host'], restrict_tags = ret['tag']) if not status: return builder.error('fail create task').build_json() galaxy_job = models.GalaxyJob(group = group_member.group , job_id = int(output), meta = json.dumps(ret)) galaxy_job.save() return builder.ok().build_json() except Exception as e: return builder.error(str(e)).build_json()
def update_service(request): builder = http.ResponseBuilder() id = request.GET.get('id', None) if not id: return builder.error('id is required').build_json() master_addr = request.GET.get('master', None) if not master_addr: return builder.error('master is required').build_json() replicate = request.GET.get('replicate', None) if not replicate: return builder.error('replicate is required').build_json() status, stat = views.get_group_quota_stat(request.job.group, {}) old_job_meta = json.loads(request.job.meta) replicate_num = int(replicate) if replicate_num > old_job_meta['replicate_count']: new_add = replicate_num - old_job_meta['replicate_count'] cpu_total_require = new_add * old_job_meta['cpu_share'] mem_total_require = old_job_meta[ 'memory_limit'] * 1024 * 1024 * 1024 * new_add if cpu_total_require > stat['total_cpu_left']: return builder.error( 'cpu %s exceeds the left cpu quota %s' % (cpu_total_require, stat['total_cpu_left'])).build_json() if mem_total_require > stat['total_mem_left']: return builder.error( 'mem %s exceeds the left mem %s' % (mem_total_require, stat['total_mem_left'])).build_json() old_job_meta['replicate_count'] = replicate_num request.job.meta = json.dumps(old_job_meta) request.job.save() galaxy = wrapper.Galaxy(master_addr, settings.GALAXY_CLIENT_BIN) status = galaxy.update_job(id, replicate) if status: return builder.ok().build_json() else: return builder.error('fail to kill job').build_json()
def create_service(request): """ create a service """ builder = http.ResponseBuilder() data_str = request.POST.get("data", None) if not data_str: return builder.error('data is required').build_json() data = json.loads(data_str) LOG.info(data) group_id = data.get('groupId', None) if not group_id: return builder.error('groupId is required').build_json() try: #判断是否有组权限 group_member_iterator = models.GroupMember.objects.filter( user_name=request.user.username, group__id=int(group_id)) group_member = None for gm in group_member_iterator: group_member = gm if not group_member: return builder.error('group with %s does not exist' % group_id).build_json() if group_member.group.max_cpu_limit and data[ 'cpuLimit'] > group_member.group.max_cpu_limit: return builder.error( 'cpu limit exceeds the max cpu limit %d' % group_member.group.max_cpu_limit).build_json() status, stat = views.get_group_quota_stat(group_member.group, {}) cpu_total_require = data['replicate'] * data['cpuShare'] mem_total_require = data['memoryLimit'] * 1024 * 1024 * 1024 * data[ 'replicate'] if cpu_total_require > stat['total_cpu_left']: return builder.error( 'cpu %s exceeds the left cpu quota %s' % (cpu_total_require, stat['total_cpu_left'])).build_json() if mem_total_require > stat['total_mem_left']: return builder.error( 'mem %s exceeds the left mem %s' % (mem_total_require, stat['total_mem_left'])).build_json() conf = None if data['setMonitor']: conf = helper.build_monitor_conf(data) galaxy = wrapper.Galaxy(gm.group.galaxy_master, settings.GALAXY_CLIENT_BIN) tags = [] if 'tag' in data and data['tag'].strip(): tags.append(data['tag'].strip()) status, output = galaxy.create_task( data['name'], data['pkgSrc'], data['startCmd'], data['replicate'], data['memoryLimit'] * 1024 * 1024 * 1024, cpu_soft_limit=data['cpuShare'], cpu_limit=data['cpuLimit'], deploy_step_size=data['deployStepSize'], one_task_per_host=data['oneTaskPerHost'], restrict_tags=tags, conf=conf) if not status: return builder.error('fail create task').build_json() galaxy_job = models.GalaxyJob(group=group_member.group, job_id=int(output), meta=json.dumps(data)) galaxy_job.save() return builder.ok().build_json() except Exception as e: return builder.error(str(e)).build_json()