mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
broker/Manager: Add MakeHub() and ReleaseHub()
These are used by WebSocket clients to create broker::hub instances
This commit is contained in:
parent
c9d7418a23
commit
591e3400d4
2 changed files with 23 additions and 3 deletions
|
@ -282,6 +282,7 @@ Manager::Manager(bool arg_use_real_time) : Backend("Broker", nullptr, nullptr, n
|
||||||
bound_port = 0;
|
bound_port = 0;
|
||||||
use_real_time = arg_use_real_time;
|
use_real_time = arg_use_real_time;
|
||||||
peer_count = 0;
|
peer_count = 0;
|
||||||
|
hub_count = 0;
|
||||||
log_batch_size = 0;
|
log_batch_size = 0;
|
||||||
log_topic_func = nullptr;
|
log_topic_func = nullptr;
|
||||||
log_id_type = nullptr;
|
log_id_type = nullptr;
|
||||||
|
@ -509,7 +510,7 @@ bool Manager::Active() {
|
||||||
if ( bound_port > 0 )
|
if ( bound_port > 0 )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return peer_count > 0;
|
return peer_count > 0 || hub_count > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Manager::AdvanceTime(double seconds_since_unix_epoch) {
|
void Manager::AdvanceTime(double seconds_since_unix_epoch) {
|
||||||
|
@ -652,7 +653,7 @@ bool Manager::PublishEvent(string topic, std::string name, broker::vector args,
|
||||||
if ( bstate->endpoint.is_shutdown() )
|
if ( bstate->endpoint.is_shutdown() )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if ( peer_count == 0 )
|
if ( peer_count == 0 && hub_count == 0 )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
broker::zeek::Event ev(name, args, broker::to_timestamp(ts));
|
broker::zeek::Event ev(name, args, broker::to_timestamp(ts));
|
||||||
|
@ -666,7 +667,7 @@ bool Manager::PublishEvent(string topic, RecordVal* args) {
|
||||||
if ( bstate->endpoint.is_shutdown() )
|
if ( bstate->endpoint.is_shutdown() )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if ( peer_count == 0 )
|
if ( peer_count == 0 && hub_count == 0 )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if ( ! args->HasField(0) )
|
if ( ! args->HasField(0) )
|
||||||
|
@ -1987,4 +1988,11 @@ void Manager::PrepareForwarding(const std::string& name) {
|
||||||
DBG_LOG(DBG_BROKER, "Resolved table forward for data store %s", name.c_str());
|
DBG_LOG(DBG_BROKER, "Resolved table forward for data store %s", name.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
broker::hub Manager::MakeHub(broker::filter_type ft) {
|
||||||
|
++hub_count;
|
||||||
|
return bstate->endpoint.make_hub(std::move(ft));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Manager::DestroyHub(broker::hub&& hub) { --hub_count; }
|
||||||
|
|
||||||
} // namespace zeek::Broker
|
} // namespace zeek::Broker
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include <broker/backend_options.hh>
|
#include <broker/backend_options.hh>
|
||||||
#include <broker/detail/hash.hh>
|
#include <broker/detail/hash.hh>
|
||||||
#include <broker/endpoint_info.hh>
|
#include <broker/endpoint_info.hh>
|
||||||
|
#include <broker/hub.hh>
|
||||||
#include <broker/peer_info.hh>
|
#include <broker/peer_info.hh>
|
||||||
#include <broker/store.hh>
|
#include <broker/store.hh>
|
||||||
#include <broker/zeek.hh>
|
#include <broker/zeek.hh>
|
||||||
|
@ -478,6 +479,16 @@ private:
|
||||||
const char* Tag() override { return "Broker::Manager"; }
|
const char* Tag() override { return "Broker::Manager"; }
|
||||||
double GetNextTimeout() override { return -1; }
|
double GetNextTimeout() override { return -1; }
|
||||||
|
|
||||||
|
|
||||||
|
// Allow WebSocketShim access to MakeHub() and DestroyHub()
|
||||||
|
friend class WebSocketState;
|
||||||
|
|
||||||
|
// Create a hub for WebSocket clients.
|
||||||
|
broker::hub MakeHub(broker::filter_type ft);
|
||||||
|
|
||||||
|
// This hub is to be destroyed.
|
||||||
|
void DestroyHub(broker::hub&& hub);
|
||||||
|
|
||||||
struct LogBuffer {
|
struct LogBuffer {
|
||||||
// Indexed by topic string.
|
// Indexed by topic string.
|
||||||
std::unordered_map<std::string, broker::zeek::BatchBuilder> msgs;
|
std::unordered_map<std::string, broker::zeek::BatchBuilder> msgs;
|
||||||
|
@ -511,6 +522,7 @@ private:
|
||||||
uint16_t bound_port;
|
uint16_t bound_port;
|
||||||
bool use_real_time;
|
bool use_real_time;
|
||||||
int peer_count;
|
int peer_count;
|
||||||
|
int hub_count;
|
||||||
|
|
||||||
size_t log_batch_size;
|
size_t log_batch_size;
|
||||||
Func* log_topic_func;
|
Func* log_topic_func;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue