Skip to content
Snippets Groups Projects
remote_run_ui.py 6.94 KiB
Newer Older
  • Learn to ignore specific revisions
  • Maryshca's avatar
    Maryshca committed
    import dearpygui.dearpygui as dpg
    
    import os
    
    from remote_run_constants import *
    from remote_run_callbacks import *
    
    Maryshca's avatar
    Maryshca committed
    from remote_run import *
    
    Maryshca's avatar
    Maryshca committed
    
    def construct_remote_run_window():
    
    Maryshca's avatar
    Maryshca committed
        if 'USE_BUILDS' in os.environ:
            conn = {
                LAB: Connection(LAB_HOST, os.getenv('SERVER_LOGIN', ''), os.getenv('SERVER_PASS', '')),
                # LOMONOSOV: Connection(LOMONOSOV_HOST, os.getenv('LOMONOSOV_LOGIN'), id_rsa_path=os.getenv('ID_RSA_PATH', ''))
            }
            builds = {
                (LAB, URBAN_LES): 'prebuild/code/nsenx',
                # (LOMONOSOV, URBAN_LES): '6e094bc0-a5f6-4474-8c71-a2e3a90d8e85/build/nse-gabls1-urban-les'
            }
            user_data = {
                'connections': conn,
                'builds': builds
            }
        else:
            user_data = {
                'connections': dict(),
                'builds': dict()
            }
    
    Maryshca's avatar
    Maryshca committed
    
        with dpg.window(
                    label='remote run',
                    tag='run_window',
                    horizontal_scrollbar=True,
                    show=False,
                    width=1000,
                    height=600,
                    pos=[20, 60],
                    user_data=user_data):
            with dpg.menu_bar():
                dpg.add_menu_item(label='run', callback=show_run_model_window_clb, tag='run')
    
            with dpg.table(header_row=True, row_background=False, borders_outerH=True, borders_innerH=True, borders_innerV=False, borders_outerV=False, delay_search=True, tag='models_table'):
                dpg.add_table_column(label='Type')
                dpg.add_table_column(label='Running on')
                dpg.add_table_column(label='Status')
                dpg.add_table_column(label='Progress')
                dpg.add_table_column(label='')
    
        with dpg.theme(tag='progress_bar_theme'):
            with dpg.theme_component(dpg.mvAll):
                dpg.add_theme_color(dpg.mvThemeCol_FrameBg, (255, 255, 255, 100), category=dpg.mvThemeCat_Core)
    
    
    Maryshca's avatar
    Maryshca committed
        # load_running_sessions()
    
    
    Maryshca's avatar
    Maryshca committed
    def construct_run_model_window():
        xoffset = 400
        width = 300
        with dpg.window(label='remote run settings', show=False, tag='run_model_window', autosize=True, pos=[50, 50]):
            with dpg.group(horizontal=True, xoffset=xoffset, tag='machines_group'):
                dpg.add_text('choose machine')
                dpg.add_radio_button(items=('lab server', 'lomonosov 2'), default_value='lab server', callback=update_run_model_window_clb, tag='machine', horizontal=True)
            with dpg.group(horizontal=True, xoffset=xoffset, tag='models_group'):
                dpg.add_text('choose model')
                dpg.add_radio_button(items=('urban les',), callback=update_run_model_window_clb, default_value='urban les', tag='model', horizontal=True)
    
            with dpg.child_window(label='credentials', tag='credentials', auto_resize_y=True):
                with dpg.group(tag='gitlab_group'):
                    dpg.add_input_text(label='gitlab username', tag='gitlab_username', password=False, default_value=os.getenv('GITLAB_LOGIN', ''), width=width)
                    dpg.add_input_text(label='gitlab password', tag='gitlab_password', password=True, default_value=os.getenv('GITLAB_PASS', ''), width=width)
    
                with dpg.group(tag='lab_server_group'):
                    dpg.add_input_text(label='server username', tag='server_username', password=False, default_value=os.getenv('SERVER_LOGIN', ''), width=width)
                    dpg.add_input_text(label='server password', tag='server_password', password=True, default_value=os.getenv('SERVER_PASS', ''), width=width)
    
                with dpg.group(tag='lomonosov_server_group'):
                    dpg.add_input_text(label='lomonosov username', tag='lomonosov_username', default_value=os.getenv('LOMONOSOV_LOGIN', ''), width=width)
    
            with dpg.group(horizontal=True, xoffset=xoffset, tag='config_file_path_group'):
                dpg.add_text('config file path')
                with dpg.group(horizontal=True):
                    dpg.add_input_text(default_value='', tag='config_file_path', width=width)
                    dpg.add_button(label='...', callback=open_config_file_path_dialog_clb)
            with dpg.group(horizontal=True, xoffset=xoffset):
                dpg.add_text('number of processes for mpi run')
                dpg.add_input_int(default_value=8, width=width, min_value=1, max_value=200, min_clamped=True, max_clamped=True, tag='-np')
            with dpg.group(horizontal=True, xoffset=xoffset):
                dpg.add_text('arch')
                dpg.add_radio_button(items=('gpu', 'cpu', 'mix'), label='arch', default_value='cpu', tag='-arch', horizontal=True)
            with dpg.group(horizontal=True, xoffset=xoffset):
                dpg.add_text('use dump')
                dpg.add_checkbox(default_value=False, tag='use-udump', callback=lambda s, a, u: dpg.show_item('-udump-group') if a else dpg.hide_item('-udump-group'))
            with dpg.group(horizontal=True, xoffset=xoffset, tag='-udump-group', show=False):
                dpg.add_text('dump from this control points')
                dpg.add_input_int(default_value=1, width=width, min_value=1, max_value=200, min_clamped=True, max_clamped=True, tag='-udump', enabled=False)
            with dpg.group(horizontal=True, xoffset=xoffset):
                dpg.add_text('write model stdout to file')
                dpg.add_checkbox(default_value=False, tag='use-model-stdout', callback=lambda s, a, u: dpg.show_item('-model-stdout-group') if a else dpg.hide_item('-model-stdout-group'))
            with dpg.group(horizontal=True, xoffset=xoffset, tag='-model-stdout-group', show=False):
                dpg.add_text('filename')
                dpg.add_input_text(default_value='log.txt', tag='-model-stdout', width=width, enabled=False)
    
            dpg.add_button(label='run', callback=run_model_clb)
    
    def construct_select_download_folder_dialog():
        with dpg.file_dialog(directory_selector=True, modal=True, show=False, callback=set_download_output_to_folder_clb, tag='download_to_folder_dialog', width=500, height=400):
            dpg.add_file_extension('.*', color=(255, 255, 255, 255))
    
    def construct_select_config_file_path_dialog():
        with dpg.file_dialog(directory_selector=False, modal=True, show=False, callback=set_config_file_path_clb, tag='config_file_path_dialog', width=500, height=400):
            dpg.add_file_extension('.txt', color=(0, 255, 0, 255))
            dpg.add_file_extension('.*', color=(255, 255, 255, 255))
    
    def construct_model_output_window():
        with dpg.window(label='select model output to download', show=False, tag='model_output_window', width=600, height=600, pos=[50, 50]):
            dpg.add_child_window(height=500, tag='model_output_child_window')
            with dpg.group(horizontal=True):
                dpg.add_text('download to')
                dpg.add_input_text(default_value='output', tag='download_output_to_folder')
                dpg.add_button(label='...', callback=open_download_to_folder_dialog_clb)
            dpg.add_button(label='download selected files', callback=download_output_clb)
    
    def construct_ui():
        construct_remote_run_window()
        construct_run_model_window()
        construct_model_output_window()
        construct_select_download_folder_dialog()
        construct_select_config_file_path_dialog()