summaryrefslogtreecommitdiff
path: root/DAnCE/TargetManager_Ext/DomainDataManager_Ext.cpp
blob: baee536d0fbe714081e36beb1b12127613204f66 (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

#include "DomainDataManager_Ext.h"


CIAO::DomainDataManager * CIAO::DomainDataManager_Ext::create (CORBA::ORB_ptr orb,
                            ::Deployment::TargetManager_ptr target
                            )
{
  if (global_data_manager_ == 0)
    {
      global_data_manager_ = new DomainDataManager_Ext (orb , target);
    }

  return global_data_manager_;
}

CIAO::DomainDataManager_Ext
::DomainDataManager_Ext (CORBA::ORB_ptr orb,
                        ::Deployment::TargetManager_ptr target)
                        : DomainDataManager (orb, target)
{
}

CIAO::Host_NodeManager_seq * CIAO::DomainDataManager_Ext::get_node_managers ()
{
  ::CIAO::Host_NodeManager_seq* node_mgr_seq =
      new ::CIAO::Host_NodeManager_seq ();
  node_mgr_seq->length (initial_domain_.node.length ());
  for (unsigned int i=0;i < initial_domain_.node.length ();i++)
    {
      (*node_mgr_seq)[i].host_ =
        CORBA::string_dup (initial_domain_.node[i].name);
      ::Deployment::NodeManager_var node_manager =
          deployment_config_.get_node_manager (initial_domain_.node[i].name);
      //      if (node_manager.in () != 0)
        {
          (*node_mgr_seq)[i].node_mgr_ = ::CIAO::NodeManagerDaemon::_narrow (node_manager.in ());
        }
    }
  return node_mgr_seq;
}

CIAO::Host_Infos*  CIAO::DomainDataManager_Ext::get_cpu_info ()
{
  CIAO::Host_Infos* host_info_seq = new CIAO::Host_Infos ();
  host_info_seq->length (current_domain_.node.length ());

  for (CORBA::ULong i=0;i < current_domain_.node.length ();i++)
    {
      (*host_info_seq)[i].hostname =
        CORBA::string_dup (current_domain_.node[i].name);

      for (CORBA::ULong j = 0;j < current_domain_.node[i].resource.length ();j++)
        {
          if (!ACE_OS::strcmp(
                      current_domain_.node[i].resource[j].name,
                      "Processor"))
            {
              current_domain_.node[i].resource[j].property[0].value
                >>= (*host_info_seq)[i].cpu_util;
              CORBA::Double d;
              current_domain_.node[i].resource[j].property[0].value
                >>= d;
            }
        }
    }

  return host_info_seq;
}

CORBA::Long CIAO::DomainDataManager_Ext::get_pid (const ACE_CString& cmp)
{
  CORBA::Long pid;

  // This is really ineffiecient this is O(n) ; searching all the nodes
  // all the resources for a particular component.
  // It needs to be stored in some other data structure

  for (CORBA::ULong i=0;i < current_domain_.node.length ();i++)
    {
      for (CORBA::ULong j = 0;j < current_domain_.node[i].resource.length ();j++)
        {
          // The resource
          if (!ACE_OS::strcmp(
                      current_domain_.node[i].resource[j].name,
                      "Component") &&
              ACE_CString (current_domain_.node[i].resource[j].property[0].name) ==
              cmp)
            {
              current_domain_.node[i].resource[j].property[0].value
                >>= pid;
            }
        } // resources
    }// nodes

  return pid;
}