| // Interface for a DataSinkService client. |
| #ifndef PLATFORMS_SYSHEALTH_COLLECTION_FEED_FORWARD_CLIENT_LIB_FEED_CLIENT_INTERFACE_H_ |
| #define PLATFORMS_SYSHEALTH_COLLECTION_FEED_FORWARD_CLIENT_LIB_FEED_CLIENT_INTERFACE_H_ |
| |
| #include <memory> |
| |
| #include "tlbmc/agent_config_service.pb.h" |
| #include "tlbmc/data_sink_service.pb.h" |
| #include "absl/status/statusor.h" |
| #include "absl/strings/string_view.h" |
| |
| namespace platforms_syshealth::collection::feed { |
| |
| class FeedClientInterface { |
| public: |
| virtual ~FeedClientInterface() = default; |
| |
| // Writes metrics to the DataSinkService. |
| virtual absl::StatusOr<WriteMetricsResponse> WriteMetrics( |
| const WriteMetricsRequest& request) = 0; |
| |
| // Gets policies from the AgentConfigService. |
| virtual absl::StatusOr<GetPoliciesResponse> GetPolicies( |
| const GetPoliciesRequest& request) = 0; |
| |
| // Sets target address for the client. If not set during construction, |
| // client will be in dry run mode. |
| virtual void SetTargetAddress(absl::string_view target_address) = 0; |
| |
| // Returns true if the client is in dry run mode. |
| virtual bool IsDryRun() const = 0; |
| }; |
| |
| class AnycastUser { |
| public: |
| virtual ~AnycastUser() = default; |
| virtual void SetAnycastAddress(absl::string_view anycast_address) = 0; |
| }; |
| |
| class FeedClientAnycastUser : public AnycastUser { |
| public: |
| explicit FeedClientAnycastUser( |
| std::shared_ptr<FeedClientInterface> feed_client) |
| : feed_client_(feed_client) {} |
| |
| void SetAnycastAddress(absl::string_view anycast_address) override { |
| if (feed_client_ == nullptr) { |
| return; |
| } |
| feed_client_->SetTargetAddress(anycast_address); |
| } |
| |
| private: |
| std::shared_ptr<FeedClientInterface> feed_client_; |
| }; |
| |
| } // namespace platforms_syshealth::collection::feed |
| |
| #endif // PLATFORMS_SYSHEALTH_COLLECTION_FEED_FORWARD_CLIENT_LIB_FEED_CLIENT_INTERFACE_H_ |