MADARA  3.4.1
EndpointDiscovery.cpp
Go to the documentation of this file.
1 #include "EndpointDiscovery.h"
4 
5 namespace utility = madara::utility;
7 
9  const std::string& prefix, knowledge::KnowledgeRecord::Integer heart_beat)
10  : initialized_(false),
11  prefix_(prefix),
12  heart_beat_(heart_beat * 1000000000),
13  last_clear_(0)
14 {
15 }
16 
18 
20  knowledge::KnowledgeMap& records,
21  const transport::TransportContext& transport_context,
23 {
24  if (!initialized_)
25  {
26  endpoints_.set_name(prefix_, vars);
27  initialized_ = true;
28  }
29 
31  "EndpointDiscovery::filter:"
32  " Processing a new update with %d records\n",
33  (int)records.size());
34 
35  std::string endpoint(transport_context.get_endpoint());
36  Integer cur_time = (Integer)transport_context.get_current_time();
37 
38  endpoints_.set(endpoint, cur_time);
39 
40  if (heart_beat_ > 0 && last_clear_ != cur_time)
41  {
42  std::vector<std::string> keys;
43  endpoints_.sync_keys();
44 
45  endpoints_.keys(keys);
46 
47  for (size_t i = 0; i < keys.size(); ++i)
48  {
49  // if the current endpoint is old, erase it
50  if (cur_time - endpoints_[keys[i]].to_integer() > heart_beat_)
51  {
53  "EndpointDiscovery::filter:"
54  " Erasing endpoint %s\n",
55  keys[i].c_str());
56 
57  endpoints_.erase(keys[i]);
58  }
59  }
60 
61  last_clear_ = cur_time;
62  }
63 }
madara::knowledge::KnowledgeRecord::Integer Integer
#define madara_logger_log(loggering, level,...)
Fast version of the madara::logger::log method.
Definition: Logger.h:20
madara::knowledge::KnowledgeRecord::Integer Integer
virtual void filter(knowledge::KnowledgeMap &records, const transport::TransportContext &transport_context, knowledge::Variables &vars)
Calls the main logic of the filter.
EndpointDiscovery(const std::string &prefix=".endpoints", knowledge::KnowledgeRecord::Integer heart_beat=-1)
Constructor.
logger::Logger & get_logger(void) const
Gets the logger used for information printing.
Provides an interface for external functions into the MADARA KaRL variable settings.
Definition: Variables.h:53
ThreadSafeContext * get_context(void)
Returns the ThreadSafeContext associated with this Variables facade.
Definition: Variables.cpp:17
Provides context about the transport.
uint64_t get_current_time(void) const
Gets the current timestamp.
const std::string & get_endpoint(void) const
Returns the current message endpoint.
constexpr string_t string
::std::map< std::string, KnowledgeRecord > KnowledgeMap
Provides utility functions and classes for common tasks and needs.
Definition: IteratorImpl.h:15