fboss/agent/FsdbSyncer.h (45 lines of code) (raw):

// Copyright 2004-present Facebook. All Rights Reserved. #pragma once #include "fboss/agent/FsdbStateDeltaConverter.h" #include "fboss/agent/StateObserver.h" #include "fboss/agent/gen-cpp2/agent_stats_types.h" #include "fboss/fsdb/client/FsdbPubSubManager.h" #include "fboss/fsdb/client/FsdbStreamClient.h" #include <memory> namespace facebook::fboss { class SwSwitch; namespace fsdb { class FsdbPubSubManager; } namespace cfg { class SwitchConfig; } class FsdbSyncer : public StateObserver { public: explicit FsdbSyncer(SwSwitch* sw); ~FsdbSyncer() override; void stateUpdated(const StateDelta& stateDelta) override; void statsUpdated(const AgentStats& stats); // TODO - change to AgentConfig once SwSwitch can pass us that void cfgUpdated( const cfg::SwitchConfig& oldConfig, const cfg::SwitchConfig& newConfig); fsdb::FsdbPubSubManager* pubSubMgr() { return fsdbPubSubMgr_.get(); } void stop(); private: void fsdbStatePublisherStateChanged( fsdb::FsdbStreamClient::State oldState, fsdb::FsdbStreamClient::State newState); void fsdbStatPublisherStateChanged( fsdb::FsdbStreamClient::State oldState, fsdb::FsdbStreamClient::State newState); void publishDeltas(std::vector<fsdb::OperDeltaUnit>&& deltas); // Paths std::vector<std::string> getAgentStatePath() const; std::vector<std::string> getAgentStatsPath() const; SwSwitch* sw_; std::unique_ptr<fsdb::FsdbPubSubManager> fsdbPubSubMgr_; std::atomic<bool> readyForStatePublishing_{false}; std::atomic<bool> readyForStatPublishing_{false}; FsdbStateDeltaConverter deltaConverter_; }; } // namespace facebook::fboss