szaszm commented on a change in pull request #741: MINIFICPP-1139 Implemented.
URL: https://github.com/apache/nifi-minifi-cpp/pull/741#discussion_r383269381
##########
File path: extensions/windows-event-log/ConsumeWindowsEventLog.cpp
##########
@@ -248,21 +239,119 @@ void ConsumeWindowsEventLog::onSchedule(const
std::shared_ptr<core::ProcessConte
}
}
- if (subscriptionHandle_) {
- logger_->log_error("Processor already subscribed to Event Log, expected
cleanup to unsubscribe.");
- } else {
- sessionFactory_ = sessionFactory;
+ context->getProperty(Channel.getName(), channel_);
+ wstrChannel_ = std::wstring(channel_.begin(), channel_.end());
+
+ std::string query;
+ context->getProperty(Query.getName(), query);
+ wstrQuery_ = std::wstring(query.begin(), query.end());
- subscribe(context);
+ if (!pBookmark_) {
+ std::string bookmarkDir;
+ context->getProperty(BookmarkRootDirectory.getName(), bookmarkDir);
+ if (bookmarkDir.empty()) {
+ logger_->log_error("State Directory is empty");
+ return;
+ }
+ pBookmark_ = std::make_unique<Bookmark>(wstrChannel_, wstrQuery_,
bookmarkDir, getUUIDStr(), logger_);
+ if (!*pBookmark_) {
+ pBookmark_.reset();
+ return;
+ }
}
+
+ context->getProperty(MaxBufferSize.getName(), maxBufferSize_);
+ logger_->log_debug("ConsumeWindowsEventLog: maxBufferSize_ %lld",
maxBufferSize_);
+
+ provenanceUri_ = "winlog://" + computerName_ + "/" + channel_ + "?" + query;
}
-void ConsumeWindowsEventLog::onTrigger(const
std::shared_ptr<core::ProcessContext> &context, const
std::shared_ptr<core::ProcessSession> &session) {
- if (!subscriptionHandle_) {
- if (!subscribe(context)) {
- context->yield();
+void ConsumeWindowsEventLog::processEventsAfterBookmark(core::ProcessSession&
session) {
+ // External loop is used in case if there are new events while the events
after bookmark are processed.
+ bool hasEvent{};
+ do {
+ hasEvent = false;
+
+ auto hEventResults = EvtQuery(0, wstrChannel_.c_str(), wstrQuery_.c_str(),
EvtQueryChannelPath);
+ if (!hEventResults) {
+ logger_->log_error("!EvtQuery error: %d.", GetLastError());
return;
}
+ const utils::ScopeGuard guard_hEventResults([hEventResults]() {
EvtClose(hEventResults); });
+
+ if (!EvtSeek(hEventResults, 1, pBookmark_->bookmarkHandle(), 0,
EvtSeekRelativeToBookmark)) {
+ logger_->log_error("!EvtSeek error: %d.", GetLastError());
+ return;
+ }
Review comment:
There seems to be some code duplication with `Bookmark`. Can we extract the
common code and reuse it without duplication?
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services