summaryrefslogtreecommitdiff
path: root/trunk/CIAO/DAnCE/NodeManager/MonitorController.h
blob: 85d82c2cf3bfb3ec6e8e834bf70d7e5a06dd36af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// $Id$

//---------------------------------------------------------------------------------
/**
 *  @file MonitorController.h
 *
 *  @brief The Monitor Controller class.
 *
 *  This class is invoked by the Nodemanager object and it
 *  in turn loads the proper Monitor which is strategised.
 *
 *  @author Nilabja Roy
 */
//----------------------------------------------------------------------------------
#ifndef MONITOR_CONTROLLER_H
#define MONITOR_CONTROLLER_H

#include "NodeManager_svnt_export.h"
#include "DAnCE/Deployment/Deployment_BaseC.h"

#include "DAnCE/TargetManager/TargetManagerImplC.h"
#include "ace/Task.h"
#include "ace/Auto_Ptr.h"

#include "ace/Synch_Traits.h"
#include "ace/Synch.h"


/**
 * @namespace CIAO
 *
 * @brief The top level CIAO namespace
 *
 */

namespace CIAO
{

  class MonitorBase;

  class NodeManager_Impl_Base;

  /**
   *  @class MonitorController
   *
   *  @brief The Controller class
   *
   *  Acts as a facade to the Monitor
   *  module
   *
   */
  class NodeManager_svnt_Export MonitorController : public ACE_Task_Base
    {
    public:
      /**
       * @brief The main function containing the
       * entire activity.
       *
       * This function runs in the context of the
       * thread
       * @return int The status of the function
       */
      int svc (void);
      /**
       * @brief The terminate function
       *
       * This function is called to terminate the
       * thread
       */
      void terminate ();


      /// The Constructor.
      MonitorController (CORBA::ORB_ptr orb,
                         ::Deployment::Domain& domain,
                         ::Deployment::TargetManager_ptr target,
                         ::CIAO::NodeManager_Impl_Base* node_mgr
                         );

      ~MonitorController ();
    protected:

      /**
       * @brief returns the terminating flag
       * @return bool The terminating state of the thread
       */
      bool terminating ();

      /// The monitor object
      auto_ptr <MonitorBase>  monitor_;

      /// The TargetManagerImpl object
      CIAO::TargetManagerImpl_var target_impl_cmp_;

      /// The TargetManager Facet ....
      Deployment::TargetManager_var target_facet_i_;

      /// The terminate flag_
      bool terminate_flag_;

      /// Thread Mutex for synchronizing call
      ACE_SYNCH_MUTEX lock_;

      /// the ORB pointer ..
      /// @todo Make this a _var
      CORBA::ORB_ptr orb_;

      /// The initial domain
      ::Deployment::Domain initial_domain_;

      /// The Node Manager
      ::CIAO::NodeManager_Impl_Base* node_mgr_;

      /// Flag tells ; what to monitor
      bool monitor_cpu_usage_;

      /// To add component pid or not ..
      bool add_component_pid_;
    };

} // CIAO

#endif