Beispiel #1
0
def tmp_dir_report(jobs,
                   tmpdirs,
                   sched_cfg,
                   width,
                   start_row=None,
                   end_row=None,
                   prefix=''):
    '''start_row, end_row let you split the table up if you want'''
    tab = tt.Texttable()
    headings = ['tmp', 'ready', 'phases']
    tab.header(headings)
    tab.set_cols_dtype('t' * len(headings))
    tab.set_cols_align('r' * (len(headings) - 1) + 'l')
    for i, d in enumerate(sorted(tmpdirs)):
        if (start_row and i < start_row) or (end_row and i >= end_row):
            continue
        phases = sorted(job.job_phases_for_tmpdir(d, jobs))
        ready = manager.phases_permit_new_job(phases, sched_cfg)
        row = [
            abbr_path(d, prefix), 'OK' if ready else '--',
            phases_str(phases)
        ]
        tab.add_row(row)

    tab.set_max_width(width)
    tab.set_deco(tt.Texttable.BORDER | tt.Texttable.HEADER)
    tab.set_deco(0)  # No borders
    return tab.draw()
Beispiel #2
0
def tmp_dir_report(jobs, tmpdirs, sched_cfg, width, start_row=None, end_row=None, prefix=""):
    """start_row, end_row let you split the table up if you want"""
    tab = tt.Texttable()
    headings = ["tmp", "count", "ready", "phases", "youngest", "eldest"]
    tab.header(headings)
    tab.set_cols_dtype("t" * len(headings))
    tab.set_cols_align("r" * (len(headings) - 1) + "l")
    for i, d in enumerate(sorted(tmpdirs)):
        if (start_row and i < start_row) or (end_row and i >= end_row):
            continue
        dir_jobs = [j for j in jobs if j.tmpdir == d]
        job_age = [j.get_time_wall() for j in dir_jobs]
        phases = sorted(job.job_phases_for_tmpdir(d, jobs))
        ready = manager.phases_permit_new_job(phases, sched_cfg)
        row = [
            abbr_path(d, prefix),
            len(dir_jobs),
            "Y" if ready else "N",
            phases_str(phases),
            plot_util.time_format(min(job_age)) if job_age else "N/A",
            plot_util.time_format(max(job_age)) if job_age else "N/A",
        ]
        tab.add_row(row)

    tab.set_max_width(width)
    tab.set_deco(tt.Texttable.BORDER | tt.Texttable.HEADER)
    tab.set_deco(0)  # No borders
    return tab.draw()
Beispiel #3
0
def maybe_start_new_plot(dir_cfg, sched_cfg, plotting_cfg):
    jobs = job.Job.get_running_jobs(dir_cfg['log'])

    wait_reason = None  # If we don't start a job this iteration, this says why.

    youngest_job_age = min(jobs, key=job.Job.get_time_wall).get_time_wall() if jobs else MAX_AGE
    global_stagger = int(sched_cfg['global_stagger_m'] * MIN)
    if (youngest_job_age < global_stagger):
        wait_reason = 'stagger (%ds/%ds)' % (
                youngest_job_age, global_stagger)
    else:
        tmp_to_all_phases = [ (d, job.job_phases_for_tmpdir(d, jobs))
                for d in dir_cfg['tmp'] ]
        eligible = [ (d, phases) for (d, phases) in tmp_to_all_phases
                if phases_permit_new_job(phases, sched_cfg) ]
        rankable = [ (d, phases[0]) if phases else (d, (999, 999))
                for (d, phases) in eligible ]
        
        if not eligible:
            wait_reason = 'no eligible tempdirs'
        else:
            # Plot to oldest tmpdir.
            tmpdir = max(rankable, key=operator.itemgetter(1))[0]

            # Select the dst dir least recently selected
            dir2ph = dstdirs_to_youngest_phase(jobs)
            unused_dirs = [d for d in dir_cfg['dst'] if d not in dir2ph.keys()]
            dstdir = ''
            if unused_dirs: 
                dstdir = random.choice(unused_dirs)
            else:
                dstdir = max(dir2ph, key=dir2ph.get)
            
            
            logpath = Path(dir_cfg['log'])
            logfile = PureWindowsPath(logpath / datetime.now().strftime('%Y-%m-%d-%H.%M.%S.log'))
            #logfile = os.path.join(Path(dir_cfg['log']),)
            print(logfile)
            
            
            
            plot_args = [r'C:\Users\Wofl\AppData\Local\Chia-Blockchain\app-1.0.3\resources\app.asar.unpacked\daemon\chia2.exe','plots', 'create',
                    '-k', str(plotting_cfg['k']),
                    '-r', str(plotting_cfg['n_threads']),
                    '-u', str(plotting_cfg['n_buckets']),
                    '-b', str(plotting_cfg['job_buffer']),
                    '-t', tmpdir,
                    '-d', dstdir ]
            if 'e' in plotting_cfg and plotting_cfg['e']:
                plot_args.append('-e')
            if 'tmp2' in dir_cfg:
                plot_args.append('-2')
                plot_args.append(dir_cfg['tmp2'])
            
           # logfile = repr(logfile)
            logmsg = ('Starting plot job: %s ; logging to %s' % (' '.join(plot_args), logfile))
            
            #print(logfile)
            #print(logmsg)
            # start_new_sessions to make the job independent of this controlling tty.
            p = subprocess.Popen(plot_args,
                stdout=open(logfile, 'w'),
                stderr=subprocess.STDOUT,
                start_new_session=True)
            psutil.Process(p.pid) #.nice(ABOVE_NORMAL_PRIORITY_CLASS)
          #  print( psutil.Process(p.pid).cmdline())
          #  x = psutil.Process(p.pid)
         #   x.nice(15)
            return (True, logmsg)

    return (False, wait_reason)
Beispiel #4
0
def maybe_start_new_plot(dir_cfg, sched_cfg, plotting_cfg):
    jobs = job.Job.get_running_jobs(dir_cfg['log'])

    wait_reason = None  # If we don't start a job this iteration, this says why.

    youngest_job_age = min(
        jobs, key=job.Job.get_time_wall).get_time_wall() if jobs else MAX_AGE
    global_stagger = int(sched_cfg['global_stagger_m'] * MIN)
    if (youngest_job_age < global_stagger):
        wait_reason = 'stagger (%ds/%ds)' % (youngest_job_age, global_stagger)
    else:
        tmp_to_all_phases = [(d, job.job_phases_for_tmpdir(d, jobs))
                             for d in dir_cfg['tmp']]
        eligible = [(d, phases) for (d, phases) in tmp_to_all_phases
                    if phases_permit_new_job(phases, sched_cfg)]
        rankable = [(d, phases[0]) if phases else (d, (999, 999))
                    for (d, phases) in eligible]

        if not eligible:
            wait_reason = 'no eligible tempdirs'
        else:
            # Plot to oldest tmpdir.
            tmpdir = max(rankable, key=operator.itemgetter(1))[0]

            # Select the dst dir least recently selected
            dir2ph = dstdirs_to_youngest_phase(jobs)
            # Throw out dirs that are not allowed in current config
            dir2ph = dict([(k, v) for k, v in dir2ph.items()
                           if k in dir_cfg['dst']])
            unused_dirs = [d for d in dir_cfg['dst'] if d not in dir2ph.keys()]
            dstdir = ''
            if unused_dirs:
                dstdir = random.choice(unused_dirs)
            else:
                dstdir = max(dir2ph, key=dir2ph.get)

            logfile = os.path.join(
                dir_cfg['log'],
                datetime.now().strftime('%Y-%m-%d-%H:%M:%S.log'))

            plot_args = [
                'chia', 'plots', 'create', '-k',
                str(plotting_cfg['k']), '-r',
                str(plotting_cfg['n_threads']), '-u',
                str(plotting_cfg['n_buckets']), '-b',
                str(plotting_cfg['job_buffer']), '-t', tmpdir, '-d', dstdir
            ]
            if 'e' in plotting_cfg and plotting_cfg['e']:
                plot_args.append('-e')
            if 'farmer_key' in plotting_cfg:
                plot_args.append('-f')
                plot_args.append(plotting_cfg['farmer_key'])
            if 'pool_key' in plotting_cfg:
                plot_args.append('-p')
                plot_args.append(plotting_cfg['pool_key'])
            if 'tmp2' in dir_cfg:
                plot_args.append('-2')
                plot_args.append(dir_cfg['tmp2'])

            logmsg = ('Starting plot job: %s ; logging to %s' %
                      (' '.join(plot_args), logfile))

            # start_new_sessions to make the job independent of this controlling tty.
            p = subprocess.Popen(plot_args,
                                 stdout=open(logfile, 'w'),
                                 stderr=subprocess.STDOUT,
                                 start_new_session=True)

            psutil.Process(p.pid).nice(15)
            return (True, logmsg)

    return (False, wait_reason)