diff --git a/include/siadrive_dokan_api/siadokandrive.h b/include/siadrive_dokan_api/siadokandrive.h index 98e5935..1a4e021 100644 --- a/include/siadrive_dokan_api/siadokandrive.h +++ b/include/siadrive_dokan_api/siadokandrive.h @@ -490,9 +490,10 @@ class SIADRIVE_DOKAN_EXPORTABLE DokanSetFileAttributesW : public CEvent { public: - DokanSetFileAttributesW(const SString& cachePath) : + DokanSetFileAttributesW(const SString& cachePath, const NTSTATUS& ret) : CEvent(EventLevel::Debug), - _cachePath(cachePath) + _cachePath(cachePath), + _ret(ret) { } @@ -503,16 +504,17 @@ public: private: const SString _cachePath; + const NTSTATUS _ret; public: virtual std::shared_ptr Clone() const override { - return std::shared_ptr(new DokanSetFileAttributesW(_cachePath)); + return std::shared_ptr(new DokanSetFileAttributesW(_cachePath, _ret)); } virtual SString GetSingleLineMessage() const override { - return L"DokanSetFileAttributesW|PATH|" + _cachePath; + return L"DokanSetFileAttributesW|PATH|" + _cachePath + "|RET|" + SString::FromUInt64(_ret); } }; diff --git a/src/siadrive_api/loggingconsumer.cpp b/src/siadrive_api/loggingconsumer.cpp index 8e3fc51..02a259e 100644 --- a/src/siadrive_api/loggingconsumer.cpp +++ b/src/siadrive_api/loggingconsumer.cpp @@ -17,19 +17,23 @@ CLoggingConsumer::~CLoggingConsumer() void CLoggingConsumer::ProcessEvent(const CEvent& eventData) { - // TODO Implement rolling/max size and timestamp - FilePath logPath("logs\\siadrive.log"); - logPath.MakeAbsolute(); - FilePath(logPath).RemoveFileName().CreateDirectory(); + if (eventData.GetEventLevel() <= GetEventLevel()) + { + // TODO Implement rolling/max size and timestamp + FilePath logPath("logs\\siadrive.log"); + logPath.MakeAbsolute(); + FilePath(logPath).RemoveFileName().CreateDirectory(); - std::time_t now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); - std::stringstream ss; - ss << std::put_time(std::localtime(&now), "%F %T "); + std::time_t now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); + std::stringstream ss; + ss << std::put_time(std::localtime(&now), "%F %T "); - FILE* logFile; - if (fopen_s(&logFile, SString::ToUtf8(static_cast(logPath)).c_str(), "a+") == 0) - { - fprintf_s(logFile, SString::ToUtf8(ss.str() + eventData.GetSingleLineMessage() + "\n").c_str()); - fclose(logFile); - } + FILE* logFile; + if (fopen_s(&logFile, SString::ToUtf8(static_cast(logPath)).c_str(), "a+") == 0) + { + std::string msg = SString::ToUtf8(ss.str() + eventData.GetSingleLineMessage() + "\n"); + fwrite(&msg[0], 1, msg.length(), logFile); + fclose(logFile); + } + } } \ No newline at end of file diff --git a/src/siadrive_api/siacurl.cpp b/src/siadrive_api/siacurl.cpp index 59f6eca..505dba9 100644 --- a/src/siadrive_api/siacurl.cpp +++ b/src/siadrive_api/siacurl.cpp @@ -1,8 +1,96 @@ #include #include +#include +#include using namespace Sia::Api; +class SiaCurlBegin : + public CEvent +{ +public: + SiaCurlBegin(const bool& isPost, const SString& url) : + CEvent(EventLevel::Debug), + _type(isPost ? "POST" : "GET"), + _url(url) + { + } + +private: + SiaCurlBegin(const SString& type, const SString& url) : + CEvent(EventLevel::Debug), + _type(type), + _url(url) + { + } + +public: + virtual ~SiaCurlBegin() + { + } + +private: + const SString _type; + const SString _url; + +public: + virtual SString GetSingleLineMessage() const override + { + return L"SiaCurlBegin|" + _type + "|URL|" + _url; + } + + virtual std::shared_ptr Clone() const override + { + return std::shared_ptr(new SiaCurlBegin(_type, _url)); + } +}; + +class SiaCurlEnd : + public CEvent +{ +public: + SiaCurlEnd(const bool& isPost, const SString& url, const CURLcode& curlCode, const SiaCurlError& siaCurlError) : + CEvent(EventLevel::Debug), + _type(isPost ? "POST" : "GET"), + _url(url), + _curlCode(curlCode), + _siaCurlError(siaCurlError) + { + } + +private: + SiaCurlEnd(const SString& type, const SString& url, const CURLcode& curlCode, const SiaCurlError& siaCurlError) : + CEvent(EventLevel::Debug), + _type(type), + _url(url), + _curlCode(curlCode), + _siaCurlError(siaCurlError) + { + } + +public: + virtual ~SiaCurlEnd() + { + } + +private: + const SString _type; + const SString _url; + const CURLcode _curlCode; + const SiaCurlError _siaCurlError; + +public: + virtual SString GetSingleLineMessage() const override + { + return L"SiaCurlEnd|" + _type + +"|URL|" + _url + "|CODE|" + SString::FromInt32(_curlCode) + "|ERROR|" + _siaCurlError.GetReason(); + } + + virtual std::shared_ptr Clone() const override + { + return std::shared_ptr(new SiaCurlEnd(_type, _url, _curlCode, _siaCurlError)); + } +}; + CSiaCurl::CSiaCurl() { SetHostConfig({ L"localhost", 9980, L""}); @@ -109,6 +197,7 @@ SiaCurlError CSiaCurl::_Get(const SString& path, const HttpParameters& parameter SString result; curl_easy_setopt(curlHandle, CURLOPT_WRITEDATA, &result); + CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(SiaCurlBegin(false, url))); const CURLcode res = curl_easy_perform(curlHandle); long httpCode = 0; @@ -116,6 +205,7 @@ SiaCurlError CSiaCurl::_Get(const SString& path, const HttpParameters& parameter SiaCurlError ret = ProcessResponse(res, httpCode, result, response); curl_easy_cleanup(curlHandle); + CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(SiaCurlEnd(false, url, res, ret))); return ret; } @@ -200,6 +290,7 @@ SiaCurlError CSiaCurl::Post(const SString& path, const HttpParameters& parameter SString result; curl_easy_setopt(curlHandle, CURLOPT_WRITEDATA, &result); + CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(SiaCurlBegin(true, ConstructPath(path)))); const CURLcode res = curl_easy_perform(curlHandle); long httpCode = 0; @@ -207,6 +298,8 @@ SiaCurlError CSiaCurl::Post(const SString& path, const HttpParameters& parameter ret = ProcessResponse(res, httpCode, result, response); curl_easy_cleanup(curlHandle); + + CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(SiaCurlEnd(false, ConstructPath(path), res, ret))); } return ret; diff --git a/src/siadrive_dokan_api/siadokandrive.cpp b/src/siadrive_dokan_api/siadokandrive.cpp index a01468c..b05633a 100644 --- a/src/siadrive_dokan_api/siadokandrive.cpp +++ b/src/siadrive_dokan_api/siadokandrive.cpp @@ -471,10 +471,7 @@ private: } } - if (ret != STATUS_SUCCESS) - { - CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(DokanCreateFile(cacheFilePath, fileAttributesAndFlags, creationDisposition, genericDesiredAccess, ret))); - } + CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(DokanCreateFile(cacheFilePath, fileAttributesAndFlags, creationDisposition, genericDesiredAccess, ret))); } return ret; @@ -700,10 +697,7 @@ private: ::CloseHandle(tempHandle); } - if (ret != STATUS_SUCCESS) - { - CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(DokanGetFileInformation(openFileInfo->CacheFilePath, fileName, ret))); - } + CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(DokanGetFileInformation(openFileInfo->CacheFilePath, fileName, ret))); return ret; } @@ -1161,7 +1155,6 @@ private: NTSTATUS ret = STATUS_SUCCESS; FilePath filePath(GetCacheLocation(), fileName); - CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(DokanSetFileAttributesW(filePath))); if (!::SetFileAttributes(&filePath[0], fileAttributes)) { @@ -1169,6 +1162,7 @@ private: ret = DokanNtStatusFromWin32(error); } + CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(DokanSetFileAttributesW(filePath, ret))); return ret; }