refactor
This commit is contained in:
		| @@ -24,16 +24,17 @@ | ||||
|  | ||||
| namespace repertory { | ||||
| enum class event_level { | ||||
|   critical, | ||||
|   error, | ||||
|   warn, | ||||
|   normal, | ||||
|   info, | ||||
|   debug, | ||||
|   verbose, | ||||
|   trace, | ||||
| }; | ||||
|  | ||||
| auto event_level_from_string(std::string level) -> event_level; | ||||
|  | ||||
| auto event_level_to_string(const event_level &level) -> std::string; | ||||
| auto event_level_to_string(event_level level) -> std::string; | ||||
|  | ||||
| class event { | ||||
| protected: | ||||
|   | ||||
| @@ -72,7 +72,7 @@ app_config::app_config(const provider_type &prov, | ||||
|       enable_mount_manager_(false), | ||||
| #endif | ||||
|       enable_remote_mount_(false), | ||||
|       event_level_(event_level::normal), | ||||
|       event_level_(event_level::info), | ||||
|       eviction_delay_mins_(default_eviction_delay_mins), | ||||
|       eviction_uses_accessed_time_(false), | ||||
|       high_freq_interval_secs_(default_high_freq_interval_secs), | ||||
| @@ -195,72 +195,71 @@ auto app_config::default_rpc_port(const provider_type &prov) -> std::uint16_t { | ||||
|  | ||||
| auto app_config::get_json() const -> json { | ||||
|   json ret = { | ||||
|     {"ApiAuth", api_auth_}, | ||||
|     {"ApiPort", api_port_}, | ||||
|     {"ApiUser", api_user_}, | ||||
|     {"ChunkDownloaderTimeoutSeconds", download_timeout_secs_}, | ||||
|     {"EnableChunkDownloaderTimeout", enable_chunk_downloader_timeout_}, | ||||
|     {"EnableCommDurationEvents", enable_comm_duration_events_}, | ||||
|     {"EnableDriveEvents", enable_drive_events_}, | ||||
|       {"ApiAuth", api_auth_}, | ||||
|       {"ApiPort", api_port_}, | ||||
|       {"ApiUser", api_user_}, | ||||
|       {"ChunkDownloaderTimeoutSeconds", download_timeout_secs_}, | ||||
|       {"EnableChunkDownloaderTimeout", enable_chunk_downloader_timeout_}, | ||||
|       {"EnableCommDurationEvents", enable_comm_duration_events_}, | ||||
|       {"EnableDriveEvents", enable_drive_events_}, | ||||
| #if defined(_WIN32) | ||||
|     {"EnableMountManager", enable_mount_manager_}, | ||||
|       {"EnableMountManager", enable_mount_manager_}, | ||||
| #endif | ||||
|     {"EnableMaxCacheSize", enable_max_cache_size_}, | ||||
|     {"EncryptConfig", | ||||
|      { | ||||
|          {"EncryptionToken", encrypt_config_.encryption_token}, | ||||
|          {"Path", encrypt_config_.path}, | ||||
|      }}, | ||||
|     {"EventLevel", event_level_to_string(event_level_)}, | ||||
|     {"EvictionDelayMinutes", eviction_delay_mins_}, | ||||
|     {"EvictionUsesAccessedTime", eviction_uses_accessed_time_}, | ||||
|     {"HighFreqIntervalSeconds", high_freq_interval_secs_}, | ||||
|     {"HostConfig", | ||||
|      { | ||||
|          {"AgentString", hc_.agent_string}, | ||||
|          {"ApiPassword", hc_.api_password}, | ||||
|          {"ApiPort", hc_.api_port}, | ||||
|          {"HostNameOrIp", hc_.host_name_or_ip}, | ||||
|          {"TimeoutMs", hc_.timeout_ms}, | ||||
|      }}, | ||||
|     {"LowFreqIntervalSeconds", low_freq_interval_secs_}, | ||||
|     {"MaxCacheSizeBytes", max_cache_size_bytes_}, | ||||
|     {"MaxUploadCount", max_upload_count_}, | ||||
|     {"OnlineCheckRetrySeconds", online_check_retry_secs_}, | ||||
|     {"OrphanedFileRetentionDays", orphaned_file_retention_days_}, | ||||
|     {"PreferredDownloadType", preferred_download_type_}, | ||||
|     {"ReadAheadCount", read_ahead_count_}, | ||||
|     { | ||||
|         "RemoteMount", | ||||
|         { | ||||
|             {"EnableRemoteMount", enable_remote_mount_}, | ||||
|             {"IsRemoteMount", is_remote_mount_}, | ||||
|             {"RemoteClientPoolSize", remote_client_pool_size_}, | ||||
|             {"RemoteMaxConnections", remote_max_connections_}, | ||||
|             {"RemoteHostNameOrIp", remote_host_name_or_ip_}, | ||||
|             {"RemotePort", remote_port_}, | ||||
|             {"RemoteReceiveTimeoutSeconds", remote_receive_timeout_secs_}, | ||||
|             {"RemoteSendTimeoutSeconds", remote_send_timeout_secs_}, | ||||
|             {"RemoteToken", remote_token_}, | ||||
|         }, | ||||
|     }, | ||||
|     {"RetryReadCount", retry_read_count_}, | ||||
|     {"RingBufferFileSize", ring_buffer_file_size_}, | ||||
|     {"S3Config", | ||||
|      { | ||||
|          {"AccessKey", s3_config_.access_key}, | ||||
|          {"Bucket", s3_config_.bucket}, | ||||
|          {"CacheTimeoutSeconds", s3_config_.cache_timeout_secs}, | ||||
|          {"EncryptionToken", s3_config_.encryption_token}, | ||||
|          {"Region", s3_config_.region}, | ||||
|          {"SecretKey", s3_config_.secret_key}, | ||||
|          {"TimeoutMs", s3_config_.timeout_ms}, | ||||
|          {"URL", s3_config_.url}, | ||||
|          {"UsePathStyle", s3_config_.use_path_style}, | ||||
|          {"UseRegionInURL", s3_config_.use_region_in_url}, | ||||
|      }}, | ||||
|     {"Version", version_} | ||||
|   }; | ||||
|       {"EnableMaxCacheSize", enable_max_cache_size_}, | ||||
|       {"EncryptConfig", | ||||
|        { | ||||
|            {"EncryptionToken", encrypt_config_.encryption_token}, | ||||
|            {"Path", encrypt_config_.path}, | ||||
|        }}, | ||||
|       {"EventLevel", event_level_to_string(event_level_)}, | ||||
|       {"EvictionDelayMinutes", eviction_delay_mins_}, | ||||
|       {"EvictionUsesAccessedTime", eviction_uses_accessed_time_}, | ||||
|       {"HighFreqIntervalSeconds", high_freq_interval_secs_}, | ||||
|       {"HostConfig", | ||||
|        { | ||||
|            {"AgentString", hc_.agent_string}, | ||||
|            {"ApiPassword", hc_.api_password}, | ||||
|            {"ApiPort", hc_.api_port}, | ||||
|            {"HostNameOrIp", hc_.host_name_or_ip}, | ||||
|            {"TimeoutMs", hc_.timeout_ms}, | ||||
|        }}, | ||||
|       {"LowFreqIntervalSeconds", low_freq_interval_secs_}, | ||||
|       {"MaxCacheSizeBytes", max_cache_size_bytes_}, | ||||
|       {"MaxUploadCount", max_upload_count_}, | ||||
|       {"OnlineCheckRetrySeconds", online_check_retry_secs_}, | ||||
|       {"OrphanedFileRetentionDays", orphaned_file_retention_days_}, | ||||
|       {"PreferredDownloadType", preferred_download_type_}, | ||||
|       {"ReadAheadCount", read_ahead_count_}, | ||||
|       { | ||||
|           "RemoteMount", | ||||
|           { | ||||
|               {"EnableRemoteMount", enable_remote_mount_}, | ||||
|               {"IsRemoteMount", is_remote_mount_}, | ||||
|               {"RemoteClientPoolSize", remote_client_pool_size_}, | ||||
|               {"RemoteMaxConnections", remote_max_connections_}, | ||||
|               {"RemoteHostNameOrIp", remote_host_name_or_ip_}, | ||||
|               {"RemotePort", remote_port_}, | ||||
|               {"RemoteReceiveTimeoutSeconds", remote_receive_timeout_secs_}, | ||||
|               {"RemoteSendTimeoutSeconds", remote_send_timeout_secs_}, | ||||
|               {"RemoteToken", remote_token_}, | ||||
|           }, | ||||
|       }, | ||||
|       {"RetryReadCount", retry_read_count_}, | ||||
|       {"RingBufferFileSize", ring_buffer_file_size_}, | ||||
|       {"S3Config", | ||||
|        { | ||||
|            {"AccessKey", s3_config_.access_key}, | ||||
|            {"Bucket", s3_config_.bucket}, | ||||
|            {"CacheTimeoutSeconds", s3_config_.cache_timeout_secs}, | ||||
|            {"EncryptionToken", s3_config_.encryption_token}, | ||||
|            {"Region", s3_config_.region}, | ||||
|            {"SecretKey", s3_config_.secret_key}, | ||||
|            {"TimeoutMs", s3_config_.timeout_ms}, | ||||
|            {"URL", s3_config_.url}, | ||||
|            {"UsePathStyle", s3_config_.use_path_style}, | ||||
|            {"UseRegionInURL", s3_config_.use_region_in_url}, | ||||
|        }}, | ||||
|       {"Version", version_}}; | ||||
|  | ||||
|   if (prov_ == provider_type::encrypt) { | ||||
|     ret.erase("ChunkDownloaderTimeoutSeconds"); | ||||
|   | ||||
| @@ -680,7 +680,7 @@ void fuse_base::raise_fuse_event(std::string function_name, | ||||
|   } | ||||
|  | ||||
|   if (((config_.get_event_level() >= fuse_event::level) && (ret != 0)) || | ||||
|       (config_.get_event_level() >= event_level::verbose)) { | ||||
|       (config_.get_event_level() >= event_level::trace)) { | ||||
|     event_system::instance().raise<fuse_event>( | ||||
|         utils::string::right_trim(function_name, '_'), api_path, ret); | ||||
|   } | ||||
|   | ||||
| @@ -45,7 +45,7 @@ namespace repertory::remote_fuse { | ||||
|   if (config_.get_enable_drive_events() &&                                     \ | ||||
|       (((config_.get_event_level() >= remote_fuse_server_event::level) &&      \ | ||||
|         (ret < 0)) ||                                                          \ | ||||
|        (config_.get_event_level() >= event_level::verbose)))                   \ | ||||
|        (config_.get_event_level() >= event_level::trace)))                     \ | ||||
|   event_system::instance().raise<remote_fuse_server_event>(func, file, ret) | ||||
|  | ||||
| // clang-format off | ||||
|   | ||||
| @@ -34,7 +34,7 @@ namespace repertory::remote_winfsp { | ||||
|   if (config_.get_enable_drive_events() &&                                     \ | ||||
|       (((config_.get_event_level() >= remote_winfsp_client_event::level) &&    \ | ||||
|         (ret != STATUS_SUCCESS)) ||                                            \ | ||||
|        (config_.get_event_level() >= event_level::verbose)))                   \ | ||||
|        (config_.get_event_level() >= event_level::trace)))                     \ | ||||
|   event_system::instance().raise<remote_winfsp_client_event>(func, file, ret) | ||||
|  | ||||
| // clang-format off | ||||
|   | ||||
| @@ -52,7 +52,7 @@ namespace repertory::remote_winfsp { | ||||
|   if (config_.get_enable_drive_events() &&                                     \ | ||||
|       (((config_.get_event_level() >= remote_winfsp_server_event::level) &&    \ | ||||
|         (ret != STATUS_SUCCESS)) ||                                            \ | ||||
|        (config_.get_event_level() >= event_level::verbose)))                   \ | ||||
|        (config_.get_event_level() >= event_level::trace)))                     \ | ||||
|   event_system::instance().raise<remote_winfsp_server_event>(func, file, ret) | ||||
|  | ||||
| // clang-format off | ||||
|   | ||||
| @@ -51,7 +51,7 @@ E_SIMPLE3(winfsp_event, debug, true, | ||||
|   if (config_.get_enable_drive_events() &&                                     \ | ||||
|       (((config_.get_event_level() >= winfsp_event::level) &&                  \ | ||||
|         (ret != STATUS_SUCCESS)) ||                                            \ | ||||
|        (config_.get_event_level() >= event_level::verbose)))                   \ | ||||
|        (config_.get_event_level() >= event_level::trace)))                     \ | ||||
|   event_system::instance().raise<winfsp_event>(func, file, ret) | ||||
|  | ||||
| winfsp_drive::winfsp_service::winfsp_service( | ||||
|   | ||||
| @@ -21,6 +21,11 @@ | ||||
| */ | ||||
| #include "events/consumers/logging_consumer.hpp" | ||||
|  | ||||
| #include "events/events.hpp" | ||||
| #include "spdlog/spdlog.h" | ||||
| #include "spdlog/async.h" | ||||
| #include "spdlog/sinks/rotating_file_sink.h" | ||||
| #include "spdlog/sinks/stdout_color_sinks.h" | ||||
| #include "utils/path_utils.hpp" | ||||
|  | ||||
| namespace repertory { | ||||
| @@ -32,21 +37,45 @@ logging_consumer::logging_consumer(event_level level, std::string log_directory) | ||||
|                     [this](const event_level_changed &changed) { | ||||
|                       event_level_ = event_level_from_string( | ||||
|                           changed.get_new_event_level().get<std::string>()); | ||||
|                       switch (event_level_) {} | ||||
|                     }); | ||||
|  | ||||
|   spdlog::init_thread_pool(8192, 1); | ||||
|   std::vector<spdlog::sink_ptr> sinks{ | ||||
|       std::make_shared<spdlog::sinks::stdout_color_sink_mt>(), | ||||
|       std::make_shared<spdlog::sinks::rotating_file_sink_mt>( | ||||
|           utils::path::combine(log_directory_, {"repertory.log"}), | ||||
|           MAX_LOG_FILE_SIZE, MAX_LOG_FILES), | ||||
|   }; | ||||
|  | ||||
|   spdlog::register_logger(std::make_shared<spdlog::async_logger>( | ||||
|       "logger", sinks.begin(), sinks.end(), spdlog::thread_pool(), | ||||
|       spdlog::async_overflow_policy::block)); | ||||
| } | ||||
|  | ||||
| logging_consumer::~logging_consumer() { E_CONSUMER_RELEASE(); } | ||||
|  | ||||
| void logging_consumer::process_event(const event &event) { | ||||
|   /* auto msg = ([&]() -> std::string { | ||||
|     struct tm local_time {}; | ||||
|     utils::get_local_time_now(local_time); | ||||
|  | ||||
|     std::stringstream ss; | ||||
|     ss << std::put_time(&local_time, "%F %T") << "|" | ||||
|        << event_level_to_string(event->get_event_level()).c_str() << "|" | ||||
|        << event->get_single_line().c_str() << std::endl; | ||||
|     return ss.str(); | ||||
|   })(); */ | ||||
|   switch (event.get_event_level()) { | ||||
|   case event_level::critical: | ||||
|     spdlog::critical(event.get_single_line()); | ||||
|     break; | ||||
|   case event_level::error: | ||||
|     spdlog::error(event.get_single_line()); | ||||
|     break; | ||||
|   case event_level::warn: | ||||
|     spdlog::warn(event.get_single_line()); | ||||
|     break; | ||||
|   case event_level::info: | ||||
|     spdlog::info(event.get_single_line()); | ||||
|     break; | ||||
|   case event_level::debug: | ||||
|     spdlog::debug(event.get_single_line()); | ||||
|     break; | ||||
|   case event_level::trace: | ||||
|   default: | ||||
|     spdlog::trace(event.get_single_line()); | ||||
|     break; | ||||
|   } | ||||
| } | ||||
| } // namespace repertory | ||||
|   | ||||
| @@ -26,34 +26,49 @@ | ||||
| namespace repertory { | ||||
| auto event_level_from_string(std::string level) -> event_level { | ||||
|   level = utils::string::to_lower(level); | ||||
|   if (level == "critical" || level == "event_level::critical") { | ||||
|     return event_level::critical; | ||||
|   } | ||||
|  | ||||
|   if (level == "debug" || level == "event_level::debug") { | ||||
|     return event_level::debug; | ||||
|   } else if (level == "warn" || level == "event_level::warn") { | ||||
|     return event_level::warn; | ||||
|   } else if (level == "normal" || level == "event_level::normal") { | ||||
|     return event_level::normal; | ||||
|   } else if (level == "error" || level == "event_level::error") { | ||||
|     return event_level::error; | ||||
|   } else if (level == "verbose" || level == "event_level::verbose") { | ||||
|     return event_level::verbose; | ||||
|   } | ||||
|   return event_level::normal; | ||||
|  | ||||
|   if (level == "warn" || level == "event_level::warn") { | ||||
|     return event_level::warn; | ||||
|   } | ||||
|  | ||||
|   if (level == "info" || level == "event_level::info") { | ||||
|     return event_level::info; | ||||
|   } | ||||
|  | ||||
|   if (level == "error" || level == "event_level::error") { | ||||
|     return event_level::error; | ||||
|   } | ||||
|  | ||||
|   if (level == "trace" || level == "event_level::trace") { | ||||
|     return event_level::trace; | ||||
|   } | ||||
|  | ||||
|   return event_level::info; | ||||
| } | ||||
|  | ||||
| auto event_level_to_string(const event_level &level) -> std::string { | ||||
| auto event_level_to_string(event_level level) -> std::string { | ||||
|   switch (level) { | ||||
|   case event_level::critical: | ||||
|     return "critical"; | ||||
|   case event_level::debug: | ||||
|     return "debug"; | ||||
|   case event_level::error: | ||||
|     return "error"; | ||||
|   case event_level::normal: | ||||
|     return "normal"; | ||||
|   case event_level::info: | ||||
|     return "info"; | ||||
|   case event_level::warn: | ||||
|     return "warn"; | ||||
|   case event_level::verbose: | ||||
|     return "verbose"; | ||||
|   case event_level::trace: | ||||
|     return "trace"; | ||||
|   default: | ||||
|     return "normal"; | ||||
|     return "info"; | ||||
|   } | ||||
| } | ||||
| } // namespace repertory | ||||
|   | ||||
| @@ -38,12 +38,12 @@ void polling::frequency_thread( | ||||
|         if (kv.second.freq == freq) { | ||||
|           futures.emplace_back( | ||||
|               std::async(std::launch::async, [this, &freq, kv]() -> void { | ||||
|                 if (config_->get_event_level() == event_level::verbose || | ||||
|                 if (config_->get_event_level() == event_level::trace || | ||||
|                     freq != frequency::second) { | ||||
|                   event_system::instance().raise<polling_item_begin>(kv.first); | ||||
|                 } | ||||
|                 kv.second.action(); | ||||
|                 if (config_->get_event_level() == event_level::verbose || | ||||
|                 if (config_->get_event_level() == event_level::trace || | ||||
|                     freq != frequency::second) { | ||||
|                   event_system::instance().raise<polling_item_end>(kv.first); | ||||
|                 } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user