RedisStatusWriter.hpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #ifndef REDIS_STATUS_WRITER_HPP
  2. #define REDIS_STATUS_WRITER_HPP
  3. #include "Redis.hpp"
  4. #include "StatusWriter.hpp"
  5. #include <memory>
  6. #include <mutex>
  7. #include <sw/redis++/redis++.h>
  8. namespace ZeroTier {
  9. class RedisStatusWriter : public StatusWriter {
  10. public:
  11. RedisStatusWriter(std::shared_ptr<sw::redis::Redis> redis, std::string controller_id);
  12. RedisStatusWriter(std::shared_ptr<sw::redis::RedisCluster> cluster, std::string controller_id);
  13. virtual ~RedisStatusWriter();
  14. virtual void updateNodeStatus(
  15. const std::string& network_id,
  16. const std::string& node_id,
  17. const std::string& os,
  18. const std::string& arch,
  19. const std::string& version,
  20. const InetAddress& address,
  21. int64_t last_seen,
  22. const std::string& /* frontend unused */) override;
  23. virtual size_t queueLength() const override;
  24. virtual void writePending() override;
  25. private:
  26. void _doWritePending(sw::redis::Transaction& tx);
  27. std::string _controller_id;
  28. enum RedisMode { REDIS_MODE_STANDALONE, REDIS_MODE_CLUSTER };
  29. std::shared_ptr<sw::redis::Redis> _redis;
  30. std::shared_ptr<sw::redis::RedisCluster> _cluster;
  31. RedisMode _mode = REDIS_MODE_STANDALONE;
  32. mutable std::mutex _lock;
  33. std::vector<PendingStatusEntry> _pending;
  34. };
  35. } // namespace ZeroTier
  36. #endif // REDIS_STATUS_WRITER_HPP