diff --git a/source/ubl-settings-resourcequota.c b/source/ubl-settings-resourcequota.c index 46f4fb1..7cea41b 100644 --- a/source/ubl-settings-resourcequota.c +++ b/source/ubl-settings-resourcequota.c @@ -211,13 +211,13 @@ void main_update_processes() { gboolean active_all_empty = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->btnMainShowAllEmpty)); gboolean active_core_stream = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->btnMainShowCoreStream)); if (active_core_stream == 1) { - cmd = "systemd-cgls --no-page --all"; + cmd = "systemd-cgls --no-page -l"; } else if (active_all_empty == 1) { cmd = "systemd-cgls --no-page -k"; } else if (active_all_empty == 1 && active_core_stream == 1) { - cmd = "systemd-cgls --no-page --all -k"; + cmd = "systemd-cgls --no-page -l -k"; } else { cmd = "systemd-cgls --no-page"; @@ -251,11 +251,11 @@ void main_update_information() { } void load_system_cfg() { - + template_cfg(CMD_LOAD_SYSTEM); } void load_global_cfg() { - + template_cfg(CMD_LOAD_GLOBAL); } void template_cfg(char* cmd) { @@ -264,16 +264,46 @@ void template_cfg(char* cmd) { for (int index = 0; index < size; index++) { char* str_key_value = yon_char_new(cfg[index]); char* str_key = yon_char_divide_search(str_key_value, "=",-1); - str_split_value(str_key_value); + if (yon_char_find_count(str_key, "CGROUP_QUOTA") != 0) { + if (str_key_value[0] == '\"') { + yon_char_divide(str_key_value, 0); + size_t length = strlen(str_key_value); + str_key_value = yon_char_divide(str_key_value, length-2); + } + str_split_value(str_key_value); + } + } } -void str_split_value(char* value) { - char* new_value = yon_char_new(value); +void str_split_value(char* values) { + char* new_value = yon_char_new(values); int size = 0; - char arr_values = yon_char_parse(new_value, &size, ","); + char** arr_values = philos_str_split(new_value, &size, ","); + if (arr_values == NULL) { + return; + } + char* key = NULL; + char* value = NULL; for (int index = 0; index < size; index++) { - if (yon_char_find_count(arr_values,arr_values[index], "MemoryHigh") != 0) { + value = arr_values[index]; + key = yon_char_divide_search(value, "=", -1); + if (yon_char_find_count(key, "MemoryHigh") != 0) { + + } + else if (yon_char_find_count(key, "MemoryMax") != 0) { + + } + else if (yon_char_find_count(key, "MemorySwapMax") != 0) { + + } + else if (yon_char_find_count(key, "CPUQuota") != 0) { + + } + else if (yon_char_find_count(key, "IOReadBandwidthMax") != 0) { + + } + else if (yon_char_find_count(key, "IOWriteBandwidthMax") != 0) { } } @@ -322,7 +352,7 @@ void tree_view_select(GtkWidget *self, main_window *widgets) { } void tree_view_add(int index) { - main_config.type_quota= yon_char_parsed_append(main_config.type_quota, &main_config.size_tree_view, add_get_quota_object()); + main_config.type_quota = yon_char_parsed_append(main_config.type_quota, &main_config.size_tree_view, add_get_quota_object()); main_config.size_tree_view--; main_config.quota_volume = yon_char_parsed_append(main_config.quota_volume, &main_config.size_tree_view, add_get_select_device_to_level_2()); main_config.size_tree_view--; @@ -337,6 +367,23 @@ void tree_view_add(int index) { main_config.i_o_limit_read = yon_char_parsed_append(main_config.i_o_limit_read, &main_config.size_tree_view, add_get_read_device()); main_config.size_tree_view--; main_config.i_o_limit_write = yon_char_parsed_append(main_config.i_o_limit_write, &main_config.size_tree_view, add_get_write_device()); + main_config.size_tree_view--; + + main_config.type_quota_size = philos_int_append(main_config.type_quota_size, &main_config.size_tree_view, add_get_quota_object_size()); + main_config.size_tree_view--; + main_config.quota_volume_size = philos_int_append(main_config.quota_volume_size, &main_config.size_tree_view, -1); + main_config.size_tree_view--; + main_config.soft_raw_limit_size = philos_int_append(main_config.soft_raw_limit_size, &main_config.size_tree_view, add_get_soft_size()); + main_config.size_tree_view--; + main_config.hard_raw_limit_size = philos_int_append(main_config.hard_raw_limit_size, &main_config.size_tree_view, add_get_hard_size()); + main_config.size_tree_view--; + main_config.swap_size = philos_int_append(main_config.swap_size, &main_config.size_tree_view, add_get_limit_swap_size()); + main_config.size_tree_view--; + main_config.cpu_limit_size = philos_int_append(main_config.cpu_limit_size, &main_config.size_tree_view, add_get_limit_cpu_size()); + main_config.size_tree_view--; + main_config.i_o_limit_read_size = philos_int_append(main_config.i_o_limit_read_size, &main_config.size_tree_view, add_get_read_device_size()); + main_config.size_tree_view--; + main_config.i_o_limit_write_size = philos_int_append(main_config.i_o_limit_write_size, &main_config.size_tree_view, add_get_write_device_size()); GtkTreeIter iter; gtk_list_store_append(main_config.list,&iter); gtk_list_store_set(main_config.list,&iter,0,main_config.type_quota[index], @@ -363,6 +410,13 @@ int tree_view_edit() { main_config.cpu_limit[index] = edit_get_limit_cpu(); main_config.i_o_limit_read[index] = edit_get_read_device(); main_config.i_o_limit_write[index] = edit_get_write_device(); + + main_config.soft_raw_limit_size[index] = edit_get_soft_size(); + main_config.hard_raw_limit_size[index] = edit_get_hard_size(); + main_config.swap_size[index] = edit_get_limit_swap_size(); + main_config.cpu_limit_size[index] = edit_get_limit_cpu_size(); + main_config.i_o_limit_read_size[index] = edit_get_read_device_size(); + main_config.i_o_limit_write_size[index] = edit_get_write_device_size(); gtk_list_store_set(main_config.list,&iter,0,main_config.type_quota[index], 1,main_config.quota_volume[index], 2,main_config.soft_raw_limit[index], @@ -428,6 +482,8 @@ void main_event(main_window *widgets) { g_signal_connect(G_OBJECT(widgets->cbtMainInfoLevel2),"changed",G_CALLBACK(main_cbx_2_event), NULL); g_signal_connect(G_OBJECT(widgets->btnDelQuotas), "clicked", G_CALLBACK(tree_view_del_line), widgets); g_signal_connect(G_OBJECT(widgets->treeViewMain), "cursor-changed", G_CALLBACK(tree_view_select), widgets); + g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem), "activate", G_CALLBACK(load_global_cfg), widgets); + g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem), "activate", G_CALLBACK(load_system_cfg), widgets); /* g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(),NULL); g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(),NULL); @@ -459,12 +515,12 @@ void wrapper_edit_show() { char* str_iter = gtk_tree_model_get_string_from_iter(model, &iter); int index = atoi(str_iter); edit_show(NULL, glade_path); - edit_set_hard(main_config.hard_raw_limit[index]); - edit_set_limit_cpu(main_config.cpu_limit[index]); - edit_set_soft(main_config.soft_raw_limit[index]); - edit_set_write_device(main_config.i_o_limit_write[index]); - edit_set_read_device(main_config.i_o_limit_read[index]); - edit_set_limit_swap(main_config.swap[index]); + edit_set_hard(main_config.hard_raw_limit[index], main_config.hard_raw_limit_size[index]); + edit_set_limit_cpu(main_config.cpu_limit[index], main_config.cpu_limit_size[index]); + edit_set_soft(main_config.soft_raw_limit[index], main_config.soft_raw_limit_size[index]); + edit_set_write_device(main_config.i_o_limit_write[index], main_config.i_o_limit_write_size[index]); + edit_set_read_device(main_config.i_o_limit_read[index], main_config.i_o_limit_read_size[index]); + edit_set_limit_swap(main_config.swap[index], main_config.swap_size[index]); // edit_set_select_device(main_config.cpu_limit[index]); g_signal_connect(G_OBJECT(get_widget_edit()->btnSaveEditSave), "clicked", G_CALLBACK(main_edit_btn_save), NULL); } @@ -503,6 +559,23 @@ void tree_view_del_line() { main_config.i_o_limit_read = yon_char_parsed_shrink(main_config.i_o_limit_read, &main_config.size_tree_view,index); main_config.size_tree_view++; main_config.i_o_limit_write = yon_char_parsed_shrink(main_config.i_o_limit_write, &main_config.size_tree_view,index); + main_config.size_tree_view++; + + main_config.type_quota_size = remove_element_int_array(main_config.type_quota_size, &main_config.size_tree_view,index); + main_config.size_tree_view++; + main_config.quota_volume_size = remove_element_int_array(main_config.quota_volume_size, &main_config.size_tree_view,index); + main_config.size_tree_view++; + main_config.soft_raw_limit_size = remove_element_int_array(main_config.soft_raw_limit_size, &main_config.size_tree_view,index); + main_config.size_tree_view++; + main_config.hard_raw_limit_size = remove_element_int_array(main_config.hard_raw_limit_size, &main_config.size_tree_view,index); + main_config.size_tree_view++; + main_config.swap_size = remove_element_int_array(main_config.swap_size, &main_config.size_tree_view,index); + main_config.size_tree_view++; + main_config.cpu_limit_size = remove_element_int_array(main_config.cpu_limit_size, &main_config.size_tree_view,index); + main_config.size_tree_view++; + main_config.i_o_limit_read_size = remove_element_int_array(main_config.i_o_limit_read_size, &main_config.size_tree_view,index); + main_config.size_tree_view++; + main_config.i_o_limit_write_size = remove_element_int_array(main_config.i_o_limit_write_size, &main_config.size_tree_view,index); g_object_ref(main_config.list); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->treeViewMain), NULL); gtk_list_store_clear(main_config.list); diff --git a/source/ubl-settings-resourcequota.h b/source/ubl-settings-resourcequota.h old mode 100644 new mode 100755 index 6cc7bd4..8daf5b3 --- a/source/ubl-settings-resourcequota.h +++ b/source/ubl-settings-resourcequota.h @@ -32,6 +32,8 @@ #define LocalePath "/usr/share/locale" #define LocaleName "ubl-settings-resourcequota" +#define CMD_LOAD_GLOBAL "ubconfig --default --source global get security" +#define CMD_LOAD_SYSTEM "ubconfig --default --source system get security" typedef char* string; string version_application = "1.0"; @@ -71,6 +73,15 @@ typedef struct { config_str cpu_limit; config_str i_o_limit_read; config_str i_o_limit_write; + + int* type_quota_size; + int* quota_volume_size; + int* soft_raw_limit_size; + int* hard_raw_limit_size; + int* swap_size; + int* cpu_limit_size; + int* i_o_limit_read_size; + int* i_o_limit_write_size; int size_tree_view; } config; @@ -169,4 +180,4 @@ void main_fill_tree_view_after_remove(); void load_system_cfg(); void load_global_cfg(); void template_cfg(char* cmd); -void str_split_value(char* value); \ No newline at end of file +void str_split_value(char* values); \ No newline at end of file diff --git a/source/ubl-utils.c b/source/ubl-utils.c index 1e406aa..dd61852 100644 --- a/source/ubl-utils.c +++ b/source/ubl-utils.c @@ -601,6 +601,23 @@ char **yon_char_parse(char *parameters, int *size, char *divider){ *size=i-1; return string; + + +} + +char** philos_str_split(char *parameters, int *size, char *divider) { + char** array_split = NULL; + char* ch= NULL; + ch = strtok(parameters, divider); + if (ch != NULL) { + array_split = yon_char_parsed_append(array_split, size, ch); + while (ch != NULL) { + ch = strtok(NULL, divider); + array_split = yon_char_parsed_append(array_split, size, ch); + } + } + (*size) -= 1; + return array_split; } char **yon_char_parsed_shrink(char **char_string, int *size, int item_to_delete){ @@ -938,6 +955,30 @@ int yon_launch(thread_output *thread) return *thread->exitcode; } +int* philos_int_append(int* array, int* size, int value) { + if (array == NULL) { + array = (int*) malloc((*size+1) * sizeof(int)); + } + else { + array = (int*) realloc(array, ((*size)+1)*sizeof(int)); + } + array[(*size)] = value; + (*size)++; + return array; + +} + +int* remove_element_int_array(int* array, int* size, int index) { + int* temp = malloc(((*size) - 1) * sizeof(int)); + if (index != 0) + memcpy(temp, array, index * sizeof(int)); + + if (index != ((*size) - 1)) + memcpy(temp+index, array+index+1, ((*size) - index - 1) * sizeof(int)); + + free (array); + return temp; +} // Gtk functions diff --git a/source/ubl-utils.h b/source/ubl-utils.h index 90c540c..acd60c5 100644 --- a/source/ubl-utils.h +++ b/source/ubl-utils.h @@ -138,6 +138,8 @@ void philos_split_size_memory(char* str_value, int* size, char* pow_memory); char **yon_char_parse(char *parameters, int *size, char *divider); +char** philos_str_split(char *parameters, int *size, char *divider); + char **yon_char_parsed_shrink(char **char_string, int *size, int item_to_delete); int yon_char_parsed_check_exist(char **parameters, int size, char *param); @@ -180,6 +182,9 @@ int yon_launch_app_with_arguments(char *name, char *args); int yon_launch(thread_output *thread); +int* philos_int_append(int* array, int* size, int value); + +int* remove_element_int_array(int* array, int* size, int index); // Gtk functions #ifdef __GTK_H__ diff --git a/source/view_add.c b/source/view_add.c index 98ff006..c478654 100644 --- a/source/view_add.c +++ b/source/view_add.c @@ -146,7 +146,27 @@ char* add_get_select_device() { return str; } } - +int add_get_read_device_size() { + return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbtAddRead)); +} +int add_get_write_device_size() { + return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbtAddWrite)); +} +int add_get_soft_size() { + return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cmSevereRestrictionAdd)); +} +int add_get_hard_size() { + return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cmbSevereRestrictionAdd)); +} +int add_get_limit_cpu_size() { + return -1; +} +int add_get_limit_swap_size() { + return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cmbPaddingFLAdd)); +} +int add_get_quota_object_size() { + return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxAddQuotaObj)); +} char* add_get_read_device() { return philos_get_size_bite(add_widgets->chbAddRead, add_widgets->spinAddRead, add_widgets->cbtAddRead); diff --git a/source/view_add.h b/source/view_add.h index ea25419..261d998 100644 --- a/source/view_add.h +++ b/source/view_add.h @@ -67,6 +67,15 @@ char* add_get_hard(); char* add_get_limit_cpu(); char* add_get_limit_swap(); char* add_get_quota_object(); + +int add_get_read_device_size(); +int add_get_write_device_size(); +int add_get_soft_size(); +int add_get_hard_size(); +int add_get_limit_cpu_size(); +int add_get_limit_swap_size(); +int add_get_quota_object_size(); + char* add_get_select_device_to_level_2(); void add_generate_cmd(); #endif \ No newline at end of file diff --git a/source/view_edit.c b/source/view_edit.c index 4e52d7b..7127154 100644 --- a/source/view_edit.c +++ b/source/view_edit.c @@ -122,7 +122,24 @@ char* edit_get_select_device() { return str; } } - +int edit_get_read_device_size() { + return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cbtEditRead)); +} +int edit_get_write_device_size() { + return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cbtEditWrite)); +} +int edit_get_soft_size() { + return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmSevereRestrictionEdit)); +} +int edit_get_hard_size() { + return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmbSevereRestrictionEdit)); +} +int edit_get_limit_cpu_size() { + return -1; +} +int edit_get_limit_swap_size() { + return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmbPaddingFLEdit)); +} char* edit_get_read_device() { return philos_get_size_bite(edit_widgets->chbEditRead, edit_widgets->spinEditRead, @@ -158,40 +175,40 @@ char* edit_get_limit_swap() { } // ================================================================= -void edit_set_select_device(char* str_value) { - +void edit_set_select_device(char* str_value, int pow_mem) { + puts(str_value); } -void edit_set_read_device(char* str_value) { - edit_temp_set(str_value, edit_widgets->chbEditRead, +void edit_set_read_device(char* str_value, int pow_mem) { + edit_temp_set(str_value,pow_mem, edit_widgets->chbEditRead, edit_widgets->spinEditRead, edit_widgets->cbtEditRead); } -void edit_set_write_device(char* str_value) { - edit_temp_set(str_value, edit_widgets->chbEditWrite, +void edit_set_write_device(char* str_value, int pow_mem) { + edit_temp_set(str_value,pow_mem, edit_widgets->chbEditWrite, edit_widgets->spinEditWrite, edit_widgets->cbtEditWrite); } -void edit_set_soft(char* str_value) { - edit_temp_set(str_value, edit_widgets->chkSoftRestrictionEdit, +void edit_set_soft(char* str_value, int pow_mem) { + edit_temp_set(str_value,pow_mem, edit_widgets->chkSoftRestrictionEdit, edit_widgets->spiSevereRestrictionEdit, edit_widgets->cmSevereRestrictionEdit); } -void edit_set_hard(char* str_value) { - edit_temp_set(str_value, edit_widgets->chkSevereRestrictionEdit, +void edit_set_hard(char* str_value, int pow_mem) { + edit_temp_set(str_value,pow_mem, edit_widgets->chkSevereRestrictionEdit, edit_widgets->spinSevereRestrictionEdit, edit_widgets->cmbSevereRestrictionEdit); } -void edit_set_limit_cpu(char* str_value) { - edit_temp_set(str_value, edit_widgets->chkCPULimitEdit, +void edit_set_limit_cpu(char* str_value, int pow_mem) { + edit_temp_set(str_value,pow_mem, edit_widgets->chkCPULimitEdit, edit_widgets->spinCPULimitEdit, edit_widgets->lblCPULimitEdit); } -void edit_set_limit_swap(char* str_value) { - edit_temp_set(str_value, edit_widgets->chkPaddingFLEdit, +void edit_set_limit_swap(char* str_value, int pow_mem) { + edit_temp_set(str_value,pow_mem, edit_widgets->chkPaddingFLEdit, edit_widgets->spinPaddingFLEdit, edit_widgets->cmbPaddingFLEdit); } -void edit_temp_set(char* str_value, GtkWidget* cheek, GtkWidget* spin, GtkWidget* combo_box_text) { +void edit_temp_set(char* str_value, int pow_mem, GtkWidget* cheek, GtkWidget* spin, GtkWidget* combo_box_text) { char* search = "-"; char* mem_size_pow = yon_char_new(str_value); if (yon_char_find_count(mem_size_pow, search) == 0) { @@ -200,6 +217,8 @@ void edit_temp_set(char* str_value, GtkWidget* cheek, GtkWidget* spin, GtkWidget gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cheek), 1); if (combo_box_text != NULL) { // Todo: add code + gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box_text), pow_mem); + } } else { diff --git a/source/view_edit.h b/source/view_edit.h index 010a6e5..32fd5f9 100644 --- a/source/view_edit.h +++ b/source/view_edit.h @@ -65,13 +65,19 @@ char* edit_get_limit_cpu(); char* edit_get_limit_swap(); void edit_generate_cmd(); void wrapper_edit_show(); -void edit_set_select_device(char* str_value); -void edit_set_read_device(char* str_value); -void edit_set_write_device(char* str_value); -void edit_set_soft(char* str_value); -void edit_set_hard(char* str_value); -void edit_set_limit_cpu(char* str_value); -void edit_set_limit_swap(char* str_value); -void edit_temp_set(char* str_value, GtkWidget* cheek, GtkWidget* spin, GtkWidget* combo_box_text); +void edit_set_select_device(char* str_value, int pow_mem); +void edit_set_read_device(char* str_value, int pow_mem); +void edit_set_write_device(char* str_value, int pow_mem); +void edit_set_soft(char* str_value, int pow_mem); +void edit_set_hard(char* str_value, int pow_mem); +void edit_set_limit_cpu(char* str_value, int pow_mem); +void edit_set_limit_swap(char* str_value, int pow_mem); +void edit_temp_set(char* str_value, int pow_mem, GtkWidget* cheek, GtkWidget* spin, GtkWidget* combo_box_text); +int edit_get_read_device_size(); +int edit_get_write_device_size(); +int edit_get_soft_size(); +int edit_get_hard_size(); +int edit_get_limit_cpu_size(); +int edit_get_limit_swap_size(); #endif \ No newline at end of file