OpenSDN source code
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 <mutex>
13 
14 #include <boost/asio.hpp>
15 #include <io/udp_server.h>
16 #include <sandesh/sandesh.h>
17 #include <sandesh/sandesh_util.h>
18 
19 class StatsClient {
20 public:
21  static const uint32_t kEncodeBufferSize = 2048;
23  StatsClient(boost::asio::io_context& io_service, const std::string& endpoint);
25  virtual void Initialize() = 0;
26  virtual bool IsConnected() = 0;
27  virtual bool SendMsg(Sandesh *sandesh) = 0;
28  virtual size_t SendBuf(uint8_t *data, size_t size) = 0;
29 };
30 
31 #if defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
32 class StatsClientLocal : public StatsClient {
33 public:
34  StatsClientLocal(boost::asio::io_context& io_service, const std::string& stats_collector):
35  stats_server_ep_(boost::asio::local::datagram_protocol::endpoint(stats_collector)),
36  is_connected_(false) {
37  stats_socket_.reset(new boost::asio::local::datagram_protocol::socket(io_service));
38  }
39  virtual ~StatsClientLocal() {stats_socket_->close();}
40  virtual void Initialize();
41  virtual bool IsConnected() {return is_connected_;}
42  virtual bool SendMsg(Sandesh *sandesh);
43  virtual size_t SendBuf(uint8_t *data, size_t size);
44 private:
45  boost::asio::local::datagram_protocol::endpoint stats_server_ep_;
46  boost::scoped_ptr<boost::asio::local::datagram_protocol::socket> stats_socket_;
47  std::mutex send_mutex_;
48  bool is_connected_;
49 };
50 #endif
51 
53 public:
54  StatsClientRemote(boost::asio::io_context& io_service, const std::string& stats_collector):
55  is_connected_(false) {
56  UdpServer::Endpoint stats_ep;
57  MakeEndpoint(&stats_ep, stats_collector);
58  stats_server_ep_ = stats_ep;
59  stats_socket_.reset(new UdpServer::Socket(io_service));
60  }
61  virtual ~StatsClientRemote() {stats_socket_->close();}
62  virtual void Initialize();
63  virtual bool IsConnected() {return is_connected_;}
64  virtual bool SendMsg(Sandesh *sandesh);
65  virtual size_t SendBuf(uint8_t *data, size_t size);
66 private:
68  boost::scoped_ptr<UdpServer::Socket> stats_socket_;
69  std::mutex send_mutex_;
71 };
72 
73 #endif // __STATS_CLIENT_H__
virtual bool SendMsg(Sandesh *sandesh)
UdpServer::Endpoint stats_server_ep_
Definition: stats_client.h:67
boost::scoped_ptr< UdpServer::Socket > stats_socket_
Definition: stats_client.h:68
virtual ~StatsClientRemote()
Definition: stats_client.h:61
virtual size_t SendBuf(uint8_t *data, size_t size)
Definition: stats_client.cc:88
std::mutex send_mutex_
Definition: stats_client.h:69
virtual void Initialize()
Definition: stats_client.cc:70
virtual bool IsConnected()
Definition: stats_client.h:63
StatsClientRemote(boost::asio::io_context &io_service, const std::string &stats_collector)
Definition: stats_client.h:54
virtual void Initialize()=0
StatsClient(boost::asio::io_context &io_service, const std::string &endpoint)
virtual bool IsConnected()=0
virtual size_t SendBuf(uint8_t *data, size_t size)=0
static const uint32_t kEncodeBufferSize
Definition: stats_client.h:21
virtual bool SendMsg(Sandesh *sandesh)=0
boost::asio::ip::udp::endpoint Endpoint
Definition: udp_server.h:23
boost::asio::ip::udp::socket Socket
Definition: udp_server.h:24
bool MakeEndpoint(TcpServer::Endpoint *ep, const std::string &epstr)
Definition: sandesh_util.cc:18