Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
LoggingInterceptor.cpp
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4#include "Stroika/Frameworks/StroikaPreComp.h"
5
7#include "Stroika/Foundation/IO/Network/HTTP/Exception.h"
8
9#include "LoggingInterceptor.h"
10
11using namespace Stroika::Foundation;
13using namespace Stroika::Foundation::Execution;
14using namespace Stroika::Foundation::Memory;
15
16using namespace Stroika::Frameworks;
17using namespace Stroika::Frameworks::WebServer;
18
19/*
20 ********************************************************************************
21 ******************************* WebServer::ILogHandler *************************
22 ********************************************************************************
23 */
24shared_ptr<ILogHandler::MessageInstance> ILogHandler::Started (Message& m)
25{
26 return make_shared<MessageInstance> (m, Time::GetTickCount ());
27}
28
29/*
30 ********************************************************************************
31 *********************** WebServer::LoggingInterceptor **************************
32 ********************************************************************************
33 */
34struct LoggingInterceptor::Rep_ : Interceptor::_IRep {
35 Rep_ (const shared_ptr<ILogHandler>& logger)
36 : fLogger_{logger}
37 {
38 }
39 virtual void HandleFault (Message& m, [[maybe_unused]] const exception_ptr& e) const noexcept override
40 {
41 shared_ptr<ILogHandler::MessageInstance> logID;
42 {
43 auto rwLock = fOngoingMessages_.rwget ();
44 Assert (rwLock->Lookup (&m));
45 logID = *rwLock->Lookup (&m);
46 rwLock->Remove (&m);
47 }
48 fLogger_->Completed (logID);
49 }
50 virtual void HandleMessage (Message& m) const override
51 {
52 shared_ptr<ILogHandler::MessageInstance> logID = fLogger_->Started (m);
53 Assert (not fOngoingMessages_->Lookup (&m).has_value ());
54 fOngoingMessages_.rwget ().rwref ().Add (&m, logID);
55 }
56 virtual void CompleteNormally (Message& m) const override
57 {
58 shared_ptr<ILogHandler::MessageInstance> logID;
59 {
60 auto rwLock = fOngoingMessages_.rwget ();
61 Assert (rwLock->Lookup (&m));
62 logID = *rwLock->Lookup (&m);
63 rwLock->Remove (&m);
64 }
65 fLogger_->Completed (logID);
66 }
67 virtual String ToString () const override
68 {
69 return "LoggingInterceptor"sv;
70 }
71 shared_ptr<ILogHandler> fLogger_;
73};
74
75LoggingInterceptor::LoggingInterceptor (const shared_ptr<ILogHandler>& logger)
76 : inherited{make_shared<Rep_> (logger)}
77{
78}
String is like std::u32string, except it is much easier to use, often much more space efficient,...
Definition String.h:201
Wrap any object with Synchronized<> and it can be used similarly to the base type,...
STRING_TYPE ToString(FLOAT_TYPE f, const ToStringOptions &options={})