Line data Source code
1 : //
2 : // Author: Vladimir Migashko <migashko@gmail.com>, (C) 2013-2018
3 : //
4 : // Copyright: See COPYING file that comes with this distribution
5 : //
6 :
7 : #pragma once
8 :
9 : #include <wfc/domain_object.hpp>
10 : #include <wfc/statistics/istatistics.hpp>
11 : #include <wfc/statistics/meters.hpp>
12 : #include <wfc/mutex.hpp>
13 : #include <wrtstat/wrtstat.hpp>
14 : #include "statistics_config.hpp"
15 : #include <string>
16 : #include <memory>
17 : #include <atomic>
18 :
19 : namespace wfc{ namespace core{
20 :
21 0 : class statistics_domain
22 : : public domain_object<istatistics, statistics_config, defstat>
23 : {
24 : class stat_impl;
25 : public:
26 : virtual ~statistics_domain();
27 : virtual void reconfigure_basic() override;
28 : virtual void reconfigure() override;
29 : virtual void initialize() override;
30 : virtual void restart() override;
31 : virtual void stop() override;
32 : virtual void start() override;
33 : virtual void push( wfc::statistics::request::push::ptr req, wfc::statistics::response::push::handler cb) override final;
34 : virtual void del( wfc::statistics::request::del::ptr req, wfc::statistics::response::del::handler cb) override final;
35 : private:
36 : typedef std::shared_ptr<stat_impl> stat_ptr;
37 : typedef wrtstat::wrtstat stat_push;
38 : typedef std::shared_ptr<stat_push> stat_push_ptr;
39 : typedef std::vector<stat_push_ptr> stat_list;
40 : typedef std::vector<workflow_ptr> workflow_list;
41 :
42 : stat_ptr get_stat_(const std::string& name);
43 : //workflow_ptr get_workflow_(const std::string& name);
44 :
45 : template<typename StatPtr>
46 : bool handler_(StatPtr st, size_t offset, size_t step);
47 :
48 : stat_ptr _stat;
49 : stat_list _stat_list;
50 : workflow_list _workflow_list;
51 :
52 : typedef std::weak_ptr<istatistics> statistics_wptr;
53 :
54 : std::vector< statistics_wptr > _targets;
55 : timer_id_t _timer_id;
56 : std::vector<timer_id_t> _timers; // удалить
57 : std::string _log;
58 :
59 : std::atomic<bool> _started;
60 : std::chrono::system_clock::time_point _start_point;
61 :
62 : time_meter _push_meter;
63 : size_meter _count_meter;
64 :
65 : typedef rwlock<std::mutex> mutex_type;
66 : mutex_type _mutex;
67 :
68 : std::atomic<bool> _suspend_push;
69 : };
70 :
71 : }}
|