2019-06-14 14:00:37 +00:00
|
|
|
#include "OwnSplitChannel.h"
|
2018-06-15 17:32:35 +00:00
|
|
|
|
2019-06-14 14:00:37 +00:00
|
|
|
#include <iostream>
|
2018-06-15 17:32:35 +00:00
|
|
|
#include <Core/Block.h>
|
2019-06-14 14:00:37 +00:00
|
|
|
#include <Interpreters/InternalTextLogsQueue.h>
|
|
|
|
#include <sys/time.h>
|
2018-06-15 17:32:35 +00:00
|
|
|
#include <Poco/Message.h>
|
2019-06-14 14:00:37 +00:00
|
|
|
#include <Common/CurrentThread.h>
|
|
|
|
#include <Common/DNSResolver.h>
|
2019-04-17 14:53:54 +00:00
|
|
|
#include <common/getThreadNumber.h>
|
2018-06-15 17:32:35 +00:00
|
|
|
|
|
|
|
|
|
|
|
namespace DB
|
|
|
|
{
|
|
|
|
void OwnSplitChannel::log(const Poco::Message & msg)
|
|
|
|
{
|
|
|
|
auto logs_queue = CurrentThread::getInternalTextLogsQueue();
|
|
|
|
|
|
|
|
if (channels.empty() && (logs_queue == nullptr || msg.getPriority() > logs_queue->max_priority))
|
|
|
|
return;
|
|
|
|
|
2019-07-19 07:44:18 +00:00
|
|
|
if (auto masker = sensitive_data_masker.load())
|
2019-06-20 07:17:21 +00:00
|
|
|
{
|
|
|
|
auto message_text = msg.getText();
|
2019-07-19 07:44:18 +00:00
|
|
|
auto matches = masker->wipeSensitiveData(message_text);
|
2019-06-20 07:17:21 +00:00
|
|
|
if (matches > 0)
|
|
|
|
{
|
|
|
|
logSplit({msg, message_text}); // we will continue with the copy of original message with text modified
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
logSplit(msg);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void OwnSplitChannel::logSplit(const Poco::Message & msg)
|
|
|
|
{
|
2018-06-15 17:32:35 +00:00
|
|
|
ExtendedLogMessage msg_ext = ExtendedLogMessage::getFrom(msg);
|
|
|
|
|
|
|
|
/// Log data to child channels
|
|
|
|
for (auto & channel : channels)
|
|
|
|
{
|
|
|
|
if (channel.second)
|
|
|
|
channel.second->logExtended(msg_ext); // extended child
|
|
|
|
else
|
|
|
|
channel.first->log(msg); // ordinary child
|
|
|
|
}
|
|
|
|
|
2019-06-20 07:17:21 +00:00
|
|
|
auto logs_queue = CurrentThread::getInternalTextLogsQueue();
|
|
|
|
|
2018-06-15 17:32:35 +00:00
|
|
|
/// Log to "TCP queue" if message is not too noisy
|
|
|
|
if (logs_queue && msg.getPriority() <= logs_queue->max_priority)
|
|
|
|
{
|
|
|
|
MutableColumns columns = InternalTextLogsQueue::getSampleColumns();
|
|
|
|
|
|
|
|
size_t i = 0;
|
2018-10-22 08:54:54 +00:00
|
|
|
columns[i++]->insert(msg_ext.time_seconds);
|
|
|
|
columns[i++]->insert(msg_ext.time_microseconds);
|
2018-06-15 17:32:35 +00:00
|
|
|
columns[i++]->insert(DNSResolver::instance().getHostName());
|
|
|
|
columns[i++]->insert(msg_ext.query_id);
|
2018-10-22 08:54:54 +00:00
|
|
|
columns[i++]->insert(msg_ext.thread_number);
|
|
|
|
columns[i++]->insert(Int64(msg.getPriority()));
|
2018-06-15 17:32:35 +00:00
|
|
|
columns[i++]->insert(msg.getSource());
|
|
|
|
columns[i++]->insert(msg.getText());
|
|
|
|
|
|
|
|
logs_queue->emplace(std::move(columns));
|
|
|
|
}
|
2018-06-20 15:21:42 +00:00
|
|
|
|
|
|
|
/// TODO: Also log to system.internal_text_log table
|
2018-06-15 17:32:35 +00:00
|
|
|
}
|
|
|
|
|
2019-06-20 07:17:21 +00:00
|
|
|
|
|
|
|
void OwnSplitChannel::setMasker(DB::SensitiveDataMasker * _sensitive_data_masker)
|
|
|
|
{
|
2019-07-19 07:44:18 +00:00
|
|
|
sensitive_data_masker.store(_sensitive_data_masker);
|
2019-06-20 07:17:21 +00:00
|
|
|
}
|
|
|
|
|
2018-06-15 17:32:35 +00:00
|
|
|
void OwnSplitChannel::addChannel(Poco::AutoPtr<Poco::Channel> channel)
|
|
|
|
{
|
|
|
|
channels.emplace_back(std::move(channel), dynamic_cast<ExtendedLogChannel *>(channel.get()));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|