def publish(ctx, name, ecl, dir): click.echo('publishing a Roxie query') eclagent_host = get_roxie(ctx) program_dir = os.path.dirname(ecl) if dir is None else dir cmd = 'cd {}; {}/bin/ecl publish roxie {} --name={} --server={} -A'.format( program_dir, get_system_dir(ctx), ecl, name, eclagent_host) execute(cmd, sudo=True)
def lookup_workunit_info(ctx, wuid): eclagent_host = get_roxie(ctx) cmd = '{}/bin/daliadmin server={} workunit {}'.format( get_system_dir(ctx), eclagent_host, wuid) # can be inefficient if the output is very large output = execute(cmd, silent=True, capture=True) doc = etree.fromstring(output) participatant_roxie_nodes = set() for record in doc.xpath('//Statistic[@creator]'): if 'myroxie@' in record.attrib['creator']: participatant_roxie_nodes.add( str(record.attrib['creator']).split('@')[-1]) print(participatant_roxie_nodes)
def status(ctx, name, type): eclagent_host = get_esp(ctx) cmd_lookup = ("-n {}" if type == 'job' else '-wu {}').format(name) cmd = '{}/bin/ecl status --server={} {}'.format(get_system_dir(ctx), eclagent_host, cmd_lookup) results = execute(cmd, capture=True, silent=True) status_records = {} if ',' in results: status_records = {line.split(',')[0]: line.split(',')[2] for line in results.splitlines()} else: if type == 'job': with CaptureOutput() as output: wuid = ctx.invoke(lookup_wuid, job=job)[0] status_records[wuid] = results elif type == 'wuid': status_records[name] = results for (wuid, status) in status_records.items(): print("{}: {}".format(wuid, status)) return status_records
def _call(ctx, target_cluster, ecl, published_query, base_dir, query_input, parameter_input, wait, job, wait_until_complete): if wait_until_complete: wait = 1000 #milliseconds eclagent_host = get_esp(ctx) call_target = None # should have more than three: ecl, pq, wuid, archive, dl. call_type = 'pq' if published_query is not None else 'ecl' program_dir = None if call_type == 'pq': call_target = published_query elif call_type == 'ecl': program_dir = os.path.dirname(ecl) if base_dir is None else base_dir call_target = ecl job_name = "{}_{}".format(os.path.splitext(os.path.basename(call_target))[0].lower(), uuid.uuid4()) if job is None else job # -v for getting wuid cmd = '{}/bin/ecl run -v --server {} --target {} --wait={} --name={} {} {} {}'.format(get_system_dir(ctx), eclagent_host, target_cluster, wait, job_name, convert_to_query_xml(query_input), convert_to_query_text(parameter_input), call_target) if program_dir is not None: cmd = 'cd {}; '.format(program_dir) + cmd print(cmd) output = execute(cmd, silent=True, capture=True) if ctx.obj['show']: print(output) #print(output) # this can be dangerous and inefficient wuid = extract_wuid(output, call_type=call_type) if not wait_until_complete: return lookup_status(ctx, wuid, type='wuid') return ctx.invoke(wait_for_completion, wuid=wuid)
def lookup_wuid(ctx, job): eclagent_host = get_esp(ctx) cmd = '{}/bin/ecl getwuid --server={} -n={}'.format(get_system_dir(ctx), eclagent_host, job) wuid = execute(cmd, capture=True, silent=True) print(uuid) return wuid.splitlines()
def unpublish(ctx, name): click.echo('unpublishing a Roxie query') eclagent_host = get_roxie(ctx) cmd = '{}/bin/ecl unpublish roxie {} --server={}'.format( get_system_dir(ctx), name, eclagent_host) execute(cmd, sudo=True)
def clean_unused_files(ctx): eclagent_host = get_roxie(ctx) cmd = '{}/bin/ecl roxie unused-files myroxie --server={} --delete'.format( get_system_dir(ctx), eclagent_host) execute(cmd)