更新
This commit is contained in:
@@ -30,8 +30,7 @@ void Global::handle_old_logs() {
|
||||
case Log_Config::Open_Mode::Delete: {
|
||||
if (fs::exists(dirPath)) {
|
||||
fs::remove_all(dirPath); // 删除目录及其所有内容
|
||||
std::cout << "Directory and its contents deleted: " << dirPath
|
||||
<< std::endl;
|
||||
std::cout << "Directory and its contents deleted: " << dirPath << std::endl;
|
||||
}
|
||||
if (fs::create_directories(dirPath)) {
|
||||
std::cout << "Directory created: " << dirPath << std::endl;
|
||||
@@ -40,8 +39,7 @@ void Global::handle_old_logs() {
|
||||
std::cout << "创建目录失败: " << dirPath << std::endl;
|
||||
Psc::fail_fast();
|
||||
}
|
||||
fs::permissions(dirPath, fs::perms::owner_all | fs::perms::group_all |
|
||||
fs::perms::others_all);
|
||||
fs::permissions(dirPath, fs::perms::owner_all | fs::perms::group_all | fs::perms::others_all);
|
||||
break;
|
||||
}
|
||||
case Log_Config::Open_Mode::Append:
|
||||
@@ -57,42 +55,33 @@ void Global::handle_old_logs() {
|
||||
}
|
||||
Global::Global() {
|
||||
auto j = load();
|
||||
log_config.from_base_json(j.get("log"));
|
||||
log_config.from_base_json(j.get("log"), false);
|
||||
handle_old_logs();
|
||||
Base_Logger_Manager::instance()
|
||||
->set_thread_num(1)
|
||||
.set_flush_seconds(3)
|
||||
.init();
|
||||
Base_Logger_Manager::instance()->set_thread_num(1).set_flush_seconds(3).init();
|
||||
int piece_num = log_config.piece_num;
|
||||
int size_MB = log_config.size_MB;
|
||||
int MB = 1024 * 1024;
|
||||
asio_socket::socket_logger =
|
||||
new BaseLogger("@/logs/socket", MB * size_MB, piece_num);
|
||||
serial::serial_logger =
|
||||
new BaseLogger("@/logs/serial", MB * size_MB, piece_num);
|
||||
SSR::mode_s_logger =
|
||||
new BaseLogger("@/logs/mode_s", MB * size_MB * 10, piece_num);
|
||||
asio_socket::socket_logger = new BaseLogger("@/logs/socket", MB * size_MB, piece_num);
|
||||
serial::serial_logger = new BaseLogger("@/logs/serial", MB * size_MB, piece_num);
|
||||
SSR::mode_s_logger = new BaseLogger("@/logs/mode_s", MB * size_MB * 10, piece_num);
|
||||
dsp_logger = new BaseLogger("@/logs/dsp", MB * size_MB, piece_num);
|
||||
// libais::libais_logger = new BaseLogger("@/logs/libais", MB * size_MB,
|
||||
// piece_num);
|
||||
server_logger = new BaseLogger("@/logs/server", MB * size_MB, piece_num);
|
||||
asio_socket::socket_logger->set_redirect(
|
||||
[](const BaseLogger::Log_Info& log_info) {
|
||||
auto msg = "[" + std::string("func") + "~" + log_info.func_pattern +
|
||||
"] " + log_info.log_type.to_string() + log_info.content;
|
||||
debug_logger_info_manager.push_info(msg);
|
||||
});
|
||||
serial::serial_logger->set_redirect([](const BaseLogger::Log_Info& log_info) {
|
||||
auto msg = "[" + std::string("func") + "~" + log_info.func_pattern + "] " +
|
||||
log_info.log_type.to_string() + log_info.content;
|
||||
asio_socket::socket_logger->set_redirect([](const BaseLogger::Log_Info& log_info) {
|
||||
auto msg = "[" + std::string("func") + "~" + log_info.func_pattern + "] " + log_info.log_type.to_string() +
|
||||
log_info.content;
|
||||
debug_logger_info_manager.push_info(msg);
|
||||
});
|
||||
fromJson(&j);
|
||||
serial::serial_logger->set_redirect([](const BaseLogger::Log_Info& log_info) {
|
||||
auto msg = "[" + std::string("func") + "~" + log_info.func_pattern + "] " + log_info.log_type.to_string() +
|
||||
log_info.content;
|
||||
debug_logger_info_manager.push_info(msg);
|
||||
});
|
||||
from_base_json(&j, false);
|
||||
#ifdef Cache_Some_Mode_S
|
||||
auto old_parse_ok_json = SSR::parse_ok_json;
|
||||
SSR::parse_ok_json = [old_parse_ok_json](Aircraft_Info* aircraft_info,
|
||||
SSR::P_S mode_s_msg,
|
||||
Psc::JSON json) {
|
||||
SSR::parse_ok_json = [old_parse_ok_json](Aircraft_Info* aircraft_info, SSR::P_S mode_s_msg, Psc::JSON json) {
|
||||
old_parse_ok_json(aircraft_info, mode_s_msg, json);
|
||||
auto f = static_cast<Aircraft*>(aircraft_info);
|
||||
f->add_msg_limit(mode_s_msg);
|
||||
@@ -105,10 +94,8 @@ Global::Global() {
|
||||
SSR::mode_s_logger->debug("CPR/" + to_string(t) + "/" + to_string(err_type), {}, log);
|
||||
};
|
||||
// 处理错误
|
||||
SSR::parse_call_back =
|
||||
[this](SSR::Parse_Call_Back_Type type, SSR::Aircraft_Info* info,
|
||||
std::string_view field_name, std::vector<std::string> bds_list,
|
||||
void*, SSR::P_S msg) {
|
||||
SSR::parse_call_back = [this](SSR::Parse_Call_Back_Type type, SSR::Aircraft_Info* info, std::string_view field_name,
|
||||
std::vector<std::string> bds_list, void*, SSR::P_S msg) {
|
||||
auto src = std::dynamic_pointer_cast<Data_Source>(msg->source);
|
||||
Mode_S_Statistic_Data* ss = &src->mode_s_statistic;
|
||||
if (type == SSR::Parse_Call_Back_Type::Unknown_DF) {
|
||||
@@ -147,8 +134,7 @@ Global::Global() {
|
||||
Global::~Global() {
|
||||
std::cout << "Global::~Global()" << std::endl;
|
||||
}
|
||||
void replace(std::string& originalStr, std::string_view findStr,
|
||||
std::string_view replaceStr) {
|
||||
void replace(std::string& originalStr, std::string_view findStr, std::string_view replaceStr) {
|
||||
size_t pos = originalStr.find(findStr);
|
||||
while (pos != std::string::npos) {
|
||||
originalStr.replace(pos, findStr.length(), replaceStr);
|
||||
@@ -165,10 +151,8 @@ bool isHexadecimal(std::string_view str) {
|
||||
return std::isdigit(c) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F');
|
||||
});
|
||||
}
|
||||
void handle_buffer_muti_start(
|
||||
std::string& buffer, std::string_view data,
|
||||
const std::set<std::string>& prefix_list,
|
||||
const std::function<void(std::string&)>& callback) {
|
||||
void handle_buffer_muti_start(std::string& buffer, std::string_view data, const std::set<std::string>& prefix_list,
|
||||
const std::function<void(std::string&)>& callback) {
|
||||
if (!data.empty()) {
|
||||
buffer += data;
|
||||
// std::cout << "[data]:" + data + "\n";
|
||||
@@ -203,10 +187,8 @@ void handle_buffer_muti_start(
|
||||
}
|
||||
}
|
||||
}
|
||||
void handle_buffer_head_tail(
|
||||
std::string& buffer, std::string_view data, std::string_view prefix,
|
||||
std::string_view suffix,
|
||||
const std::function<void(std::string&)>& callback) {
|
||||
void handle_buffer_head_tail(std::string& buffer, std::string_view data, std::string_view prefix,
|
||||
std::string_view suffix, const std::function<void(std::string&)>& callback) {
|
||||
// 只在数据可用时进行读取
|
||||
if (!data.empty()) {
|
||||
buffer += data;
|
||||
@@ -261,8 +243,7 @@ void read_ais_serial_data(std::atomic<bool>& running) {
|
||||
// delete ais_serial;
|
||||
}
|
||||
bool is_10004(SSR::Mode_S_Msg& msg) {
|
||||
bool DF_11_17_18 =
|
||||
msg.df == SSR::Downlink_Format::All_Call_Reply_11 ||
|
||||
bool DF_11_17_18 = msg.df == SSR::Downlink_Format::All_Call_Reply_11 ||
|
||||
msg.df == SSR::Downlink_Format::Extended_Squitter_17 ||
|
||||
msg.df == SSR::Downlink_Format::Extended_Squitter_Non_Transponder_18;
|
||||
return DF_11_17_18;
|
||||
@@ -271,14 +252,10 @@ std::string to_file_name(std::string_view str) {
|
||||
auto ret = std::string(str);
|
||||
// 定义允许的合法字符
|
||||
auto is_valid_char = [](char c) {
|
||||
return std::isalnum(c) || c == '_' || c == '-' ||
|
||||
c == '.'; // 允许字母、数字、下划线、连字符、点
|
||||
return std::isalnum(c) || c == '_' || c == '-' || c == '.'; // 允许字母、数字、下划线、连字符、点
|
||||
};
|
||||
// 替换非法字符为下划线 '_'
|
||||
std::transform(ret.begin(), ret.end(), ret.begin(),
|
||||
[&](char c) {
|
||||
return is_valid_char(c) ? c : '_';
|
||||
});
|
||||
std::transform(ret.begin(), ret.end(), ret.begin(), [&](char c) { return is_valid_char(c) ? c : '_'; });
|
||||
// 检查结果字符串是否全是替换字符,防止生成全是下划线的文件名
|
||||
if (ret.find_first_not_of('_') == std::string::npos) {
|
||||
return "default_file_name"; // 返回一个默认文件名
|
||||
@@ -316,11 +293,9 @@ bool Web_Server::listen(std::string_view host, int port) {
|
||||
Json::CharReaderBuilder builder;
|
||||
std::string errs;
|
||||
auto reader = builder.newCharReader();
|
||||
if (!reader->parse(jsonStr.c_str(), jsonStr.c_str() + jsonStr.size(),
|
||||
&drogon_config, &errs)) {
|
||||
if (!reader->parse(jsonStr.c_str(), jsonStr.c_str() + jsonStr.size(), &drogon_config, &errs)) {
|
||||
// 解析失败
|
||||
std::cout << "drogon 配置文件加载失败!json格式解析失败!" << jsonStr
|
||||
<< std::endl;
|
||||
std::cout << "drogon 配置文件加载失败!json格式解析失败!" << jsonStr << std::endl;
|
||||
Psc::fail_fast();
|
||||
}
|
||||
delete reader;
|
||||
@@ -336,94 +311,85 @@ bool Web_Server::listen(std::string_view host, int port) {
|
||||
}
|
||||
Web_Server& Web_Server::Post(std::string_view pattern, Handler handler) {
|
||||
drogon::app().registerHandler(
|
||||
std::string(pattern),
|
||||
[handler](const drogon::HttpRequestPtr& request,
|
||||
std::function<void(const drogon::HttpResponsePtr&)>&& callback) {
|
||||
auto resp = drogon::HttpResponse::newHttpResponse();
|
||||
resp->setContentTypeCode(drogon::CT_APPLICATION_JSON);
|
||||
handler(request, resp);
|
||||
callback(resp);
|
||||
},
|
||||
{drogon::Post}
|
||||
);
|
||||
std::string(pattern),
|
||||
[handler](const drogon::HttpRequestPtr& request, std::function<void(const drogon::HttpResponsePtr&)>&& callback) {
|
||||
auto resp = drogon::HttpResponse::newHttpResponse();
|
||||
resp->setContentTypeCode(drogon::CT_APPLICATION_JSON);
|
||||
handler(request, resp);
|
||||
callback(resp);
|
||||
},
|
||||
{drogon::Post});
|
||||
return *this;
|
||||
}
|
||||
Web_Server& Web_Server::Post_Coro(std::string_view pattern, CoroHandler handler) {
|
||||
drogon::app().registerHandler(std::string(pattern), [handler = std::move(handler)](
|
||||
const drogon::HttpRequestPtr& request,
|
||||
std::function<void(const drogon::HttpResponsePtr&)>&& callback) {
|
||||
auto resp = drogon::HttpResponse::newHttpResponse();
|
||||
resp->setContentTypeCode(drogon::CT_APPLICATION_JSON);
|
||||
drogon::async_run(
|
||||
[handler, request, resp, callback = std::move(callback)]() mutable -> drogon::Task<> {
|
||||
try {
|
||||
co_await handler(request, resp);
|
||||
}
|
||||
catch (const std::exception& error) {
|
||||
resp->setStatusCode(drogon::k500InternalServerError);
|
||||
resp->setBody(Psc::JSON::object({{"error", std::string(error.what())}}).to_json_string());
|
||||
std::terminate();
|
||||
}
|
||||
catch (...) {
|
||||
resp->setStatusCode(drogon::k500InternalServerError);
|
||||
resp->setBody(Psc::JSON::object({{"error", "unknown error"}}).to_json_string());
|
||||
std::terminate();
|
||||
}
|
||||
callback(resp);
|
||||
co_return;
|
||||
});
|
||||
},
|
||||
{drogon::Post}
|
||||
);
|
||||
drogon::app().registerHandler(
|
||||
std::string(pattern),
|
||||
[handler = std::move(handler)](const drogon::HttpRequestPtr& request,
|
||||
std::function<void(const drogon::HttpResponsePtr&)>&& callback) {
|
||||
auto resp = drogon::HttpResponse::newHttpResponse();
|
||||
resp->setContentTypeCode(drogon::CT_APPLICATION_JSON);
|
||||
drogon::async_run([handler, request, resp, callback = std::move(callback)]() mutable -> drogon::Task<> {
|
||||
try {
|
||||
co_await handler(request, resp);
|
||||
}
|
||||
catch (const std::exception& error) {
|
||||
resp->setStatusCode(drogon::k500InternalServerError);
|
||||
resp->setBody(Psc::JSON::object({{"error", std::string(error.what())}}).to_json_string());
|
||||
std::terminate();
|
||||
}
|
||||
catch (...) {
|
||||
resp->setStatusCode(drogon::k500InternalServerError);
|
||||
resp->setBody(Psc::JSON::object({{"error", "unknown error"}}).to_json_string());
|
||||
std::terminate();
|
||||
}
|
||||
callback(resp);
|
||||
co_return;
|
||||
});
|
||||
},
|
||||
{drogon::Post});
|
||||
return *this;
|
||||
}
|
||||
Web_Server& Web_Server::Get(std::string_view pattern, Handler handler) {
|
||||
drogon::app().registerHandlerViaRegex(
|
||||
std::string(pattern),
|
||||
[handler](const drogon::HttpRequestPtr& request,
|
||||
std::function<void(const drogon::HttpResponsePtr&)>&& callback) {
|
||||
auto resp = drogon::HttpResponse::newHttpResponse();
|
||||
resp->setContentTypeCode(drogon::CT_APPLICATION_JSON);
|
||||
handler(request, resp);
|
||||
callback(resp);
|
||||
},
|
||||
{drogon::Get}
|
||||
);
|
||||
std::string(pattern),
|
||||
[handler](const drogon::HttpRequestPtr& request, std::function<void(const drogon::HttpResponsePtr&)>&& callback) {
|
||||
auto resp = drogon::HttpResponse::newHttpResponse();
|
||||
resp->setContentTypeCode(drogon::CT_APPLICATION_JSON);
|
||||
handler(request, resp);
|
||||
callback(resp);
|
||||
},
|
||||
{drogon::Get});
|
||||
return *this;
|
||||
}
|
||||
Web_Server& Web_Server::Get_Coro(std::string_view pattern, CoroHandler handler) {
|
||||
drogon::app().registerHandlerViaRegex(
|
||||
std::string(pattern),
|
||||
[handler = std::move(handler)](
|
||||
const drogon::HttpRequestPtr& request,
|
||||
std::function<void(const drogon::HttpResponsePtr&)>&& callback) {
|
||||
auto resp = drogon::HttpResponse::newHttpResponse();
|
||||
resp->setContentTypeCode(drogon::CT_APPLICATION_JSON);
|
||||
drogon::async_run(
|
||||
[handler, request, resp, callback = std::move(callback)]() mutable -> drogon::Task<> {
|
||||
try {
|
||||
co_await handler(request, resp);
|
||||
}
|
||||
catch (const std::exception& error) {
|
||||
resp->setStatusCode(drogon::k500InternalServerError);
|
||||
resp->setBody(Psc::JSON::object({{"error", std::string(error.what())}}).to_json_string());
|
||||
std::terminate();
|
||||
}
|
||||
catch (...) {
|
||||
resp->setStatusCode(drogon::k500InternalServerError);
|
||||
resp->setBody(Psc::JSON::object({{"error", "unknown error"}}).to_json_string());
|
||||
std::terminate();
|
||||
}
|
||||
callback(resp);
|
||||
co_return;
|
||||
});
|
||||
},
|
||||
{drogon::Get}
|
||||
);
|
||||
std::string(pattern),
|
||||
[handler = std::move(handler)](const drogon::HttpRequestPtr& request,
|
||||
std::function<void(const drogon::HttpResponsePtr&)>&& callback) {
|
||||
auto resp = drogon::HttpResponse::newHttpResponse();
|
||||
resp->setContentTypeCode(drogon::CT_APPLICATION_JSON);
|
||||
drogon::async_run([handler, request, resp, callback = std::move(callback)]() mutable -> drogon::Task<> {
|
||||
try {
|
||||
co_await handler(request, resp);
|
||||
}
|
||||
catch (const std::exception& error) {
|
||||
resp->setStatusCode(drogon::k500InternalServerError);
|
||||
resp->setBody(Psc::JSON::object({{"error", std::string(error.what())}}).to_json_string());
|
||||
std::terminate();
|
||||
}
|
||||
catch (...) {
|
||||
resp->setStatusCode(drogon::k500InternalServerError);
|
||||
resp->setBody(Psc::JSON::object({{"error", "unknown error"}}).to_json_string());
|
||||
std::terminate();
|
||||
}
|
||||
callback(resp);
|
||||
co_return;
|
||||
});
|
||||
},
|
||||
{drogon::Get});
|
||||
return *this;
|
||||
}
|
||||
std::string
|
||||
Debug_Logger_Info_Manager::get_info(Serial_Number_Type serial_number) {
|
||||
std::string Debug_Logger_Info_Manager::get_info(Serial_Number_Type serial_number) {
|
||||
std::lock_guard g(mtx);
|
||||
std::string result;
|
||||
if (serial_number == cur_serial_number) {
|
||||
@@ -454,8 +420,7 @@ std::string inet_address_to_string(const trantor::InetAddress& addr) {
|
||||
}
|
||||
else {
|
||||
// IPv6
|
||||
auto sa6 =
|
||||
reinterpret_cast<const struct sockaddr_in6*>(addr.getSockAddr());
|
||||
auto sa6 = reinterpret_cast<const struct sockaddr_in6*>(addr.getSockAddr());
|
||||
inet_ntop(AF_INET6, &(sa6->sin6_addr), buf, sizeof(buf));
|
||||
uint16_t port = ntohs(sa6->sin6_port);
|
||||
return "[" + std::string(buf) + "]:" + std::to_string(port);
|
||||
|
||||
Reference in New Issue
Block a user