|
|
|
@ -291,6 +291,7 @@ void on_device_current_changed(GtkWidget *, quota_window *window){
|
|
|
|
|
g_signal_handlers_unblock_by_func(G_OBJECT(window->DeviceLimitReadSpin),G_CALLBACK(on_device_set),window);
|
|
|
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DeviceLimitReadCheck),1);
|
|
|
|
|
switch (read[strlen(read)-1]){
|
|
|
|
|
default:
|
|
|
|
|
case 'K': gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceLimitReadCombo),0);
|
|
|
|
|
break;
|
|
|
|
|
case 'M': gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceLimitReadCombo),1);
|
|
|
|
@ -316,6 +317,7 @@ void on_device_current_changed(GtkWidget *, quota_window *window){
|
|
|
|
|
g_signal_handlers_unblock_by_func(G_OBJECT(window->DeviceLimitWriteSpin),G_CALLBACK(on_device_set),window);
|
|
|
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DeviceLimitWriteCheck),1);
|
|
|
|
|
switch (write[strlen(write)-1]){
|
|
|
|
|
default:
|
|
|
|
|
case 'K': gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceLimitWriteCombo),0);
|
|
|
|
|
break;
|
|
|
|
|
case 'M': gtk_combo_box_set_active(GTK_COMBO_BOX(window->DeviceLimitWriteCombo),1);
|
|
|
|
@ -856,6 +858,10 @@ void yon_widget_set_sensitive(GtkComboBox *toggle, GtkWidget *target){
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_manual_edit(GtkWidget *, quota_window *window){
|
|
|
|
|
yon_quota_update(window);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
quota_window *yon_quota_window_new(){
|
|
|
|
|
GtkBuilder *builder = gtk_builder_new_from_resource(glade_quota_path);
|
|
|
|
|
quota_window *window = g_malloc0(sizeof(quota_window));
|
|
|
|
@ -955,6 +961,7 @@ quota_window *yon_quota_window_new(){
|
|
|
|
|
g_signal_connect(G_OBJECT(window->DeviceLimitReadCheck),"toggled",G_CALLBACK(on_quota_configuration_update),window);
|
|
|
|
|
g_signal_connect(G_OBJECT(window->DeviceLimitWriteCheck),"toggled",G_CALLBACK(on_quota_configuration_update),window);
|
|
|
|
|
g_signal_connect(G_OBJECT(window->TargetTypeCombo),"changed",G_CALLBACK(on_quota_target_type_changed),window);
|
|
|
|
|
g_signal_connect(G_OBJECT(window->ManualInputEntry),"changed",G_CALLBACK(on_manual_edit),window);
|
|
|
|
|
|
|
|
|
|
yon_get_devices(window);
|
|
|
|
|
window->devices=window->devices->first;
|
|
|
|
@ -990,23 +997,7 @@ quota_window *yon_quota_window_new(){
|
|
|
|
|
return window;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_edit_open(GtkWidget *, main_window *widgets){
|
|
|
|
|
GtkTreeModel *model = GTK_TREE_MODEL(main_config.list);
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)) return;
|
|
|
|
|
quota_window *window = yon_quota_window_new();
|
|
|
|
|
gtk_widget_set_sensitive(window->BlockUiBox,1);
|
|
|
|
|
char *target, *type;
|
|
|
|
|
gtk_tree_model_get(model,&iter,0,&type,1,&target,-1);
|
|
|
|
|
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(window->TypeLabel),type);
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(window->TargetLabel),target);
|
|
|
|
|
gtk_window_set_title(GTK_WINDOW(window->Window),EDITING_LABEL);
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(window->TitleLabel),EDITING_LABEL);
|
|
|
|
|
|
|
|
|
|
gtk_widget_show(window->EditQuotaTargetBox);
|
|
|
|
|
gtk_widget_hide(window->AddQuotaTargetBox);
|
|
|
|
|
|
|
|
|
|
void yon_quota_update(quota_window *window){
|
|
|
|
|
g_signal_handlers_block_by_func(G_OBJECT(window->SoftRestrictionSpin),G_CALLBACK(on_quota_configuration_update),window);
|
|
|
|
|
g_signal_handlers_block_by_func(G_OBJECT(window->SoftRestrictionCombo),G_CALLBACK(on_quota_configuration_update),window);
|
|
|
|
|
g_signal_handlers_block_by_func(G_OBJECT(window->HardRestrictionSpin),G_CALLBACK(on_quota_configuration_update),window);
|
|
|
|
@ -1032,60 +1023,91 @@ void on_edit_open(GtkWidget *, main_window *widgets){
|
|
|
|
|
g_signal_handlers_block_by_func(G_OBJECT(window->DeviceLimitWriteSpin),G_CALLBACK(on_device_set),window);
|
|
|
|
|
g_signal_handlers_block_by_func(G_OBJECT(window->DeviceLimitWriteCombo),G_CALLBACK(on_device_set),window);
|
|
|
|
|
|
|
|
|
|
char *parameter = config(CGROUP_QUOTA(target));
|
|
|
|
|
char *parameter = yon_char_new(gtk_entry_get_text(GTK_ENTRY(window->ManualInputEntry)));
|
|
|
|
|
int size;
|
|
|
|
|
gtk_entry_set_text(GTK_ENTRY(window->ManualInputEntry),parameter);
|
|
|
|
|
config_str parsed = yon_char_parse(parameter,&size,",");
|
|
|
|
|
long soft_restr=0;
|
|
|
|
|
long hard_restr=0;
|
|
|
|
|
long swap_restr=0;
|
|
|
|
|
int cpu=0;
|
|
|
|
|
|
|
|
|
|
for (int i=0;i<size;i++){
|
|
|
|
|
int parsed_size=0;
|
|
|
|
|
config_str parsed_parameter = yon_char_parse(parsed[i],&parsed_size,"=");
|
|
|
|
|
if (parsed_size){
|
|
|
|
|
if (!strcmp(parsed_parameter[0],"MemoryHigh")){
|
|
|
|
|
long soft_restr = atol(parsed_parameter[1]);
|
|
|
|
|
if (!strcmp(parsed_parameter[0],"MemoryHigh")&&parsed_size>1){
|
|
|
|
|
soft_restr = atol(parsed_parameter[1]);
|
|
|
|
|
int size_mult = yon_get_size_get_from_letter(parsed_parameter[1][strlen(parsed_parameter[1])-1]);
|
|
|
|
|
if (size_mult==-1) size_mult=0;
|
|
|
|
|
long hard_current_max = main_config.avaliable_ram;
|
|
|
|
|
for (int i=0;i<size_mult+1;i++)
|
|
|
|
|
hard_current_max=hard_current_max/1024;
|
|
|
|
|
gtk_adjustment_set_upper(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->SoftRestrictionSpin)),hard_current_max);
|
|
|
|
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->SoftRestrictionSpin),soft_restr);
|
|
|
|
|
gtk_combo_box_set_active(GTK_COMBO_BOX(window->SoftRestrictionCombo),size_mult);
|
|
|
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->SoftRestrictionCheck),1);
|
|
|
|
|
} else if (!strcmp(parsed_parameter[0],"MemoryMax")){
|
|
|
|
|
if (soft_restr) {
|
|
|
|
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->SoftRestrictionSpin),soft_restr);
|
|
|
|
|
gtk_combo_box_set_active(GTK_COMBO_BOX(window->SoftRestrictionCombo),size_mult);
|
|
|
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->SoftRestrictionCheck),1);
|
|
|
|
|
} else {
|
|
|
|
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->SoftRestrictionSpin),0);
|
|
|
|
|
gtk_combo_box_set_active(GTK_COMBO_BOX(window->SoftRestrictionCombo),0);
|
|
|
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->SoftRestrictionCheck),0);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
} else if (!strcmp(parsed_parameter[0],"MemoryMax")&&parsed_size>1){
|
|
|
|
|
|
|
|
|
|
long hard_restr = atol(parsed_parameter[1]);
|
|
|
|
|
hard_restr = atol(parsed_parameter[1]);
|
|
|
|
|
int size_mult = yon_get_size_get_from_letter(parsed_parameter[1][strlen(parsed_parameter[1])-1]);
|
|
|
|
|
if (size_mult==-1) size_mult=0;
|
|
|
|
|
long hard_current_max = main_config.avaliable_ram;
|
|
|
|
|
for (int i=0;i<size_mult+1;i++)
|
|
|
|
|
hard_current_max=hard_current_max/1024;
|
|
|
|
|
gtk_adjustment_set_upper(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->HardRestrictionSpin)),hard_current_max);
|
|
|
|
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->HardRestrictionSpin),hard_restr);
|
|
|
|
|
gtk_combo_box_set_active(GTK_COMBO_BOX(window->HardRestrictionCombo),yon_get_size_get_from_letter(parsed_parameter[1][strlen(parsed_parameter[1])-1]));
|
|
|
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->HardRestrictionCheck),1);
|
|
|
|
|
} else if (!strcmp(parsed_parameter[0],"MemorySwapMax")){
|
|
|
|
|
long swap_restr = atol(parsed_parameter[1]);
|
|
|
|
|
if (hard_restr){
|
|
|
|
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->HardRestrictionSpin),hard_restr);
|
|
|
|
|
gtk_combo_box_set_active(GTK_COMBO_BOX(window->HardRestrictionCombo),size_mult);
|
|
|
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->HardRestrictionCheck),1);
|
|
|
|
|
} else {
|
|
|
|
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->HardRestrictionSpin),0);
|
|
|
|
|
gtk_combo_box_set_active(GTK_COMBO_BOX(window->HardRestrictionCombo),0);
|
|
|
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->HardRestrictionCheck),0);
|
|
|
|
|
}
|
|
|
|
|
} else if (!strcmp(parsed_parameter[0],"MemorySwapMax")&&parsed_size>1){
|
|
|
|
|
swap_restr = atol(parsed_parameter[1]);
|
|
|
|
|
int size_mult = yon_get_size_get_from_letter(parsed_parameter[1][strlen(parsed_parameter[1])-1]);
|
|
|
|
|
if (size_mult==-1) size_mult=0;
|
|
|
|
|
long hard_current_max = main_config.avaliable_swap;
|
|
|
|
|
for (int i=0;i<size_mult+1;i++)
|
|
|
|
|
hard_current_max=hard_current_max/1024;
|
|
|
|
|
gtk_adjustment_set_upper(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->PagingLimitSpin)),hard_current_max);
|
|
|
|
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->PagingLimitSpin),swap_restr);
|
|
|
|
|
gtk_combo_box_set_active(GTK_COMBO_BOX(window->PagingLimitCombo),yon_get_size_get_from_letter(parsed_parameter[1][strlen(parsed_parameter[1])-1]));
|
|
|
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->PagingLimitCheck),1);
|
|
|
|
|
if (swap_restr){
|
|
|
|
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->PagingLimitSpin),swap_restr);
|
|
|
|
|
gtk_combo_box_set_active(GTK_COMBO_BOX(window->PagingLimitCombo),size_mult);
|
|
|
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->PagingLimitCheck),1);
|
|
|
|
|
} else {
|
|
|
|
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->PagingLimitSpin),0);
|
|
|
|
|
gtk_combo_box_set_active(GTK_COMBO_BOX(window->PagingLimitCombo),0);
|
|
|
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->PagingLimitCheck),0);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else if (!strcmp(parsed_parameter[0],"CPUQuota")){
|
|
|
|
|
int cpu = atoi(parsed_parameter[1]);
|
|
|
|
|
} else if (!strcmp(parsed_parameter[0],"CPUQuota")&&parsed_size>1){
|
|
|
|
|
cpu = atoi(parsed_parameter[1]);
|
|
|
|
|
gtk_adjustment_set_upper(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->CpuLimitSpin)),main_config.cores*100);
|
|
|
|
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->CpuLimitSpin),cpu);
|
|
|
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->CpuLimitCheck),1);
|
|
|
|
|
} else if (!strcmp(parsed_parameter[0],"IOReadBandwidthMax")){
|
|
|
|
|
if (cpu){
|
|
|
|
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->CpuLimitSpin),cpu);
|
|
|
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->CpuLimitCheck),1);
|
|
|
|
|
} else {
|
|
|
|
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->CpuLimitSpin),0);
|
|
|
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->CpuLimitCheck),0);
|
|
|
|
|
}
|
|
|
|
|
} else if (!strcmp(parsed_parameter[0],"IOReadBandwidthMax")&&parsed_size>1){
|
|
|
|
|
char *device = yon_char_divide_search(parsed_parameter[1]," ",-1);
|
|
|
|
|
dictionary *dict = yon_dictionary_get(&window->devices,device);
|
|
|
|
|
if (dict){
|
|
|
|
|
device_limits *limit = yon_dictionary_get_data(dict,device_limits*);
|
|
|
|
|
limit->read = yon_char_new(parsed_parameter[1]);
|
|
|
|
|
}
|
|
|
|
|
} else if (!strcmp(parsed_parameter[0],"IOWriteBandwidthMax")){
|
|
|
|
|
} else if (!strcmp(parsed_parameter[0],"IOWriteBandwidthMax")&&parsed_size>1){
|
|
|
|
|
char *device = yon_char_divide_search(parsed_parameter[1]," ",-1);
|
|
|
|
|
dictionary *dict = yon_dictionary_get(&window->devices,device);
|
|
|
|
|
if (dict){
|
|
|
|
@ -1096,16 +1118,16 @@ void on_edit_open(GtkWidget *, main_window *widgets){
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
if (!soft_restr) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->SoftRestrictionCheck),0);
|
|
|
|
|
if (!hard_restr) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->HardRestrictionCheck),0);
|
|
|
|
|
if (!swap_restr) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->PagingLimitCheck),0);
|
|
|
|
|
if (!cpu) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->CpuLimitCheck),0);
|
|
|
|
|
|
|
|
|
|
struct sysinfo inf;
|
|
|
|
|
sysinfo(&inf);
|
|
|
|
|
main_config.avaliable_ram=inf.totalram;
|
|
|
|
|
main_config.avaliable_swap=inf.totalswap;
|
|
|
|
|
main_config.cores = sysconf(_SC_NPROCESSORS_ONLN);
|
|
|
|
|
dictionary *windows = NULL;
|
|
|
|
|
yon_dictionary_add_or_create_if_exists_with_data(windows,"window",window);
|
|
|
|
|
yon_dictionary_add_or_create_if_exists_with_data(windows,"widgets",widgets);
|
|
|
|
|
g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_quotas_edit),windows);
|
|
|
|
|
|
|
|
|
|
g_signal_handlers_unblock_by_func(G_OBJECT(window->SoftRestrictionSpin),G_CALLBACK(on_quota_configuration_update),window);
|
|
|
|
|
g_signal_handlers_unblock_by_func(G_OBJECT(window->SoftRestrictionCombo),G_CALLBACK(on_quota_configuration_update),window);
|
|
|
|
@ -1133,6 +1155,32 @@ void on_edit_open(GtkWidget *, main_window *widgets){
|
|
|
|
|
g_signal_handlers_unblock_by_func(G_OBJECT(window->DeviceLimitWriteCombo),G_CALLBACK(on_device_set),window);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_edit_open(GtkWidget *, main_window *widgets){
|
|
|
|
|
GtkTreeModel *model = GTK_TREE_MODEL(main_config.list);
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)) return;
|
|
|
|
|
quota_window *window = yon_quota_window_new();
|
|
|
|
|
gtk_widget_set_sensitive(window->BlockUiBox,1);
|
|
|
|
|
char *target, *type;
|
|
|
|
|
gtk_tree_model_get(model,&iter,0,&type,1,&target,-1);
|
|
|
|
|
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(window->TypeLabel),type);
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(window->TargetLabel),target);
|
|
|
|
|
gtk_window_set_title(GTK_WINDOW(window->Window),EDITING_LABEL);
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(window->TitleLabel),EDITING_LABEL);
|
|
|
|
|
|
|
|
|
|
gtk_widget_show(window->EditQuotaTargetBox);
|
|
|
|
|
gtk_widget_hide(window->AddQuotaTargetBox);
|
|
|
|
|
|
|
|
|
|
char *parameter = config(CGROUP_QUOTA(target));
|
|
|
|
|
gtk_entry_set_text(GTK_ENTRY(window->ManualInputEntry),parameter);
|
|
|
|
|
yon_quota_update(window);
|
|
|
|
|
dictionary *windows = NULL;
|
|
|
|
|
yon_dictionary_add_or_create_if_exists_with_data(windows,"window",window);
|
|
|
|
|
yon_dictionary_add_or_create_if_exists_with_data(windows,"widgets",widgets);
|
|
|
|
|
g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_quotas_edit),windows);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gboolean on_dispatcher_update(GtkWidget *,main_window *widgets){
|
|
|
|
|
int interval = gtk_spin_button_get_value(GTK_SPIN_BUTTON(widgets->DispatcherUpdateSpin));
|
|
|
|
|
if (interval>0) {
|
|
|
|
|