parent
							
								
									b5b28e9e3e
								
							
						
					
					
						commit
						098edef3d1
					
				| @ -0,0 +1,3 @@ | ||||
| 
 | ||||
| #include "project_lib.h" | ||||
| #include "my_tupe.h" | ||||
| @ -0,0 +1,159 @@ | ||||
| #include "system_cmd_quotas.h" | ||||
| 
 | ||||
| namespace Quotas_sys { | ||||
| Quotas_sys::Quotas_sys() { | ||||
|     map_hw_or_sw["ext2"] = "hw"; | ||||
|     map_hw_or_sw["ext3"] = "hw"; | ||||
|     map_hw_or_sw["nfs"] = "sw"; | ||||
|     map_hw_or_sw["NFS"] = "sw"; | ||||
| } | ||||
| void Quotas_sys::format_cmd_quotas_ubconfig(struct struct_quotas& _struct_quota) { | ||||
|     string key = "DISK_QUOTA["; | ||||
|     key += ":" + _struct_quota.device + "]"; | ||||
|     string value = _struct_quota.name + ":" + _struct_quota.cmd; | ||||
|     (*map_gui_cfg)[key] = value; | ||||
| } | ||||
| 
 | ||||
| void Quotas_sys::format_cmd_quotas_system(struct struct_quotas& _struct_quota) { | ||||
|     string key = "DISK_QUOTA["; | ||||
|     key += ":" + _struct_quota.device + "]"; | ||||
|     string value = _struct_quota.name + ":" + _struct_quota.cmd; | ||||
|     (*map_gui_cfg)[key] = value; | ||||
| } | ||||
| 
 | ||||
| void Quotas_sys::off_quota_ubconfig(Gtk::ComboBoxText* combo_box, string quota_type) { | ||||
|     string partition = combo_box->get_active_text(); | ||||
|     string key = "DISK_QUOTA[" + quota_type + ":" + partition + "]"; | ||||
|     string value = "disable"; | ||||
|     (*map_gui_cfg)[key] = value; | ||||
| } | ||||
| 
 | ||||
| void Quotas_sys::set_map_gui(map_str_str &map_gui) { | ||||
|     map_gui_cfg = &map_gui; | ||||
| } | ||||
| 
 | ||||
| bool Quotas_sys::check_on_quotas_system(string cmd) { | ||||
|     string response = obj_process_call.call_all_sections(cmd); | ||||
|     if (response.length() > 0) { | ||||
|         return true; | ||||
|     } | ||||
|     else { | ||||
|         return false; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| struct status_quotas Quotas_sys::check_on_quotas_system_2_hw(string params) { | ||||
|     string cmd = "quotaon -ugPvp "  + params; | ||||
|     string response = obj_process_call.call_all_sections(cmd); | ||||
|     struct status_quotas status; | ||||
|     if (response.length() > 0 && response.find("Cannot find mountpoint for device ") == string::npos) { | ||||
|         status.status = true;  | ||||
|         vector<string> vec_str = Utils::split(response, '\n'); | ||||
|         string array_str[3] = {"group", "user", "project"}; | ||||
|         for (int index = 0; index < 3; index++) { | ||||
|             string u_g_p = array_str[index]; | ||||
|             for (const string& vec_u_g_p : vec_str) { | ||||
|                 if (vec_u_g_p.find(u_g_p) != string::npos && vec_u_g_p.find("accounting") != string::npos ) { | ||||
|                     if (index == 0) { | ||||
|                         status.group = true; | ||||
|                     } | ||||
|                     else if (index == 1) { | ||||
|                         status.user = true; | ||||
|                     } | ||||
|                     else if (index == 2) { | ||||
|                         status.project = true; | ||||
|                     } | ||||
|                 } | ||||
|                 else if  (vec_u_g_p.find(u_g_p) != string::npos && vec_u_g_p.find("enforced") != string::npos){ | ||||
|                     if (index == 0) { | ||||
|                         status.group = false; | ||||
|                     } | ||||
|                     else if (index == 1) { | ||||
|                         status.user = false; | ||||
|                     } | ||||
|                     else if (index == 2) { | ||||
|                         status.project = false; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     else { | ||||
|         status.group = false; | ||||
|         status.user = false; | ||||
|         status.project = false; | ||||
|         status.status = false;  | ||||
|     } | ||||
|     return status; | ||||
| 
 | ||||
| } | ||||
| bool Quotas_sys::on_quota_hw(string partition, string cmd_hw, string cmd_sw) { | ||||
|     if (map_hw_or_sw.find(partition) != map_hw_or_sw.end()) { | ||||
|         if (map_hw_or_sw[partition] == "hw") { | ||||
|             obj_process_system.call(cmd_hw, ""); | ||||
|             obj_process_system.call("ubconfig set config SERVICESSTART+=,quotaon.service", ""); | ||||
|             return true; | ||||
|         } | ||||
|         else if (map_hw_or_sw[partition] == "sw") { | ||||
|             obj_process_system.call(cmd_sw, ""); | ||||
|             obj_process_system.call("ubconfig set config SERVICESSTART+=,quotaon.service", ""); | ||||
|             return true; | ||||
|         } | ||||
|         else{ | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     return false; | ||||
| } | ||||
| bool Quotas_sys::on_quota_sw(string partition, int mode) { | ||||
|     if (map_hw_or_sw.find(partition) != map_hw_or_sw.end()) { | ||||
|         string cmd = ""; | ||||
|         if (mode == 0) { | ||||
|             cmd += "mount -vo remount,usrquota " + partition; | ||||
|             cmd += "quotacheck -ucm " + partition; | ||||
|             cmd += "quotaon -uv " + partition;	 | ||||
|         } | ||||
|         else if (mode == 1) { | ||||
|             cmd += "mount -vo remount,grpquota "  + partition; | ||||
|             cmd += "quotacheck -gcm "  + partition;	 | ||||
|             cmd += "quotaon -gv " + partition; | ||||
|         } | ||||
|         else if (mode == 2) { | ||||
|             cmd += "quotaon -ugPv " + partition; | ||||
|         } | ||||
|         else if (mode == 3) { | ||||
|             cmd += "quotaon -augPv"; | ||||
|         } | ||||
|         else { | ||||
|             return false; | ||||
|         } | ||||
|         cmd += "ubconfig set config SERVICESSTART+=,quotaon.service"; | ||||
|         obj_process_system.call(cmd, ""); | ||||
|         return true; | ||||
|     } | ||||
|     return false; | ||||
|      | ||||
| } | ||||
| 
 | ||||
| void Quotas_sys::off_quota_system(Gtk::ComboBoxText* combo_box, string quota_type) { | ||||
|     string partition = combo_box->get_active_text(); | ||||
|     string cmd = ""; | ||||
|     if (map_hw_or_sw.find(partition) != map_hw_or_sw.end()) { | ||||
|         if (map_hw_or_sw[partition] == "hw") { | ||||
|             cmd =  "tune2fs -Q ^" + quota_type + " " + partition; | ||||
|         } | ||||
|         else if (map_hw_or_sw[partition] == "sw") { | ||||
|             cmd = "quotaoff -u " + quota_type.substr(0,1) + " " + partition; | ||||
|              | ||||
|         } | ||||
|         else { | ||||
|             // TODO:
 | ||||
|             // Убрать после тестирования
 | ||||
|             throw "Опа цэ!"; | ||||
|         } | ||||
|         obj_process_system.call(cmd, ""); | ||||
|     } | ||||
|      | ||||
| } | ||||
| } | ||||
| @ -0,0 +1,29 @@ | ||||
| #ifndef SYSTEM_CMD_QUOTAS | ||||
| #define SYSTEM_CMD_QUOTAS | ||||
| #include "project_lib.h" | ||||
| #include "my_type.h" | ||||
| #include "my_process.h" | ||||
| #include "util.h" | ||||
| 
 | ||||
| namespace Quotas_sys { | ||||
| class Quotas_sys { | ||||
|     public: | ||||
|         map_str_str map_hw_or_sw; | ||||
| 
 | ||||
|         map_str_str* map_gui_cfg; | ||||
|         My_Process::My_Process_system obj_process_system = My_Process::My_Process_system(); | ||||
|         My_Process::My_Process_call obj_process_call = My_Process::My_Process_call(); | ||||
|     public: | ||||
|         Quotas_sys(); | ||||
|         void set_map_gui(map_str_str &map_gui); | ||||
|         void format_cmd_quotas_ubconfig(struct struct_quotas& _struct_quota); | ||||
|         void format_cmd_quotas_system(struct struct_quotas& _struct_quota); | ||||
|         void off_quota_ubconfig(Gtk::ComboBoxText* combo_box, string quota_type); | ||||
|         void off_quota_system(Gtk::ComboBoxText* combo_box, string quota_type); | ||||
|         bool check_on_quotas_system(string cmd); | ||||
|         struct status_quotas check_on_quotas_system_2_hw(string params); | ||||
|         bool on_quota_hw(string partition, string cmd_hw, string cmd_sw); | ||||
|         bool on_quota_sw(string partition, int mode); | ||||
| }; | ||||
| } | ||||
| #endif | ||||
					Loading…
					
					
				
		Reference in new issue
	
	