ImagingTools Core SDK
CEventHistoryControllerComp.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// Qt includes
6#include <QtCore/QDebug>
7#include <QtCore/QThread>
8#include <QtCore/QQueue>
9#include <QtCore/QTimer>
10#include <QtCore/QMultiMap>
11#include <QtCore/QMutex>
12
13// ACF includes
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>
19
20// ImtCore includes
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>
30
31
32namespace imtlog
33{
34
35
36class CEventHistoryControllerComp:
37 public QObject,
38 public ibase::TRuntimeStatusHanderCompWrap<
39 ilog::TMessageDelegatorComp<ilog::CLoggerComponentBase>>,
40 virtual public ilog::IMessageConsumer,
41 virtual public IEventProvider,
42 virtual public imtbase::ITimeRangeProvider
43{
44 Q_OBJECT
45public:
46 typedef ibase::TRuntimeStatusHanderCompWrap<
47 ilog::TMessageDelegatorComp<ilog::CLoggerComponentBase>> BaseClass;
48
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, "");
61 I_END_COMPONENT;
62
63 CEventHistoryControllerComp();
64
65 // reimplemented (imtbase::ITimeRangeProvider)
66 virtual imtbase::CTimeRange GetTimeRange() const override;
67
68 // reimplemented (imtlog::IEventProvider)
69 virtual IEventProvider::EventContainerPtr GetEvents(
70 const IEventFilter* filterPtr = nullptr,
71 const IMessageFilterParams* filterParamsPtr = nullptr) const override;
72
73 // reimplemented (ilog::IMessageConsumer)
74 virtual bool IsMessageSupported(
75 int messageCategory = -1,
76 int messageId = -1,
77 const istd::IInformationProvider* messagePtr = NULL) const override;
78 virtual void AddMessage(const MessagePtr& messagePtr) override;
79
80 // reimplemented (ibase::TRuntimeStatusHanderCompWrap)
81 virtual void OnSystemShutdown() override;
82
83 // reimplemented (icomp::CComponentBase)
84 virtual void OnComponentCreated() override;
85
86private:
87 void InitializeHistoryController();
88 void InitializeMessagesController(int id);
89
90private Q_SLOTS:
91 void OnReadFinished(QByteArray requestId);
92
93private:
94 typedef istd::TSmartPtr<CMessagesController> MessagesControllerPtr;
95
96 enum ControllerState
97 {
98 CS_INIT = 0,
99 CS_OK,
100 CS_SHUTDOWN,
101 CS_FAILED
102 };
103
104 struct ReadRequest
105 {
106 IEventProvider::EventContainerPtr containerPtr;
107 QMultiMap<qint64, ilog::IMessageConsumer::MessagePtr> events;
108 QSet<QByteArray> readIds;
109 };
110
111private:
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;
121
122 imtbase::CTimeRange m_archiveTimeRange;
123
124 QMap<int, MessagesControllerPtr> m_controllers;
125
126 mutable QList<ReadRequest> m_requests;
127 mutable QMutex m_requestMutex;
128
129 imtlog::CEventContainer m_log;
130 mutable QMutex m_logMutex;
131};
132
133
134} // namespace imtlog
135
136