11 #ifndef __SANDESH_STATE_MACHINE_H__
12 #define __SANDESH_STATE_MACHINE_H__
14 #include <boost/asio.hpp>
15 #include <boost/ptr_container/ptr_map.hpp>
16 #include <boost/statechart/state_machine.hpp>
17 #include <tbb/mutex.h>
18 #include <tbb/atomic.h>
24 #include <sandesh/sandesh_statistics.h>
26 namespace sc = boost::statechart;
50 class SandeshStateMachineStats;
51 class SandeshGeneratorStats;
55 typedef boost::function<bool(SandeshStateMachine *)>
EvValidate;
58 public sc::state_machine<SandeshStateMachine, ssm::Idle> {
71 template <
class Ev>
void OnIdle(
const Ev &event);
126 tbb::mutex::scoped_lock lock(
smutex_);
131 tbb::mutex::scoped_lock lock(
smutex_);
135 tbb::mutex::scoped_lock lock(
smutex_);
155 SandeshGeneratorBasicStats &basic_msg_stats);
157 SandeshGeneratorBasicStats *basic_msg_stats);
159 SandeshGeneratorStats &detail_msg_stats);
161 SandeshGeneratorStats *detail_msg_stats);
169 boost::intrusive_ptr<const sc::event_base>
event;
182 template <
typename Ev>
void Enqueue(
const Ev &event);
184 bool LogEvent(
const sc::event_base *event);
193 void UpdateEventStats(
const sc::event_base &event,
bool enqueue,
bool fail);
235 #endif // __SANDESH_STATE_MACHINE_H__
const std::string & generator_key() const
const std::string & StateName() const
void SetSandeshMessageDropLevel(size_t queue_count, SandeshLevel::type level, boost::function< void(void)> cb)
void DeleteSession(SandeshSession *session)
void ResetQueueWaterMarkInfo()
const std::string last_event() const
bool IdleHoldTimerExpired()
void UpdateEventEnqueueFail(const sc::event_base &event)
void GetBasicMessageStatistics(SandeshGeneratorBasicStats *basic_msg_stats)
void set_state(ssm::SsmState state)
void SandeshUVESend(SandeshUVE *usnh)
size_t max_queue_len() const
void reset_idle_hold_time()
SandeshMessageBuilder * builder_
bool GetBasicStatistics(SandeshStateMachineStats *sm_stats, SandeshGeneratorBasicStats *basic_msg_stats)
void UpdateEventDequeueFail(const sc::event_base &event)
void unconsumed_event(const sc::event_base &event)
void GetDetailMessageStatistics(SandeshGeneratorStats *detail_msg_stats)
bool get_resource() const
void set_idle_hold_time(int idle_hold_time)
void DeleteTcpSession(const Ev &event)
friend bool GetEvSandeshMessageRecvSize(EventContainer *ec, size_t *msg_size)
bool IdleHoldTimerRunning()
bool DequeueEvent(EventContainer ec)
void TimerErrorHandler(std::string name, std::string error)
void ReleaseSandesh(const Ev &event)
SandeshMessageStatistics message_stats_
void StartIdleHoldTimer()
void ProcessMessage(const Ev &event)
void ResourceUpdate(bool rsc)
bool GetQueueCount(uint64_t &queue_count) const
boost::function< bool(StateMachine *)> EvValidate
DISALLOW_COPY_AND_ASSIGN(SandeshStateMachine)
SandeshSession * session()
void set_last_event(const std::string &event)
void GetEventStatistics(SandeshStateMachineStats *sm_stats)
size_t GetMaxQueueCount() const
void SetGeneratorKey(const std::string &generator)
void CancelIdleHoldTimer()
bool GetStatistics(SandeshStateMachineStats &sm_stats, SandeshGeneratorBasicStats &basic_msg_stats)
int idle_hold_time() const
friend class SandeshClientStateMachineTest
bool GetMessageDropLevel(std::string &drop_level) const
static const int kIdleHoldTime
const std::string & LastStateName() const
std::string generator_key_
bool OnSandeshMessage(SandeshSession *session, const std::string &msg)
void set_session(SandeshSession *session)
ssm::SsmState last_state_
void OnSessionEvent(TcpSession *session, TcpSession::Event event)
void SetQueueWaterMarkInfo(Sandesh::QueueWaterMarkInfo &wm)
void UpdateRxMsgStats(const std::string &msg_name, size_t msg_size)
void SetAdminState(bool down)
void UpdateRxMsgFailStats(const std::string &msg_name, size_t msg_size, SandeshRxDropReason::type dreason)
SandeshConnection * connection_
void SetDeferDequeue(bool defer)
ssm::SsmState get_state() const
void Enqueue(const Ev &event)
WorkQueue< EventContainer > EventQueue
void IdleHoldTimerFired()
static const int kQueueSize
void PassiveOpen(SandeshSession *session)
boost::intrusive_ptr< const sc::event_base > event
size_t AtomicIncrementQueueCount(EventContainer *entry)
void UpdateEventEnqueue(const sc::event_base &event)
size_t AtomicDecrementQueueCount(EventContainer *entry)
static uint64_t UTCTimestampUsec()
void set_resource(bool r)
SandeshEventStatistics event_stats_
bool GetDetailStatistics(SandeshStateMachineStats *sm_stats, SandeshGeneratorStats *detail_msg_stats)
void UpdateEventDequeue(const sc::event_base &event)
SandeshStateMachine(const char *prefix, SandeshConnection *connection)
SandeshLevel::type message_drop_level_
void SetDeferSessionReader(bool defer_reader)
friend class SandeshServerStateMachineTest
SandeshSession * session_
boost::tuple< size_t, SandeshLevel::type, bool, bool > QueueWaterMarkInfo
void OnIdle(const Ev &event)
void UpdateEventStats(const sc::event_base &event, bool enqueue, bool fail)
bool LogEvent(const sc::event_base *event)
tbb::atomic< ssm::SsmState > state_
SandeshConnection * connection()