diff --git a/journals_list.csv b/journals_list.csv index be0612f..c939ad6 100644 --- a/journals_list.csv +++ b/journals_list.csv @@ -1,12 +1,12 @@ -Журнал Acpid;/var/log/acpid;Журнал работы и обращений к Acpid -Журнал веб-сервера;/var/log/apache2/error.log,/var/log/apache2/access.log;Журнал работы и обращений к веб-серверу -Журнал аудита;/var/log/audit/audit.log;Журнал аудита (audit) -Журнал авторизации;/var/log/auth.log;Журнал процедур авторизации -Журнал планировщика заданий;/var/log/syslog;Журнал работы планировщика заданий (cron) -Журнал сервера печати;/var/log/cups/access_log,/var/log/cups/page_log,/var/log/cups/cups-pdf_log;Журнал работы и обращений к серверу печати (cups) -Журналы служб;/var/log/daemon.log;Журнал работы и обращения к службам системы -Журнал Samba;/var/log/samba/log.smbd,/var/log/samba/log.localhost,/var/log/samba/log.127.0.0.1,/var/log/samba/log.nmbd;Журнал работы и обращения к Samba -Журнал почтового сервера;/var/log/mail.log,/var/log/mail.info,/var/log/mail.warn,/var/log/mail.err;Журнал почтового сервера Postfix -Системный журнал;/var/log/syslog;Системный журнал -Журнал дисплейного сервера;/var/log/Xorg.0.log;Журнал работы дисплейного сервера X.org -Журнал сеансов графической системы X;~/.xsession-errors/;Журнал сеансов графической системы X \ No newline at end of file +Acpid;/var/log/acpid;Журнал работы и обращений к Acpid +Apache2;/var/log/apache2/error.log,/var/log/apache2/access.log;Журнал работы и обращений к веб-серверу +Audit;/var/log/audit/audit.log;Журнал аудита (audit) +Authlog;/var/log/auth.log;Журнал процедур авторизации +Cron;/var/log/syslog;Журнал работы планировщика заданий (cron) +CUPS;/var/log/cups/access_log,/var/log/cups/page_log,/var/log/cups/cups-pdf_log;Журнал работы и обращений к серверу печати (cups) +Daemonlog;/var/log/daemon.log;Журнал работы и обращения к службам системы +Samba;/var/log/samba/log.smbd,/var/log/samba/log.localhost,/var/log/samba/log.127.0.0.1,/var/log/samba/log.nmbd;Журнал работы и обращения к Samba +Postfix;/var/log/mail.log,/var/log/mail.info,/var/log/mail.warn,/var/log/mail.err;Журнал почтового сервера Postfix +Syslog;/var/log/syslog;Системный журнал +Xorg;/var/log/Xorg.0.log;Журнал работы дисплейного сервера X.org +Xsession;~/.xsession-errors;Журнал сеансов графической системы X \ No newline at end of file diff --git a/source/ubl-settings-logging.c b/source/ubl-settings-logging.c index f59ebe2..36c6b72 100644 --- a/source/ubl-settings-logging.c +++ b/source/ubl-settings-logging.c @@ -108,6 +108,8 @@ void yon_load_proceed(char *command){ } +// Inspector functions + void on_inspector_update(GtkWidget *self, inspector_window *window){ int size; GtkTextIter titer,titerend; @@ -207,14 +209,79 @@ void on_log_choose(GtkWidget *self,add_log_window *window){ // Logrotate window +void on_logrotate_configuration_path_add(GtkWidget *self, logrotate_configure_window *window){ + GtkTreeModel *model = GTK_TREE_MODEL(window->list); + GtkTreeIter iter; + gtk_list_store_append(window->list, &iter); + GtkTreeViewColumn *column = gtk_tree_view_get_column(GTK_TREE_VIEW(window->LogPathsTree),0); + GList *list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(column)); + GValue *val = g_malloc0(sizeof(GValue)); + g_object_get_property(G_OBJECT(list->data),"editable",val); + g_value_set_boolean(val,1); + g_object_set_property(G_OBJECT(list->data),"editable",val); + free(val); + gtk_tree_view_set_cursor(GTK_TREE_VIEW(window->LogPathsTree),gtk_tree_model_get_path(model,&iter),column,1); +} + +void on_path_editing_done(GtkCellRendererText* self,gchar* path,gchar* new_text,logrotate_configure_window *window){ + GtkTreeIter iter; + char *cur_path; + gtk_tree_model_get_iter(GTK_TREE_MODEL(window->list),&iter,gtk_tree_path_new_from_string(path)); + gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&cur_path,-1); + + if (cur_path&&!strcmp(cur_path,"")&&!strcmp(new_text,"")) + gtk_list_store_remove(window->list,&iter); + else if (new_text&&strcmp(new_text,"")) + gtk_list_store_set(window->list,&iter,0,new_text,-1); + GValue *val = g_malloc0(sizeof(GValue)); + g_object_get_property(G_OBJECT(self),"editable",val); + g_value_set_boolean(val,0); + g_object_set_property(G_OBJECT(self),"editable",val); + free(val); +} + +void on_path_editing_cancel(GtkCellRendererText* self,logrotate_configure_window *window){ + GtkTreeModel *model = GTK_TREE_MODEL(window->list); + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->LogPathsTree)),&model,&iter)){ + char *path; + gtk_tree_model_get(model,&iter,0,&path,-1); + if (!path||!strcmp(path,"")) + gtk_list_store_remove(window->list,&iter); + } +} + +void on_logrotate_configuration_path_edit(GtkWidget *self, logrotate_configure_window *window){ + GtkTreeModel *model = GTK_TREE_MODEL(window->list); + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->LogPathsTree)),&model,&iter)){ + GtkTreeViewColumn *column = gtk_tree_view_get_column(GTK_TREE_VIEW(window->LogPathsTree),0); + GList *list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(column)); + GValue *val = g_malloc0(sizeof(GValue)); + g_object_get_property(G_OBJECT(list->data),"editable",val); + g_value_set_boolean(val,1); + g_object_set_property(G_OBJECT(list->data),"editable",val); + free(val); + gtk_tree_view_set_cursor(GTK_TREE_VIEW(window->LogPathsTree),gtk_tree_model_get_path(model,&iter),column,1); + } +} + +void on_logrotate_configuration_path_remove(GtkWidget *self, logrotate_configure_window *window){ + GtkTreeModel *model = GTK_TREE_MODEL(window->list); + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->LogPathsTree)),&model,&iter)){ + gtk_list_store_remove(window->list,&iter); + } +} + logrotate_configure_window *yon_logrotate_window_new(){ logrotate_configure_window *window = malloc(sizeof(logrotate_configure_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_logrotate_path); window->MainWindow=yon_gtk_builder_get_widget(builder,"MainWindow"); window->CancelButton=yon_gtk_builder_get_widget(builder,"CancelButton"); window->SaveButton=yon_gtk_builder_get_widget(builder,"SaveButton"); - window->LogNamelabel=yon_gtk_builder_get_widget(builder,"LogNamelabel"); - window->LogNameButton=yon_gtk_builder_get_widget(builder,"LogNameButton"); + window->LogNameEntry=yon_gtk_builder_get_widget(builder,"LogNameEntry"); + window->LogDescriptionEntry=yon_gtk_builder_get_widget(builder,"LogDescriptionEntry"); window->RotationPeriodCheck=yon_gtk_builder_get_widget(builder,"RotationPeriodCheck"); window->RotationPeriodMainCombo=yon_gtk_builder_get_widget(builder,"RotationPeriodMainCombo"); window->RotationPeriodAdditionalCombo=yon_gtk_builder_get_widget(builder,"RotationPeriodAdditionalCombo"); @@ -259,12 +326,46 @@ logrotate_configure_window *yon_logrotate_window_new(){ window->ManualInputEntry=yon_gtk_builder_get_widget(builder,"ManualInputEntry"); window->LogSizeLabel=yon_gtk_builder_get_widget(builder,"LogSizeLabel"); window->headerTopic=yon_gtk_builder_get_widget(builder,"headerTopic"); - window->LogNameDescriptionLabel=yon_gtk_builder_get_widget(builder,"LogNameDescriptionLabel"); + window->LogPathsTree=yon_gtk_builder_get_widget(builder,"LogPathsTree"); + window->LogPathEditButton=yon_gtk_builder_get_widget(builder,"LogPathEditButton"); + window->LogPathAddButton=yon_gtk_builder_get_widget(builder,"LogPathAddButton"); + window->LogPathRemoveButton=yon_gtk_builder_get_widget(builder,"LogPathRemoveButton"); window->list=GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1")); + window->PathCell=GTK_CELL_RENDERER(gtk_builder_get_object(builder,"PathCell")); gtk_window_set_title(GTK_WINDOW(window->MainWindow),TITLE_LABEL); g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_close_subwindow),NULL); g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_close_subwindow),NULL); + g_signal_connect(G_OBJECT(window->PathCell),"edited",G_CALLBACK(on_path_editing_done),window); + g_signal_connect(G_OBJECT(window->PathCell),"editing-canceled",G_CALLBACK(on_path_editing_cancel),window); + g_signal_connect(G_OBJECT(window->LogPathAddButton),"clicked",G_CALLBACK(on_logrotate_configuration_path_add),window); + g_signal_connect(G_OBJECT(window->LogPathEditButton),"clicked",G_CALLBACK(on_logrotate_configuration_path_edit),window); + g_signal_connect(G_OBJECT(window->LogPathRemoveButton),"clicked",G_CALLBACK(on_logrotate_configuration_path_remove),window); + + g_signal_connect(G_OBJECT(window->RotationPeriodCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->RotationPeriodAdditionalCombo); + g_signal_connect(G_OBJECT(window->RotationPeriodCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->RotationPeriodMainCombo); + + g_signal_connect(G_OBJECT(window->JournalMaxSizeCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->JournalMaxSizeCombo); + g_signal_connect(G_OBJECT(window->JournalMaxSizeCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->JournalMaxSizeSpin); + + g_signal_connect(G_OBJECT(window->FileAmountCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->FileAmountSpin); + g_signal_connect(G_OBJECT(window->FileAmountCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->FileAmountCombo); + g_signal_connect(G_OBJECT(window->FileAmountCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->FileAmountEntry); + g_signal_connect(G_OBJECT(window->FileAmountCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->FileAmountButton); + g_signal_connect(G_OBJECT(window->DoNotRotateYoungerCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->DoNotRotateYoungerSpin); + + g_signal_connect(G_OBJECT(window->DeleteOlderCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->DeleteOlderSpin); + + g_signal_connect(G_OBJECT(window->RotateSizeMaxAfterTimeCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->RotateSizeMaxAfterTimeSpin); + g_signal_connect(G_OBJECT(window->RotateSizeMaxAfterTimeCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->RotateSizeMaxAfterTimeCombo); + + g_signal_connect(G_OBJECT(window->RotateSizeMaxBeforeTimeCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->RotateSizeMaxBeforeTimeSpin); + g_signal_connect(G_OBJECT(window->RotateSizeMaxBeforeTimeCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->RotateSizeMaxBeforeTimeCombo); + + g_signal_connect(G_OBJECT(window->CreateLogCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box_inversed),window->CreateLogUserCombo); + g_signal_connect(G_OBJECT(window->CreateLogCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box_inversed),window->CreateGroupCombo); + g_signal_connect(G_OBJECT(window->CreateLogCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box_inversed),window->CreateLogEntry); + g_signal_connect(G_OBJECT(window->CreateLogCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box_inversed),window->CreateLogButton); return window; } @@ -297,6 +398,38 @@ void on_logrotate_apps_configure(){ } +void on_log_edit_logrotate_settings(GtkWidget *self, dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + add_log_window *window = yon_dictionary_get_data(dict->first->next,add_log_window*); + GtkTreeModel *model = GTK_TREE_MODEL(widgets->list); + GtkTreeIter iter,itar; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ + char *name; + char *description; + logrotate_configure_window *dialog = yon_logrotate_window_new(); + gtk_widget_show(dialog->MainWindow); + gtk_tree_model_get(model,&iter,0,&name,2,&description,-1); + gtk_entry_set_text(GTK_ENTRY(dialog->LogNameEntry),name); + gtk_entry_set_text(GTK_ENTRY(dialog->LogDescriptionEntry),description); + gtk_widget_set_can_focus(dialog->LogNameEntry,0); + gtk_widget_set_can_focus(dialog->LogDescriptionEntry,0); + gtk_entry_set_has_frame(GTK_ENTRY(dialog->LogNameEntry),0); + gtk_entry_set_has_frame(GTK_ENTRY(dialog->LogDescriptionEntry),0); + gtk_style_context_add_class(gtk_widget_get_style_context(dialog->LogNameEntry),"nobackground"); + gtk_style_context_add_class(gtk_widget_get_style_context(dialog->LogDescriptionEntry),"nobackground"); + GList *list = gtk_container_get_children(GTK_CONTAINER(window->LogPathsBox)); + for (int i=0;ilist,&itar); + GList *paths = gtk_container_get_children((GtkContainer*)g_list_nth_data(list,i)); + gtk_list_store_set(dialog->list,&itar,0,gtk_entry_get_text((GtkEntry*)g_list_nth_data(paths,1)),-1); + g_list_free(paths); + } + + } +} + +// Logrotate tab window + void on_logrotate_tab_open(GtkWidget *self, main_window *widgets){ logrotate_window *window = malloc(sizeof(logrotate_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_logrotate_table_path); @@ -394,14 +527,11 @@ add_log_window *on_add_open(){ window->LogPathsBox=yon_gtk_builder_get_widget(builder,"LogPathsBox"); gtk_window_set_title(GTK_WINDOW(window->MainWindow),TITLE_LABEL); g_signal_connect(G_OBJECT(window->CancelButton),"clicked", G_CALLBACK(on_close_subwindow),NULL); + g_signal_connect(G_OBJECT(window->SaveButton),"clicked", G_CALLBACK(on_close_subwindow),NULL); + g_signal_connect(G_OBJECT(window->SaveButton),"clicked", G_CALLBACK(on_close_subwindow),NULL); return window; } - -void on_log_edit_logrotate_settings(GtkWidget *self, add_log_window *window){ - -} - void on_log_add(GtkWidget *self, main_window *widgets){ GtkTreeModel *model = GTK_TREE_MODEL(widgets->list); GtkTreeIter iter; @@ -409,7 +539,6 @@ void on_log_add(GtkWidget *self, main_window *widgets){ gtk_widget_show(window->MainWindow); gtk_widget_hide(window->StatisticsFrame); gtk_widget_hide(window->ControlSectionBox); - g_signal_connect(G_OBJECT(window->SaveButton),"clicked", G_CALLBACK(on_close_subwindow),NULL); } void on_log_path_choose(GtkWidget *self,add_log_window *window){ @@ -486,10 +615,14 @@ void on_log_edit(GtkWidget *self,main_window *widgets){ g_signal_connect(G_OBJECT(window->JournaldButton),"clicked", G_CALLBACK(on_journald_open),widgets); } else { gtk_widget_hide(window->JournaldButton); - g_signal_connect(G_OBJECT(window->LogrotateButton),"clicked", G_CALLBACK(on_log_edit_logrotate_settings),widgets); + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + g_signal_connect(G_OBJECT(window->LogrotateButton),"clicked", G_CALLBACK(on_log_edit_logrotate_settings),dict); // g_signal_connect(G_OBJECT(window->MetalogButton),"clicked", G_CALLBACK(on_log),widgets); // g_signal_connect(G_OBJECT(window->SyslogButton),"clicked", G_CALLBACK(on_journald_open),widgets); } + window->log_name=name; gtk_entry_set_text(GTK_ENTRY(window->LogDescriptionEntry),description); config_str paths_parsed = yon_char_parse(paths,&size,"\n"); GtkWidget *last=NULL; @@ -510,7 +643,6 @@ void on_log_edit(GtkWidget *self,main_window *widgets){ g_signal_connect(G_OBJECT(last),"clicked",G_CALLBACK(on_log_path_append),window); gtk_widget_set_sensitive(window->LogTypeCombo,0); gtk_widget_set_sensitive(window->LogDescriptionEntry,0); - g_signal_connect(G_OBJECT(window->SaveButton),"clicked", G_CALLBACK(on_close_subwindow),NULL); } } diff --git a/source/ubl-settings-logging.h b/source/ubl-settings-logging.h index 566c763..70e4fd1 100644 --- a/source/ubl-settings-logging.h +++ b/source/ubl-settings-logging.h @@ -164,6 +164,8 @@ typedef struct { GtkWidget *StatisticsFrame; GtkWidget *ControlSectionBox; GtkWidget *LogPathsBox; + + char *log_name; } add_log_window; typedef struct { @@ -244,9 +246,12 @@ typedef struct { GtkWidget *MainWindow; GtkWidget *CancelButton; GtkWidget *SaveButton; - GtkWidget *LogNamelabel; - GtkWidget *LogNameButton; - GtkWidget *LogNameDescriptionLabel; + GtkWidget *LogNameEntry; + GtkWidget *LogDescriptionEntry; + GtkWidget *LogPathsTree; + GtkWidget *LogPathEditButton; + GtkWidget *LogPathAddButton; + GtkWidget *LogPathRemoveButton; GtkWidget *RotationPeriodCheck; GtkWidget *RotationPeriodMainCombo; GtkWidget *RotationPeriodAdditionalCombo; @@ -292,6 +297,7 @@ typedef struct { GtkWidget *LogSizeLabel; GtkWidget *headerTopic; GtkListStore *list; + GtkCellRenderer *PathCell; } logrotate_configure_window; main_window *setup_window(); \ No newline at end of file diff --git a/source/ubl-utils.c b/source/ubl-utils.c index 8c9ae28..a218d94 100644 --- a/source/ubl-utils.c +++ b/source/ubl-utils.c @@ -1929,7 +1929,7 @@ void yon_gtk_widget_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget gtk_widget_set_sensitive(target,gtk_combo_box_get_active(toggle)>=0 ? 1 : 0); } -void yon_gtk_widget_set_sensitive_from_toggle_combo_box_inversed(GtkComboBox *toggle, GtkWidget *target){ +void yon_gtk_widget_set_sensitive_from_combo_box_inversed(GtkComboBox *toggle, GtkWidget *target){ gtk_widget_set_sensitive(target,!gtk_combo_box_get_active(toggle)>=0 ? 0 : 1); } diff --git a/ubl-settings-logging-logrotate.glade b/ubl-settings-logging-logrotate.glade index cf4edb4..ae79699 100644 --- a/ubl-settings-logging-logrotate.glade +++ b/ubl-settings-logging-logrotate.glade @@ -188,7 +188,7 @@ - + True True @@ -223,7 +223,7 @@ - + True True @@ -265,7 +265,7 @@ vertical 5 - + True True True @@ -281,7 +281,7 @@ - + True True True @@ -297,7 +297,7 @@ - + True True True @@ -325,7 +325,7 @@ True in - + True True liststore1 @@ -337,7 +337,7 @@ Path - + 0 @@ -438,6 +438,7 @@ True + False False Week @@ -454,6 +455,7 @@ True + False False @@ -491,6 +493,7 @@ True + False True adjustment4 @@ -503,6 +506,7 @@ True + False False Kb @@ -583,6 +587,7 @@ True + False True adjustment6 @@ -607,6 +612,7 @@ True + False False Default @@ -621,6 +627,7 @@ True + False True @@ -632,6 +639,7 @@ True + False True True image4 @@ -803,6 +811,10 @@ True False + + On + Off + False @@ -839,6 +851,7 @@ True + False True adjustment7 @@ -889,6 +902,7 @@ True + False True adjustment5 @@ -939,6 +953,7 @@ True + False True adjustment8 @@ -951,6 +966,7 @@ True + False False Kb @@ -1006,6 +1022,7 @@ True + False True adjustment9 @@ -1018,6 +1035,7 @@ True + False False Kb @@ -1111,6 +1129,9 @@ False Default + Do not output + Output errors + Off @@ -1134,6 +1155,7 @@ True + False False Default @@ -1160,6 +1182,7 @@ True + False False Default @@ -1186,6 +1209,7 @@ True + False True @@ -1197,6 +1221,7 @@ True + False True True image5 @@ -1325,6 +1350,7 @@ True + False False 0 @@ -1405,6 +1431,8 @@ 0 Default + On + Off @@ -1416,6 +1444,7 @@ True + False True @@ -1455,6 +1484,8 @@ 0 Default + On + Off @@ -1494,6 +1525,8 @@ 0 Default + On + Off @@ -1505,6 +1538,7 @@ True + False True digits @@ -1605,6 +1639,7 @@ True + False True @@ -1628,6 +1663,7 @@ True + False False 0