def shutdown(self): dprint_ex(2, " closing") for tab in self.tabs: if hasattr(tab, "shutdown"): tab.shutdown() self.closing = True
def create_ui(self): dprint_ex(3, "Enter") self.suspend_layout() self.warning = not_running_warning_label() self.add(self.warning, False, True) self.connection_list = newTreeView(mforms.TreeDefault) self.connection_list.add_column(mforms.StringColumnType, "Id", 50, False) self.connection_list.add_column(mforms.StringColumnType, "User", 80, False) self.connection_list.add_column(mforms.StringColumnType, "Host", 120, False) self.connection_list.add_column(mforms.StringColumnType, "DB", 100, False) self.connection_list.add_column(mforms.StringColumnType, "Command", 80, False) self.connection_list.add_column(mforms.IntegerColumnType, "Time", 80, False) self.connection_list.add_column(mforms.StringColumnType, "State", 80, False) self.connection_list.add_column(mforms.StringColumnType, "Info", 300, False) self.connection_list.end_columns() self.connection_list.set_allow_sorting(True) self.connection_list.add_changed_callback( weakcb(self, "connection_selected")) #self.set_padding(8) self.add(self.connection_list, True, True) self.button_box = box = newBox(True) self.add(box, False, True) box.set_spacing(12) box.set_padding(12) refresh_button = newButton() refresh_button.set_text("Refresh") box.add_end(refresh_button, False, True) refresh_button.add_clicked_callback(weakcb(self, "refresh")) self.kill_button = newButton() self.kill_button.set_text("Kill Connection") box.add_end(self.kill_button, False, True) self.kill_button.add_clicked_callback(weakcb(self, "kill_connection")) self.killq_button = newButton() self.killq_button.set_text("Kill Query") box.add_end(self.killq_button, False, True) self.killq_button.add_clicked_callback(weakcb(self, "kill_query")) self.add(box, False, True) self.resume_layout() self.connection_selected() dprint_ex(3, "Leave")
def shutdown(self): dprint_ex(2, " closing") for tab in self.tabs: if hasattr(tab, "shutdown"): tab.shutdown() self.closing = True
def server_stopped_event(self): dprint_ex(1, "Handling stop event") if len(self.tabs) > 0 and hasattr(self.tabs[0], "print_output"): self.ctrl_be.uitask(self.tabs[0].print_output, "Server is stopped") self.refresh_tasks_sleep_time = 3 dprint_ex(1, "Done handling stop event")
def server_stopped_event(self): dprint_ex(1, "Handling stop event") if len(self.tabs) > 0 and hasattr(self.tabs[0], "print_output"): self.ctrl_be.uitask(self.tabs[0].print_output, "Server is stopped") self.refresh_tasks_sleep_time = 3 dprint_ex(1, "Done handling stop event")
def server_started_event(self): dprint_ex(1, "Handling start event") if len(self.tabs) > 0 and hasattr(self.tabs[0], 'print_output'): self.ctrl_be.uitask(self.tabs[0].print_output, "Server is running") ###self.connect_mysql() #if None == self.connect_mysql(): self.refresh_tasks_sleep_time = 2 dprint_ex(1, "Done handling start event")
def server_started_event(self): dprint_ex(1, "Handling start event") if len(self.tabs) > 0 and hasattr(self.tabs[0], 'print_output'): self.ctrl_be.uitask(self.tabs[0].print_output, "Server is running") ###self.connect_mysql() #if None == self.connect_mysql(): self.refresh_tasks_sleep_time = 2 dprint_ex(1, "Done handling start event")
def shutdown(self): dprint_ex(2, " closing") self.closing = True for tab in self.tabs: if hasattr(tab, "shutdown"): res = tab.shutdown() if res is False: # It has to explicitely return False to cancel shutdown self.closing = False
def connection_selected(self): dprint_ex(3, "Enter") if self.connection_list.get_selected() < 0: self.kill_button.set_enabled(False) self.killq_button.set_enabled(False) else: self.kill_button.set_enabled(True) self.killq_button.set_enabled(True) dprint_ex(3, "Leave")
def connection_selected(self): dprint_ex(4, "Enter") if self.connection_list.get_selected() < 0: self.kill_button.set_enabled(False) self.killq_button.set_enabled(False) else: self.kill_button.set_enabled(True) self.killq_button.set_enabled(True) dprint_ex(4, "Leave")
def refresh(self, query_result=None, my_serial=0): if not self.ctrl_be.is_sql_connected(): dprint_ex(2, "Leave. SQL connection is offline") return False if not self.page_active: dprint_ex(2, "Leave. Page is inactive") return False node = self.connection_list.get_selected_node() if node: old_selected = node.get_long(0) else: old_selected = None old_selected_node = None if query_result is None: query_result = self.get_process_list() if query_result is not None: self.connection_list.freeze_refresh() self.connection_list.clear() id_width = 0 try: for row in query_result: r = self.connection_list.add_node() for c, field in enumerate(row): if c == 0: try: field = long(field) except: field = 0 r.set_long(c, field) elif c == 5: try: field = int(field) except: field = 0 r.set_int(c, field) else: field = str(field) if c == 0: id_width = max(id_width, len(field)) r.set_string(c, field) if c == 0 and field == old_selected: old_selected_node = r finally: self.connection_list.thaw_refresh() if old_selected_node: self.connection_list.select_node(old_selected_node) self.connection_selected() return (my_serial == self.serial)
def create_ui(self): dprint_ex(3, "Enter") self.suspend_layout() self.warning = not_running_warning_label() self.add(self.warning, False, True) self.connection_list = newTreeView(mforms.TreeDefault) self.connection_list.add_column(mforms.StringColumnType, "Id", 50, False) self.connection_list.add_column(mforms.StringColumnType, "User", 80, False) self.connection_list.add_column(mforms.StringColumnType, "Host", 120, False) self.connection_list.add_column(mforms.StringColumnType, "DB", 100, False) self.connection_list.add_column(mforms.StringColumnType, "Command", 80, False) self.connection_list.add_column(mforms.IntegerColumnType, "Time", 80, False) self.connection_list.add_column(mforms.StringColumnType, "State", 80, False) self.connection_list.add_column(mforms.StringColumnType, "Info", 300, False) self.connection_list.end_columns() self.connection_list.set_allow_sorting(True) self.connection_list.add_changed_callback(weakcb(self, "connection_selected")) #self.set_padding(8) self.add(self.connection_list, True, True) self.button_box = box = newBox(True) self.add(box, False, True) box.set_spacing(12) box.set_padding(12) refresh_button = newButton() refresh_button.set_text("Refresh") box.add_end(refresh_button, False, True) refresh_button.add_clicked_callback(weakcb(self, "refresh")) self.kill_button = newButton() self.kill_button.set_text("Kill Connection") box.add_end(self.kill_button, False, True) self.kill_button.add_clicked_callback(weakcb(self, "kill_connection")) self.killq_button = newButton() self.killq_button.set_text("Kill Query") box.add_end(self.killq_button, False, True) self.killq_button.add_clicked_callback(weakcb(self, "kill_query")) self.add(box, False, True) self.resume_layout() self.connection_selected() dprint_ex(3, "Leave")
def refresh(self, query_result=None): if not self.ctrl_be.is_sql_connected(): dprint_ex(2, "Leave. SQL connection is offline") return if not self.page_active: dprint_ex(2, "Leave. Page is inactive") return i = self.connection_list.get_selected() if i >= 0: old_selected = self.connection_list.get_string(i, 0) else: old_selected = None if query_result is None: query_result = self.get_process_list() if query_result is not None: self.connection_list.freeze_refresh() self.connection_list.clear_rows() id_width = 0 try: for row in query_result: r = self.connection_list.add_row() for c, field in enumerate(row): if c == 5: try: field = int(field) except: field = 0 self.connection_list.set_int(r, c, field) else: field = str(field) if c == 0: id_width = max(id_width, len(field)) self.connection_list.set_string(r, c, field) if c == 0 and field == old_selected: self.connection_list.set_selected(r) finally: self.connection_list.thaw_refresh() if id_width > 0: cnt = self.connection_list.count() for row in range(0, cnt): cid = self.connection_list.get_string(row, 0) self.connection_list.set_string(row, 0, cid.rjust(id_width, ' ')) self.connection_selected()
def refresh(self, query_result = None): if not self.ctrl_be.is_sql_connected(): dprint_ex(2, "Leave. SQL connection is offline") return if not self.page_active: dprint_ex(2, "Leave. Page is inactive") return i = self.connection_list.get_selected() if i >= 0: old_selected = self.connection_list.get_long(i, 0) else: old_selected = None if query_result is None: query_result = self.get_process_list() if query_result is not None: self.connection_list.freeze_refresh() self.connection_list.clear_rows() id_width = 0 try: for row in query_result: r = self.connection_list.add_row() for c, field in enumerate(row): if c == 0: try: field= long(field) except: field= 0 self.connection_list.set_long(r, c, field) elif c == 5: try: field= int(field) except: field= 0 self.connection_list.set_int(r, c, field) else: field = str(field) if c == 0: id_width = max(id_width, len(field)) self.connection_list.set_string(r, c, field) if c == 0 and field == old_selected: self.connection_list.set_selected(r) finally: self.connection_list.thaw_refresh() self.connection_selected()
def refresh_mt(self, ctrl_be): dprint_ex(4, "Enter") if not self.page_active: dprint_ex(2, "Leave. Page inactive") return result_rows = self.get_process_list() ctrl_be.uitask(self.refresh, result_rows) dprint_ex(4, "Leave")
def refresh_mt(self, ctrl_be): dprint_ex(2, "Enter") if not self.page_active: dprint_ex(2, "Leave. Page inactive") return result_rows = self.get_process_list() ctrl_be.uitask(self.refresh, result_rows) dprint_ex(2, "Leave")
def refresh_tasks_thread(self): dprint_ex(2, "Enter") number_of_wakes_between_refreshes = 3 cnt = 0 only_status_check = 0 while not self.closing: status = "unknown" try: status = self.ctrl_be.is_server_running(verbose=0) except Exception, exc: import traceback traceback.print_exc() print "exception getting server status: %s" % exc control_event = None if self.last_server_status != status: if status == "running": control_event = "server_started" elif status == "stopped": control_event = "server_stopped" if control_event: self.ctrl_be.event_from_main(control_event) dprint_ex(3, "server running", status, ", self.closing =", self.closing) if self.last_server_status != status or only_status_check == 0: dprint_ex(2, "Performing extra actions") if self.server_status_page: self.server_status_page.refresh(status) self.last_server_status = status time.sleep(self.refresh_tasks_sleep_time) cnt += 1 only_status_check = cnt % number_of_wakes_between_refreshes
def refresh_tasks_thread(self): dprint_ex(2, "Entering refresh tasks thread") number_of_wakes_between_refreshes = 3 cnt = 0 only_status_check = 0 while not self.closing: status = "unknown" try: status = self.ctrl_be.is_server_running(verbose=0) except Exception, exc: import traceback traceback.print_exc() print "exception getting server status: %s" % exc control_event = None if self.last_server_status != status: if status == "running": control_event = "server_started" elif status == "stopped": control_event = "server_stopped" if control_event: self.ctrl_be.event_from_main(control_event) dprint_ex(3, "server running", status, ", self.closing =", self.closing) if self.last_server_status != status or only_status_check == 0: dprint_ex(2, "Performing extra actions") if self.server_status_page: self.server_status_page.refresh(status) self.last_server_status = status time.sleep(self.refresh_tasks_sleep_time) cnt += 1 only_status_check = cnt % number_of_wakes_between_refreshes
class WbAdminMainView(mforms.Box): last_server_status = None def __init__(self, server_profile, ctrl_be, monitor): mforms.Box.__init__(self, True) # True - vertical layout self.tasks_side = newTaskSidebar() self.content_box = newBox(False) self.tasks_side.set_selection_color(mforms.SystemHighlight) self.tabs = [] self.name2page = {} self.config_ui = None self.closing = False self.tabview = newTabView(True) self.ctrl_be = ctrl_be self.old_active_tab = None self.server_profile = server_profile self.refresh_tasks_sleep_time = 2 self.ui_profile = UIProfile(server_profile) # Setup self self.set_managed() self.ui_profile.apply_style(self, "main") if server_profile.host_os == wbaOS.windows: side_panel = newPanel(mforms.StyledHeaderPanel) side_panel.set_title(" Task and Object Browser") side_panel.add(self.tasks_side) self.add(side_panel, False, True) self.content_panel = newPanel(mforms.StyledHeaderPanel) self.content_panel.set_title(" Task and Object Browser") self.content_panel.add(self.content_box) self.add(self.content_panel, True, True) else: vbox = newBox(False) vbox.add(self.tasks_side, True, True) self.add(vbox, False, False) vbox = newBox(False) self.content_label = newHeaderLabel("") self.ui_profile.apply_style(self.content_label, 'content-label') vbox.add(self.content_label, False, False) vbox.add(self.content_box, True, True) self.add(vbox, True, True) self.ctrl_be.add_me_for_event("server_started", self) self.ctrl_be.add_me_for_event("server_stopped", self) # Setup tasks sidebar self.fill_task_sidebar() self.tasks_side.add_on_section_command_callback(self.section_clicked) self.tasks_side.show() self.tasks_side.set_size(220, -1) # Setup content box self.content_box.add(self.tabview, True, True) # Create content pages self.server_status_page = ServerStatusPage(server_profile, ctrl_be, self) self.config_ui = WbAdminConfigFileUI(server_profile=server_profile, ctrl_be=ctrl_be, main_view=self) self.startup = WbAdminConfigurationStartup(ctrl_be, server_profile, self) self.security = WbAdminSecurity(self.ctrl_be, server_profile, self) self.variables = WbAdminVariables(self.ctrl_be, server_profile, self) self.logs = WbAdminLogs(self.ctrl_be, server_profile, self) self.dump = WbAdminExport(server_profile, self.ctrl_be, self) Utilities.add_timeout(0.5, weakcb(self, "timeout")) self.timeout_thread = threading.Thread( target=self.refresh_tasks_thread) self.timeout_thread.setDaemon(True) self.timeout_thread.start() self.tabview.add_tab_changed_callback(self.tab_changed) self.timeout( ) # will call self.connect_mysql() and check if mysql is running self.ctrl_be.continue_events( ) # Process events which are queue during init dprint_ex(1, "WBA init complete") self.tasks_side.select_entry("MANAGEMENT", "Server Status") self.server_status_page.page_activated() #--------------------------------------------------------------------------- def set_content_label(self, text): if hasattr(self, "content_label"): self.content_label.set_text(text) else: self.content_panel.set_title(text) #--------------------------------------------------------------------------- def add_taskbar_section(self, name): i = self.tasks_side.add_section(name) #self.sections_list.append(name) return i #--------------------------------------------------------------------------- def fill_task_sidebar(self): self.add_taskbar_section("MANAGEMENT") self.add_taskbar_section("CONFIGURATION") self.add_taskbar_section("SECURITY") self.add_taskbar_section("DATA EXPORT / RESTORE") #--------------------------------------------------------------------------- def section_clicked(self, section): i, content = self.name2page.get(section, (None, None)) #print section, i, content if i is not None: self.tabview.set_active_tab(i) self.tab_changed() #--------------------------------------------------------------------------- def switch_to(self, section, task): self.tasks_side.select_entry(section, task) self.tab_changed() #--------------------------------------------------------------------------- def tab_changed(self): if self.old_active_tab and hasattr(self.old_active_tab, "page_deactivated"): self.old_active_tab.page_deactivated() i = self.tabview.get_active_tab() panel = self.tabs[i] if panel is not None: panel.page_activated() self.old_active_tab = panel #--------------------------------------------------------------------------- def shutdown(self): dprint_ex(2, " closing") for tab in self.tabs: if hasattr(tab, "shutdown"): tab.shutdown() self.closing = True #--------------------------------------------------------------------------- def shutdown_event(self): self.shutdown() #--------------------------------------------------------------------------- def server_started_event(self): dprint_ex(1, "Handling start event") if len(self.tabs) > 0 and hasattr(self.tabs[0], 'print_output'): self.ctrl_be.uitask(self.tabs[0].print_output, "Server is running") ###self.connect_mysql() #if None == self.connect_mysql(): self.refresh_tasks_sleep_time = 2 dprint_ex(1, "Done handling start event") #--------------------------------------------------------------------------- def server_stopped_event(self): dprint_ex(1, "Handling stop event") if len(self.tabs) > 0 and hasattr(self.tabs[0], "print_output"): self.ctrl_be.uitask(self.tabs[0].print_output, "Server is stopped") self.refresh_tasks_sleep_time = 3 dprint_ex(1, "Done handling stop event") #--------------------------------------------------------------------------- def refresh_tasks_thread(self): dprint_ex(2, "Enter") number_of_wakes_between_refreshes = 3 cnt = 0 only_status_check = 0 while not self.closing: status = "unknown" try: status = self.ctrl_be.is_server_running(verbose=0) except Exception, exc: import traceback traceback.print_exc() print "exception getting server status: %s" % exc control_event = None if self.last_server_status != status: if status == "running": control_event = "server_started" elif status == "stopped": control_event = "server_stopped" if control_event: self.ctrl_be.event_from_main(control_event) dprint_ex(3, "server running", status, ", self.closing =", self.closing) if self.last_server_status != status or only_status_check == 0: dprint_ex(2, "Performing extra actions") if self.server_status_page: self.server_status_page.refresh(status) self.last_server_status = status time.sleep(self.refresh_tasks_sleep_time) cnt += 1 only_status_check = cnt % number_of_wakes_between_refreshes dprint_ex(2, "Leave")
def create_ui(self): dprint_ex(4, "Enter") self.suspend_layout() self.warning = not_running_warning_label() self.add(self.warning, False, True) self.connection_list = newTreeNodeView(mforms.TreeDefault | mforms.TreeFlatList) self.connection_list.add_column(mforms.LongIntegerColumnType, "Id", 50, False) self.connection_list.add_column(mforms.StringColumnType, "User", 80, False) self.connection_list.add_column(mforms.StringColumnType, "Host", 120, False) self.connection_list.add_column(mforms.StringColumnType, "DB", 100, False) self.connection_list.add_column(mforms.StringColumnType, "Command", 80, False) self.connection_list.add_column(mforms.IntegerColumnType, "Time", 60, False) self.connection_list.add_column(mforms.StringColumnType, "State", 80, False) self.info_column = self.connection_list.add_column( mforms.StringColumnType, "Info", 300, False) self.connection_list.end_columns() self.connection_list.set_allow_sorting(True) self.connection_list.add_changed_callback( weakcb(self, "connection_selected")) #self.set_padding(8) self.add(self.connection_list, True, True) self.button_box = box = newBox(True) box.set_spacing(12) box.set_padding(12) refresh_button = newButton() refresh_button.set_text("Refresh") box.add_end(refresh_button, False, True) refresh_button.add_clicked_callback(weakcb(self, "refresh")) copy_button = newButton() copy_button.set_text("Copy Selected") box.add_end(copy_button, False, True) copy_button.add_clicked_callback(weakcb(self, "copy_selected")) self.kill_button = newButton() self.kill_button.set_text("Kill Connection") box.add_end(self.kill_button, False, True) self.kill_button.add_clicked_callback(weakcb(self, "kill_connection")) self.killq_button = newButton() self.killq_button.set_text("Kill Query") box.add_end(self.killq_button, False, True) self.killq_button.add_clicked_callback(weakcb(self, "kill_query")) refresh_label = newLabel("Refresh Rate:") box.add(refresh_label, False, True) self.refresh_values = [0.5, 1, 2, 3, 4, 5, 10, 15, 30] self.refresh_values_size = len(self.refresh_values) self.refresh_selector = newSelector() self.refresh_selector.set_size(100, -1) for s in self.refresh_values: self.refresh_selector.add_item(str(s) + " seconds") self.refresh_selector.add_item("Don't Refresh") self.refresh_selector.set_selected(9) box.add(self.refresh_selector, False, True) self.refresh_selector.add_changed_callback( weakcb(self, "update_refresh_rate")) self.add(box, False, True) self.resume_layout() self.connection_selected() dprint_ex(4, "Leave")
def __init__(self, server_profile, ctrl_be, monitor): mforms.Box.__init__(self, True) # True - vertical layout self.tasks_side = newTaskSidebar() self.content_box = newBox(False) self.tasks_side.set_selection_color(mforms.SystemHighlight) self.tabs = [] self.name2page = {} self.config_ui = None self.closing = False self.tabview = newTabView(True) self.ctrl_be = ctrl_be self.old_active_tab = None self.server_profile = server_profile self.refresh_tasks_sleep_time = 2 self.ui_profile = UIProfile(server_profile) # Setup self self.set_managed() self.ui_profile.apply_style(self, "main") if server_profile.host_os == wbaOS.windows: side_panel = newPanel(mforms.StyledHeaderPanel) side_panel.set_title(" Task and Object Browser") side_panel.add(self.tasks_side) self.add(side_panel, False, True) self.content_panel = newPanel(mforms.StyledHeaderPanel) self.content_panel.set_title(" Task and Object Browser") self.content_panel.add(self.content_box) self.add(self.content_panel, True, True) else: vbox = newBox(False) vbox.add(self.tasks_side, True, True) self.add(vbox, False, False) vbox = newBox(False) self.content_label = newHeaderLabel("") self.ui_profile.apply_style(self.content_label, 'content-label') vbox.add(self.content_label, False, False) vbox.add(self.content_box, True, True) self.add(vbox, True, True) self.ctrl_be.add_me_for_event("server_started", self) self.ctrl_be.add_me_for_event("server_stopped", self) # Setup tasks sidebar self.fill_task_sidebar() self.tasks_side.add_on_section_command_callback(self.section_clicked) self.tasks_side.show() self.tasks_side.set_size(220, -1) # Setup content box self.content_box.add(self.tabview, True, True) # Create content pages self.server_status_page = ServerStatusPage(server_profile, ctrl_be, self) self.config_ui = WbAdminConfigFileUI(server_profile = server_profile, ctrl_be = ctrl_be, main_view = self) self.startup = WbAdminConfigurationStartup(ctrl_be, server_profile, self) self.security = WbAdminSecurity(self.ctrl_be, server_profile, self) self.variables = WbAdminVariables(self.ctrl_be, server_profile, self) self.logs = WbAdminLogs(self.ctrl_be, server_profile, self) self.dump = WbAdminExport(server_profile, self.ctrl_be, self) Utilities.add_timeout(0.5, weakcb(self, "timeout")) self.timeout_thread = threading.Thread(target = self.refresh_tasks_thread) self.timeout_thread.setDaemon(True) self.timeout_thread.start() self.tabview.add_tab_changed_callback(self.tab_changed) self.timeout() # will call self.connect_mysql() and check if mysql is running self.ctrl_be.continue_events() # Process events which are queue during init dprint_ex(1, "WBA init complete") self.tasks_side.select_entry("MANAGEMENT", "Server Status") self.server_status_page.page_activated()
def __init__(self, server_profile, ctrl_be, monitor): mforms.Box.__init__(self, True) # True - vertical layout self.tasks_side = newTaskSidebar() self.content_box = newBox(False) self.tasks_side.set_selection_color(mforms.SystemHighlight) self.tabs = [] self.name2page = {} self.config_ui = None self.closing = False self.tabview = newTabView(True) self.ctrl_be = ctrl_be self.old_active_tab = None self.server_profile = server_profile self.refresh_tasks_sleep_time = 2 self.ui_profile = UIProfile(server_profile) # Setup self self.set_managed() self.ui_profile.apply_style(self, "main") if server_profile.host_os == wbaOS.windows: side_panel = newPanel(mforms.StyledHeaderPanel) side_panel.set_title(" Task and Object Browser") side_panel.add(self.tasks_side) self.add(side_panel, False, True) self.content_panel = newPanel(mforms.StyledHeaderPanel) self.content_panel.set_title(" Task and Object Browser") self.content_panel.add(self.content_box) self.add(self.content_panel, True, True) else: vbox = newBox(False) vbox.add(self.tasks_side, True, True) self.add(vbox, False, False) vbox = newBox(False) self.content_label = newHeaderLabel("") self.ui_profile.apply_style(self.content_label, 'content-label') vbox.add(self.content_label, False, False) vbox.add(self.content_box, True, True) self.add(vbox, True, True) self.ctrl_be.add_me_for_event("server_started", self) self.ctrl_be.add_me_for_event("server_stopped", self) # Setup tasks sidebar self.fill_task_sidebar() self.tasks_side.add_on_section_command_callback(self.section_clicked) self.tasks_side.show() self.tasks_side.set_size(220, -1) # Setup content box self.content_box.add(self.tabview, True, True) # Create content pages self.server_status_page = ServerStatusPage(server_profile, ctrl_be, self) self.config_ui = WbAdminConfigFileUI(server_profile=server_profile, ctrl_be=ctrl_be, main_view=self) self.startup = WbAdminConfigurationStartup(ctrl_be, server_profile, self) self.security = WbAdminSecurity(self.ctrl_be, server_profile, self) self.variables = WbAdminVariables(self.ctrl_be, server_profile, self) self.logs = WbAdminLogs(self.ctrl_be, server_profile, self) self.dump = WbAdminExport(server_profile, self.ctrl_be, self) Utilities.add_timeout(0.5, weakcb(self, "timeout")) self.timeout_thread = threading.Thread( target=self.refresh_tasks_thread) self.timeout_thread.setDaemon(True) self.timeout_thread.start() self.tabview.add_tab_changed_callback(self.tab_changed) self.timeout( ) # will call self.connect_mysql() and check if mysql is running self.ctrl_be.continue_events( ) # Process events which are queue during init dprint_ex(1, "WBA init complete") self.tasks_side.select_entry("MANAGEMENT", "Server Status") self.server_status_page.page_activated()
def __init__(self, server_profile, ctrl_be, monitor): mforms.Box.__init__(self, True) # True - vertical layout self.tasks_side = newTaskSidebar() self.content_box = newBox(False) self.tasks_side.set_selection_color(mforms.SystemColorHighlight) self.tabs = [] self.name2page = {} self.config_ui = None self.closing = False self.tabview = newTabView(True) self.ctrl_be = ctrl_be self.old_active_tab = None self.server_profile = server_profile self.refresh_tasks_sleep_time = 2 self.ui_profile = UIProfile(server_profile) # Setup self self.set_managed() self.set_release_on_add() self.ui_profile.apply_style(self, "main") if server_profile.host_os == wbaOS.windows: side_panel = newPanel(mforms.StyledHeaderPanel) side_panel.set_title(" Task and Object Browser") side_panel.add(self.tasks_side) self.add(side_panel, False, True) self.content_panel = newPanel(mforms.StyledHeaderPanel) self.content_panel.set_title(" Task and Object Browser") self.content_panel.add(self.content_box) self.add(self.content_panel, True, True) else: vbox = newBox(False) vbox.add(self.tasks_side, True, True) self.add(vbox, False, False) vbox = newBox(False) self.content_label = newHeaderLabel("") self.ui_profile.apply_style(self.content_label, 'content-label') vbox.add(self.content_label, False, False) vbox.add(self.content_box, True, True) self.add(vbox, True, True) self.ctrl_be.add_me_for_event("server_started", self) self.ctrl_be.add_me_for_event("server_stopped", self) # Setup tasks sidebar self.fill_task_sidebar() self.tasks_side.add_on_section_command_callback(self.section_clicked) self.tasks_side.show() self.tasks_side.set_size(220, -1) # Setup content box self.content_box.add(self.tabview, True, True) # Retrieve from server the log file paths if exist status = self.ctrl_be.is_server_running(verbose=0) if status in ['stopped', 'unknown'] and not all([ self.server_profile. general_log_file_path, # only proceed to parse the config file if self.server_profile. slow_log_file_path, # any of these is missing self.server_profile.error_log_file_path, self.server_profile.log_output ]): cfg_be = wb_admin_config_file_be.WbAdminConfigFileBE( self.server_profile, self.ctrl_be) cfg_be.open_configuration_file( self.server_profile.config_file_path) options = dict( cfg_be.get_options(self.server_profile.config_file_section)) if not self.server_profile.log_output and options.has_key( 'log-output'): self.server_profile.log_ouput = options['log-output'] if not self.server_profile.general_log_file_path: path = options['general_log_file'] if options.has_key( 'general_log_file') else ( options['log'] if options.has_key('log') else '' ) # the 'log' option is deprecated but still allowed if path: self.server_profile.general_log_file_path = path.strip('"') if not self.server_profile.slow_log_file_path: path = options['slow_query_log_file'] if options.has_key( 'slow_query_log_file' ) else ( options['log-slow-queries'] if options.has_key('log-slow-queries') else '' ) # the 'log-slow-queries' option is deprecated but still allowed if path: self.server_profile.slow_log_file_path = path.strip('"') if not self.server_profile.error_log_file_path and options.has_key( 'log-error'): self.server_profile.error_log_file_path = options[ 'log-error'].strip('"') # Create content pages self.server_status_page = ServerStatusPage(server_profile, ctrl_be, self) self.config_ui = WbAdminConfigFileUI(server_profile=server_profile, ctrl_be=ctrl_be, main_view=self) self.startup = WbAdminConfigurationStartup(ctrl_be, server_profile, self) self.security = WbAdminSecurity(self.ctrl_be, server_profile, self) self.variables = WbAdminVariables(self.ctrl_be, server_profile, self) self.logs = WbAdminLogs(self.ctrl_be, server_profile, self) self.dump = WbAdminExport(server_profile, self.ctrl_be, self) self.restore = WbAdminImport(server_profile, self.ctrl_be, self) self.init_extensions(server_profile, self.ctrl_be) Utilities.add_timeout(0.5, weakcb(self, "timeout")) self.timeout_thread = threading.Thread( target=self.refresh_tasks_thread) self.timeout_thread.setDaemon(True) self.timeout_thread.start() self.tabview.add_tab_changed_callback(self.tab_changed) self.timeout( ) # will call self.connect_mysql() and check if mysql is running self.ctrl_be.continue_events( ) # Process events which are queue during init dprint_ex(1, "WBA init complete") self.tasks_side.select_entry("MANAGEMENT", "Server Status") self.server_status_page.page_activated()
class WbAdminMainView(mforms.Box): last_server_status = None def __init__(self, server_profile, ctrl_be, monitor): mforms.Box.__init__(self, True) # True - vertical layout self.tasks_side = newTaskSidebar() self.content_box = newBox(False) self.tasks_side.set_selection_color(mforms.SystemColorHighlight) self.tabs = [] self.name2page = {} self.config_ui = None self.closing = False self.tabview = newTabView(True) self.ctrl_be = ctrl_be self.old_active_tab = None self.server_profile = server_profile self.refresh_tasks_sleep_time = 2 self.ui_profile = UIProfile(server_profile) # Setup self self.set_managed() self.set_release_on_add() self.ui_profile.apply_style(self, "main") if server_profile.host_os == wbaOS.windows: side_panel = newPanel(mforms.StyledHeaderPanel) side_panel.set_title(" Task and Object Browser") side_panel.add(self.tasks_side) self.add(side_panel, False, True) self.content_panel = newPanel(mforms.StyledHeaderPanel) self.content_panel.set_title(" Task and Object Browser") self.content_panel.add(self.content_box) self.add(self.content_panel, True, True) else: vbox = newBox(False) vbox.add(self.tasks_side, True, True) self.add(vbox, False, False) vbox = newBox(False) self.content_label = newHeaderLabel("") self.ui_profile.apply_style(self.content_label, 'content-label') vbox.add(self.content_label, False, False) vbox.add(self.content_box, True, True) self.add(vbox, True, True) self.ctrl_be.add_me_for_event("server_started", self) self.ctrl_be.add_me_for_event("server_stopped", self) # Setup tasks sidebar self.fill_task_sidebar() self.tasks_side.add_on_section_command_callback(self.section_clicked) self.tasks_side.show() self.tasks_side.set_size(220, -1) # Setup content box self.content_box.add(self.tabview, True, True) # Retrieve from server the log file paths if exist status = self.ctrl_be.is_server_running(verbose=0) if status in ['stopped', 'unknown'] and not all([ self.server_profile. general_log_file_path, # only proceed to parse the config file if self.server_profile. slow_log_file_path, # any of these is missing self.server_profile.error_log_file_path, self.server_profile.log_output ]): cfg_be = wb_admin_config_file_be.WbAdminConfigFileBE( self.server_profile, self.ctrl_be) cfg_be.open_configuration_file( self.server_profile.config_file_path) options = dict( cfg_be.get_options(self.server_profile.config_file_section)) if not self.server_profile.log_output and options.has_key( 'log-output'): self.server_profile.log_ouput = options['log-output'] if not self.server_profile.general_log_file_path: path = options['general_log_file'] if options.has_key( 'general_log_file') else ( options['log'] if options.has_key('log') else '' ) # the 'log' option is deprecated but still allowed if path: self.server_profile.general_log_file_path = path.strip('"') if not self.server_profile.slow_log_file_path: path = options['slow_query_log_file'] if options.has_key( 'slow_query_log_file' ) else ( options['log-slow-queries'] if options.has_key('log-slow-queries') else '' ) # the 'log-slow-queries' option is deprecated but still allowed if path: self.server_profile.slow_log_file_path = path.strip('"') if not self.server_profile.error_log_file_path and options.has_key( 'log-error'): self.server_profile.error_log_file_path = options[ 'log-error'].strip('"') # Create content pages self.server_status_page = ServerStatusPage(server_profile, ctrl_be, self) self.config_ui = WbAdminConfigFileUI(server_profile=server_profile, ctrl_be=ctrl_be, main_view=self) self.startup = WbAdminConfigurationStartup(ctrl_be, server_profile, self) self.security = WbAdminSecurity(self.ctrl_be, server_profile, self) self.variables = WbAdminVariables(self.ctrl_be, server_profile, self) self.logs = WbAdminLogs(self.ctrl_be, server_profile, self) self.dump = WbAdminExport(server_profile, self.ctrl_be, self) self.restore = WbAdminImport(server_profile, self.ctrl_be, self) self.init_extensions(server_profile, self.ctrl_be) Utilities.add_timeout(0.5, weakcb(self, "timeout")) self.timeout_thread = threading.Thread( target=self.refresh_tasks_thread) self.timeout_thread.setDaemon(True) self.timeout_thread.start() self.tabview.add_tab_changed_callback(self.tab_changed) self.timeout( ) # will call self.connect_mysql() and check if mysql is running self.ctrl_be.continue_events( ) # Process events which are queue during init dprint_ex(1, "WBA init complete") self.tasks_side.select_entry("MANAGEMENT", "Server Status") self.server_status_page.page_activated() #--------------------------------------------------------------------------- def set_content_label(self, text): if hasattr(self, "content_label"): self.content_label.set_text(text) else: self.content_panel.set_title(text) #--------------------------------------------------------------------------- def add_taskbar_section(self, name): i = self.tasks_side.add_section(name) #self.sections_list.append(name) return i #--------------------------------------------------------------------------- def fill_task_sidebar(self): self.add_taskbar_section("MANAGEMENT") self.add_taskbar_section("CONFIGURATION") self.add_taskbar_section("SECURITY") self.add_taskbar_section("DATA EXPORT / RESTORE") #self.add_taskbar_section("ENTERPRISE BACKUP") #--------------------------------------------------------------------------- def section_clicked(self, section): i, content = self.name2page.get(section, (None, None)) #print section, i, content if i is not None: self.tabview.set_active_tab(i) #set_active_tab() already triggers a tab_changed event #self.tab_changed() #--------------------------------------------------------------------------- def switch_to(self, section, task): self.tasks_side.select_entry(section, task) self.tab_changed() #--------------------------------------------------------------------------- def tab_changed(self): if self.old_active_tab and hasattr(self.old_active_tab, "page_deactivated"): self.old_active_tab.page_deactivated() i = self.tabview.get_active_tab() panel = self.tabs[i] if panel is not None: panel.page_activated() self.old_active_tab = panel #--------------------------------------------------------------------------- def shutdown(self): dprint_ex(2, " closing") self.closing = True for tab in self.tabs: if hasattr(tab, "shutdown"): res = tab.shutdown() if res is False: # It has to explicitely return False to cancel shutdown self.closing = False #--------------------------------------------------------------------------- def shutdown_event(self): self.shutdown() #--------------------------------------------------------------------------- def server_started_event(self): dprint_ex(1, "Handling start event") if len(self.tabs) > 0 and hasattr(self.tabs[0], 'print_output'): self.ctrl_be.uitask(self.tabs[0].print_output, "Server is running") ###self.connect_mysql() #if None == self.connect_mysql(): self.refresh_tasks_sleep_time = 2 dprint_ex(1, "Done handling start event") #--------------------------------------------------------------------------- def server_stopped_event(self): dprint_ex(1, "Handling stop event") if len(self.tabs) > 0 and hasattr(self.tabs[0], "print_output"): self.ctrl_be.uitask(self.tabs[0].print_output, "Server is stopped") self.refresh_tasks_sleep_time = 3 dprint_ex(1, "Done handling stop event") #--------------------------------------------------------------------------- def refresh_tasks_thread(self): dprint_ex(2, "Entering refresh tasks thread") number_of_wakes_between_refreshes = 3 cnt = 0 only_status_check = 0 while not self.closing: status = "unknown" try: status = self.ctrl_be.is_server_running(verbose=0) except Exception, exc: import traceback traceback.print_exc() print "exception getting server status: %s" % exc control_event = None if self.last_server_status != status: if status == "running": control_event = "server_started" elif status == "stopped": control_event = "server_stopped" if control_event: self.ctrl_be.event_from_main(control_event) dprint_ex(3, "server running", status, ", self.closing =", self.closing) if self.last_server_status != status or only_status_check == 0: dprint_ex(2, "Performing extra actions") if self.server_status_page: self.server_status_page.refresh(status) self.last_server_status = status time.sleep(self.refresh_tasks_sleep_time) cnt += 1 only_status_check = cnt % number_of_wakes_between_refreshes dprint_ex(2, "Leaving refresh tasks thread")