6#include <QtCore/QDebug>
7#include <QtCore/QThread>
8#include <QtCore/QQueue>
9#include <QtCore/QTimer>
10#include <QtCore/QMultiMap>
11#include <QtCore/QMutex>
14#include <iser/IVersionInfo.h>
15#include <ifile/IFileNameParam.h>
16#include <ilog/TLoggerCompWrap.h>
17#include <ilog/TMessageDelegatorComp.h>
18#include <ibase/TRuntimeStatusHanderCompWrap.h>
21#include <imtbase/IObjectCollection.h>
22#include <imtbase/ITimeRangeProvider.h>
23#include <imtfile/IFileCompression.h>
24#include <imtlog/IGroupMessageIdsProvider.h>
25#include <imtlog/IEventProvider.h>
26#include <imtlog/IMessagesControllerParamsProvider.h>
27#include <imtlog/CEventContainer.h>
28#include <imtlog/CEventHistoryResultContainer.h>
29#include <imtlog/CMessagesController.h>
36class CEventHistoryControllerComp:
38 public ibase::TRuntimeStatusHanderCompWrap<
39 ilog::TMessageDelegatorComp<ilog::CLoggerComponentBase>>,
40 virtual public ilog::IMessageConsumer,
41 virtual public IEventProvider,
42 virtual public imtbase::ITimeRangeProvider
46 typedef ibase::TRuntimeStatusHanderCompWrap<
47 ilog::TMessageDelegatorComp<ilog::CLoggerComponentBase>> BaseClass;
49 I_BEGIN_COMPONENT(CEventHistoryControllerComp)
50 I_REGISTER_INTERFACE(ilog::IMessageConsumer);
51 I_REGISTER_INTERFACE(IEventProvider);
52 I_REGISTER_INTERFACE(imtbase::ITimeRangeProvider);
53 I_REGISTER_INTERFACE(IGroupMessageIdsProvider);
54 I_ASSIGN(m_defaultMaxContainerMessageCountAttrPtr,
"DefaultMaxContainerMessageCount",
"Default max message count stored in container",
true, 1000);
55 I_ASSIGN(m_defaultContainerSavingPeriodAttrPtr,
"DefaultContainerSavingPeriod",
"Default period in seconds of saving the container until the maximum number of messages is reached",
true, 60);
56 I_ASSIGN(m_defaultContainerCachingTimeAttrPtr,
"ContainerCachingTime",
"The time the container was in the cache after closing",
true, 3600);
57 I_ASSIGN(m_logFolderCompPtr,
"LogFolder",
"Path to the event history folder",
true,
"");
58 I_ASSIGN(m_compressorCompPtr,
"FileCompressor",
"File compressor",
false,
"");
59 I_ASSIGN(m_versionInfoCompPtr,
"VersionInfo",
"Version info",
true,
"VersionInfo");
60 I_ASSIGN(m_messagesControllerParamsProviderCompPtr,
"MessagesControllerParamsProvider",
"Message controller params provider",
false,
"");
63 CEventHistoryControllerComp();
66 virtual imtbase::CTimeRange GetTimeRange()
const override;
69 virtual IEventProvider::EventContainerPtr GetEvents(
70 const IEventFilter* filterPtr =
nullptr,
71 const IMessageFilterParams* filterParamsPtr =
nullptr)
const override;
74 virtual bool IsMessageSupported(
75 int messageCategory = -1,
77 const istd::IInformationProvider* messagePtr = NULL)
const override;
78 virtual void AddMessage(
const MessagePtr& messagePtr)
override;
81 virtual void OnSystemShutdown()
override;
84 virtual void OnComponentCreated()
override;
87 void InitializeHistoryController();
88 void InitializeMessagesController(
int id);
91 void OnReadFinished(QByteArray requestId);
94 typedef istd::TSmartPtr<CMessagesController> MessagesControllerPtr;
106 IEventProvider::EventContainerPtr containerPtr;
107 QMultiMap<qint64, ilog::IMessageConsumer::MessagePtr> events;
108 QSet<QByteArray> readIds;
112 I_ATTR(
int, m_defaultMaxContainerMessageCountAttrPtr);
113 I_ATTR(
int, m_defaultContainerSavingPeriodAttrPtr);
114 I_ATTR(
int, m_defaultContainerCachingTimeAttrPtr);
115 I_REF(ifile::IFileNameParam, m_logFolderCompPtr);
116 I_REF(imtfile::IFileCompression, m_compressorCompPtr);
117 I_REF(iser::IVersionInfo, m_versionInfoCompPtr);
118 I_REF(IMessagesControllerParamsProvider, m_messagesControllerParamsProviderCompPtr);
119 QDateTime m_systemStartTime;
120 ControllerState m_controllerState;
122 imtbase::CTimeRange m_archiveTimeRange;
124 QMap<int, MessagesControllerPtr> m_controllers;
126 mutable QList<ReadRequest> m_requests;
127 mutable QMutex m_requestMutex;
129 imtlog::CEventContainer m_log;
130 mutable QMutex m_logMutex;