/
syslog_collector.h
97 lines (85 loc) · 2.82 KB
/
syslog_collector.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
* Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
*/
#ifndef __SYSLOG_COLLECTOR_H__
#define __SYSLOG_COLLECTOR_H__
#include "io/tcp_server.h"
#include "io/tcp_session.h"
#include "io/udp_server.h"
#include "io/io_log.h"
#include "viz_message.h"
#include "db_handler.h"
typedef boost::function<bool(const VizMsg*, bool,
DbHandler *, GenDb::GenDbIf::DbAddColumnCb)> VizCallback;
class SyslogQueueEntry
{
public:
size_t length;
boost::asio::const_buffer data;
std::string ip;
int port;
virtual void free ();
SyslogQueueEntry (boost::asio::const_buffer d, size_t l,
std::string ip_, int port_):
length(l), data(d), ip (ip_), port (port_)
{
}
virtual ~SyslogQueueEntry() {}
};
typedef boost::function<void(SyslogQueueEntry *)> SyslogMsgReadFn;
class SyslogTcpSession;
class SyslogTcpListener : public TcpServer
{
public:
SyslogTcpListener (EventManager *evm, SyslogMsgReadFn read_cb);
virtual TcpSession *AllocSession(Socket *socket);
virtual void Start (std::string ipaddress, int port);
virtual void Shutdown ();
virtual void ReadMsg(SyslogQueueEntry *sqe);
private:
SyslogTcpSession *session_;
SyslogMsgReadFn read_cb_;
};
class SyslogUDPListener: public UdpServer
{
public:
SyslogUDPListener (EventManager *evm, SyslogMsgReadFn read_cb);
virtual void Start (std::string ipaddress, int port);
virtual void Shutdown ();
private:
void HandleReceive(const boost::asio::const_buffer &recv_buffer,
boost::asio::ip::udp::endpoint remote_endpoint,
std::size_t bytes_transferred,
const boost::system::error_code& error);
SyslogMsgReadFn read_cb_;
};
class SyslogParser;
class SyslogListeners
{
public:
static const int kDefaultSyslogPort = 514;
SyslogListeners (EventManager *evm, VizCallback cb,
DbHandlerPtr db_handler, std::string ipaddress,
int port=kDefaultSyslogPort);
SyslogListeners (EventManager *evm, VizCallback cb,
DbHandlerPtr db_handler, int port=kDefaultSyslogPort);
virtual void Start ();
virtual void Shutdown ();
bool IsRunning ();
VizCallback ProcessSandeshMsgCb() const { return cb_; }
DbHandlerPtr GetDbHandler () const { return db_handler_; }
SandeshMessageBuilder *GetBuilder () const { return builder_; }
int GetTcpPort();
int GetUdpPort();
private:
boost::scoped_ptr<SyslogParser> parser_;
SyslogUDPListener *udp_listener_;
SyslogTcpListener *tcp_listener_;
int port_;
std::string ipaddress_;
bool inited_;
VizCallback cb_;
DbHandlerPtr db_handler_;
SandeshMessageBuilder *builder_;
};
#endif // __SYSLOG_COLLECTOR_H__