Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use link file to associate processes with works #738

Open
wants to merge 2 commits into
base: development
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions plotmanager/library/utilities/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,8 @@ def json_output():

jobs = load_jobs(config_jobs)
jobs, running_work = get_running_plots(jobs=jobs, running_work=running_work,
instrumentation_settings=instrumentation_settings)
instrumentation_settings=instrumentation_settings,
log_directory=log_directory)
check_log_progress(jobs=jobs, running_work=running_work, progress_settings=progress_settings,
notification_settings=notification_settings, view_settings=view_settings,
instrumentation_settings=instrumentation_settings)
Expand Down Expand Up @@ -161,7 +162,8 @@ def view(loop=True):
analysis = analyze_log_dates(log_directory=log_directory, analysis=analysis)
jobs = load_jobs(config_jobs)
jobs, running_work = get_running_plots(jobs=jobs, running_work=running_work,
instrumentation_settings=instrumentation_settings)
instrumentation_settings=instrumentation_settings,
log_directory=log_directory)
check_log_progress(jobs=jobs, running_work=running_work, progress_settings=progress_settings,
notification_settings=notification_settings, view_settings=view_settings,
instrumentation_settings=instrumentation_settings)
Expand Down
17 changes: 16 additions & 1 deletion plotmanager/library/utilities/jobs.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import logging
import os
import psutil

from copy import deepcopy
Expand Down Expand Up @@ -249,6 +250,20 @@ def monitor_jobs_to_start(jobs, running_work, max_concurrent, max_for_phase_1, n

return jobs, running_work, next_job_work, next_log_check

def create_link_file(log_directory, pid, log_file_path):
files_to_remove = []
for file in os.listdir(log_directory):
if "#" + str(pid) in file:
files_to_remove.append(os.path.join(log_directory, file))
for file_to_remove in files_to_remove:
try:
os.remove(file_to_remove)
except Exception as e:
continue
link_file = log_file_path+'#'+str(pid)
fp = open(link_file, "a+")
fp.close()
logging.info(f'Process log link file {link_file} created')

def start_work(job, chia_location, log_directory, drives_free_space):
logging.info(f'Starting new plot for job: {job.name}')
Expand Down Expand Up @@ -301,7 +316,7 @@ def start_work(job, chia_location, log_directory, drives_free_space):
process = start_process(args=plot_command, log_file=log_file)
pid = process.pid
logging.info(f'Started process: {pid}')

create_link_file(log_directory, pid, log_file_path)
logging.info(f'Setting priority level: {nice_val}')
psutil.Process(pid).nice(nice_val)
logging.info(f'Set priority level')
Expand Down
15 changes: 14 additions & 1 deletion plotmanager/library/utilities/processes.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ def get_temp_size(plot_id, temporary_directory, temporary2_directory):
return temp_size


def get_running_plots(jobs, running_work, instrumentation_settings):
def get_running_plots(jobs, running_work, instrumentation_settings, log_directory):
chia_processes = []
logging.info(f'Getting running plots')
chia_executable_name = get_chia_executable_name()
Expand Down Expand Up @@ -214,6 +214,19 @@ def get_running_plots(jobs, running_work, instrumentation_settings):
except (psutil.AccessDenied, RuntimeError, psutil.NoSuchProcess):
logging.info(f'Failed to find log file: {process.pid}')

if not log_file_path:
try:
commands = process.cmdline()
for file in os.listdir(log_directory):
if "#" + str(process.pid) in file:
log_file_path = file[:file.find("#")]
log_file_path = os.path.join(log_directory, log_file_path)
break
except (psutil.AccessDenied, RuntimeError):
logging.info(f'Failed to find log file: {process.pid}')
except psutil.NoSuchProcess:
continue

assumed_job = None
logging.info(f'Finding associated job')

Expand Down
3 changes: 2 additions & 1 deletion stateless-manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@

logging.info(f'Grabbing running plots.')
jobs, running_work = get_running_plots(jobs=jobs, running_work=running_work,
instrumentation_settings=instrumentation_settings)
instrumentation_settings=instrumentation_settings,
log_directory=log_directory)
for job in jobs:
max_date = None
for pid in job.running_work:
Expand Down