diff --git a/bheappe/__init__.py b/bheappe/__init__.py index 6d7da4964bb29d3c735bc3374924c395b1ca3e76..494677b5ea986fb16213c486a6fcedcf6306ce58 100644 --- a/bheappe/__init__.py +++ b/bheappe/__init__.py @@ -15,10 +15,10 @@ bl_info = { "name" : "bheappe", - "author" : "Milan Jaros, Petr Strakos", + "author" : "Milan Jaros, Petr Strakos, Lubomir Riha", "description" : "Rendering-as-a-Service", - "blender" : (3, 2, 0), - "version" : (3, 8, 2), + "blender" : (3, 3, 0), + "version" : (3, 9, 0), "location" : "Addon Preferences panel", "wiki_url" : "https://blender.it4i.cz/", "category" : "System", diff --git a/bheappe/raas_config.py b/bheappe/raas_config.py index 3b21ff779a7d8f2bfde80146e76e14b5ceb32fbe..4c97c1d8ed3ff6d8873efe83d6022246307ec5a2 100644 --- a/bheappe/raas_config.py +++ b/bheappe/raas_config.py @@ -27,42 +27,17 @@ Cluster_items = [ ("KAROLINA", "Karolina", ""), ] -if bpy.app.version < (2, 90, 0): - JobQueue_items = [ - ("ORIGCPU283", "Blender2.83 CPU", ""), - ("ORIGCUDA283", "Blender2.83 CUDA", ""), - ("ORIGEEVEE283", "Blender2.83 Eevee", ""), - ] -elif bpy.app.version < (3, 0, 0): - JobQueue_items = [ - ("ORIGCPU293", "Blender2.93 CPU", ""), - ("ORIGCUDA293", "Blender2.93 CUDA", ""), - ("ORIGEEVEE293", "Blender2.93 Eevee", ""), - ] -elif bpy.app.version < (3, 1, 0): - JobQueue_items = [ - ("ORIGCPU30", "Blender3.0 CPU", ""), - ("ORIGCUDA30", "Blender3.0 CUDA", ""), - ("ORIGEEVEE30", "Blender3.0 Eevee", ""), - ] -elif bpy.app.version < (3, 2, 0): - JobQueue_items = [ - ("ORIGCPU31", "Blender3.1 CPU", ""), - ("ORIGCUDA31", "Blender3.1 CUDA", ""), - ("ORIGEEVEE31", "Blender3.1 Eevee", ""), - ] -else: - JobQueue_items = [ - ("ORIGCPU32", "Blender3.2 CPU", ""), - ("ORIGCUDA32", "Blender3.2 CUDA", ""), - ("ORIGEEVEE32", "Blender3.2 Eevee", ""), - ] +JobQueue_items = [ + ("ORIGCPU", "CPU", ""), + ("ORIGCUDA", "CUDA", ""), + ("ORIGEEVEE", "Eevee", ""), +] from . import raas_jobs ################################################################## ssh_library_items = [ ("PARAMIKO", "Paramiko", ""), - ("SYSTEM", "System", ""), + #("SYSTEM", "System", ""), ] account_types_items = [ @@ -79,8 +54,12 @@ def GetBlenderClusterVersion(): return '3.0.1-GCC-10.3.0' elif bpy.app.version < (3, 2, 0): return '3.1.0-GCC-10.3.0' + elif bpy.app.version < (3, 3, 0): + return '3.2.2-GCC-10.3.0' + elif bpy.app.version < (3, 4, 0): + return '3.3.1-GCC-10.3.0' else: - return '3.2.2-GCC-10.3.0' + return '3.4.0-GCC-10.3.0' ################################################################## # async def CreateJobSimple(context, token, job_nodes, ClusterNodeTypeId, CommandTemplateId, FileTransferMethodId, ClusterId) # async def CreateJobTask2Dep(context, token, job_nodes, ClusterNodeTypeId1, CommandTemplateId1, ClusterNodeTypeId2, CommandTemplateId2, FileTransferMethodId, ClusterId) @@ -151,57 +130,101 @@ def GetDAQueueMPIProcs(CommandTemplateId): return 0 # return cores,queue,script -def GetDAQueueScript(ClusterId, ClusterNodeTypeId, CommandTemplateId, project_dir, pid): +def GetDAQueueScript(ClusterId, CommandTemplateId): # BARBORA if ClusterId == 1: if CommandTemplateId == 10: - return 36,'qprod','~/bheappe/scripts/job_init.sh' + return 36,'~/bheappe/scripts/job_init.sh' if CommandTemplateId == 11: - return 36,'qprod','~/bheappe/scripts/run_blender_cpu.sh' + return 36,'~/bheappe/scripts/run_blender_cpu.sh' if CommandTemplateId == 12: - return 36,'qprod','~/bheappe/scripts/job_finish.sh' + return 36,'~/bheappe/scripts/job_finish.sh' if CommandTemplateId == 13: - return 24,'qnvidia','~/bheappe/scripts/job_init.sh' + return 24,'~/bheappe/scripts/job_init.sh' if CommandTemplateId == 14: - return 24,'qnvidia','~/bheappe/scripts/run_blender_cuda.sh' + return 24,'~/bheappe/scripts/run_blender_cuda.sh' if CommandTemplateId == 15: - return 24,'qnvidia','~/bheappe/scripts/job_finish.sh' + return 24,'~/bheappe/scripts/job_finish.sh' if CommandTemplateId == 16: - return 24,'qnvidia','~/bheappe/scripts/run_blender_eevee.sh' + return 24,'~/bheappe/scripts/run_blender_eevee.sh' # KAROLINA if ClusterId == 2: if CommandTemplateId == 20: - return 128,'qprod','~/bheappe/scripts/job_init.sh' + return 128,'~/bheappe/scripts/job_init.sh' if CommandTemplateId == 21: - return 128,'qprod','~/bheappe/scripts/run_blender_cpu.sh' + return 128,'~/bheappe/scripts/run_blender_cpu.sh' if CommandTemplateId == 22: - return 128,'qprod','~/bheappe/scripts/job_finish.sh' + return 128,'~/bheappe/scripts/job_finish.sh' if CommandTemplateId == 23: - return 128,'qnvidia','~/bheappe/scripts/job_init.sh' + return 128,'~/bheappe/scripts/job_init.sh' if CommandTemplateId == 24: - return 128,'qnvidia','~/bheappe/scripts/run_blender_cuda.sh' + return 128,'~/bheappe/scripts/run_blender_cuda.sh' if CommandTemplateId == 25: - return 128,'qnvidia','~/bheappe/scripts/job_finish.sh' + return 128,'~/bheappe/scripts/job_finish.sh' if CommandTemplateId == 26: - return 128,'qnvidia','~/bheappe/scripts/run_blender_eevee.sh' + return 128,'~/bheappe/scripts/run_blender_eevee.sh' - return None,None,None + return None,None #def GetGitAddonRepository(): # return 'https://code.it4i.cz/raas/bheappe.git' def GetGitAddonCommand(repository, branch): - return 'if [ -d ~/bheappe ] ; then rm -rf ~/bheappe ; fi ; git clone -q -b ' + branch + ' ' + repository \ No newline at end of file + return 'if [ -d ~/bheappe ] ; then rm -rf ~/bheappe ; fi ; git clone -q -b ' + branch + ' ' + repository + + +def GetCurrentPidInfo(context, preferences): + blender_job_info_new = context.scene.raas_blender_job_info_new + + name = '' + queue = '' + dir = '' + + if blender_job_info_new.cluster_type == 'BARBORA': + + if 'ORIGCPU' in blender_job_info_new.job_queue: + name = preferences.raas_pid_name_barbora_cpu + queue = preferences.raas_pid_queue_barbora_cpu + dir = preferences.raas_pid_dir_barbora_cpu + + if 'ORIGCUDA' in blender_job_info_new.job_queue: + name = preferences.raas_pid_name_barbora_gpu + queue = preferences.raas_pid_queue_barbora_gpu + dir = preferences.raas_pid_dir_barbora_gpu + + if 'ORIGEEVEE' in blender_job_info_new.job_queue: + name = preferences.raas_pid_name_barbora_gpu + queue = preferences.raas_pid_queue_barbora_gpu + dir = preferences.raas_pid_dir_barbora_gpu + + if blender_job_info_new.cluster_type == 'KAROLINA': + + if 'ORIGCPU' in blender_job_info_new.job_queue: + name = preferences.raas_pid_name_karolina_cpu + queue = preferences.raas_pid_queue_karolina_cpu + dir = preferences.raas_pid_dir_karolina_cpu + + if 'ORIGCUDA' in blender_job_info_new.job_queue: + name = preferences.raas_pid_name_karolina_gpu + queue = preferences.raas_pid_queue_karolina_gpu + dir = preferences.raas_pid_dir_karolina_gpu + + if 'ORIGEEVEE' in blender_job_info_new.job_queue: + name = preferences.raas_pid_name_karolina_gpu + queue = preferences.raas_pid_queue_karolina_gpu + dir = preferences.raas_pid_dir_karolina_gpu + + return name, queue, dir diff --git a/bheappe/raas_jobs.py b/bheappe/raas_jobs.py index 4dc1f8c34b98a5bc04350398eb43c1f804b89818..a319fe3e1d4000b314c2300421ee357d3ca2b9d0 100644 --- a/bheappe/raas_jobs.py +++ b/bheappe/raas_jobs.py @@ -52,625 +52,638 @@ from . import raas_render log = logging.getLogger(__name__) ################################ -async def CreateJobSimple(context, token, job_nodes, ClusterNodeTypeId, CommandTemplateId, FileTransferMethodId, ClusterId): - - blender_job_info_new = context.scene.raas_blender_job_info_new - #filenamext = os.path.basename(blender_job_info_new.blendfile_path) - #filename = os.path.splitext(filenamext) - #filename = filename[0] - - job = None - username = raas_pref.preferences().raas_username - use_xorg = str(raas_pref.preferences().raas_use_xorg) - use_mpi = raas_config.GetDAQueueMPIProcs(CommandTemplateId) +async def CreateJobSimple(context, token, job_nodes, ClusterNodeTypeId, CommandTemplateId, FileTransferMethodId, ClusterId): - if blender_job_info_new.render_type == 'IMAGE': - job_arrays = None - frame_start = str(blender_job_info_new.frame_current) - frame_end = str(blender_job_info_new.frame_current) - frame_step = str(blender_job_info_new.frame_step) + blender_job_info_new = context.scene.raas_blender_job_info_new + + # filenamext = os.path.basename(blender_job_info_new.blendfile_path) + # filename = os.path.splitext(filenamext) + # filename = filename[0] + + job = None + username = raas_pref.preferences().raas_username + use_xorg = str(raas_pref.preferences().raas_use_xorg) + use_mpi = raas_config.GetDAQueueMPIProcs(CommandTemplateId) + + if blender_job_info_new.render_type == 'IMAGE': + job_arrays = None + frame_start = str(blender_job_info_new.frame_current) + frame_end = str(blender_job_info_new.frame_current) + frame_step = str(blender_job_info_new.frame_step) + else: + if use_mpi == 0: + job_arrays = '%d-%d:%d' % (blender_job_info_new.frame_start, + blender_job_info_new.frame_end, blender_job_info_new.frame_step) else: - if use_mpi == 0: - job_arrays = '%d-%d:%d' % (blender_job_info_new.frame_start, blender_job_info_new.frame_end, blender_job_info_new.frame_step) - else: - job_arrays = '%d-%d:%d' % (blender_job_info_new.frame_start, blender_job_info_new.frame_end, blender_job_info_new.frame_step * use_mpi) - - frame_start = str(blender_job_info_new.frame_start) - frame_end = str(blender_job_info_new.frame_end) - frame_step = str(blender_job_info_new.frame_step) - - #blender_param = str(filename) + '.blend' - blender_param = raas_render.convert_path_to_linux(blender_job_info_new.blendfile) - blender_version = raas_config.GetBlenderClusterVersion() - - job_walltime = blender_job_info_new.job_walltime * 60 - - task = { - "Name": blender_job_info_new.job_name, - "MinCores": job_nodes, - "MaxCores": job_nodes, - "WalltimeLimit": job_walltime, - "StandardOutputFile": 'stdout', - "StandardErrorFile": 'stderr', - "ProgressFile": 'stdprog', - "LogFile": 'stdlog', - "ClusterNodeTypeId": ClusterNodeTypeId, - "CommandTemplateId": CommandTemplateId, - "Priority": 4, - "JobArrays": job_arrays, - "EnvironmentVariables": [ - { - "Name": "job_project", - "Value": blender_job_info_new.job_project - }, - { - "Name": "job_email", - "Value": blender_job_info_new.job_email - }, - { - "Name": "frame_start", - "Value": frame_start - }, - { - "Name": "frame_end", - "Value": frame_end - }, - { - "Name": "frame_step", - "Value": frame_step - }, - { - "Name": "username", - "Value": username - }, - { - "Name": "blender_version", - "Value": blender_version - }, - { - "Name": "use_xorg", - "Value": use_xorg - }, - { - "Name": "use_mpi", - "Value": str(use_mpi) - } - ], - "TemplateParameterValues": [ - { - "CommandParameterIdentifier": "inputParam", - "ParameterValue": blender_param - } - ] - } - - job = { - "Name": blender_job_info_new.job_name, - "MinCores": job_nodes, - "MaxCores": job_nodes, - "Priority": 4, - "Project": blender_job_info_new.job_project, - "FileTransferMethodId": FileTransferMethodId, - "ClusterId": ClusterId, - "EnvironmentVariables": None, - "WaitingLimit": 0, - "WalltimeLimit": job_walltime, - "Tasks": [ - task - ] - } - - data = { - "JobSpecification": job, - "SessionCode": token - } - - item = context.scene.raas_submitted_job_info_ext_new - - if raas_pref.preferences().raas_use_direct_access == False: - resp_json = await raas_server.post("JobManagement/CreateJob", data) - raas_server.fill_items(item, resp_json) - else: - # Id : bpy.props.IntProperty(name="Id") - item.Id = 0 - # Name : bpy.props.StringProperty(name="Name") - item.Name = blender_job_info_new.job_name - # State : bpy.props.EnumProperty(items=JobStateExt_items,name="State") - item.State = "CONFIGURING" - # Priority : bpy.props.EnumProperty(items=JobPriorityExt_items,name="Priority",default='AVERAGE') - item.Priority = "AVERAGE" - # Project : bpy.props.StringProperty(name="Project Name") - item.Project = blender_job_info_new.job_project - # CreationTime : bpy.props.StringProperty(name="Creation Time") - # SubmitTime : bpy.props.StringProperty(name="Submit Time") - # StartTime : bpy.props.StringProperty(name="Start Time") - # EndTime : bpy.props.StringProperty(name="End Time") - # TotalAllocatedTime : bpy.props.FloatProperty(name="totalAllocatedTime") - # AllParameters : bpy.props.StringProperty(name="allParameters") - item.AllParameters = raas_server.json_dumps(data) - # Tasks: bpy.props.StringProperty(name="Tasks") - -async def CreateJobTask2Dep(context, token, job_nodes1, ClusterNodeTypeId1, CommandTemplateId1, job_nodes2, ClusterNodeTypeId2, CommandTemplateId2, FileTransferMethodId, ClusterId): + job_arrays = '%d-%d:%d' % (blender_job_info_new.frame_start, + blender_job_info_new.frame_end, blender_job_info_new.frame_step * use_mpi) + + frame_start = str(blender_job_info_new.frame_start) + frame_end = str(blender_job_info_new.frame_end) + frame_step = str(blender_job_info_new.frame_step) + + # blender_param = str(filename) + '.blend' + blender_param = raas_render.convert_path_to_linux( + blender_job_info_new.blendfile) + blender_version = raas_config.GetBlenderClusterVersion() + + job_walltime = blender_job_info_new.job_walltime * 60 + + task = { + "Name": blender_job_info_new.job_name, + "MinCores": job_nodes, + "MaxCores": job_nodes, + "WalltimeLimit": job_walltime, + "StandardOutputFile": 'stdout', + "StandardErrorFile": 'stderr', + "ProgressFile": 'stdprog', + "LogFile": 'stdlog', + "ClusterNodeTypeId": ClusterNodeTypeId, + "CommandTemplateId": CommandTemplateId, + "Priority": 4, + "JobArrays": job_arrays, + "EnvironmentVariables": [ + { + "Name": "job_project", + "Value": blender_job_info_new.job_project + }, + { + "Name": "job_email", + "Value": blender_job_info_new.job_email + }, + { + "Name": "frame_start", + "Value": frame_start + }, + { + "Name": "frame_end", + "Value": frame_end + }, + { + "Name": "frame_step", + "Value": frame_step + }, + { + "Name": "username", + "Value": username + }, + { + "Name": "blender_version", + "Value": blender_version + }, + { + "Name": "use_xorg", + "Value": use_xorg + }, + { + "Name": "use_mpi", + "Value": str(use_mpi) + } + ], + "TemplateParameterValues": [ + { + "CommandParameterIdentifier": "inputParam", + "ParameterValue": blender_param + } + ] + } + + job = { + "Name": blender_job_info_new.job_name, + "MinCores": job_nodes, + "MaxCores": job_nodes, + "Priority": 4, + "Project": blender_job_info_new.job_project, + "FileTransferMethodId": FileTransferMethodId, + "ClusterId": ClusterId, + "EnvironmentVariables": None, + "WaitingLimit": 0, + "WalltimeLimit": job_walltime, + "Tasks": [ + task + ] + } + + data = { + "JobSpecification": job, + "SessionCode": token + } - blender_job_info_new = context.scene.raas_blender_job_info_new + item = context.scene.raas_submitted_job_info_ext_new - #filenamext = os.path.basename(blender_job_info_new.blendfile_path) - #filename = os.path.splitext(filenamext) - #filename = filename[0] + if raas_pref.preferences().raas_use_direct_access == False: + resp_json = await raas_server.post("JobManagement/CreateJob", data) + raas_server.fill_items(item, resp_json) + else: + # Id : bpy.props.IntProperty(name="Id") + item.Id = 0 + # Name : bpy.props.StringProperty(name="Name") + item.Name = blender_job_info_new.job_name + # State : bpy.props.EnumProperty(items=JobStateExt_items,name="State") + item.State = "CONFIGURING" + # Priority : bpy.props.EnumProperty(items=JobPriorityExt_items,name="Priority",default='AVERAGE') + item.Priority = "AVERAGE" + # Project : bpy.props.StringProperty(name="Project Name") + item.Project = blender_job_info_new.job_project + # CreationTime : bpy.props.StringProperty(name="Creation Time") + # SubmitTime : bpy.props.StringProperty(name="Submit Time") + # StartTime : bpy.props.StringProperty(name="Start Time") + # EndTime : bpy.props.StringProperty(name="End Time") + # TotalAllocatedTime : bpy.props.FloatProperty(name="totalAllocatedTime") + # AllParameters : bpy.props.StringProperty(name="allParameters") + item.AllParameters = raas_server.json_dumps(data) + # Tasks: bpy.props.StringProperty(name="Tasks") - job = None - username = raas_pref.preferences().raas_username - use_xorg = str(raas_pref.preferences().raas_use_xorg) - use_mpi1 = raas_config.GetDAQueueMPIProcs(CommandTemplateId1) - use_mpi2 = raas_config.GetDAQueueMPIProcs(CommandTemplateId2) - if blender_job_info_new.render_type == 'IMAGE': - job_arrays = None - frame_start = str(blender_job_info_new.frame_current) - frame_end = str(blender_job_info_new.frame_current) - frame_step = str(blender_job_info_new.frame_step) - else: - if use_mpi2 == 0: - job_arrays = '%d-%d:%d' % (blender_job_info_new.frame_start, blender_job_info_new.frame_end, blender_job_info_new.frame_step) - else: - job_arrays = '%d-%d:%d' % (blender_job_info_new.frame_start, blender_job_info_new.frame_end, blender_job_info_new.frame_step * use_mpi2) - - frame_start = str(blender_job_info_new.frame_start) - frame_end = str(blender_job_info_new.frame_end) - frame_step = str(blender_job_info_new.frame_step) - - #blender_param = str(filename) + '.blend' - blender_param = raas_render.convert_path_to_linux(blender_job_info_new.blendfile) - blender_version = raas_config.GetBlenderClusterVersion() - - job_walltime = blender_job_info_new.job_walltime * 60 - - task1 = { - "Name": blender_job_info_new.job_name, - "MinCores": job_nodes1, - "MaxCores": job_nodes1, - "WalltimeLimit": 1800, - "StandardOutputFile": 'stdout', - "StandardErrorFile": 'stderr', - "ProgressFile": 'stdprog', - "LogFile": 'stdlog', - "ClusterNodeTypeId": ClusterNodeTypeId1, - "CommandTemplateId": CommandTemplateId1, - "Priority": 4, - "EnvironmentVariables": [ - { - "Name": "job_project", - "Value": blender_job_info_new.job_project - }, - { - "Name": "job_email", - "Value": blender_job_info_new.job_email - }, - { - "Name": "frame_start", - "Value": frame_start - }, - { - "Name": "frame_end", - "Value": frame_end - }, - { - "Name": "frame_step", - "Value": frame_step - }, - { - "Name": "username", - "Value": username - }, - { - "Name": "blender_version", - "Value": blender_version - }, - { - "Name": "use_xorg", - "Value": use_xorg - }, - { - "Name": "use_mpi", - "Value": str(use_mpi1) - } - ], - "TemplateParameterValues": [ - { - "CommandParameterIdentifier": "inputParam", - "ParameterValue": blender_param - } - ] - } - - task2 = { - "Name": blender_job_info_new.job_name, - "MinCores": job_nodes2, - "MaxCores": job_nodes2, - "WalltimeLimit": job_walltime, - "StandardOutputFile": 'stdout', - "StandardErrorFile": 'stderr', - "ProgressFile": 'stdprog', - "LogFile": 'stdlog', - "ClusterNodeTypeId": ClusterNodeTypeId2, - "CommandTemplateId": CommandTemplateId2, - "Priority": 4, - "JobArrays": job_arrays, - "DependsOn" : [ - task1 - ], - "EnvironmentVariables": [ - { - "Name": "job_project", - "Value": blender_job_info_new.job_project - }, - { - "Name": "job_email", - "Value": blender_job_info_new.job_email - }, - { - "Name": "frame_start", - "Value": frame_start - }, - { - "Name": "frame_end", - "Value": frame_end - }, - { - "Name": "frame_step", - "Value": frame_step - }, - { - "Name": "blender_version", - "Value": blender_version - }, - { - "Name": "use_xorg", - "Value": use_xorg - }, - { - "Name": "use_mpi", - "Value": str(use_mpi2) - } - ], - "TemplateParameterValues": [ - { - "CommandParameterIdentifier": "inputParam", - "ParameterValue": blender_param - } - ] - } - - job = { - "Name": blender_job_info_new.job_name, - "MinCores": job_nodes1, - "MaxCores": job_nodes1, - "Priority": 4, - "Project": blender_job_info_new.job_project, - "FileTransferMethodId": FileTransferMethodId, - "ClusterId": ClusterId, - "EnvironmentVariables": None, - "WaitingLimit": 0, - "WalltimeLimit": job_walltime, - "Tasks": [ - task1, - task2 - ] - } - - data = { - "JobSpecification": job, - "SessionCode": token - } - - item = context.scene.raas_submitted_job_info_ext_new - - if raas_pref.preferences().raas_use_direct_access == False: - resp_json = await raas_server.post("JobManagement/CreateJob", data) - raas_server.fill_items(item, resp_json) +async def CreateJobTask2Dep(context, token, job_nodes1, ClusterNodeTypeId1, CommandTemplateId1, job_nodes2, ClusterNodeTypeId2, CommandTemplateId2, FileTransferMethodId, ClusterId): + blender_job_info_new = context.scene.raas_blender_job_info_new + + # filenamext = os.path.basename(blender_job_info_new.blendfile_path) + # filename = os.path.splitext(filenamext) + # filename = filename[0] + + job = None + username = raas_pref.preferences().raas_username + use_xorg = str(raas_pref.preferences().raas_use_xorg) + use_mpi1 = raas_config.GetDAQueueMPIProcs(CommandTemplateId1) + use_mpi2 = raas_config.GetDAQueueMPIProcs(CommandTemplateId2) + + if blender_job_info_new.render_type == 'IMAGE': + job_arrays = None + frame_start = str(blender_job_info_new.frame_current) + frame_end = str(blender_job_info_new.frame_current) + frame_step = str(blender_job_info_new.frame_step) + else: + if use_mpi2 == 0: + job_arrays = '%d-%d:%d' % (blender_job_info_new.frame_start, + blender_job_info_new.frame_end, blender_job_info_new.frame_step) else: - # Id : bpy.props.IntProperty(name="Id") - item.Id = 0 - # Name : bpy.props.StringProperty(name="Name") - item.Name = blender_job_info_new.job_name - # State : bpy.props.EnumProperty(items=JobStateExt_items,name="State") - item.State = "CONFIGURING" - # Priority : bpy.props.EnumProperty(items=JobPriorityExt_items,name="Priority",default='AVERAGE') - item.Priority = "AVERAGE" - # Project : bpy.props.StringProperty(name="Project Name") - item.Project = blender_job_info_new.job_project - # CreationTime : bpy.props.StringProperty(name="Creation Time") - # SubmitTime : bpy.props.StringProperty(name="Submit Time") - # StartTime : bpy.props.StringProperty(name="Start Time") - # EndTime : bpy.props.StringProperty(name="End Time") - # TotalAllocatedTime : bpy.props.FloatProperty(name="totalAllocatedTime") - # AllParameters : bpy.props.StringProperty(name="allParameters") - item.AllParameters = raas_server.json_dumps(data) - # Tasks: bpy.props.StringProperty(name="Tasks") + job_arrays = '%d-%d:%d' % (blender_job_info_new.frame_start, + blender_job_info_new.frame_end, blender_job_info_new.frame_step * use_mpi2) + + frame_start = str(blender_job_info_new.frame_start) + frame_end = str(blender_job_info_new.frame_end) + frame_step = str(blender_job_info_new.frame_step) + + # blender_param = str(filename) + '.blend' + blender_param = raas_render.convert_path_to_linux( + blender_job_info_new.blendfile) + blender_version = raas_config.GetBlenderClusterVersion() + + job_walltime = blender_job_info_new.job_walltime * 60 + + task1 = { + "Name": blender_job_info_new.job_name, + "MinCores": job_nodes1, + "MaxCores": job_nodes1, + "WalltimeLimit": 1800, + "StandardOutputFile": 'stdout', + "StandardErrorFile": 'stderr', + "ProgressFile": 'stdprog', + "LogFile": 'stdlog', + "ClusterNodeTypeId": ClusterNodeTypeId1, + "CommandTemplateId": CommandTemplateId1, + "Priority": 4, + "EnvironmentVariables": [ + { + "Name": "job_project", + "Value": blender_job_info_new.job_project + }, + { + "Name": "job_email", + "Value": blender_job_info_new.job_email + }, + { + "Name": "frame_start", + "Value": frame_start + }, + { + "Name": "frame_end", + "Value": frame_end + }, + { + "Name": "frame_step", + "Value": frame_step + }, + { + "Name": "username", + "Value": username + }, + { + "Name": "blender_version", + "Value": blender_version + }, + { + "Name": "use_xorg", + "Value": use_xorg + }, + { + "Name": "use_mpi", + "Value": str(use_mpi1) + } + ], + "TemplateParameterValues": [ + { + "CommandParameterIdentifier": "inputParam", + "ParameterValue": blender_param + } + ] + } + + task2 = { + "Name": blender_job_info_new.job_name, + "MinCores": job_nodes2, + "MaxCores": job_nodes2, + "WalltimeLimit": job_walltime, + "StandardOutputFile": 'stdout', + "StandardErrorFile": 'stderr', + "ProgressFile": 'stdprog', + "LogFile": 'stdlog', + "ClusterNodeTypeId": ClusterNodeTypeId2, + "CommandTemplateId": CommandTemplateId2, + "Priority": 4, + "JobArrays": job_arrays, + "DependsOn": [ + task1 + ], + "EnvironmentVariables": [ + { + "Name": "job_project", + "Value": blender_job_info_new.job_project + }, + { + "Name": "job_email", + "Value": blender_job_info_new.job_email + }, + { + "Name": "frame_start", + "Value": frame_start + }, + { + "Name": "frame_end", + "Value": frame_end + }, + { + "Name": "frame_step", + "Value": frame_step + }, + { + "Name": "blender_version", + "Value": blender_version + }, + { + "Name": "use_xorg", + "Value": use_xorg + }, + { + "Name": "use_mpi", + "Value": str(use_mpi2) + } + ], + "TemplateParameterValues": [ + { + "CommandParameterIdentifier": "inputParam", + "ParameterValue": blender_param + } + ] + } + + job = { + "Name": blender_job_info_new.job_name, + "MinCores": job_nodes1, + "MaxCores": job_nodes1, + "Priority": 4, + "Project": blender_job_info_new.job_project, + "FileTransferMethodId": FileTransferMethodId, + "ClusterId": ClusterId, + "EnvironmentVariables": None, + "WaitingLimit": 0, + "WalltimeLimit": job_walltime, + "Tasks": [ + task1, + task2 + ] + } + + data = { + "JobSpecification": job, + "SessionCode": token + } -async def CreateJobTask3Dep(context, token, job_nodes1, ClusterNodeTypeId1, CommandTemplateId1, job_nodes2, ClusterNodeTypeId2, CommandTemplateId2, job_nodes3, ClusterNodeTypeId3, CommandTemplateId3, FileTransferMethodId, ClusterId): + item = context.scene.raas_submitted_job_info_ext_new - blender_job_info_new = context.scene.raas_blender_job_info_new + if raas_pref.preferences().raas_use_direct_access == False: + resp_json = await raas_server.post("JobManagement/CreateJob", data) + raas_server.fill_items(item, resp_json) + + else: + # Id : bpy.props.IntProperty(name="Id") + item.Id = 0 + # Name : bpy.props.StringProperty(name="Name") + item.Name = blender_job_info_new.job_name + # State : bpy.props.EnumProperty(items=JobStateExt_items,name="State") + item.State = "CONFIGURING" + # Priority : bpy.props.EnumProperty(items=JobPriorityExt_items,name="Priority",default='AVERAGE') + item.Priority = "AVERAGE" + # Project : bpy.props.StringProperty(name="Project Name") + item.Project = blender_job_info_new.job_project + # CreationTime : bpy.props.StringProperty(name="Creation Time") + # SubmitTime : bpy.props.StringProperty(name="Submit Time") + # StartTime : bpy.props.StringProperty(name="Start Time") + # EndTime : bpy.props.StringProperty(name="End Time") + # TotalAllocatedTime : bpy.props.FloatProperty(name="totalAllocatedTime") + # AllParameters : bpy.props.StringProperty(name="allParameters") + item.AllParameters = raas_server.json_dumps(data) + # Tasks: bpy.props.StringProperty(name="Tasks") - #filenamext = os.path.basename(blender_job_info_new.blendfile_path) - #filename = os.path.splitext(filenamext) - #filename = filename[0] - job = None - username = raas_pref.preferences().raas_username - use_xorg = str(raas_pref.preferences().raas_use_xorg) - use_mpi1 = raas_config.GetDAQueueMPIProcs(CommandTemplateId1) - use_mpi2 = raas_config.GetDAQueueMPIProcs(CommandTemplateId2) - use_mpi3 = raas_config.GetDAQueueMPIProcs(CommandTemplateId3) +async def CreateJobTask3Dep(context, token, job_nodes1, ClusterNodeTypeId1, CommandTemplateId1, job_nodes2, ClusterNodeTypeId2, CommandTemplateId2, job_nodes3, ClusterNodeTypeId3, CommandTemplateId3, FileTransferMethodId, ClusterId): - if blender_job_info_new.render_type == 'IMAGE': - job_arrays = None - frame_start = str(blender_job_info_new.frame_current) - frame_end = str(blender_job_info_new.frame_current) - frame_step = str(blender_job_info_new.frame_step) + blender_job_info_new = context.scene.raas_blender_job_info_new + + # filenamext = os.path.basename(blender_job_info_new.blendfile_path) + # filename = os.path.splitext(filenamext) + # filename = filename[0] + + job = None + username = raas_pref.preferences().raas_username + use_xorg = str(raas_pref.preferences().raas_use_xorg) + use_mpi1 = raas_config.GetDAQueueMPIProcs(CommandTemplateId1) + use_mpi2 = raas_config.GetDAQueueMPIProcs(CommandTemplateId2) + use_mpi3 = raas_config.GetDAQueueMPIProcs(CommandTemplateId3) + + if blender_job_info_new.render_type == 'IMAGE': + job_arrays = None + frame_start = str(blender_job_info_new.frame_current) + frame_end = str(blender_job_info_new.frame_current) + frame_step = str(blender_job_info_new.frame_step) + else: + if use_mpi2 == 0: + job_arrays = '%d-%d:%d' % (blender_job_info_new.frame_start, + blender_job_info_new.frame_end, blender_job_info_new.frame_step) else: - if use_mpi2 == 0: - job_arrays = '%d-%d:%d' % (blender_job_info_new.frame_start, blender_job_info_new.frame_end, blender_job_info_new.frame_step) - else: - job_arrays = '%d-%d:%d' % (blender_job_info_new.frame_start, blender_job_info_new.frame_end, blender_job_info_new.frame_step * use_mpi2) - - frame_start = str(blender_job_info_new.frame_start) - frame_end = str(blender_job_info_new.frame_end) - frame_step = str(blender_job_info_new.frame_step) - - #blender_param = str(filename) + '.blend' - blender_param = raas_render.convert_path_to_linux(blender_job_info_new.blendfile) - blender_version = raas_config.GetBlenderClusterVersion() - - job_walltime = blender_job_info_new.job_walltime * 60 - - task1 = { - "Name": blender_job_info_new.job_name, - "MinCores": job_nodes1, - "MaxCores": job_nodes1, - "WalltimeLimit": 1800, - "StandardOutputFile": 'stdout', - "StandardErrorFile": 'stderr', - "ProgressFile": 'stdprog', - "LogFile": 'stdlog', - "ClusterNodeTypeId": ClusterNodeTypeId1, - "CommandTemplateId": CommandTemplateId1, - "Priority": 4, - "EnvironmentVariables": [ - { - "Name": "job_project", - "Value": blender_job_info_new.job_project - }, - { - "Name": "job_email", - "Value": blender_job_info_new.job_email - }, - { - "Name": "frame_start", - "Value": frame_start - }, - { - "Name": "frame_end", - "Value": frame_end - }, - { - "Name": "frame_step", - "Value": frame_step - }, - { - "Name": "username", - "Value": username - }, - { - "Name": "blender_version", - "Value": blender_version - }, - { - "Name": "use_xorg", - "Value": use_xorg - }, - { - "Name": "use_mpi", - "Value": str(use_mpi1) - } - ], - "TemplateParameterValues": [ - { - "CommandParameterIdentifier": "inputParam", - "ParameterValue": blender_param - } - ] - } - - task2 = { - "Name": blender_job_info_new.job_name, - "MinCores": job_nodes2, - "MaxCores": job_nodes2, - "WalltimeLimit": job_walltime, - "StandardOutputFile": 'stdout', - "StandardErrorFile": 'stderr', - "ProgressFile": 'stdprog', - "LogFile": 'stdlog', - "ClusterNodeTypeId": ClusterNodeTypeId2, - "CommandTemplateId": CommandTemplateId2, - "Priority": 4, - "JobArrays": job_arrays, - "DependsOn" : [ - task1 - ], - "EnvironmentVariables": [ - { - "Name": "job_project", - "Value": blender_job_info_new.job_project - }, - { - "Name": "job_email", - "Value": blender_job_info_new.job_email - }, - { - "Name": "frame_start", - "Value": frame_start - }, - { - "Name": "frame_end", - "Value": frame_end - }, - { - "Name": "frame_step", - "Value": frame_step - }, - { - "Name": "blender_version", - "Value": blender_version - }, - { - "Name": "use_xorg", - "Value": use_xorg - }, - { - "Name": "use_mpi", - "Value": str(use_mpi2) - } - ], - "TemplateParameterValues": [ - { - "CommandParameterIdentifier": "inputParam", - "ParameterValue": blender_param - } - ] - } - - task3 = { - "Name": blender_job_info_new.job_name, - "MinCores": job_nodes3, - "MaxCores": job_nodes3, - "WalltimeLimit": job_walltime, - "StandardOutputFile": 'stdout', - "StandardErrorFile": 'stderr', - "ProgressFile": 'stdprog', - "LogFile": 'stdlog', - "ClusterNodeTypeId": ClusterNodeTypeId3, - "CommandTemplateId": CommandTemplateId3, - "Priority": 4, - "DependsOn" : [ - task2 - ], - "EnvironmentVariables": [ - { - "Name": "job_project", - "Value": blender_job_info_new.job_project - }, - { - "Name": "job_email", - "Value": blender_job_info_new.job_email - }, - { - "Name": "frame_start", - "Value": frame_start - }, - { - "Name": "frame_end", - "Value": frame_end - }, - { - "Name": "frame_step", - "Value": frame_step - }, - { - "Name": "blender_version", - "Value": blender_version - }, - { - "Name": "use_xorg", - "Value": use_xorg - }, - { - "Name": "use_mpi", - "Value": str(use_mpi3) - } - ], - "TemplateParameterValues": [ - { - "CommandParameterIdentifier": "inputParam", - "ParameterValue": blender_param - } - ] - } - - job = { - "Name": blender_job_info_new.job_name, - "MinCores": job_nodes1, - "MaxCores": job_nodes1, - "Priority": 4, - "Project": blender_job_info_new.job_project, - "FileTransferMethodId": FileTransferMethodId, - "ClusterId": ClusterId, - "EnvironmentVariables": None, - "WaitingLimit": 0, - "WalltimeLimit": job_walltime, - "Tasks": [ - task1, - task2, - task3 - ] - } - - data = { - "JobSpecification": job, - "SessionCode": token - } - - item = context.scene.raas_submitted_job_info_ext_new - - if raas_pref.preferences().raas_use_direct_access == False: - resp_json = await raas_server.post("JobManagement/CreateJob", data) - raas_server.fill_items(item, resp_json) + job_arrays = '%d-%d:%d' % (blender_job_info_new.frame_start, + blender_job_info_new.frame_end, blender_job_info_new.frame_step * use_mpi2) + + frame_start = str(blender_job_info_new.frame_start) + frame_end = str(blender_job_info_new.frame_end) + frame_step = str(blender_job_info_new.frame_step) + + # blender_param = str(filename) + '.blend' + blender_param = raas_render.convert_path_to_linux( + blender_job_info_new.blendfile) + blender_version = raas_config.GetBlenderClusterVersion() + + job_walltime = blender_job_info_new.job_walltime * 60 + + task1 = { + "Name": blender_job_info_new.job_name, + "MinCores": job_nodes1, + "MaxCores": job_nodes1, + "WalltimeLimit": 1800, + "StandardOutputFile": 'stdout', + "StandardErrorFile": 'stderr', + "ProgressFile": 'stdprog', + "LogFile": 'stdlog', + "ClusterNodeTypeId": ClusterNodeTypeId1, + "CommandTemplateId": CommandTemplateId1, + "Priority": 4, + "EnvironmentVariables": [ + { + "Name": "job_project", + "Value": blender_job_info_new.job_project + }, + { + "Name": "job_email", + "Value": blender_job_info_new.job_email + }, + { + "Name": "frame_start", + "Value": frame_start + }, + { + "Name": "frame_end", + "Value": frame_end + }, + { + "Name": "frame_step", + "Value": frame_step + }, + { + "Name": "username", + "Value": username + }, + { + "Name": "blender_version", + "Value": blender_version + }, + { + "Name": "use_xorg", + "Value": use_xorg + }, + { + "Name": "use_mpi", + "Value": str(use_mpi1) + } + ], + "TemplateParameterValues": [ + { + "CommandParameterIdentifier": "inputParam", + "ParameterValue": blender_param + } + ] + } + + task2 = { + "Name": blender_job_info_new.job_name, + "MinCores": job_nodes2, + "MaxCores": job_nodes2, + "WalltimeLimit": job_walltime, + "StandardOutputFile": 'stdout', + "StandardErrorFile": 'stderr', + "ProgressFile": 'stdprog', + "LogFile": 'stdlog', + "ClusterNodeTypeId": ClusterNodeTypeId2, + "CommandTemplateId": CommandTemplateId2, + "Priority": 4, + "JobArrays": job_arrays, + "DependsOn": [ + task1 + ], + "EnvironmentVariables": [ + { + "Name": "job_project", + "Value": blender_job_info_new.job_project + }, + { + "Name": "job_email", + "Value": blender_job_info_new.job_email + }, + { + "Name": "frame_start", + "Value": frame_start + }, + { + "Name": "frame_end", + "Value": frame_end + }, + { + "Name": "frame_step", + "Value": frame_step + }, + { + "Name": "blender_version", + "Value": blender_version + }, + { + "Name": "use_xorg", + "Value": use_xorg + }, + { + "Name": "use_mpi", + "Value": str(use_mpi2) + } + ], + "TemplateParameterValues": [ + { + "CommandParameterIdentifier": "inputParam", + "ParameterValue": blender_param + } + ] + } + + task3 = { + "Name": blender_job_info_new.job_name, + "MinCores": job_nodes3, + "MaxCores": job_nodes3, + "WalltimeLimit": job_walltime, + "StandardOutputFile": 'stdout', + "StandardErrorFile": 'stderr', + "ProgressFile": 'stdprog', + "LogFile": 'stdlog', + "ClusterNodeTypeId": ClusterNodeTypeId3, + "CommandTemplateId": CommandTemplateId3, + "Priority": 4, + "DependsOn": [ + task2 + ], + "EnvironmentVariables": [ + { + "Name": "job_project", + "Value": blender_job_info_new.job_project + }, + { + "Name": "job_email", + "Value": blender_job_info_new.job_email + }, + { + "Name": "frame_start", + "Value": frame_start + }, + { + "Name": "frame_end", + "Value": frame_end + }, + { + "Name": "frame_step", + "Value": frame_step + }, + { + "Name": "blender_version", + "Value": blender_version + }, + { + "Name": "use_xorg", + "Value": use_xorg + }, + { + "Name": "use_mpi", + "Value": str(use_mpi3) + } + ], + "TemplateParameterValues": [ + { + "CommandParameterIdentifier": "inputParam", + "ParameterValue": blender_param + } + ] + } + + job = { + "Name": blender_job_info_new.job_name, + "MinCores": job_nodes1, + "MaxCores": job_nodes1, + "Priority": 4, + "Project": blender_job_info_new.job_project, + "FileTransferMethodId": FileTransferMethodId, + "ClusterId": ClusterId, + "EnvironmentVariables": None, + "WaitingLimit": 0, + "WalltimeLimit": job_walltime, + "Tasks": [ + task1, + task2, + task3 + ] + } + + data = { + "JobSpecification": job, + "SessionCode": token + } - else: - # Id : bpy.props.IntProperty(name="Id") - item.Id = 0 - # Name : bpy.props.StringProperty(name="Name") - item.Name = blender_job_info_new.job_name - # State : bpy.props.EnumProperty(items=JobStateExt_items,name="State") - item.State = "CONFIGURING" - # Priority : bpy.props.EnumProperty(items=JobPriorityExt_items,name="Priority",default='AVERAGE') - item.Priority = "AVERAGE" - # Project : bpy.props.StringProperty(name="Project Name") - item.Project = blender_job_info_new.job_project - # CreationTime : bpy.props.StringProperty(name="Creation Time") - # SubmitTime : bpy.props.StringProperty(name="Submit Time") - # StartTime : bpy.props.StringProperty(name="Start Time") - # EndTime : bpy.props.StringProperty(name="End Time") - # TotalAllocatedTime : bpy.props.FloatProperty(name="totalAllocatedTime") - # AllParameters : bpy.props.StringProperty(name="allParameters") - item.AllParameters = raas_server.json_dumps(data) - # Tasks: bpy.props.StringProperty(name="Tasks") - -# _19=$(echo ' cd /mnt/proj3/open-18-15/heappe/executions/salomon/7; /.key_script/nodefile.sh; cd /mnt/proj3/open-18-15/heappe/executions/salomon/7/19; -# /mnt/proj3/open-18-15/bheappe/salomon/run_blender_mic_pre.sh raas_test\.blend; 1>> /mnt/proj3/open-18-15/heappe/executions/salomon/7/19/stdout 2>> -# /mnt/proj3/open-18-15/heappe/executions/salomon/7/19/stderr ' | qsub -P "test_salo" -A OPEN-18-15 -v frame_end=1,frame_start=1,job_email=milan.jaros@vsb.cz,job_project=test_salo -# -l select=1:ncpus=24 -N 19 -l walltime=0:10:0 -e /mnt/proj3/open-18-15/heappe/executions/salomon/7/19/stderr -o /mnt/proj3/open-18-15/heappe/executions/salomon/7/19/stdout + item = context.scene.raas_submitted_job_info_ext_new + + if raas_pref.preferences().raas_use_direct_access == False: + resp_json = await raas_server.post("JobManagement/CreateJob", data) + raas_server.fill_items(item, resp_json) + + else: + # Id : bpy.props.IntProperty(name="Id") + item.Id = 0 + # Name : bpy.props.StringProperty(name="Name") + item.Name = blender_job_info_new.job_name + # State : bpy.props.EnumProperty(items=JobStateExt_items,name="State") + item.State = "CONFIGURING" + # Priority : bpy.props.EnumProperty(items=JobPriorityExt_items,name="Priority",default='AVERAGE') + item.Priority = "AVERAGE" + # Project : bpy.props.StringProperty(name="Project Name") + item.Project = blender_job_info_new.job_project + # CreationTime : bpy.props.StringProperty(name="Creation Time") + # SubmitTime : bpy.props.StringProperty(name="Submit Time") + # StartTime : bpy.props.StringProperty(name="Start Time") + # EndTime : bpy.props.StringProperty(name="End Time") + # TotalAllocatedTime : bpy.props.FloatProperty(name="totalAllocatedTime") + # AllParameters : bpy.props.StringProperty(name="allParameters") + item.AllParameters = raas_server.json_dumps(data) + # Tasks: bpy.props.StringProperty(name="Tasks") + +# _19=$(echo ' cd /mnt/proj3/open-18-15/heappe/executions/salomon/7; /.key_script/nodefile.sh; cd /mnt/proj3/open-18-15/heappe/executions/salomon/7/19; +# /mnt/proj3/open-18-15/bheappe/salomon/run_blender_mic_pre.sh raas_test\.blend; 1>> /mnt/proj3/open-18-15/heappe/executions/salomon/7/19/stdout 2>> +# /mnt/proj3/open-18-15/heappe/executions/salomon/7/19/stderr ' | qsub -P "test_salo" -A OPEN-18-15 -v frame_end=1,frame_start=1,job_email=milan.jaros@vsb.cz,job_project=test_salo +# -l select=1:ncpus=24 -N 19 -l walltime=0:10:0 -e /mnt/proj3/open-18-15/heappe/executions/salomon/7/19/stderr -o /mnt/proj3/open-18-15/heappe/executions/salomon/7/19/stdout # -r n -q qprod -l cpu_hyper_threading=true);echo $_19; -# -# _20=$(echo ' cd /mnt/proj3/open-18-15/heappe/executions/salomon/7; /.key_script/nodefile.sh; -# cd /mnt/proj3/open-18-15/heappe/executions/salomon/7/20; ln -s ../19/ .; rm /mnt/proj3/open-18-15/heappe/executions/salomon/7/20/stdout; -# rm /mnt/proj3/open-18-15/heappe/executions/salomon/7/20/stderr;/mnt/proj3/open-18-15/bheappe/salomon/run_blender_mpp.sh raas_test\.blend; -# 1>> /mnt/proj3/open-18-15/heappe/executions/salomon/7/20/stdout 2>> /mnt/proj3/open-18-15/heappe/executions/salomon/7/20/stderr ' -# | qsub -P "test_salo" -A OPEN-18-15 -W depend=afterok:$_19 -v frame_end=1,frame_start=1,job_email=milan.jaros@vsb.cz,job_project=test_salo -# -l select=1:ncpus=24 -N 20 -l walltime=0:30:0 -e /mnt/proj3/open-18-15/heappe/executions/salomon/7/20/stderr +# +# _20=$(echo ' cd /mnt/proj3/open-18-15/heappe/executions/salomon/7; /.key_script/nodefile.sh; +# cd /mnt/proj3/open-18-15/heappe/executions/salomon/7/20; ln -s ../19/ .; rm /mnt/proj3/open-18-15/heappe/executions/salomon/7/20/stdout; +# rm /mnt/proj3/open-18-15/heappe/executions/salomon/7/20/stderr;/mnt/proj3/open-18-15/bheappe/salomon/run_blender_mpp.sh raas_test\.blend; +# 1>> /mnt/proj3/open-18-15/heappe/executions/salomon/7/20/stdout 2>> /mnt/proj3/open-18-15/heappe/executions/salomon/7/20/stderr ' +# | qsub -P "test_salo" -A OPEN-18-15 -W depend=afterok:$_19 -v frame_end=1,frame_start=1,job_email=milan.jaros@vsb.cz,job_project=test_salo +# -l select=1:ncpus=24 -N 20 -l walltime=0:30:0 -e /mnt/proj3/open-18-15/heappe/executions/salomon/7/20/stderr # -o /mnt/proj3/open-18-15/heappe/executions/salomon/7/20/stdout -r n -q qmpp -l cpu_hyper_threading=true); # echo $_20; -# -# _21=$(echo ' cd /mnt/proj3/open-18-15/heappe/executions/salomon/7; ~/.key_script/nodefile.sh; -# cd /mnt/proj3/open-18-15/heappe/executions/salomon/7/21; ln -s ../20/ .; -# rm /mnt/proj3/open-18-15/heappe/executions/salomon/7/21/stdout; +# +# _21=$(echo ' cd /mnt/proj3/open-18-15/heappe/executions/salomon/7; ~/.key_script/nodefile.sh; +# cd /mnt/proj3/open-18-15/heappe/executions/salomon/7/21; ln -s ../20/ .; +# rm /mnt/proj3/open-18-15/heappe/executions/salomon/7/21/stdout; # rm /mnt/proj3/open-18-15/heappe/executions/salomon/7/21/stderr; -# /mnt/proj3/open-18-15/bheappe/salomon/run_blender_mic_post.sh raas_test\.blend; 1>> /mnt/proj3/open-18-15/heappe/executions/salomon/7/21/stdout 2>> -# /mnt/proj3/open-18-15/heappe/executions/salomon/7/21/stderr ' | qsub -P "test_salo" -A OPEN-18-15 -W depend=afterok:$_20 -v frame_start=1,job_email=milan.jaros@vsb.cz,job_project=test_salo,frame_end=1 +# /mnt/proj3/open-18-15/bheappe/salomon/run_blender_mic_post.sh raas_test\.blend; 1>> /mnt/proj3/open-18-15/heappe/executions/salomon/7/21/stdout 2>> +# /mnt/proj3/open-18-15/heappe/executions/salomon/7/21/stderr ' | qsub -P "test_salo" -A OPEN-18-15 -W depend=afterok:$_20 -v frame_start=1,job_email=milan.jaros@vsb.cz,job_project=test_salo,frame_end=1 # -l select=1:ncpus=24 -N 21 -l walltime=0:10:0 -e /mnt/proj3/open-18-15/heappe/executions/salomon/7/21/stderr -o /mnt/proj3/open-18-15/heappe/executions/salomon/7/21/stdout -# -r n -q qprod -l cpu_hyper_threading=true);echo $_21; +# -r n -q qprod -l cpu_hyper_threading=true);echo $_21; + def CmdCreatePBSJob(context): item = context.scene.raas_submitted_job_info_ext_new @@ -687,11 +700,15 @@ def CmdCreatePBSJob(context): for task in tasks: cluster_node_type_id = task['ClusterNodeTypeId'] command_template_id = task['CommandTemplateId'] - cores,queue,script = raas_config.GetDAQueueScript(cluster_id, cluster_node_type_id, command_template_id, raas_pref.preferences().raas_pid_dir, raas_pref.preferences().raas_pid.lower()) + cores, script = raas_config.GetDAQueueScript( + cluster_id, command_template_id) + pid_name, pid_queue, pid_dir = raas_config.GetCurrentPidInfo( + context, raas_pref.preferences()) + file = task['TemplateParameterValues'][0]['ParameterValue'] - ncpus = int(cores) - nodes = 1 #int(task['MaxCores'] / cores) + # ncpus = int(cores) + nodes = 1 # int(task['MaxCores'] / cores) envs = task['EnvironmentVariables'] job_env = '' @@ -700,13 +717,14 @@ def CmdCreatePBSJob(context): for env in envs: job_env = job_env + env['Name'] + '=' + env['Value'] + ',' - work_dir = raas_render.get_direct_access_remote_storage(context) + '/' + job_name + work_dir = raas_render.get_direct_access_remote_storage( + context) + '/' + job_name work_dir_stderr = work_dir + '/' + task['StandardErrorFile'] - work_dir_stdout = work_dir + '/' + task['StandardOutputFile'] + work_dir_stdout = work_dir + '/' + task['StandardOutputFile'] mm, ss = divmod(task['WalltimeLimit'], 60) - hh, mm= divmod(mm, 60) + hh, mm = divmod(mm, 60) walltime = str(hh) + ':' + str(mm) + ':' + str(ss) @@ -719,19 +737,28 @@ def CmdCreatePBSJob(context): if 'DependsOn' in task: depends_on = ' -W depend=afterany:$_' + str(task_id - 1) job_env = job_env + 'depends_on=\"$_' + str(task_id - 1) + '\",' - + job_env = job_env + 'work_dir=' + work_dir xorg_true = '' if raas_pref.preferences().raas_use_xorg == True: xorg_true = ' -l xorg=True ' - cmd = cmd + '_' + str(task_id) + '=$(echo \' ' + script + ' ' + file + ' \' | qsub -P \"' + job_project + '\" -A ' + raas_config.GetDAOpenCallProject(raas_pref.preferences().raas_pid.upper()) + ' -v ' + job_env + ' -l select=' + str(nodes) + ':ncpus=' + str(ncpus) + ' -N \"' + job_project + '\" -l walltime=' + walltime + ' -e ' + work_dir_stderr + ' -o ' + work_dir_stdout + ' -q ' + queue + job_array + depends_on + xorg_true + ');echo $_' + str(task_id) + ';' + # cmd = cmd + '_' + str(task_id) + '=$(echo \' ' + script + ' ' + file + ' \' | qsub -P \"' + job_project + '\" -A ' + raas_config.GetDAOpenCallProject(pid_name.upper()) + ' -v ' + job_env + ' -l select=' + str(nodes) + \ + # ':ncpus=' + str(ncpus) + ' -N \"' + job_project + '\" -l walltime=' + walltime + ' -e ' + work_dir_stderr + \ + # ' -o ' + work_dir_stdout + ' -q ' + pid_queue + job_array + \ + # depends_on + xorg_true + ');echo $_' + str(task_id) + ';' + + cmd = cmd + '_' + str(task_id) + '=$(echo \' ' + script + ' ' + file + ' \' | qsub -P \"' + job_project + '\" -A ' + raas_config.GetDAOpenCallProject(pid_name.upper()) + ' -v ' + job_env + ' -l select=' + str(nodes) + \ + ' -N \"' + job_project + '\" -l walltime=' + walltime + ' -e ' + work_dir_stderr + \ + ' -o ' + work_dir_stdout + ' -q ' + pid_queue + job_array + \ + depends_on + xorg_true + ');echo $_' + str(task_id) + ';' task_id = task_id + 1 return cmd + def CmdCreateStatPBSJobFile(context, pbs_jobs): item = context.scene.raas_submitted_job_info_ext_new data = json.loads(item.AllParameters) @@ -745,7 +772,8 @@ def CmdCreateStatPBSJobFile(context, pbs_jobs): pbs_job = pbs_jobs[1] if len(pbs_job) > 0: - job_log = raas_render.get_direct_access_remote_storage(context) + '/' + job_name + '.job' + job_log = raas_render.get_direct_access_remote_storage( + context) + '/' + job_name + '.job' cmd = cmd + 'qstat -fx ' + pbs_job + ' > ' + job_log + ';' # for pbs_job in pbs_jobs: @@ -755,16 +783,20 @@ def CmdCreateStatPBSJobFile(context, pbs_jobs): return cmd + def CmdCreateProjectGroupFolder(context): cmd = 'mkdir -p ' + raas_render.get_direct_access_remote_storage(context) return cmd + def CmdGetStatPBSJobFile(context, job_name): - job_log = raas_render.get_direct_access_remote_storage(context) + '/' + job_name + '.job' - cmd = 'cat ' + job_log - + job_log = raas_render.get_direct_access_remote_storage( + context) + '/' + job_name + '.job' + cmd = 'cat ' + job_log + return cmd + def CmdGetPidDir(pid): - cmd = 'it4i-get-project-dir ' + pid - return cmd \ No newline at end of file + cmd = 'it4i-get-project-dir ' + pid + return cmd diff --git a/bheappe/raas_pref.py b/bheappe/raas_pref.py index b2b501855e9357868c33c20caa044cd5e4205842..c9cd2e33321575a50710e0dc3edd4c15309a8a5a 100644 --- a/bheappe/raas_pref.py +++ b/bheappe/raas_pref.py @@ -18,6 +18,10 @@ # (c) IT4Innovations, VSB-TUO +import importlib +import sys +import subprocess +from collections import namedtuple import functools import logging import os.path @@ -41,6 +45,7 @@ ADDON_NAME = 'bheappe' log = logging.getLogger(__name__) + @functools.lru_cache() def factor(factor: float) -> dict: """Construct keyword argument for UILayout.split(). @@ -53,25 +58,28 @@ def factor(factor: float) -> dict: return {'factor': factor} ################################################## -def show_message_box(message = "", title = "BHeappe", icon = 'INFO'): + + +def show_message_box(message="", title="BHeappe", icon='INFO'): def draw(self, context): self.layout.label(text=message) - bpy.context.window_manager.popup_menu(draw, title = title, icon = icon) + bpy.context.window_manager.popup_menu(draw, title=title, icon=icon) + ################################################## -from collections import namedtuple -import subprocess, sys, importlib Dependency = namedtuple("Dependency", ["module", "package", "name"]) python_dependencies = (Dependency(module="paramiko", package="paramiko", name=None), - Dependency(module="scp", package="scp", name=None), - Dependency(module="blender_asset_tracer", package="blender_asset_tracer", name=None), - ) + Dependency(module="scp", package="scp", name=None), + Dependency(module="blender_asset_tracer", + package="blender_asset_tracer", name=None), + ) internal_dependencies = [] + def import_module(module_name, global_name=None, reload=True): if global_name is None: global_name = module_name @@ -83,6 +91,7 @@ def import_module(module_name, global_name=None, reload=True): # the given name, just like the regular import would. globals()[global_name] = importlib.import_module(module_name) + def install_pip(): try: if bpy.app.version < (2, 90, 0): @@ -94,7 +103,8 @@ def install_pip(): subprocess.run([python_exe, "-m", "pip", "--version"], check=True) # Upgrade - subprocess.run([python_exe, "-m", "pip", "install", "--upgrade", "pip"], check=True) + subprocess.run([python_exe, "-m", "pip", "install", + "--upgrade", "pip"], check=True) except subprocess.CalledProcessError: import ensurepip @@ -102,6 +112,7 @@ def install_pip(): ensurepip.bootstrap() os.environ.pop("PIP_REQ_TRACKER", None) + def install_and_import_module(module_name, package_name=None, global_name=None): if package_name is None: package_name = module_name @@ -118,23 +129,27 @@ def install_and_import_module(module_name, package_name=None, global_name=None): else: python_exe = sys.executable - subprocess.run([python_exe, "-m", "pip", "install", package_name], check=True, env=environ_copy) + subprocess.run([python_exe, "-m", "pip", "install", + package_name], check=True, env=environ_copy) # The installation succeeded, attempt to import the module again - import_module(module_name, global_name) + import_module(module_name, global_name) + +################################################################ + -################################################################ def _paramiko_generate_ssh_key(private_filepath, public_filepath, password): - import paramiko - key = paramiko.RSAKey.generate(2048) - key.write_private_key_file(private_filepath, password) - - public_key = "%s %s" % (key.get_name(), key.get_base64()) - with open(public_filepath,"w") as f: - f.write(public_key) - - f.close() + import paramiko + key = paramiko.RSAKey.generate(2048) + key.write_private_key_file(private_filepath, password) + + public_key = "%s %s" % (key.get_name(), key.get_base64()) + with open(public_filepath, "w") as f: + f.write(public_key) + + f.close() + class RAAS_OT_generate_sshkey(Operator): bl_idname = 'raas.generate_sshkey' @@ -147,23 +162,28 @@ class RAAS_OT_generate_sshkey(Operator): return {"CANCELLED"} if len(preferences().raas_gen_public_key_path) == 0: - preferences().raas_gen_public_key_path = preferences().raas_job_storage_path + '/raas_gen.public.key' + preferences().raas_gen_public_key_path = preferences( + ).raas_job_storage_path + '/raas_gen.public.key' if len(preferences().raas_gen_private_key_path) == 0: - preferences().raas_gen_private_key_path = preferences().raas_job_storage_path + '/raas_gen.private.key' + preferences().raas_gen_private_key_path = preferences( + ).raas_job_storage_path + '/raas_gen.private.key' - _paramiko_generate_ssh_key(preferences().raas_gen_private_key_path, preferences().raas_gen_public_key_path, preferences().raas_gen_password) + _paramiko_generate_ssh_key(preferences().raas_gen_private_key_path, preferences( + ).raas_gen_public_key_path, preferences().raas_gen_password) except Exception as e: import traceback traceback.print_exc() - self.report({'ERROR'}, "Problem with %s: %s: %s" % (self.bl_label, e.__class__, e)) + self.report({'ERROR'}, "Problem with %s: %s: %s" % + (self.bl_label, e.__class__, e)) return {"CANCELLED"} self.report({'INFO'}, "'%s' finished" % (self.bl_label)) return {"FINISHED"} + class RAAS_OT_upload_sshkey(Operator): bl_idname = 'raas.upload_sshkey' bl_label = 'Upload public key' @@ -177,113 +197,265 @@ class RAAS_OT_upload_sshkey(Operator): if len(preferences().raas_gen_public_key_path) > 0: with open(preferences().raas_gen_public_key_path) as f: public_key = f.readlines() - + bpy.context.window_manager.clipboard = public_key[0] import webbrowser - if preferences().raas_account_type == "EDUID": - webbrowser.open('https://signup.e-infra.cz/fed/registrar/?vo=IT4Innovations', new=2) - else: - webbrowser.open('https://extranet.it4i.cz/ssp/?action=changesshkey&login=%s' % preferences().raas_gen_username, new=2) + if preferences().raas_account_type == "EDUID": + webbrowser.open( + 'https://signup.e-infra.cz/fed/registrar/?vo=IT4Innovations', new=2) + else: + webbrowser.open('https://extranet.it4i.cz/ssp/?action=changesshkey&login=%s' % + preferences().raas_gen_username, new=2) except Exception as e: import traceback traceback.print_exc() - self.report({'ERROR'}, "Problem with %s: %s: %s" % (self.bl_label, e.__class__, e)) + self.report({'ERROR'}, "Problem with %s: %s: %s" % + (self.bl_label, e.__class__, e)) return {"CANCELLED"} self.report({'INFO'}, "'%s' finished" % (self.bl_label)) return {"FINISHED"} -class RAAS_OT_setup_sshkey(Operator): - bl_idname = 'raas.setup_sshkey' - bl_label = 'Setup' - bl_description = ("Setup") + +# class RAAS_OT_setup_sshkey(Operator): +# bl_idname = 'raas.setup_sshkey' +# bl_label = 'Setup' +# bl_description = ("Setup") + +# def execute(self, context): +# try: +# pref = preferences() + +# if not pref.check_valid_settings_gen(): +# return {"CANCELLED"} + +# pref.raas_da_username = pref.raas_gen_username +# pref.raas_private_key_path = pref.raas_gen_private_key_path +# pref.raas_da_password = pref.raas_gen_password +# pref.raas_pid = pref.raas_gen_pid +# pref.raas_project_group = pref.raas_da_username + +# # TODO +# if not pref.check_valid_settings(type='PROJECT_DIR'): +# return {"CANCELLED"} + +# cmd = raas_jobs.CmdGetPidDir(pref.raas_pid.upper()) +# if len(cmd) > 0: +# server = raas_config.GetDAServer(context) +# res = raas_render.ssh_command_sync(server, cmd) +# pref.raas_pid_dir = res.strip() + +# except Exception as e: +# import traceback +# traceback.print_exc() + +# self.report({'ERROR'}, "Problem with %s: %s: %s" % +# (self.bl_label, e.__class__, e)) +# return {"CANCELLED"} + +# self.report({'INFO'}, "'%s' finished" % (self.bl_label)) +# return {"FINISHED"} + + +# class RAAS_OT_find_pid_dir(Operator): +# bl_idname = 'raas.find_pid_dir' +# bl_label = 'Find Project Dir' +# bl_description = ("Find Project Dir") + +# def execute(self, context): +# # success = True + +# for cl in raas_config.Cluster_items: +# try: +# if not preferences().check_valid_settings(type='PROJECT_DIR'): +# return {"CANCELLED"} + +# cmd = raas_jobs.CmdGetPidDir(preferences().raas_pid.upper()) +# if len(cmd) > 0: +# # server = raas_config.GetDAServer(context) +# server = raas_config.GetServerFromType(cl[0]) +# res = raas_render.ssh_command_sync(server, cmd) +# preferences().raas_pid_dir = res.strip() + +# break + +# except Exception as e: +# import traceback +# traceback.print_exc() + +# self.report({'ERROR'}, "Problem with %s: %s: %s" % +# (self.bl_label, e.__class__, e)) +# # return {"CANCELLED"} +# # success = False + +# self.report({'INFO'}, "'%s' finished" % (self.bl_label)) +# return {"FINISHED"} + +class RAAS_OT_find_pid_dir_barbora_cpu(Operator): + bl_idname = 'raas.find_pid_dir_barbora_cpu' + bl_label = 'Find Dir' + bl_description = ("Find") def execute(self, context): + # success = True + + #for cl in raas_config.Cluster_items: try: - pref = preferences() + if not preferences().check_valid_settings(type='PROJECT_DIR'): + return {"CANCELLED"} - if not pref.check_valid_settings_gen(): + cmd = raas_jobs.CmdGetPidDir( + preferences().raas_pid_name_barbora_cpu.upper()) + if len(cmd) > 0: + # server = raas_config.GetDAServer(context) + server = raas_config.GetServerFromType("BARBORA") + res = raas_render.ssh_command_sync(server, cmd) + preferences().raas_pid_dir_barbora_cpu = res.strip() + + #break + + except Exception as e: + import traceback + traceback.print_exc() + + self.report({'ERROR'}, "Problem with %s: %s: %s" % + (self.bl_label, e.__class__, e)) + # return {"CANCELLED"} + # success = False + + self.report({'INFO'}, "'%s' finished" % (self.bl_label)) + return {"FINISHED"} + + +class RAAS_OT_find_pid_dir_barbora_gpu(Operator): + bl_idname = 'raas.find_pid_dir_barbora_gpu' + bl_label = 'Find Dir' + bl_description = ("Find") + + def execute(self, context): + # success = True + + # for cl in raas_config.Cluster_items: + try: + if not preferences().check_valid_settings(type='PROJECT_DIR'): return {"CANCELLED"} - pref.raas_da_username = pref.raas_gen_username - pref.raas_private_key_path = pref.raas_gen_private_key_path - pref.raas_da_password = pref.raas_gen_password - pref.raas_pid = pref.raas_gen_pid - pref.raas_project_group = pref.raas_da_username + cmd = raas_jobs.CmdGetPidDir( + preferences().raas_pid_name_barbora_gpu.upper()) + if len(cmd) > 0: + # server = raas_config.GetDAServer(context) + server = raas_config.GetServerFromType("BARBORA") + res = raas_render.ssh_command_sync(server, cmd) + preferences().raas_pid_dir_barbora_gpu = res.strip() + + # break + + except Exception as e: + import traceback + traceback.print_exc() - # TODO - if not pref.check_valid_settings(type='PROJECT_DIR'): - return {"CANCELLED"} + self.report({'ERROR'}, "Problem with %s: %s: %s" % + (self.bl_label, e.__class__, e)) + # return {"CANCELLED"} + # success = False + + self.report({'INFO'}, "'%s' finished" % (self.bl_label)) + return {"FINISHED"} - cmd = raas_jobs.CmdGetPidDir(pref.raas_pid.upper()) + +class RAAS_OT_find_pid_dir_karolina_cpu(Operator): + bl_idname = 'raas.find_pid_dir_karolina_cpu' + bl_label = 'Find Dir' + bl_description = ("Find") + + def execute(self, context): + # success = True + + # for cl in raas_config.Cluster_items: + try: + if not preferences().check_valid_settings(type='PROJECT_DIR'): + return {"CANCELLED"} + + cmd = raas_jobs.CmdGetPidDir( + preferences().raas_pid_name_karolina_cpu.upper()) if len(cmd) > 0: - server = raas_config.GetDAServer(context) + # server = raas_config.GetDAServer(context) + server = raas_config.GetServerFromType("KAROLINA") res = raas_render.ssh_command_sync(server, cmd) - pref.raas_pid_dir = res.strip() + preferences().raas_pid_dir_karolina_cpu = res.strip() + + # break except Exception as e: import traceback traceback.print_exc() - self.report({'ERROR'}, "Problem with %s: %s: %s" % (self.bl_label, e.__class__, e)) - return {"CANCELLED"} + self.report({'ERROR'}, "Problem with %s: %s: %s" % + (self.bl_label, e.__class__, e)) + # return {"CANCELLED"} + # success = False self.report({'INFO'}, "'%s' finished" % (self.bl_label)) - return {"FINISHED"} + return {"FINISHED"} + -class RAAS_OT_find_pid_dir(Operator): - bl_idname = 'raas.find_pid_dir' - bl_label = 'Find Project Dir' - bl_description = ("Find Project Dir") +class RAAS_OT_find_pid_dir_karolina_gpu(Operator): + bl_idname = 'raas.find_pid_dir_karolina_gpu' + bl_label = 'Find Dir' + bl_description = ("Find") def execute(self, context): - #success = True + # success = True - for cl in raas_config.Cluster_items: - try: - if not preferences().check_valid_settings(type='PROJECT_DIR'): - return {"CANCELLED"} + # for cl in raas_config.Cluster_items: + try: + if not preferences().check_valid_settings(type='PROJECT_DIR'): + return {"CANCELLED"} - cmd = raas_jobs.CmdGetPidDir(preferences().raas_pid.upper()) - if len(cmd) > 0: - #server = raas_config.GetDAServer(context) - server = raas_config.GetServerFromType(cl[0]) - res = raas_render.ssh_command_sync(server, cmd) - preferences().raas_pid_dir = res.strip() + cmd = raas_jobs.CmdGetPidDir( + preferences().raas_pid_name_karolina_gpu.upper()) + if len(cmd) > 0: + # server = raas_config.GetDAServer(context) + server = raas_config.GetServerFromType("KAROLINA") + res = raas_render.ssh_command_sync(server, cmd) + preferences().raas_pid_dir_karolina_gpu = res.strip() - break + # break - except Exception as e: - import traceback - traceback.print_exc() + except Exception as e: + import traceback + traceback.print_exc() - self.report({'ERROR'}, "Problem with %s: %s: %s" % (self.bl_label, e.__class__, e)) - #return {"CANCELLED"} - #success = False + self.report({'ERROR'}, "Problem with %s: %s: %s" % + (self.bl_label, e.__class__, e)) + # return {"CANCELLED"} + # success = False self.report({'INFO'}, "'%s' finished" % (self.bl_label)) return {"FINISHED"} + class RAAS_OT_install_scripts(Operator): bl_idname = 'raas.install_scripts' bl_label = 'Install scripts on the cluster' bl_description = ("Install scripts") def execute(self, context): - #success = True + # success = True for cl in raas_config.Cluster_items: try: if not preferences().check_valid_settings(type='INSTALL_SCRIPTS'): - return {"CANCELLED"} + return {"CANCELLED"} - cmd = raas_config.GetGitAddonCommand(preferences().raas_scripts_repository, preferences().raas_scripts_repository_branch) + cmd = raas_config.GetGitAddonCommand(preferences( + ).raas_scripts_repository, preferences().raas_scripts_repository_branch) if len(cmd) > 0: - #raas_render.ssh_command_sync('barbora.it4i.cz', cmd) - #raas_render.ssh_command_sync('karolina.it4i.cz', cmd) + # raas_render.ssh_command_sync('barbora.it4i.cz', cmd) + # raas_render.ssh_command_sync('karolina.it4i.cz', cmd) server = raas_config.GetServerFromType(cl[0]) raas_render.ssh_command_sync(server, cmd) preferences().raas_scripts_installed = True @@ -292,9 +464,10 @@ class RAAS_OT_install_scripts(Operator): import traceback traceback.print_exc() - self.report({'ERROR'}, "Problem with %s: %s: %s" % (self.bl_label, e.__class__, e)) - #return {"CANCELLED"} - #success = False + self.report({'ERROR'}, "Problem with %s: %s: %s" % + (self.bl_label, e.__class__, e)) + # return {"CANCELLED"} + # success = False self.report({'INFO'}, "'%s' finished" % (self.bl_label)) return {"FINISHED"} @@ -319,12 +492,14 @@ class RAAS_OT_install_scripts(Operator): # import traceback # traceback.print_exc() -# self.report({'ERROR'}, "Problem with %s: %s: %s" % (self.bl_label, e.__class__, e)) +# self.report({'ERROR'}, "Problem with %s: %s: %s" % (self.bl_label, e.__class__, e)) # return {"CANCELLED"} # self.report({'INFO'}, "'%s' finished" % (self.bl_label)) -# return {"FINISHED"} +# return {"FINISHED"} ################################################################## + + class RAAS_OT_install_dependencies(Operator): bl_idname = 'raas.install_dependencies' bl_label = 'Install dependencies' @@ -339,9 +514,9 @@ class RAAS_OT_install_dependencies(Operator): install_and_import_module(module_name=dependency.module, package_name=dependency.package, global_name=dependency.name) - - #enable_internal_addons() - #install_external_addons() + + # enable_internal_addons() + # install_external_addons() except (subprocess.CalledProcessError, ImportError) as err: self.report({"ERROR"}, str(err)) @@ -350,12 +525,13 @@ class RAAS_OT_install_dependencies(Operator): preferences().dependencies_installed = True # Register the panels, operators, etc. since dependencies are installed - #from . import sim_scene - #sim_scene.register() + # from . import sim_scene + # sim_scene.register() self.report({'INFO'}, "'%s' finished" % (self.bl_label)) return {"FINISHED"} + class RAAS_OT_update_dependencies(Operator): bl_idname = 'raas.update_dependencies' bl_label = 'Update dependencies' @@ -370,9 +546,9 @@ class RAAS_OT_update_dependencies(Operator): install_and_import_module(module_name=dependency.module, package_name=dependency.package, global_name=dependency.name) - - #enable_internal_addons() - #install_external_addons() + + # enable_internal_addons() + # install_external_addons() except (subprocess.CalledProcessError, ImportError) as err: self.report({"ERROR"}, str(err)) @@ -381,12 +557,13 @@ class RAAS_OT_update_dependencies(Operator): preferences().dependencies_installed = True # Register the panels, operators, etc. since dependencies are installed - #from . import sim_scene - #sim_scene.register() + # from . import sim_scene + # sim_scene.register() self.report({'INFO'}, "'%s' finished" % (self.bl_label)) - return {"FINISHED"} -################################################## + return {"FINISHED"} +################################################## + class RaasPreferences(AddonPreferences): bl_idname = ADDON_NAME @@ -410,7 +587,7 @@ class RaasPreferences(AddonPreferences): # raas_server: StringProperty( # name='RaaS Server', # default='' - # ) + # ) raas_username: StringProperty( name='Username', @@ -425,18 +602,84 @@ class RaasPreferences(AddonPreferences): subtype='PASSWORD' ) - raas_pid: StringProperty( + ####################### BARBORA###################################### + + raas_pid_name_barbora_cpu: StringProperty( + name='Project ID', + description='IT4Innovations computing resource allocated by the project allocation committee to the primary investigator, e.g. OPEN-XX-XX, DD-XX-XX', + default='' + ) + + raas_pid_queue_barbora_cpu: StringProperty( + name='Project Queue', + description='The queue for running the job on the cluster, e.g. qcpu, qgpu', + default='qcpu' + ) + + raas_pid_dir_barbora_cpu: StringProperty( + name='Project Dir', + description='The PROJECT data storage is a central storage for projects/users data on IT4Innovations, e.g. /mnt/projX/OPEN-XX-XX, /mnt/projX/DD-XX-XX', + default='' + ) + + raas_pid_name_barbora_gpu: StringProperty( name='Project ID', description='IT4Innovations computing resource allocated by the project allocation committee to the primary investigator, e.g. OPEN-XX-XX, DD-XX-XX', default='' ) - raas_pid_dir: StringProperty( + raas_pid_queue_barbora_gpu: StringProperty( + name='Project Queue', + description='The queue for running the job on the cluster, e.g. qcpu, qgpu', + default='qgpu' + ) + + raas_pid_dir_barbora_gpu: StringProperty( name='Project Dir', description='The PROJECT data storage is a central storage for projects/users data on IT4Innovations, e.g. /mnt/projX/OPEN-XX-XX, /mnt/projX/DD-XX-XX', default='' ) + ####################### KAROLINA###################################### + + raas_pid_name_karolina_cpu: StringProperty( + name='Project ID', + description='IT4Innovations computing resource allocated by the project allocation committee to the primary investigator, e.g. OPEN-XX-XX, DD-XX-XX', + default='' + ) + + raas_pid_queue_karolina_cpu: StringProperty( + name='Project Queue', + description='The queue for running the job on the cluster, e.g. qcpu, qgpu', + default='qcpu' + ) + + raas_pid_dir_karolina_cpu: StringProperty( + name='Project Dir', + description='The PROJECT data storage is a central storage for projects/users data on IT4Innovations, e.g. /mnt/projX/OPEN-XX-XX, /mnt/projX/DD-XX-XX', + default='' + ) + + raas_pid_name_karolina_gpu: StringProperty( + name='Project ID', + description='IT4Innovations computing resource allocated by the project allocation committee to the primary investigator, e.g. OPEN-XX-XX, DD-XX-XX', + default='' + ) + + raas_pid_queue_karolina_gpu: StringProperty( + name='Project Queue', + description='The queue for running the job on the cluster, e.g. qcpu, qgpu', + default='qgpu' + ) + + raas_pid_dir_karolina_gpu: StringProperty( + name='Project Dir', + description='The PROJECT data storage is a central storage for projects/users data on IT4Innovations, e.g. /mnt/projX/OPEN-XX-XX, /mnt/projX/DD-XX-XX', + default='' + ) + + ############################################################# + raas_job_storage_path: StringProperty( name='Local Storage Path', description='Path where to store job files', @@ -453,15 +696,15 @@ class RaasPreferences(AddonPreferences): # default=True # ) - raas_ssh_library : EnumProperty( + raas_ssh_library: EnumProperty( name='SSH Library', - items=raas_config.ssh_library_items - ) + items=raas_config.ssh_library_items + ) - raas_account_type : EnumProperty( + raas_account_type: EnumProperty( name='Account Type', items=raas_config.account_types_items - ) + ) raas_use_direct_access: BoolProperty( name='Use Direct Access', @@ -471,8 +714,8 @@ class RaasPreferences(AddonPreferences): raas_use_xorg: BoolProperty( name='Use Xorg', default=False - ) - + ) + raas_private_key_path: StringProperty( name='Private Key Path', description='Private Key Path', @@ -501,7 +744,7 @@ class RaasPreferences(AddonPreferences): description='Gen. Private Key Path', subtype='FILE_PATH', default='' - ) + ) raas_gen_public_key_path: StringProperty( name='Gen. Public Key Path', @@ -509,7 +752,7 @@ class RaasPreferences(AddonPreferences): subtype='FILE_PATH', default='' ) - + raas_scripts_repository: StringProperty( name='Repository', default='https://code.it4i.cz/raas/bheappe.git' @@ -524,11 +767,11 @@ class RaasPreferences(AddonPreferences): default=False ) - raas_gen_pid: StringProperty( - name='Project ID', - default='' - ) - + # raas_gen_pid: StringProperty( + # name='Project ID', + # default='' + # ) + raas_gen_username: StringProperty( name='Username', default='' @@ -540,81 +783,97 @@ class RaasPreferences(AddonPreferences): subtype='PASSWORD' ) - def check_valid_settings(self, type = 'NONE'): - if len(self.raas_pid) == 0: - show_message_box(message='Project ID is not set in preferences', icon='ERROR') - return False + def check_valid_settings(self, type='NONE'): + # if len(self.raas_pid) == 0: + # show_message_box( + # message='Project ID is not set in preferences', icon='ERROR') + # return False if self.raas_use_direct_access: if self.raas_ssh_library == 'PARAMIKO': if len(self.raas_da_username) == 0: - show_message_box(message='Username is not set in preferences', icon='ERROR') + show_message_box( + message='Username is not set in preferences', icon='ERROR') return False if len(self.raas_private_key_path) == 0: - show_message_box(message='Private Key File is not set in preferences', icon='ERROR') + show_message_box( + message='Private Key File is not set in preferences', icon='ERROR') return False - if len(self.raas_da_password) == 0: - show_message_box(message='Key Passphrase is not set in preferences', icon='ERROR') - return False + # if len(self.raas_da_password) == 0: + # show_message_box(message='Key Passphrase is not set in preferences', icon='ERROR') + # return False + + # if len(self.raas_pid_dir) == 0 and type != 'PROJECT_DIR' and type != 'INSTALL_SCRIPTS': + # show_message_box( + # message='Project Dir is not set in preferences', icon='ERROR') + # return False - if len(self.raas_pid_dir) == 0 and type != 'PROJECT_DIR' and type != 'INSTALL_SCRIPTS': - show_message_box(message='Project Dir is not set in preferences', icon='ERROR') - return False - if not self.raas_scripts_installed and type != 'PROJECT_DIR' and type != 'INSTALL_SCRIPTS': - show_message_box(message='Scripts are not installed', icon='ERROR') + show_message_box( + message='Scripts are not installed', icon='ERROR') return False if len(self.raas_scripts_repository) == 0 or len(self.raas_scripts_repository_branch) == 0: - show_message_box(message='Git repository is not set in preferences', icon='ERROR') + show_message_box( + message='Git repository is not set in preferences', icon='ERROR') return False else: if len(self.raas_username) == 0: - show_message_box(message='Username is not set in preferences', icon='ERROR') + show_message_box( + message='Username is not set in preferences', icon='ERROR') return False if len(self.raas_password) == 0: - show_message_box(message='Password is not set in preferences', icon='ERROR') + show_message_box( + message='Password is not set in preferences', icon='ERROR') return False - + if not self.dependencies_installed: - show_message_box(message='Dependencies are not installed', icon='ERROR') + show_message_box( + message='Dependencies are not installed', icon='ERROR') return False if not self.raas_job_storage_path and type != 'PROJECT_DIR' and type != 'INSTALL_SCRIPTS': - show_message_box(message='Local Storage Path is not set in preferences', icon='ERROR') - return False + show_message_box( + message='Local Storage Path is not set in preferences', icon='ERROR') + return False return True - def check_valid_settings_gen(self, type = 'NONE'): + def check_valid_settings_gen(self, type='NONE'): if not self.dependencies_installed: - show_message_box(message='Dependencies are not installed', icon='ERROR') + show_message_box( + message='Dependencies are not installed', icon='ERROR') return False - if len(self.raas_gen_pid) == 0: - show_message_box(message='Project ID is not set in the generate SSH keys section', icon='ERROR') - return False + # if len(self.raas_gen_pid) == 0: + # show_message_box( + # message='Project ID is not set in the generate SSH keys section', icon='ERROR') + # return False if len(self.raas_gen_username) == 0: - show_message_box(message='Username is not set in the generate SSH keys section', icon='ERROR') + show_message_box( + message='Username is not set in the generate SSH keys section', icon='ERROR') return False if len(self.raas_gen_public_key_path) == 0 and type != 'GENERATE': - show_message_box(message='Public Key File is not set in the generate SSH keys section', icon='ERROR') + show_message_box( + message='Public Key File is not set in the generate SSH keys section', icon='ERROR') return False if len(self.raas_gen_private_key_path) == 0 and type != 'GENERATE': - show_message_box(message='Private Key File is not set in the generate SSH keys section', icon='ERROR') + show_message_box( + message='Private Key File is not set in the generate SSH keys section', icon='ERROR') return False if len(self.raas_gen_password) == 0: - show_message_box(message='Key Passphrase is not set in the generate SSH keys section', icon='ERROR') - return False + show_message_box( + message='Key Passphrase is not set in the generate SSH keys section', icon='ERROR') + return False - return True + return True def reset_messages(self): self.ok_message = '' @@ -625,49 +884,49 @@ class RaasPreferences(AddonPreferences): box = layout.box() - raas_pid = box.split(**factor(0.25), align=True) - raas_pid.label(text='Project ID:') - pid_box = raas_pid.row(align=True) - pid_box.prop(self, 'raas_pid', text='') + # raas_pid = box.split(**factor(0.25), align=True) + # raas_pid.label(text='Project ID:') + # pid_box = raas_pid.row(align=True) + # pid_box.prop(self, 'raas_pid', text='') if self.raas_use_direct_access == True: if self.raas_ssh_library == 'PARAMIKO': auth_split = box.split(**factor(0.25), align=True) auth_split.label(text='Username:') - user_box = auth_split.row(align=True) + user_box = auth_split.row(align=True) user_box.prop(self, 'raas_da_username', text='') pkey_split = box.split(**factor(0.25), align=True) pkey_split.label(text='Private Key File:') - user_box = pkey_split.row(align=True) + user_box = pkey_split.row(align=True) user_box.prop(self, 'raas_private_key_path', text='') auth_split = box.split(**factor(0.25), align=True) auth_split.label(text='Key Passphrase:') - user_box = auth_split.row(align=True) - user_box.prop(self, 'raas_da_password', text='') - - raas_pid_dir = box.split(**factor(0.25), align=True) - raas_pid_dir.label(text='Project Dir:') - pid_dir_box = raas_pid_dir.row(align=True) - pid_dir_box.prop(self, 'raas_pid_dir', text='') - pid_dir_box.operator(RAAS_OT_find_pid_dir.bl_idname, icon="CONSOLE") - else: + user_box = auth_split.row(align=True) + user_box.prop(self, 'raas_da_password', text='') + + # raas_pid_dir = box.split(**factor(0.25), align=True) + # raas_pid_dir.label(text='Project Dir:') + # pid_dir_box = raas_pid_dir.row(align=True) + # pid_dir_box.prop(self, 'raas_pid_dir', text='') + # pid_dir_box.operator(RAAS_OT_find_pid_dir.bl_idname, icon="CONSOLE") + else: # raas_server = box.split(**factor(0.25), align=True) # raas_server.label(text='Server:') - # user_box = raas_server.row(align=True) + # user_box = raas_server.row(align=True) # user_box.prop(self, 'raas_server', text='') auth_split = box.split(**factor(0.25), align=True) auth_split.label(text='Username:') - user_box = auth_split.row(align=True) + user_box = auth_split.row(align=True) user_box.prop(self, 'raas_username', text='') auth_split = box.split(**factor(0.25), align=True) auth_split.label(text='Password:') - user_box = auth_split.row(align=True) - user_box.prop(self, 'raas_password', text='') + user_box = auth_split.row(align=True) + user_box.prop(self, 'raas_password', text='') box.operator('raas_auth.validate') @@ -678,8 +937,67 @@ class RaasPreferences(AddonPreferences): if self.ok_message: sub = layout.row() - sub.label(text=self.ok_message, icon='FILE_TICK') - + sub.label(text=self.ok_message, icon='FILE_TICK') + + box = layout.box() + + # BARBORA + # box = box.box() + # box.label("Barbora") + + # raas_pid_name_barbora_cpu + # raas_pid_queue_barbora_cpu + # raas_pid_dir_barbora_cpu + raas_pid = box.split(**factor(0.25), align=True) + raas_pid.label(text='Barbora CPU:') + pid_box = raas_pid.row(align=True) + pid_box.prop(self, 'raas_pid_name_barbora_cpu', text='Name') + pid_box.prop(self, 'raas_pid_queue_barbora_cpu', text='Queue') + pid_box.prop(self, 'raas_pid_dir_barbora_cpu', text='Dir') + pid_box.operator(RAAS_OT_find_pid_dir_barbora_cpu.bl_idname, icon="CONSOLE") + + # raas_pid_name_barbora_gpu + # raas_pid_queue_barbora_gpu + # raas_pid_dir_barbora_gpu + raas_pid = box.split(**factor(0.25), align=True) + raas_pid.label(text='Barbora GPU:') + pid_box = raas_pid.row(align=True) + pid_box.prop(self, 'raas_pid_name_barbora_gpu', text='Name') + pid_box.prop(self, 'raas_pid_queue_barbora_gpu', text='Queue') + pid_box.prop(self, 'raas_pid_dir_barbora_gpu', text='Dir') + pid_box.operator( + RAAS_OT_find_pid_dir_barbora_gpu.bl_idname, icon="CONSOLE") + + # KAROLINA + # box = box.box() + # box.label("Karolina") + + # raas_pid_name_karolina_cpu + # raas_pid_queue_karolina_cpu + # raas_pid_dir_karolina_cpu + raas_pid = box.split(**factor(0.25), align=True) + raas_pid.label(text='Karolina CPU:') + pid_box = raas_pid.row(align=True) + pid_box.prop(self, 'raas_pid_name_karolina_cpu', text='Name') + pid_box.prop(self, 'raas_pid_queue_karolina_cpu', text='Queue') + pid_box.prop(self, 'raas_pid_dir_karolina_cpu', text='Dir') + pid_box.operator( + RAAS_OT_find_pid_dir_karolina_cpu.bl_idname, icon="CONSOLE") + + # raas_pid_name_karolina_gpu + # raas_pid_queue_karolina_gpu + # raas_pid_dir_karolina_gpu + raas_pid = box.split(**factor(0.25), align=True) + raas_pid.label(text='Karolina GPU:') + pid_box = raas_pid.row(align=True) + pid_box.prop(self, 'raas_pid_name_karolina_gpu', text='Name') + pid_box.prop(self, 'raas_pid_queue_karolina_gpu', text='Queue') + pid_box.prop(self, 'raas_pid_dir_karolina_gpu', text='Dir') + pid_box.operator( + RAAS_OT_find_pid_dir_karolina_gpu.bl_idname, icon="CONSOLE") + + ### + box = layout.box() raas_box = box.column() @@ -687,116 +1005,123 @@ class RaasPreferences(AddonPreferences): path_split.label(text='Local Storage Path:') path_box = path_split.row(align=True) path_box.prop(self, 'raas_job_storage_path', text='') - props = path_box.operator('raas.explore_file_path', text='', icon='DISK_DRIVE') + props = path_box.operator( + 'raas.explore_file_path', text='', icon='DISK_DRIVE') props.path = self.raas_job_storage_path if self.raas_use_direct_access == True: raas_pgroup = box.split(**factor(0.25), align=True) raas_pgroup.label(text='Working Group:') - pgroup_box = raas_pgroup.row(align=True) + pgroup_box = raas_pgroup.row(align=True) pgroup_box.prop(self, 'raas_project_group', text='') raas_xorg = box.split(**factor(0.25), align=True) raas_xorg.label(text='Use Xorg:') - xorg_box = raas_xorg.row(align=True) - xorg_box.prop(self, 'raas_use_xorg', text='') + xorg_box = raas_xorg.row(align=True) + xorg_box.prop(self, 'raas_use_xorg', text='') - boxD = layout.box() + boxD = layout.box() boxD.label(text='Dependencies:') dependencies_installed = preferences().dependencies_installed if not dependencies_installed: boxD.label(text='Dependencies are not installed', icon='ERROR') - + if not dependencies_installed: - boxD.operator(RAAS_OT_install_dependencies.bl_idname, icon="CONSOLE") + boxD.operator(RAAS_OT_install_dependencies.bl_idname, + icon="CONSOLE") else: - boxD.operator(RAAS_OT_update_dependencies.bl_idname, icon="CONSOLE") + boxD.operator(RAAS_OT_update_dependencies.bl_idname, + icon="CONSOLE") - box = layout.box() + # box = layout.box() - par_split = box.split(**factor(0.25), align=True) - par_split.label(text='SSH Library:') - user_box = par_split.row(align=True) - user_box.prop(self, 'raas_ssh_library', text='') + # par_split = box.split(**factor(0.25), align=True) + # par_split.label(text='SSH Library:') + # user_box = par_split.row(align=True) + # user_box.prop(self, 'raas_ssh_library', text='') box = layout.box() da_split = box.split(**factor(0.25), align=True) da_split.label(text='Use Direct Access:') - user_box = da_split.row(align=True) - user_box.prop(self, 'raas_use_direct_access', text='') + user_box = da_split.row(align=True) + user_box.prop(self, 'raas_use_direct_access', text='') if self.raas_use_direct_access == True: - boxG = box.box() + boxG = box.box() boxG.label(text='Install scripts:') rep_split = boxG.split(**factor(0.25), align=True) rep_split.label(text='Git Repository:') rep_box1 = rep_split.row(align=True) - rep_box = rep_box1.row(align=True) - #rep_box.enabled = False + rep_box = rep_box1.row(align=True) + # rep_box.enabled = False rep_box.prop(self, 'raas_scripts_repository', text='') - rep_box = rep_box1.row(align=True) - #rep_box.enabled = True + rep_box = rep_box1.row(align=True) + # rep_box.enabled = True rep_box.prop(self, 'raas_scripts_repository_branch', text='') - + if self.raas_scripts_installed == False: if not self.raas_scripts_installed: boxG.label(text='Scripts are not installed', icon='ERROR') - boxG.operator(RAAS_OT_install_scripts.bl_idname, icon="CONSOLE", text="Install scripts on the cluster") + boxG.operator(RAAS_OT_install_scripts.bl_idname, + icon="CONSOLE", text="Install scripts on the cluster") else: - boxG.operator(RAAS_OT_install_scripts.bl_idname, icon="CONSOLE", text="Update scripts") + boxG.operator(RAAS_OT_install_scripts.bl_idname, + icon="CONSOLE", text="Update scripts") boxG = box.box() show_gen_split = boxG.split(**factor(0.25), align=True) show_gen_split.label(text='Generate SSH keys:') - user_box = show_gen_split.row(align=True) - user_box.prop(self, 'show_ssh_gen', text='') + user_box = show_gen_split.row(align=True) + user_box.prop(self, 'show_ssh_gen', text='') - if self.raas_ssh_library == 'PARAMIKO' and self.show_ssh_gen == True: - - #boxG.label(text='Generate SSH keys:') + if self.raas_ssh_library == 'PARAMIKO' and self.show_ssh_gen == True: - raas_pid = boxG.split(**factor(0.25), align=True) - raas_pid.label(text='Project ID:') - pid_box = raas_pid.row(align=True) - pid_box.prop(self, 'raas_gen_pid', text='') + # boxG.label(text='Generate SSH keys:') + + # raas_pid = boxG.split(**factor(0.25), align=True) + # raas_pid.label(text='Project ID:') + # pid_box = raas_pid.row(align=True) + # pid_box.prop(self, 'raas_gen_pid', text='') auth_split = boxG.split(**factor(0.25), align=True) auth_split.label(text='Username:') - user_box = auth_split.row(align=True) - user_box.prop(self, 'raas_gen_username', text='') + user_box = auth_split.row(align=True) + user_box.prop(self, 'raas_gen_username', text='') pkey_split = boxG.split(**factor(0.25), align=True) pkey_split.label(text='Public Key File:') - user_box = pkey_split.row(align=True) + user_box = pkey_split.row(align=True) user_box.prop(self, 'raas_gen_public_key_path', text='') pkey_split = boxG.split(**factor(0.25), align=True) pkey_split.label(text='Private Key File:') - user_box = pkey_split.row(align=True) + user_box = pkey_split.row(align=True) user_box.prop(self, 'raas_gen_private_key_path', text='') auth_split = boxG.split(**factor(0.25), align=True) auth_split.label(text='Key Passphrase:') - user_box = auth_split.row(align=True) - user_box.prop(self, 'raas_gen_password', text='') + user_box = auth_split.row(align=True) + user_box.prop(self, 'raas_gen_password', text='') - boxG.operator(RAAS_OT_generate_sshkey.bl_idname, icon="CONSOLE") + boxG.operator(RAAS_OT_generate_sshkey.bl_idname, + icon="CONSOLE") acc_split = boxG.split(**factor(0.25), align=True) acc_split.label(text='Account Type:') - acc_box = acc_split.row(align=True) - acc_box.prop(self, 'raas_account_type', text='') + acc_box = acc_split.row(align=True) + acc_box.prop(self, 'raas_account_type', text='') boxG.operator(RAAS_OT_upload_sshkey.bl_idname, icon="URL") - boxG = boxG.column() - boxG.label(text='Please wait a minute for the public key to install on all clusters before running Setup.') - boxG.operator(RAAS_OT_setup_sshkey.bl_idname, icon="COPY_ID") - - + # boxG = boxG.column() + # boxG.label( + # text='Please wait a minute for the public key to install on all clusters before running Setup.') + # boxG.operator(RAAS_OT_setup_sshkey.bl_idname, icon="COPY_ID") + + def ctx_preferences(): """Returns bpy.context.preferences in a 2.79-compatible way.""" try: @@ -804,16 +1129,18 @@ def ctx_preferences(): except AttributeError: return bpy.context.user_preferences + def preferences() -> RaasPreferences: - return ctx_preferences().addons[ADDON_NAME].preferences + return ctx_preferences().addons[ADDON_NAME].preferences + class RaasAuthValidate(async_loop.AsyncModalOperatorMixin, Operator): bl_idname = 'raas_auth.validate' bl_label = 'Validate' - #def execute(self, context): + # def execute(self, context): async def async_execute(self, context): - #from . import raas_pref + # from . import raas_pref addon_prefs = preferences() addon_prefs.reset_messages() @@ -823,41 +1150,45 @@ class RaasAuthValidate(async_loop.AsyncModalOperatorMixin, Operator): except: resp = None - #resp = await raas_server.get_token(addon_prefs.raas_username, addon_prefs.raas_password) + # resp = await raas_server.get_token(addon_prefs.raas_username, addon_prefs.raas_password) if resp and len(resp) == 36: addon_prefs.ok_message = 'Authentication token is valid.' else: addon_prefs.error_message = 'Authentication token is not valid!' - #return {'FINISHED'} - self.quit() + # return {'FINISHED'} + self.quit() + def register(): """register.""" bpy.utils.register_class(RaasPreferences) - bpy.utils.register_class(RaasAuthValidate) - bpy.utils.register_class(RAAS_OT_install_dependencies) + bpy.utils.register_class(RaasAuthValidate) + bpy.utils.register_class(RAAS_OT_install_dependencies) bpy.utils.register_class(RAAS_OT_update_dependencies) bpy.utils.register_class(RAAS_OT_generate_sshkey) bpy.utils.register_class(RAAS_OT_upload_sshkey) - bpy.utils.register_class(RAAS_OT_setup_sshkey) - - bpy.utils.register_class(RAAS_OT_find_pid_dir) + #bpy.utils.register_class(RAAS_OT_setup_sshkey) + + bpy.utils.register_class(RAAS_OT_find_pid_dir_barbora_cpu) + bpy.utils.register_class(RAAS_OT_find_pid_dir_barbora_gpu) + bpy.utils.register_class(RAAS_OT_find_pid_dir_karolina_cpu) + bpy.utils.register_class(RAAS_OT_find_pid_dir_karolina_gpu) bpy.utils.register_class(RAAS_OT_install_scripts) - #bpy.utils.register_class(RAAS_OT_update_scripts) - + # bpy.utils.register_class(RAAS_OT_update_scripts) try: for dependency in python_dependencies: - import_module(module_name=dependency.module, global_name=dependency.name) + import_module(module_name=dependency.module, + global_name=dependency.name) - #check_internal_addons() - #check_external_addons() + # check_internal_addons() + # check_external_addons() preferences().dependencies_installed = True except ModuleNotFoundError: - preferences().dependencies_installed = False + preferences().dependencies_installed = False return @@ -867,14 +1198,18 @@ def unregister(): bpy.utils.unregister_class(RaasAuthValidate) bpy.utils.unregister_class(RaasPreferences) - bpy.utils.unregister_class(RAAS_OT_install_dependencies) + bpy.utils.unregister_class(RAAS_OT_install_dependencies) bpy.utils.unregister_class(RAAS_OT_update_dependencies) bpy.utils.unregister_class(RAAS_OT_generate_sshkey) bpy.utils.unregister_class(RAAS_OT_upload_sshkey) - bpy.utils.unregister_class(RAAS_OT_setup_sshkey) - - bpy.utils.unregister_class(RAAS_OT_find_pid_dir) + #bpy.utils.unregister_class(RAAS_OT_setup_sshkey) + + bpy.utils.unregister_class(RAAS_OT_find_pid_dir_barbora_cpu) + bpy.utils.unregister_class(RAAS_OT_find_pid_dir_barbora_gpu) + bpy.utils.unregister_class(RAAS_OT_find_pid_dir_karolina_cpu) + bpy.utils.unregister_class(RAAS_OT_find_pid_dir_karolina_gpu) + bpy.utils.unregister_class(RAAS_OT_install_scripts) - #bpy.utils.unregister_class(RAAS_OT_update_scripts) + # bpy.utils.unregister_class(RAAS_OT_update_scripts) return diff --git a/bheappe/raas_render.py b/bheappe/raas_render.py index 7bfd83593c787a4a041bbe91a880496a83e12563..81c731ef8f19bc9580253b2821597c9b004ff2dd 100644 --- a/bheappe/raas_render.py +++ b/bheappe/raas_render.py @@ -123,7 +123,10 @@ def get_direct_access_remote_storage(context): if len(project_group) == 0: project_group = pref.raas_da_username - return raas_config.GetDAClusterPath(context, pref.raas_pid_dir, pref.raas_pid.lower()) + '/' + project_group + pid_name, pid_queue, pid_dir = raas_config.GetCurrentPidInfo( + context, raas_pref.preferences()) + + return raas_config.GetDAClusterPath(context, pid_dir, pid_name.lower()) + '/' + project_group ################################ @@ -166,11 +169,12 @@ class RAAS_PT_simplify(RaasButtonsPanel, Panel): # check values pref = raas_pref.preferences() if pref.raas_use_direct_access: + pid_name, pid_queue, pid_dir = raas_config.GetCurrentPidInfo(context, raas_pref.preferences()) if pref.raas_ssh_library == 'PARAMIKO': - if len(pref.raas_pid) == 0 or len(pref.raas_da_username) == 0 or len(pref.raas_private_key_path) == 0 or len(pref.raas_da_password) == 0 or len(pref.raas_pid_dir) == 0 or not pref.raas_scripts_installed: + if len(pid_name) == 0 or len(pid_queue) == 0 or len(pref.raas_da_username) == 0 or len(pref.raas_private_key_path) == 0 or len(pid_dir) == 0 or not pref.raas_scripts_installed: box.label(text='BHeappe is not set in preferences', icon='ERROR') else: - if len(pref.raas_pid) == 0 or len(pref.raas_pid_dir) == 0 or not pref.raas_scripts_installed: + if len(pid_name) == 0 or len(pid_queue) == 0 or len(pid_dir) == 0 or not pref.raas_scripts_installed: box.label(text='BHeappe is not set in preferences', icon='ERROR') if not pref.dependencies_installed: @@ -906,7 +910,7 @@ class RAAS_OT_dash_barbora( Operator): """dash_barbora""" bl_idname = 'raas.dash_barbora' - bl_label = 'Dashborard of the Barbora cluster' + bl_label = 'Dashboard of the Barbora cluster' async def async_execute(self, context): import webbrowser @@ -920,13 +924,28 @@ class RAAS_OT_dash_karolina( Operator): """dash_karolina""" bl_idname = 'raas.dash_karolina' - bl_label = 'Dashborard of the Karolina cluster' + bl_label = 'Dashboard of the Karolina cluster' async def async_execute(self, context): import webbrowser webbrowser.open('https://extranet.it4i.cz/dash/karolina', new=2) - self.quit() + self.quit() + + +class RAAS_OT_dash_grafana( + async_loop.AsyncModalOperatorMixin, + AuthenticatedRaasOperatorMixin, + Operator): + """dash_grafana""" + bl_idname = 'raas.dash_grafana' + bl_label = 'Dashboard of the clusters' + + async def async_execute(self, context): + import webbrowser + webbrowser.open('https://extranet.it4i.cz/grafana', new=2) + + self.quit() class RAAS_OT_submit_job( async_loop.AsyncModalOperatorMixin, @@ -1244,11 +1263,14 @@ class RAAS_PT_MessageOfTheDay(RaasButtonsPanel, Panel): layout = self.layout box = layout.box() - box.operator(RAAS_OT_dash_barbora.bl_idname, - text='Barbora', icon='WORLD') + # box.operator(RAAS_OT_dash_barbora.bl_idname, + # text='Barbora', icon='WORLD') + + # box.operator(RAAS_OT_dash_karolina.bl_idname, + # text='Karolina', icon='WORLD') - box.operator(RAAS_OT_dash_karolina.bl_idname, - text='Karolina', icon='WORLD') + box.operator(RAAS_OT_dash_grafana.bl_idname, + text='Grafana', icon='WORLD') # class RAAS_PT_Report(RaasButtonsPanel, Panel): # bl_label = "Report" diff --git a/bheappe/raas_server.py b/bheappe/raas_server.py index 676315a34eca1771f9d612a5d877a051414e95f2..408dadb96d15c6d8dc55964a11782effd880d3a2 100644 --- a/bheappe/raas_server.py +++ b/bheappe/raas_server.py @@ -28,6 +28,7 @@ import asyncio #import aiohttp import json import requests +import bpy log = logging.getLogger(__name__) @@ -42,7 +43,9 @@ def get_endpoint(endpoint_path=None): import urllib.parse import functools - base_url = raas_config.GetHEAPPEServer(raas_pref.preferences().raas_pid.lower()) + #base_url = raas_config.GetHEAPPEServer(raas_pref.preferences().raas_pid.lower()) + pid_name, pid_queue, pid_dir = raas_config.GetCurrentPidInfo(bpy.context, raas_pref.preferences()) + base_url = raas_config.GetHEAPPEServer(pid_name.lower()) # urljoin() is None-safe for the 2nd parameter. return urllib.parse.urljoin(base_url, endpoint_path) diff --git a/builds/bheappe.zip b/builds/bheappe.zip index 545ac2bd75dce272b496b7697561fdf4545f14f3..5c42942166bd62595634ccd9b2aab6ae1745bbdf 100644 Binary files a/builds/bheappe.zip and b/builds/bheappe.zip differ