From 667c7b5c1839d35c4a1b0972282573700cb2b20d Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 27 Nov 2023 17:57:09 +0600 Subject: [PATCH] First version of table journald overview is done --- source/ubl-settings-logging.c | 89 +++++++++++++++------------- source/ubl-settings-logging.h | 53 +++++++++-------- ubl-settings-logging-inspector.glade | 68 ++++++++++++++------- 3 files changed, 122 insertions(+), 88 deletions(-) diff --git a/source/ubl-settings-logging.c b/source/ubl-settings-logging.c index efffe58..5968842 100644 --- a/source/ubl-settings-logging.c +++ b/source/ubl-settings-logging.c @@ -267,13 +267,34 @@ void on_inspector_jornald_read_async(inspector_window *window){ } char output[4092]; GtkTreeIter iter; - // while (1){ - // if(fgets(output,4092,fl)){ - // gtk_list_store_append(window->list, &iter); + main_config.remove_thread=0; + while (main_config.remove_thread==0){ + if(fgets(output,4092,fl)){ + if(strcmp(output,"")){ + gtk_list_store_append(window->list, &iter); + + char *identifier=""; + char *temp = yon_char_new(output); + char *log=temp; + if (strstr(log,"\033[H\033[2J\033[3")) + yon_char_divide(log,strlen("\033[H\033[2J\033[3")); + log = yon_char_divide_search(log,"\n",-1); + if (window->last_mode<5){ + identifier = log; + log=strstr(log,":")+1; + log=strstr(log,":")+1; + log=strstr(log,":")+1; + char *iden = yon_char_new(identifier); + identifier=yon_char_divide(iden,strlen(identifier)-strlen(log)-1); + free(iden); + } - // gtk_list_store_set(window->list,&iter,0,&); - // } - // } + gtk_list_store_set(window->list,&iter,0,identifier,1,log,-1); + free(temp); + } + } + // g_usleep(100); + } } void on_inspector_update(GtkWidget *self, inspector_window *window){ @@ -282,64 +303,42 @@ void on_inspector_update(GtkWidget *self, inspector_window *window){ config_str output; if (!strcmp(window->journal_name,"journald")){ GtkWidget *terminal = (GtkWidget*)window->terminals->first->data; - if (self==window->UpdateButton){ - switch(window->last_mode){ - case 0: - yon_terminal_integrated_start(terminal, get_journal_output_command,NULL,NULL); - break; - case 1: - yon_terminal_integrated_start(terminal, get_journal_output_since_boot_command,NULL,NULL); - break; - case 2: - yon_terminal_integrated_start(terminal, get_journal_output_followed_command,NULL,NULL); - break; - case 3: - yon_terminal_integrated_start(terminal, get_journal_output_kernel_command,NULL,NULL); - break; - case 4: - yon_terminal_integrated_start(terminal, get_journal_output_prioritied_command,NULL,NULL); - break; - case 5: - yon_terminal_integrated_start(terminal, get_journal_all_boots_command,NULL,NULL); - break; - case 6: - yon_terminal_integrated_start(terminal, get_journal_all_units_command,NULL,NULL); - break; - case 7: - yon_terminal_integrated_start(terminal, get_journal_init_tree_command,NULL,NULL); - break; - } - } + gtk_widget_hide(window->LoggingNotebook); + gtk_widget_show(gtk_widget_get_parent(window->JournaldTree)); if (self==window->ShowSinceBootButton){ window->last_mode=1; - yon_terminal_integrated_start(terminal, get_journal_output_since_boot_command,NULL,NULL); } if (self==window->NewMessagesButton){ window->last_mode=2; - yon_terminal_integrated_start(terminal, get_journal_output_followed_command,NULL,NULL); } if (self==window->ShowKernelButton){ window->last_mode=3; - yon_terminal_integrated_start(terminal, get_journal_output_kernel_command,NULL,NULL); } if (self==window->ShowPriorityButton){ window->last_mode=4; - yon_terminal_integrated_start(terminal, get_journal_output_prioritied_command,NULL,NULL); } if (self==window->ShowAllBootsButton){ window->last_mode=5; - yon_terminal_integrated_start(terminal, get_journal_all_boots_command,NULL,NULL); } if (self==window->ShowAllUnitsButton){ window->last_mode=6; - yon_terminal_integrated_start(terminal, get_journal_all_units_command,NULL,NULL); } if (self==window->ShowInitTreeButton){ window->last_mode=7; - yon_terminal_integrated_start(terminal, get_journal_init_tree_command,NULL,NULL); } + main_config.remove_thread++; + gtk_tree_view_set_model(GTK_TREE_VIEW(window->JournaldTree),GTK_TREE_MODEL(window->list)); + gtk_list_store_clear(window->list); + gtk_tree_view_set_model(GTK_TREE_VIEW(window->JournaldTree),GTK_TREE_MODEL(window->list)); + if (main_config.inspector_thread){ + main_config.remove_thread=1; + pthread_join(main_config.inspector_thread,NULL); + } + pthread_create(&main_config.inspector_thread, NULL, (void *)on_inspector_jornald_read_async, window); } else { if (window->terminals){ + gtk_widget_hide(gtk_widget_get_parent(window->JournaldTree)); + gtk_widget_show(window->LoggingNotebook); dictionary *dict=NULL; for_dictionaries (dict,window->terminals){ GtkWidget *terminal = (GtkWidget*)dict->data; @@ -381,6 +380,10 @@ GtkWidget *yon_inspector_add_terminal(inspector_window *window,char *page_name,i } +void on_inspector_close(GtkWidget *self){ + main_config.remove_thread++; +} + void on_inspector_open(GtkWidget *self, main_window *widgets){ inspector_window *window = malloc(sizeof(inspector_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_inspector_path); @@ -395,6 +398,8 @@ void on_inspector_open(GtkWidget *self, main_window *widgets){ window->LoggingNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook"); window->UpdateButton=yon_gtk_builder_get_widget(builder,"UpdateButton"); window->JournalActionsBox=yon_gtk_builder_get_widget(builder,"JournalActionsBox"); + window->JournaldTree=yon_gtk_builder_get_widget(builder,"JournaldTree"); + window->list=GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1")); yon_window_config_custom_window_setup(GTK_WINDOW(window->MainWindow),"InspectorWindow"); gtk_window_set_title(GTK_WINDOW(window->MainWindow),TITLE_LABEL); gtk_window_set_transient_for(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window)); @@ -402,6 +407,7 @@ void on_inspector_open(GtkWidget *self, main_window *widgets){ GtkTreeIter iter; char *name; char *paths; + g_signal_connect(G_OBJECT(window->MainWindow),"destroy", G_CALLBACK(on_inspector_close),window); g_signal_connect(G_OBJECT(window->UpdateButton),"clicked", G_CALLBACK(on_inspector_update),window); g_signal_connect(G_OBJECT(window->ShowKernelButton),"clicked", G_CALLBACK(on_inspector_update),window); g_signal_connect(G_OBJECT(window->NewMessagesButton),"clicked", G_CALLBACK(on_inspector_update),window); @@ -2262,6 +2268,7 @@ void config_init(){ main_config.lock_save_local=0; main_config.logrotate_list = gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING); main_config.logrotate_apps_list = gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING); + main_config.remove_thread=-1; PolkitSubject *subject = NULL; diff --git a/source/ubl-settings-logging.h b/source/ubl-settings-logging.h index a27d996..a84d28a 100644 --- a/source/ubl-settings-logging.h +++ b/source/ubl-settings-logging.h @@ -49,14 +49,14 @@ #define JOURNALD(key) yon_char_unite("JOURNALD[",key,"]",NULL) #define LOGROTATE(key) yon_char_unite("LOGROTATE[",key,"]",NULL) -#define get_journal_output_command "clear;journalctl --no-pager" -#define get_journal_output_since_boot_command "clear;journalctl --no-pager -b" -#define get_journal_output_followed_command "clear;journalctl --no-pager -f" -#define get_journal_output_kernel_command "clear;journalctl --no-pager -k" -#define get_journal_output_prioritied_command "clear;journalctl --no-pager -p err..alert" -#define get_journal_all_boots_command "clear;journalctl --list-boots" -#define get_journal_all_units_command "clear;systemd-analyze blame --no-pager" -#define get_journal_init_tree_command "clear;systemd-analyze critical-chain" +#define get_journal_output_command "clear;SYSTEMD_COLORS=false journalctl --no-pager" +#define get_journal_output_since_boot_command "clear;SYSTEMD_COLORS=false journalctl --no-pager -b" +#define get_journal_output_followed_command "clear;SYSTEMD_COLORS=false journalctl --no-pager -f" +#define get_journal_output_kernel_command "clear;SYSTEMD_COLORS=false journalctl --no-pager -k" +#define get_journal_output_prioritied_command "clear;SYSTEMD_COLORS=false journalctl --no-pager -p err..alert" +#define get_journal_all_boots_command "clear;SYSTEMD_COLORS=false journalctl --no-pager --list-boots" +#define get_journal_all_units_command "clear;SYSTEMD_COLORS=false systemd-analyze blame --no-pager" +#define get_journal_init_tree_command "clear;SYSTEMD_COLORS=false systemd-analyze critical-chain --no-pager" #define group_list_path "/etc/group" @@ -99,6 +99,9 @@ typedef struct { config_str *saved_logs; GPermission *permissions; + + pthread_t inspector_thread; + int remove_thread; } config; typedef struct { @@ -188,22 +191,24 @@ typedef struct { } add_log_window; typedef struct { -GtkWidget *MainWindow; -GtkWidget *plugBox; -GtkWidget *ShowSinceBootButton; -GtkWidget *NewMessagesButton; -GtkWidget *ShowKernelButton; -GtkWidget *ShowPriorityButton; -GtkWidget *UpdateButton; -GtkWidget *ShowAllBootsButton; -GtkWidget *ShowAllUnitsButton; -GtkWidget *ShowInitTreeButton; -GtkWidget *LoggingNotebook; -GtkWidget *JournalActionsBox; -dictionary *terminals; -int last_mode; -char *journal_name; -int journal_size; + GtkWidget *MainWindow; + GtkWidget *plugBox; + GtkWidget *ShowSinceBootButton; + GtkWidget *NewMessagesButton; + GtkWidget *ShowKernelButton; + GtkWidget *ShowPriorityButton; + GtkWidget *UpdateButton; + GtkWidget *ShowAllBootsButton; + GtkWidget *ShowAllUnitsButton; + GtkWidget *ShowInitTreeButton; + GtkWidget *LoggingNotebook; + GtkWidget *JournalActionsBox; + GtkListStore *list; + GtkWidget *JournaldTree; + dictionary *terminals; + int last_mode; + char *journal_name; + int journal_size; config_str journal_paths; } inspector_window; diff --git a/ubl-settings-logging-inspector.glade b/ubl-settings-logging-inspector.glade index 16c043c..930eb37 100644 --- a/ubl-settings-logging-inspector.glade +++ b/ubl-settings-logging-inspector.glade @@ -53,11 +53,19 @@ False com.ublinux.ubl-settings-logging.generic7-symbolic - + + + + + + + + 800 600 False + True 800 600 com.ublinux.ubl-settings-logging @@ -249,33 +257,47 @@ - - True + True - liststore1 - False - - - + in - - column + + True + True + liststore1 + False + both + 0 - - - 0 - + + fixed + 175 + 75 + column + + + end + + + 0 + + + - - - - - column - - - 1 - + + column + True + + + word + 500 + + + 1 + + +