Browse Source

db_service ad lock

master
zhaohe 2 years ago
parent
commit
269f52e3ef
  1. 12
      README.md
  2. 53
      src/db/db_service.cpp
  3. 3
      src/db/db_service.hpp

12
README.md

@ -20,14 +20,14 @@
添加审计数据库接口 OK
添加审计 OK
添加U盘数据导出 OK
添加审计数据导出 OK
记录用户操作 (TODO)
通过getState可以获得到log,小数
通过getState可以获得到log,小数 OK
数据库操作加锁 OK
数据库操作加锁
--------------------------------
记录用户操作 (TODO)
添加U盘数据导出
添加审计数据导出
排液自动停止
水禁传感器测试

53
src/db/db_service.cpp

@ -172,6 +172,8 @@ void DBService::init_formula_db() {
}
list<shared_ptr<User>> DBService::getAllUser() {
lock_guard<recursive_mutex> lock(lock_);
list<shared_ptr<User>> users;
auto usertable = make_storage(USER_DB_STRUCT);
usertable.sync_schema();
@ -182,12 +184,16 @@ list<shared_ptr<User>> DBService::getAllUser() {
return users;
}
void DBService::addUser(string uid, string passwd, int permission_level) {
lock_guard<recursive_mutex> lock(lock_);
auto usertable = make_storage(USER_DB_STRUCT);
usertable.sync_schema();
logger->info("add user: {} {} {}", uid, passwd, permission_level);
usertable.insert(User{-1, uid, passwd, permission_level, true});
}
void DBService::delUser(int id) {
lock_guard<recursive_mutex> lock(lock_);
auto usertable = make_storage(USER_DB_STRUCT);
usertable.sync_schema();
/**
@ -209,6 +215,8 @@ void DBService::delUser(int id) {
}
void DBService::updateUserPermissionLevel(int id, int permission_level) {
lock_guard<recursive_mutex> lock(lock_);
auto usertable = make_storage(USER_DB_STRUCT);
usertable.sync_schema();
@ -223,6 +231,8 @@ void DBService::updateUserPermissionLevel(int id, int permission_level) {
}
void DBService::changePasswd(string uid, string passwd) {
lock_guard<recursive_mutex> lock(lock_);
auto usertable = make_storage(USER_DB_STRUCT);
usertable.sync_schema();
auto user = usertable.get_all<User>(where(c(&User::uid) == uid));
@ -236,6 +246,8 @@ void DBService::changePasswd(string uid, string passwd) {
}
json DBService::getAllUserJson() {
lock_guard<recursive_mutex> lock(lock_);
json j_users;
auto usertable = make_storage(USER_DB_STRUCT);
usertable.sync_schema();
@ -253,6 +265,8 @@ json DBService::getAllUserJson() {
}
shared_ptr<User> DBService::getUser(string uid) {
lock_guard<recursive_mutex> lock(lock_);
auto usertable = make_storage(USER_DB_STRUCT);
usertable.sync_schema();
auto user = usertable.get_all<User>(where(c(&User::uid) == uid));
@ -263,6 +277,8 @@ shared_ptr<User> DBService::getUser(string uid) {
}
list<shared_ptr<db::Setting>> DBService::getAllSetting() {
lock_guard<recursive_mutex> lock(lock_);
list<shared_ptr<db::Setting>> settings;
auto settingtable = make_storage(SETTING_DB, SETTING_DB_STRUCT);
settingtable.sync_schema();
@ -273,6 +289,8 @@ list<shared_ptr<db::Setting>> DBService::getAllSetting() {
return settings;
}
json DBService::getAllSettingJson() {
lock_guard<recursive_mutex> lock(lock_);
json j_settings;
auto settingtable = make_storage(SETTING_DB, SETTING_DB_STRUCT);
settingtable.sync_schema();
@ -293,6 +311,8 @@ json DBService::getAllSettingJson() {
}
bool DBService::isUserExist(string uid) {
lock_guard<recursive_mutex> lock(lock_);
auto usertable = make_storage(USER_DB_STRUCT);
usertable.sync_schema();
auto user = usertable.get_all<User>(where(c(&User::uid) == uid));
@ -302,6 +322,8 @@ bool DBService::isUserExist(string uid) {
return true;
}
bool DBService::ispasswdCorrect(string uid, string passwd) {
lock_guard<recursive_mutex> lock(lock_);
auto usertable = make_storage(USER_DB_STRUCT);
usertable.sync_schema();
auto user = usertable.get_all<User>(where(c(&User::uid) == uid));
@ -315,6 +337,8 @@ bool DBService::ispasswdCorrect(string uid, string passwd) {
}
bool DBService::setSettingVal(int id, int val) {
lock_guard<recursive_mutex> lock(lock_);
auto settingtable = make_storage(SETTING_DB, SETTING_DB_STRUCT);
settingtable.sync_schema();
auto setting = settingtable.get_all<Setting>(where(c(&Setting::id) == id));
@ -329,6 +353,8 @@ bool DBService::setSettingVal(int id, int val) {
return true;
}
bool DBService::setSettingVal(string setting_name, int val) {
lock_guard<recursive_mutex> lock(lock_);
logger->info("set setting val: {} {}", setting_name, val);
auto settingtable = make_storage(SETTING_DB, SETTING_DB_STRUCT);
settingtable.sync_schema();
@ -349,6 +375,8 @@ bool DBService::setSettingVal(string setting_name, int val) {
}
int DBService::getSettingVal(string name) {
lock_guard<recursive_mutex> lock(lock_);
auto settingtable = make_storage(SETTING_DB, SETTING_DB_STRUCT);
settingtable.sync_schema();
auto setting = settingtable.get_all<Setting>(where(c(&Setting::name) == name));
@ -359,6 +387,8 @@ int DBService::getSettingVal(string name) {
}
list<shared_ptr<db::Formula>> DBService::getAllFormula() {
lock_guard<recursive_mutex> lock(lock_);
list<shared_ptr<db::Formula>> formulas;
auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT);
formulatable.sync_schema();
@ -369,6 +399,8 @@ list<shared_ptr<db::Formula>> DBService::getAllFormula() {
return formulas;
}
shared_ptr<db::Formula> DBService::getFormula(int id) {
lock_guard<recursive_mutex> lock(lock_);
auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT);
formulatable.sync_schema();
auto formula = formulatable.get_all<Formula>(where(c(&Formula::id) == id));
@ -379,6 +411,8 @@ shared_ptr<db::Formula> DBService::getFormula(int id) {
}
json DBService::getAllFormulaJson() {
lock_guard<recursive_mutex> lock(lock_);
json j_formulas;
auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT);
formulatable.sync_schema();
@ -400,6 +434,8 @@ json DBService::getAllFormulaJson() {
}
void DBService::addFormula(string formula_id, string stoped_gs, string continued_gs, string stoped_satur, string continued_satur, string stoped_humi,
string continued_humi, string injection_pump_speed) {
lock_guard<recursive_mutex> lock(lock_);
auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT);
formulatable.sync_schema();
Formula f;
@ -422,6 +458,8 @@ void DBService::addFormula(string formula_id, int stoped_gs, int continued_gs, i
to_string(continued_humi), to_string(injection_pump_speed));
}
void DBService::delFormula(int id) {
lock_guard<recursive_mutex> lock(lock_);
// remove_all
auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT);
formulatable.sync_schema();
@ -429,6 +467,8 @@ void DBService::delFormula(int id) {
formulatable.sync_schema();
}
void DBService::updateFormula(int id, string column, string val) {
lock_guard<recursive_mutex> lock(lock_);
auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT);
formulatable.sync_schema();
auto formula = formulatable.get_all<Formula>(where(c(&Formula::id) == id));
@ -457,11 +497,15 @@ void DBService::updateFormula(int id, string column, string val) {
}
int DBService::getUserBehaviorRecordCount() {
lock_guard<recursive_mutex> lock(lock_);
auto user_behavior_record_table = make_storage(USER_BEHAVIOR_RECORD_DB, USER_BEHAVIOR_RECORD_STRUCT);
user_behavior_record_table.sync_schema();
return user_behavior_record_table.count<UserBehaviorRecord>(where(c(&UserBehaviorRecord::id) > 0));
}
int DBService::getUserBehaviorRecordTheFirstId() {
lock_guard<recursive_mutex> lock(lock_);
auto user_behavior_record_table = make_storage(USER_BEHAVIOR_RECORD_DB, USER_BEHAVIOR_RECORD_STRUCT);
user_behavior_record_table.sync_schema();
auto all = user_behavior_record_table.get_all<UserBehaviorRecord>(order_by(&UserBehaviorRecord::id).asc());
@ -472,6 +516,8 @@ int DBService::getUserBehaviorRecordTheFirstId() {
}
json DBService::getUserBehaviorRecordDescJson(int page, int page_size) {
lock_guard<recursive_mutex> lock(lock_);
json j_user_behavior_records;
auto user_behavior_record_table = make_storage(USER_BEHAVIOR_RECORD_DB, USER_BEHAVIOR_RECORD_STRUCT);
@ -520,6 +566,8 @@ static string getTime() {
}
void DBService::addUserBehaviorRecord(string uid, int behavior, string behaviorinfo) {
lock_guard<recursive_mutex> lock(lock_);
auto user_behavior_record_table = make_storage(USER_BEHAVIOR_RECORD_DB, USER_BEHAVIOR_RECORD_STRUCT);
user_behavior_record_table.sync_schema();
UserBehaviorRecord u;
@ -540,4 +588,7 @@ void DBService::addUserBehaviorRecord(string uid, int behavior, string behaviori
}
return;
}
void DBService::cleanUserBehaviorRecord() { system(fmt::format("rm -rf {}", USER_BEHAVIOR_RECORD_DB).c_str()); }
void DBService::cleanUserBehaviorRecord() {
lock_guard<recursive_mutex> lock(lock_);
system(fmt::format("rm -rf {}", USER_BEHAVIOR_RECORD_DB).c_str());
}

3
src/db/db_service.hpp

@ -9,6 +9,7 @@
#include <list>
#include <map>
#include <memory>
#include <mutex>
#include <set>
#include <sstream>
#include <string>
@ -97,11 +98,11 @@ struct UserBehaviorRecord {
string behaviorinfo;
};
} // namespace db
using namespace db;
class DBService : public enable_shared_from_this<DBService> {
ENABLE_LOGGER(DBService);
recursive_mutex lock_;
public:
DBService();

Loading…
Cancel
Save