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
	
	