]> git.ipfire.org Git - thirdparty/pdns.git/blob - pdns/remote_logger.hh
02c95f86febd52c370f7ca8d4de390b4f97f902e
[thirdparty/pdns.git] / pdns / remote_logger.hh
1 #pragma once
2 #include "config.h"
3
4 #include <atomic>
5 #include <condition_variable>
6 #include <queue>
7 #include <thread>
8
9 #include "iputils.hh"
10
11 class RemoteLogger
12 {
13 public:
14 RemoteLogger(const ComboAddress& remote, uint16_t timeout=2, uint64_t maxQueuedEntries=100, uint8_t reconnectWaitTime=1);
15 ~RemoteLogger();
16 void queueData(const std::string& data);
17 std::string toString()
18 {
19 return d_remote.toStringWithPort();
20 }
21 private:
22 bool reconnect();
23 bool sendData(const char* buffer, size_t bufferSize);
24 void worker();
25
26 std::queue<std::string> d_writeQueue;
27 std::mutex d_writeMutex;
28 std::condition_variable d_queueCond;
29 ComboAddress d_remote;
30 uint64_t d_maxQueuedEntries;
31 int d_socket{-1};
32 uint16_t d_timeout;
33 uint8_t d_reconnectWaitTime;
34 std::thread d_thread;
35 std::atomic<bool> d_exiting{false};
36 };