diff --git a/Ccs/ccs_function_lib.py b/Ccs/ccs_function_lib.py index 7fe8ba81f4c7f6c2bf93ecfd0195b37fe9a5d970..5f8dbe16c9716d645c2db60b6754bdbdb83e48cf 100644 --- a/Ccs/ccs_function_lib.py +++ b/Ccs/ccs_function_lib.py @@ -344,7 +344,7 @@ def is_open(name, instance=1): dbus_type.get_object(Bus_Name, '/MessageListener') return True except Exception as err: - logger.info(err) + logger.debug(err) return False @@ -4581,7 +4581,7 @@ def collect_13(pool_name, starttime=None, endtime=None, startidx=None, endidx=No sdu=None, verbose=True): if not os.path.isfile(pool_name): - logger.debug('{} is not a file, looking it up in DB') + logger.debug('{} is not a file, looking it up in DB'.format(pool_name)) # try fetching pool info from pools opened in viewer # pname = _get_displayed_pool_path(pool_name) # if pname: diff --git a/Ccs/editor.py b/Ccs/editor.py index c89e972d6f732fb89c5536d1bb05322f075a9c31..c7655993f0d2ce6b15c3041fb459c73daa52b804 100644 --- a/Ccs/editor.py +++ b/Ccs/editor.py @@ -31,6 +31,8 @@ action_folder = cfg.get('ccs-paths', 'actions') scripts = glob.glob(os.path.join(cfg.get('paths', 'ccs'), "scripts/*.py")) script_actions = '\n'.join(["<menuitem action='{}' />".format(os.path.split(script)[-1][:-3]) for script in scripts]) +LOG_UPDT_PER = 2000 # ms + UI_INFO = """ <ui> <menubar name='MenuBar'> @@ -68,6 +70,7 @@ UI_INFO = """ <menuitem action='ActionButtons' /> <menuitem action='ReconnectSQL' /> <menuitem action='RestartTerminal' /> + <menuitem action='ClearLog' /> </menu> <menu action='ScriptsMenu'> {} @@ -211,9 +214,10 @@ class CcsEditor(Gtk.Window): self.nb.append_page(self.logwin, tab_label=Gtk.Label(label='Log', angle=270)) self.paned.add2(self.nb) - self.log_file = None # save the shown text from the log file tab - # Update the log-file view window every 2 seconds - GLib.timeout_add(2000, self.switch_notebook_page, self.logwin, self.logwintext, self.logbuffer) + self.log_file = None + self.log_file_text = None # save the shown text from the log file tab + # Update the log-file view window every LOG_UPDT_PER milliseconds + GLib.timeout_add(LOG_UPDT_PER, self.switch_notebook_page, self.logwin, self.logwintext, self.logbuffer) self.ipython_view.connect("size-allocate", self.console_autoscroll, self.ipython_view) @@ -708,6 +712,10 @@ class CcsEditor(Gtk.Window): action.connect("activate", self._on_restart_terminal) action_group.add_action(action) + action = Gtk.Action(name="ClearLog", label="_Clear Log", tooltip=None, stock_id=None) + action.connect("activate", self._on_clear_log) + action_group.add_action(action) + def create_scripts_menu(self, action_group): action = Gtk.Action(name="ScriptsMenu", label="_Scripts", tooltip=None, stock_id=None) action_group.add_action(action) @@ -1761,27 +1769,37 @@ class CcsEditor(Gtk.Window): filelist = glob.glob(os.path.join(self.logdir, '*.log')) filelist.sort(reverse=True) if not filelist: - self.logger.info('No log files to track!') + self.logger.warning('No log files to track!') return True - with open(filelist[0], 'r') as fd: + self.log_file = filelist[0] + with open(self.log_file, 'r') as fd: file = fd.read() - if self.log_file is None: + if self.log_file_text is None: logwin.remove(logwin.get_child()) - buffer.set_text('CCS Applications Log ({}):\n'.format(os.path.basename(filelist[0]))) + buffer.set_text('CCS Applications Log ({}):\n'.format(os.path.basename(self.log_file))) end = buffer.get_end_iter() buffer.insert(end, '\n') end = buffer.get_end_iter() buffer.insert(end, file) logwin.add(view) else: - new_text = file[len(self.log_file):] + new_text = file[len(self.log_file_text):] if new_text: end = buffer.get_end_iter() buffer.insert(end, new_text) - self.log_file = file + self.log_file_text = file return True + def _on_clear_log(self, *args): + try: + with open(self.log_file, 'w') as fd: + fd.write('{}.000: Log truncated\n'.format(time.strftime('%Y-%m-%d %H:%M:%S'))) + self.log_file_text = None + self.switch_notebook_page(self.logwin, self.logwintext, self.logbuffer) + except Exception as err: + self.logger.error(err) + def _on_set_style(self, widget): dialog = StyleChooserDialog(scheme=self.style_scheme) diff --git a/Ccs/log_server.py b/Ccs/log_server.py index 1d71757cc8ccbe66e4c855cfc9748bc752c8795c..36b7af180612984f80c35d12ee9efe7125ff4a32 100644 --- a/Ccs/log_server.py +++ b/Ccs/log_server.py @@ -143,7 +143,7 @@ def main(): tcpserver.serve_until_stopped(cfg) logger.info('TCP-server for logging shutting down') # Catch exception if log_server is already running and address/port is already in use - except OSError: + except OSError as err: logger.info('TCP-server for logging seems to be already running.') except Exception as err: raise err diff --git a/Ccs/plotter.py b/Ccs/plotter.py index c378d4440a20424039229bb42cf9e3d4e3f1ffd2..695a68978b97ed68ee8195cde6cea440a433f892 100644 --- a/Ccs/plotter.py +++ b/Ccs/plotter.py @@ -254,7 +254,7 @@ class PlotViewer(Gtk.Window): def _create_navbar(self): # navbar = NavigationToolbarX(self.canvas, self) - navbar = NavigationToolbar(self.canvas, window=self) + navbar = NavigationToolbar(self.canvas) # , window=self) limits = Gtk.HBox() self.xmin = Gtk.Entry() @@ -485,7 +485,7 @@ class PlotViewer(Gtk.Window): i += 1 if pool_info == tuple(found_pool): # Check if pools match x = True # If at least one entry matches to the pool it is not necessary to add - count +=1 + count += 1 if not x: # Add a pool if it is not already in the model (liststore) model.append([pool_info[0], pool_info[1], pool_info[2], pool_info[3]]) @@ -734,6 +734,7 @@ class PlotViewer(Gtk.Window): # rows = rows.filter(func.left(DbTelemetry.timestamp, func.length(DbTelemetry.timestamp) - 1) > 2.) try: + # TODO: speedup? xy, (descr, unit) = cfl.get_param_values([row.raw for row in rows.yield_per(1000)], hk, parameter, numerical=True, tmfilter=False) if len(xy) == 0: @@ -1272,8 +1273,6 @@ class PlotViewer(Gtk.Window): " = dbus.SessionBus().get_object('" + str(My_Bus_Name) + "', '/MessageListener')") - - ##### # Get the prev loaded Pools form Viewer and Manager if none is given self.update_pool_view() self.get_prev_loaded_pools()