OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
stats_client.h
Go to the documentation of this file.
1 /*
2  * * Copyright (c) 2018 Juniper Networks, Inc. All rights reserved.
3  * */
4 
5 //
6 // stats_client.h
7 //
8 
9 #ifndef __STATS_CLIENT_H__
10 #define __STATS_CLIENT_H__
11 
12 #include <tbb/mutex.h>
13 #include <boost/asio.hpp>
14 #include <io/udp_server.h>
15 #include <sandesh/sandesh.h>
16 #include <sandesh/sandesh_util.h>
17 
18 class StatsClient {
19 public:
20  static const uint32_t kEncodeBufferSize = 2048;
22  StatsClient(boost::asio::io_context& io_service, const std::string& endpoint);
24  virtual void Initialize() = 0;
25  virtual bool IsConnected() = 0;
26  virtual bool SendMsg(Sandesh *sandesh) = 0;
27  virtual size_t SendBuf(uint8_t *data, size_t size) = 0;
28 };
29 
30 #if defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
31 class StatsClientLocal : public StatsClient {
32 public:
33  StatsClientLocal(boost::asio::io_context& io_service, const std::string& stats_collector):
34  stats_server_ep_(boost::asio::local::datagram_protocol::endpoint(stats_collector)),
35  is_connected_(false) {
36  stats_socket_.reset(new boost::asio::local::datagram_protocol::socket(io_service));
37  }
38  virtual ~StatsClientLocal() {stats_socket_->close();}
39  virtual void Initialize();
40  virtual bool IsConnected() {return is_connected_;}
41  virtual bool SendMsg(Sandesh *sandesh);
42  virtual size_t SendBuf(uint8_t *data, size_t size);
43 private:
44  boost::asio::local::datagram_protocol::endpoint stats_server_ep_;
45  boost::scoped_ptr<boost::asio::local::datagram_protocol::socket> stats_socket_;
46  tbb::mutex send_mutex_;
47  bool is_connected_;
48 };
49 #endif
50 
52 public:
53  StatsClientRemote(boost::asio::io_context& io_service, const std::string& stats_collector):
54  is_connected_(false) {
55  UdpServer::Endpoint stats_ep;
56  MakeEndpoint(&stats_ep, stats_collector);
57  stats_server_ep_ = stats_ep;
58  stats_socket_.reset(new UdpServer::Socket(io_service));
59  }
60  virtual ~StatsClientRemote() {stats_socket_->close();}
61  virtual void Initialize();
62  virtual bool IsConnected() {return is_connected_;}
63  virtual bool SendMsg(Sandesh *sandesh);
64  virtual size_t SendBuf(uint8_t *data, size_t size);
65 private:
67  boost::scoped_ptr<UdpServer::Socket> stats_socket_;
68  tbb::mutex send_mutex_;
70 };
71 
72 #endif // __STATS_CLIENT_H__
bool MakeEndpoint(TcpServer::Endpoint *ep, const std::string &epstr)
Definition: sandesh_util.cc:18
boost::asio::ip::udp::socket Socket
Definition: udp_server.h:21
boost::asio::ip::udp::endpoint Endpoint
Definition: udp_server.h:20
virtual void Initialize()
Definition: stats_client.cc:68
virtual bool SendMsg(Sandesh *sandesh)
Definition: stats_client.cc:99
virtual bool IsConnected()
Definition: stats_client.h:62
StatsClientRemote(boost::asio::io_context &io_service, const std::string &stats_collector)
Definition: stats_client.h:53
virtual bool IsConnected()=0
tbb::mutex send_mutex_
Definition: stats_client.h:68
virtual size_t SendBuf(uint8_t *data, size_t size)=0
boost::scoped_ptr< UdpServer::Socket > stats_socket_
Definition: stats_client.h:67
virtual bool SendMsg(Sandesh *sandesh)=0
static const uint32_t kEncodeBufferSize
Definition: stats_client.h:20
virtual void Initialize()=0
virtual size_t SendBuf(uint8_t *data, size_t size)
Definition: stats_client.cc:86
UdpServer::Endpoint stats_server_ep_
Definition: stats_client.h:66
virtual ~StatsClientRemote()
Definition: stats_client.h:60