// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #pragma once #include #include #include #include #include "peer-check.h" #include "status-callback.h" #include #include #include #include namespace config::sentinel { class ReportConnectivity; struct ConnectivityCheckResult : StatusCallback { ReportConnectivity& parent; std::string peerName; int peerPort; std::string status; std::unique_ptr check; ConnectivityCheckResult(ReportConnectivity& owner, const std::string &hostname, int port) : parent(owner), peerName(hostname), peerPort(port), status("unknown"), check(nullptr) {} ConnectivityCheckResult(ConnectivityCheckResult &&) = default; ConnectivityCheckResult(const ConnectivityCheckResult &) = default; virtual ~ConnectivityCheckResult(); void startCheck(FRT_Supervisor &orb); void returnStatus(bool ok) override; }; class ReportConnectivity : public config::IFetcherCallback { public: ReportConnectivity(FRT_RPCRequest *req, FRT_Supervisor &orb); ~ReportConnectivity(); void requestDone(); /** from IFetcherCallback */ void configure(std::unique_ptr config) override; private: void finish() const; FRT_RPCRequest *_parentRequest; FRT_Supervisor &_orb; std::vector _result; config::ConfigFetcher _configFetcher; std::mutex _lock; size_t _remaining; }; }