diff --git a/logging_services.csv b/logging_services.csv index ccc34a9..e9d43a8 100644 --- a/logging_services.csv +++ b/logging_services.csv @@ -1,4 +1,4 @@ journald;Системный журнал событий;systemctl start;systemctl start systemd-journald.service;systemctl stop systemd-journald.service;ubconfig set config SERVICESSTART+=systemd-journald.service;ubconfig set config SERVICESSTART-=systemd-journald.service;systemctl status systemd-journald.service logrotate;Служба ротации системных журналов событий;systemctl start logrotate.service;systemctl stop logrotate.service;ubconfig set config SERVICESSTART+=logrotate.service;ubconfig set config SERVICESSTART-=logrotate.service;systemctl status logrotate.service -metalog;Системный журнал событий;systemctl start metalog.service;systemctl stop metalog.service;ubconfig set config SERVICESSTART+=metalog.service;ubconfig set config SERVICESSTART-=metalog.service;systemctl status metalog.service -syslog-ng;Сервис сбора сообщений системных событий активных сетевых устройств;systemctl start syslog-ng.service;systemctl stop syslog-ng.service;ubconfig set config SERVICESSTART+=syslog-ng.service;ubconfig set config SERVICESSTART-=syslog-ng.service;systemctl status syslog-ng.service \ No newline at end of file +#metalog;Системный журнал событий;systemctl start metalog.service;systemctl stop metalog.service;ubconfig set config SERVICESSTART+=metalog.service;ubconfig set config SERVICESSTART-=metalog.service;systemctl status metalog.service +#syslog-ng;Сервис сбора сообщений системных событий активных сетевых устройств;systemctl start syslog-ng.service;systemctl stop syslog-ng.service;ubconfig set config SERVICESSTART+=syslog-ng.service;ubconfig set config SERVICESSTART-=syslog-ng.service;systemctl status syslog-ng.service \ No newline at end of file diff --git a/source/ubl-settings-logging.c b/source/ubl-settings-logging.c index 226ae37..b89a994 100644 --- a/source/ubl-settings-logging.c +++ b/source/ubl-settings-logging.c @@ -101,6 +101,28 @@ void on_about(){ gtk_widget_show(window); } +char *yon_size_get_letter_from_int(int size){ + switch (size){ + case 0: return "K"; + break; + case 1: return "M"; + break; + case 2: return "G"; + break; + } +} + +int yon_size_get_int_from_letter(char size){ + switch (size){ + case 'K': return 0; + break; + case 'M': return 1; + break; + case 'G': return 2; + break; + } +} + //functions void yon_load_proceed(char *command){ @@ -481,17 +503,145 @@ void on_logrotate_tab_open(GtkWidget *self, main_window *widgets){ // Journald window -void on_journald_open(GtkWidget *self, main_window *widgets){ +void yon_combo_compress_check(GtkComboBox *self, journald_window *window){ + if (gtk_combo_box_get_active(self)==3){ + gtk_widget_set_sensitive(window->LogCompressionSizeCombo,1); + gtk_widget_set_sensitive(window->LogCompressionEntry,1); + } else { + gtk_widget_set_sensitive(window->LogCompressionSizeCombo,0); + gtk_widget_set_sensitive(window->LogCompressionEntry,0); + } +} + +void on_journald_save(GtkWidget *self, journald_window *window){ + char *storage; + int storage_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->LogStorageCombo)); + switch (storage_active){ + case 0: storage="auto"; + break; + case 1: storage="volatile"; + break; + case 2: storage="persistent"; + break; + case 3: storage="none"; + break; + + } + char *compress; + int compress_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->LogCompressionCombo)); + if (compress_active==1) compress = "yes"; + else if (compress_active==2) compress = "no"; + else if (compress_active==3) { + int compress_size_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->LogCompressionSizeCombo)); + int compress_size = atoi(gtk_entry_get_text(GTK_ENTRY(window->LogCompressionEntry))); + compress=yon_char_from_int(compress_size); + if (compress_size==0) + compress_active=0; + switch (compress_size_active){ + case 0: compress = yon_char_append(compress,"K"); + break; + case 1: compress = yon_char_append(compress,"M"); + break; + case 2: compress = yon_char_append(compress,"G"); + break; + } + } + char *splitmode; + int splitmode_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->DivideJournalFilesCombo)); + if (splitmode_active == 1) splitmode = "uid"; + else if (splitmode_active == 2 ) splitmode = "none"; + + long interval=-1; + long amount=-1; + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->LogIntervalCheck))){ + interval = gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->LogIntervalSpin)); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->LogIntervalAmountCheck))){ + amount = gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->LogIntervalAmountSpin)); + yon_config_register(JOURNALD("RateLimitBurst"),"logging",yon_char_from_long(amount)); + } + if (amount>0) + yon_config_register(JOURNALD("RateLimitIntervalSec"),"logging",yon_char_from_long(interval)); + } + + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->LogSizeMaxCheck))){ + long logssize=-1; + logssize = gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->LogSizeMaxSpin)); + int log_size_mod = gtk_combo_box_get_active(GTK_COMBO_BOX(window->LogSizeMaxCombo)); + for (int i=0;i0) + yon_config_register(JOURNALD("SystemMaxUse"),"logging",yon_char_from_long(logssize)); + } + + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->RotationSizeMaxCheck))){ + char * rotationMaxSize; + long maxsize = 0; + maxsize=gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->RotationSizeMaxSpin)); + char *modif = yon_size_get_letter_from_int(gtk_combo_box_get_active(GTK_COMBO_BOX(window->RotationSizeMaxCombo))); + rotationMaxSize = yon_char_append(yon_char_from_long(maxsize),modif); + if (maxsize>0) + yon_config_register(JOURNALD("SystemMaxFileSize"),"logging",rotationMaxSize); + } + + long storagefree; + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->LogFreeSpaceCheck))){ + char *storagespace; + storagefree = gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->LogFreeSpaceSpin)); + char *modif = yon_size_get_letter_from_int(gtk_combo_box_get_active(GTK_COMBO_BOX(window->LogFreeSpaceCombo))); + storagespace = yon_char_append(yon_char_from_long(storagefree),modif); + + if (storagefree>0) + yon_config_register(JOURNALD("SystemKeepFree"),"logging",storagespace); + } + + int consoleforwardactive = gtk_combo_box_get_active(GTK_COMBO_BOX(window->RedirectCombo)); + char *confor=NULL; + char *TTY=NULL; + if (consoleforwardactive == 1){ + confor = "yes"; + TTY = (char*)gtk_entry_get_text(GTK_ENTRY(window->RedirectTTYEntry)); + if (yon_char_is_empty(TTY)) + consoleforwardactive=0; + } + else if (consoleforwardactive == 2){ + confor = "no"; + } + + int forwardempty = gtk_combo_box_get_active(GTK_COMBO_BOX(window->ForwardedTypeCombo)); + + + yon_config_register(JOURNALD("Storage"),"logging",storage); + if (compress_active!=0) + yon_config_register(JOURNALD("Compress"),"logging",compress); + else + yon_config_remove_by_key(JOURNALD("Compress")); + if (splitmode_active!=0) + yon_config_register(JOURNALD("SplitMode"),"logging",splitmode); + else + yon_config_remove_by_key(JOURNALD("SplitMode")); + if (consoleforwardactive != 0) + yon_config_register(JOURNALD("ForwardToConsole"),"logging",confor); + else + yon_config_remove_by_key(JOURNALD("ForwardToConsole")); + if (forwardempty!=0) + yon_config_register(JOURNALD("MaxLevelConsole"),"logging",yon_char_from_int(forwardempty-1)); + else + yon_config_remove_by_key(JOURNALD("MaxLevelConsole")); + on_close_subwindow(window->MainWindow); +} + +journald_window *yon_journald_open(GtkWidget *self, main_window *widgets){ journald_window *window = malloc(sizeof(journald_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_journald_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->LogDescriptionLabel=yon_gtk_builder_get_widget(builder,"LogDescriptionLabel"); + window->LogNameLabel=yon_gtk_builder_get_widget(builder,"LogNameEntry"); + window->LogDescriptionLabel=yon_gtk_builder_get_widget(builder,"LogDescriptionEntry"); window->LogStorageCombo=yon_gtk_builder_get_widget(builder,"LogStorageCombo"); window->LogCompressionCombo=yon_gtk_builder_get_widget(builder,"LogCompressionCombo"); - window->LogCompressionEntry=yon_gtk_builder_get_widget(builder,"LogCompressionEntry"); + window->LogCompressionEntry=yon_gtk_builder_get_widget(builder,"LogCompressionSpin"); window->LogCompressionSizeCombo=yon_gtk_builder_get_widget(builder,"LogCompressionSizeCombo"); window->DivideJournalFilesCombo=yon_gtk_builder_get_widget(builder,"DivideJournalFilesCombo"); window->LogIntervalCheck=yon_gtk_builder_get_widget(builder,"LogIntervalCheck"); @@ -511,10 +661,10 @@ void on_journald_open(GtkWidget *self, main_window *widgets){ window->RedirectTTYEntry=yon_gtk_builder_get_widget(builder,"RedirectTTYEntry"); window->ForwardedTypeCombo=yon_gtk_builder_get_widget(builder,"ForwardedTypeCombo"); window->LogSizeLabel=yon_gtk_builder_get_widget(builder,"LogSizeLabel"); - window->LowerSizeEntry=yon_gtk_builder_get_widget(builder,"LowerSizeEntry"); + window->LowerSizeEntry=yon_gtk_builder_get_widget(builder,"LowerSizeSpin"); window->LowerSizeCombo=yon_gtk_builder_get_widget(builder,"LowerSizeCombo"); window->LowerSizeButton=yon_gtk_builder_get_widget(builder,"LowerSizeButton"); - window->LowerTimeEntry=yon_gtk_builder_get_widget(builder,"LowerTimeEntry"); + window->LowerTimeEntry=yon_gtk_builder_get_widget(builder,"LowerTimeSpin"); window->LowerTimeCombo=yon_gtk_builder_get_widget(builder,"LowerTimeCombo"); window->LowerTimeButton=yon_gtk_builder_get_widget(builder,"LowerTimeButton"); window->headerTopic=yon_gtk_builder_get_widget(builder,"headerTopic"); @@ -522,7 +672,7 @@ void on_journald_open(GtkWidget *self, main_window *widgets){ 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_journald_save),window); g_signal_connect(G_OBJECT(window->LogIntervalCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->LogIntervalSpin); g_signal_connect(G_OBJECT(window->LogIntervalCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->LogIntervalAmountCheck); @@ -539,11 +689,37 @@ void on_journald_open(GtkWidget *self, main_window *widgets){ g_signal_connect(G_OBJECT(window->RedirectCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box_inversed),window->RedirectTTYEntry); - g_signal_connect(G_OBJECT(window->LogCompressionCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->LogCompressionEntry); - g_signal_connect(G_OBJECT(window->LogCompressionCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->LogCompressionSizeCombo); - gtk_widget_show(window->MainWindow); + g_signal_connect(G_OBJECT(window->LogCompressionCombo),"changed",G_CALLBACK(yon_combo_compress_check),window); + return window; } +void on_journald_open(GtkWidget *self, main_window *widgets){ + journald_window *window = yon_journald_open(self,widgets); + GtkTreeIter iter; + GtkTreeModel *model; + GtkWidget *tree_view; + char *name, *description; + int name_col, desc_col; + if (self == widgets->ServicesEditButton){ + model = GTK_TREE_MODEL(widgets->ServicesList); + tree_view = widgets->ServicesTree; + name_col = 2; + desc_col = 3; + } else { + model = GTK_TREE_MODEL(widgets->list); + tree_view = widgets->MainTree; + name_col = 0; + desc_col = 2; + } + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view)),&model,&iter)){ + gtk_tree_model_get(model,&iter,name_col,&name,desc_col,&description,-1); + gtk_entry_set_text(GTK_ENTRY(window->LogDescriptionLabel),description); + gtk_entry_set_text(GTK_ENTRY(window->LogNameLabel),name); + } + int jsize; + config_str journald_parameters = yon_config_get_all_by_key("JOURNALD[",&jsize); + gtk_widget_show(window->MainWindow); +} // Log adding menu @@ -569,7 +745,6 @@ add_log_window *on_add_open(){ 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; } @@ -661,7 +836,7 @@ void on_log_edit(GtkWidget *self,main_window *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); + // g_signal_connect(G_OBJECT(window->SyslogButton),"clicked", G_CALLBACK(yon_journald_open),widgets); } window->log_name=name; gtk_entry_set_text(GTK_ENTRY(window->LogDescriptionEntry),description); @@ -697,6 +872,7 @@ void on_log_remove(GtkWidget *self, main_window *widgets){ // Main window + void on_service_edit(GtkWidget *self,main_window *widgets){ GtkTreeModel *model = GTK_TREE_MODEL(widgets->ServicesList); GtkTreeIter iter; @@ -704,7 +880,7 @@ void on_service_edit(GtkWidget *self,main_window *widgets){ char *name; gtk_tree_model_get(model,&iter,2,&name,-1); if (!strcmp(name,"journald")){ - on_journald_open(NULL,widgets); + on_journald_open(self,widgets); } else { on_logrotate_tab_open(NULL,widgets); } @@ -809,11 +985,13 @@ main_window *setup_window(){ } config_str services = yon_file_open(services_list_path,&service_size); for (int i=0;iServicesList,&iter); - gtk_list_store_set(widgets->ServicesList,&iter,0,0,1,0,2,log[0],3,log[1],-1); + if (services[i][0]!='#'){ + int log_size; + services[i]=yon_char_divide_search(services[i],"\n",-1); + config_str log = yon_char_parse(services[i],&log_size,";"); + gtk_list_store_append(widgets->ServicesList,&iter); + gtk_list_store_set(widgets->ServicesList,&iter,0,0,1,0,2,log[0],3,log[1],-1); + } } config_str dirs = yon_config_load(logrotate_config_command,&dirs_size); for (int i=0;i= 10; i++) + { + convert_check = convert_check / 10; + } + char *ch = g_malloc0(i * sizeof(char) + 1); + sprintf(ch, "%ld", int_to_convert); + return ch; +} + /**yon_char_replace(char *source, char *find, char*replace) * [EN] * @@ -1161,6 +1181,20 @@ void *yon_config_get_by_key(char *key){ return NULL; } +void *yon_config_get_all_by_key(char *key, int *size){ + check_config{ + config_str ret_data=NULL; + dictionary *dict = NULL; + for_dictionaries(dict, (dictionary*)__yon__config__strings){ + if (strstr(dict->key,key)) { + if (ret_data) ret_data = yon_char_parsed_append(ret_data,size,dict->key); + else ret_data = yon_char_parsed_new(size,dict->key,NULL); + } + } + return ret_data; + } +} + /**yon_config_get_key_by_data(char *data) * [EN] * @@ -1926,11 +1960,11 @@ void yon_gtk_widget_set_sensitive_from_toggle_button_inversed(GtkToggleButton *t } void yon_gtk_widget_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget *target){ - gtk_widget_set_sensitive(target,gtk_combo_box_get_active(toggle)>=0 ? 1 : 0); + gtk_widget_set_sensitive(target,gtk_combo_box_get_active(toggle)>0 ? 1 : 0); } 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); + gtk_widget_set_sensitive(target,!gtk_combo_box_get_active(toggle)>0 ? 0 : 1); } void _yon_ubl_header_setup(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path) diff --git a/source/ubl-utils.h b/source/ubl-utils.h index db8ade7..8261a80 100644 --- a/source/ubl-utils.h +++ b/source/ubl-utils.h @@ -123,6 +123,8 @@ void *yon_dictionary_free_all(dictionary *dictionary,void (data_manipulation)(vo #define yon_char_divide_search_self(str,find,delete_divider) {char *temp = str; str = yon_char_divide_search(str,find,delete_divider); free(temp);} +#define yon_char_is_empty(string) !string||!strcmp(string,"") + int yon_char_find_last(char *source, char find); char *yon_char_append(char *source, char *append); @@ -139,6 +141,8 @@ char *yon_char_divide_search(char *source, char *dividepos, int delete_divider); char *yon_char_from_int(int int_to_convert); +char *yon_char_from_long(long int_to_convert); + char *yon_char_replace(char *source, char *find, char*replace); char **yon_char_parse(char *parameters, int *size, char *divider); @@ -206,6 +210,8 @@ int yon_config_remove_element(char *key, char *deleted); void *yon_config_get_by_key(char *key); +void *yon_config_get_all_by_key(char *key, int *size); + char *yon_config_get_key_by_data(char *data); int yon_config_set(char *key, void *data); diff --git a/ubl-settings-logging-journald.glade b/ubl-settings-logging-journald.glade index b2c6f1d..3db6728 100644 --- a/ubl-settings-logging-journald.glade +++ b/ubl-settings-logging-journald.glade @@ -9,6 +9,16 @@ 1 10 + + 100 + 1 + 10 + + + 100 + 1 + 10 + 1024 1 @@ -44,6 +54,11 @@ 1 10 + + 100 + 1 + 10 + True False @@ -136,10 +151,11 @@ False 5 - + True False Log/Journal: + 0 False @@ -148,15 +164,15 @@ - + True - False - logname + True + journald - False + True True - 1 + 2 @@ -172,10 +188,11 @@ False 5 - + True False Description: + 0 False @@ -184,15 +201,15 @@ - + True - False - logdescription + False + True - False + True True - 1 + 2 @@ -214,7 +231,7 @@ True False - 0 + 0.019999999552965164 in @@ -255,7 +272,7 @@ Default RAM Drive - Off + None @@ -307,11 +324,10 @@ - + True - False True - number + adjustment11 False @@ -329,7 +345,6 @@ Kb Mb Gb - Tb @@ -574,7 +589,7 @@ 5 - Leave free space at storage: + Leave free space at storage: True True False @@ -645,6 +660,7 @@ True False + 0 Default Yes @@ -710,11 +726,13 @@ True False + 0 Default emerg alert - critlerr + crit + err warning notice info @@ -756,7 +774,7 @@ True False - 0 + 0.019999999552965164 in @@ -825,10 +843,10 @@ - + True True - number + adjustment9 False @@ -840,6 +858,7 @@ True False + 0 Kb Mb @@ -891,10 +910,10 @@ - + True True - number + adjustment10 False @@ -1009,4 +1028,10 @@ + + + + + + diff --git a/ubl-settings-logging-logrotate.glade b/ubl-settings-logging-logrotate.glade index 749eaef..2348b62 100644 --- a/ubl-settings-logging-logrotate.glade +++ b/ubl-settings-logging-logrotate.glade @@ -775,6 +775,7 @@ True False + 0 Output errors if log file does not exist diff --git a/ubl-settings-logging.pot b/ubl-settings-logging.pot index 12654a8..2084a25 100644 --- a/ubl-settings-logging.pot +++ b/ubl-settings-logging.pot @@ -270,7 +270,7 @@ msgid "Use compression:" msgstr "" #: source/ubl-strings.h:71 -msgid "Divide journal files:" +msgid "Split journal files:" msgstr "" #: source/ubl-strings.h:72 diff --git a/ubl-settings-logging_ru.po b/ubl-settings-logging_ru.po index 9c7fac6..e634f7e 100644 --- a/ubl-settings-logging_ru.po +++ b/ubl-settings-logging_ru.po @@ -276,7 +276,7 @@ msgid "Use compression:" msgstr "Использовать сжатие:" #: source/ubl-strings.h:71 -msgid "Divide journal files:" +msgid "Split journal files:" msgstr "Разделять файлы журнала:" #: source/ubl-strings.h:72