mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
logging/WriterFrontend: Add LogWriteHeader as member
The header captures the enum values as well as the fields
This commit is contained in:
parent
f5d4526eac
commit
3dd1f8d38a
3 changed files with 38 additions and 20 deletions
|
@ -536,11 +536,11 @@ Manager::WriterInfo* Manager::FindWriter(WriterFrontend* writer) {
|
|||
}
|
||||
|
||||
bool Manager::CompareFields(const Filter* filter, const WriterFrontend* writer) {
|
||||
if ( filter->num_fields != writer->NumFields() )
|
||||
if ( filter->num_fields != static_cast<int>(writer->GetFields().size()) )
|
||||
return false;
|
||||
|
||||
for ( int i = 0; i < filter->num_fields; ++i )
|
||||
if ( filter->fields[i]->type != writer->Fields()[i]->type )
|
||||
if ( filter->fields[i]->type != writer->GetFields()[i].type )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
@ -1779,8 +1779,13 @@ void Manager::SendAllWritersTo(const broker::endpoint_info& ei) {
|
|||
for ( Stream::WriterMap::iterator i = stream->writers.begin(); i != stream->writers.end(); i++ ) {
|
||||
WriterFrontend* writer = i->second->writer;
|
||||
const auto& writer_val = et->GetEnumVal(i->first.first);
|
||||
broker_mgr->PublishLogCreate((*s)->id, writer_val.get(), *i->second->info, writer->NumFields(),
|
||||
writer->Fields(), ei);
|
||||
|
||||
std::vector<const threading::Field*> fields(writer->GetFields().size());
|
||||
for ( size_t i = 0; i < writer->GetFields().size(); i++ )
|
||||
fields[i] = &writer->GetFields()[i];
|
||||
|
||||
broker_mgr->PublishLogCreate((*s)->id, writer_val.get(), *i->second->info, fields.size(), fields.data(),
|
||||
ei);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -90,10 +90,11 @@ private:
|
|||
WriterFrontend::WriterFrontend(const WriterBackend::WriterInfo& arg_info, EnumVal* arg_stream, EnumVal* arg_writer,
|
||||
bool arg_local, bool arg_remote)
|
||||
: write_buffer(detail::WriteBuffer(BifConst::Log::write_buffer_size)) {
|
||||
stream = arg_stream;
|
||||
writer = arg_writer;
|
||||
Ref(stream);
|
||||
Ref(writer);
|
||||
// The header's fields are initialized in Init()
|
||||
header = detail::LogWriteHeader{{zeek::NewRef{}, arg_stream},
|
||||
{zeek::NewRef{}, arg_writer},
|
||||
arg_info.filter_name,
|
||||
arg_info.path};
|
||||
|
||||
disabled = initialized = false;
|
||||
buf = true;
|
||||
|
@ -108,7 +109,7 @@ WriterFrontend::WriterFrontend(const WriterBackend::WriterInfo& arg_info, EnumVa
|
|||
name = util::copy_string(util::fmt("%s/%s", arg_info.path, w));
|
||||
|
||||
if ( local ) {
|
||||
backend = log_mgr->CreateBackend(this, writer);
|
||||
backend = log_mgr->CreateBackend(this, header.writer_id.get());
|
||||
|
||||
if ( backend )
|
||||
backend->Start();
|
||||
|
@ -124,8 +125,6 @@ WriterFrontend::~WriterFrontend() {
|
|||
|
||||
delete[] fields;
|
||||
|
||||
Unref(stream);
|
||||
Unref(writer);
|
||||
delete info;
|
||||
delete[] name;
|
||||
}
|
||||
|
@ -166,8 +165,12 @@ void WriterFrontend::Init(int arg_num_fields, const Field* const* arg_fields) {
|
|||
}
|
||||
|
||||
if ( remote ) {
|
||||
broker_mgr->PublishLogCreate(stream, writer, *info, arg_num_fields, arg_fields);
|
||||
broker_mgr->PublishLogCreate(header.stream_id.get(), header.writer_id.get(), *info, arg_num_fields, arg_fields);
|
||||
}
|
||||
|
||||
header.fields.reserve(arg_num_fields);
|
||||
for ( int i = 0; i < arg_num_fields; i++ )
|
||||
header.fields.emplace_back(*arg_fields[i]);
|
||||
}
|
||||
|
||||
void WriterFrontend::Write(detail::LogRecord&& arg_vals) {
|
||||
|
@ -183,7 +186,7 @@ void WriterFrontend::Write(detail::LogRecord&& arg_vals) {
|
|||
}
|
||||
|
||||
if ( remote ) {
|
||||
broker_mgr->PublishLogWrite(stream, writer, info->path, vals);
|
||||
broker_mgr->PublishLogWrite(header.stream_id.get(), header.writer_id.get(), info->path, vals);
|
||||
}
|
||||
|
||||
if ( ! backend )
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include "zeek/logging/Types.h"
|
||||
#include "zeek/logging/WriterBackend.h"
|
||||
|
||||
namespace zeek::logging {
|
||||
|
@ -228,7 +229,10 @@ public:
|
|||
/**
|
||||
* Returns the number of log fields as passed into the constructor.
|
||||
*/
|
||||
int NumFields() const { return num_fields; }
|
||||
[[deprecated("Remove in v8.1: Use GetFields() instead")]]
|
||||
int NumFields() const {
|
||||
return num_fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a descriptive name for the writer, including the type of
|
||||
|
@ -246,14 +250,19 @@ public:
|
|||
/**
|
||||
* Returns the log fields as passed into the constructor.
|
||||
*/
|
||||
const threading::Field* const* Fields() const { return fields; }
|
||||
[[deprecated("Remove in v8.1: Use GetFields() instead")]]
|
||||
const threading::Field* const* Fields() const {
|
||||
return fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the log fields once Init() was called on the frontend.
|
||||
*/
|
||||
const std::vector<threading::Field>& GetFields() const { return header.fields; }
|
||||
|
||||
protected:
|
||||
friend class Manager;
|
||||
|
||||
EnumVal* stream;
|
||||
EnumVal* writer;
|
||||
|
||||
WriterBackend* backend; // The backend we have instantiated.
|
||||
bool disabled; // True if disabled.
|
||||
bool initialized; // True if initialized.
|
||||
|
@ -263,9 +272,10 @@ protected:
|
|||
|
||||
const char* name; // Descriptive name of the
|
||||
WriterBackend::WriterInfo* info; // The writer information.
|
||||
int num_fields; // The number of log fields.
|
||||
const threading::Field* const* fields; // The log fields.
|
||||
int num_fields; // Remove in v8.1.
|
||||
const threading::Field* const* fields; // Remove in v8.1.
|
||||
|
||||
detail::LogWriteHeader header; // Collected information about the WriterFrontend.
|
||||
detail::WriteBuffer write_buffer; // Buffer for bulk writes.
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue