Esempio n. 1
0
 private function compute_sessions()
 {
     if (!is_object($this->dom)) {
         return;
     }
     $sessions = $this->dom->getElementsByTagName('session');
     if ($sessions->length == 0) {
         return;
     }
     $apps_link = application_desktops_to_ids();
     /* the interesting <session> nodes of the xml are like:
     		     <session id="ID" mode="MODE" status="STATUS" user="******">
     				<instance application="APP_ID" id="ApS_ID"/>
     			</session>
     		*/
     foreach ($sessions as $session) {
         $sessid = $session->getAttribute('id');
         $this->sessions[$sessid] = $session->getAttribute('user');
         foreach ($session->childNodes as $instance_node) {
             if ($instance_node->tagName == 'instance') {
                 $desktop = $instance_node->getAttribute('application');
                 if (!array_key_exists($desktop, $apps_link)) {
                     continue;
                 }
                 $id = $apps_link[$desktop];
                 if (!array_key_exists($id, $this->applications)) {
                     $this->applications[$id] = array();
                 }
                 $this->applications[$id][] = $sessid;
             }
         }
     }
 }
 public static function create_from_server_report($server_id_, $xml_input_)
 {
     $server = Abstract_Server::load($server_id_);
     if ($server === false) {
         return;
     }
     $external_name = $server->getExternalName();
     $dom = new DomDocument('1.0', 'utf-8');
     $dom->loadXML($xml_input_);
     if (!is_object($dom)) {
         return null;
     }
     $node = $dom->getElementsByTagName('cpu');
     if ($node->length > 0) {
         $cpu = round($node->item(0)->getAttribute('load'), 2);
     } else {
         $cpu = -1;
     }
     $node = $dom->getElementsByTagName('ram');
     if ($node->length > 0) {
         $total = (double) $server->ram_total;
         $used = (double) $node->item(0)->getAttribute('used');
         if ($total > 0) {
             $ram = round($used / $total * 100, 2);
         } else {
             $ram = 0;
         }
     } else {
         $ram = -1;
     }
     $sessions = $dom->getElementsByTagName('session');
     $apps_link = application_desktops_to_ids();
     $sessions_infos = array();
     $applications_infos = array();
     /* the interesting <session> nodes of the xml are like:
     		     <session id="ID" mode="MODE" status="STATUS" user="******">
     				<instance application="APP_ID" id="ApS_ID"/>
     			</session>
     		*/
     foreach ($sessions as $session) {
         $sessid = $session->getAttribute('id');
         $sessions_infos[$sessid] = $session->getAttribute('user');
         foreach ($session->childNodes as $instance_node) {
             if ($instance_node->tagName == 'instance') {
                 $desktop = $instance_node->getAttribute('application');
                 if (!array_key_exists($desktop, $apps_link)) {
                     continue;
                 }
                 $id = $apps_link[$desktop];
                 if (!array_key_exists($id, $applications_infos)) {
                     $applications_infos[$id] = array();
                 }
                 $applications_infos[$id][] = $sessid;
             }
         }
     }
     $data = self::infos2Xml($sessions_infos, $applications_infos);
     $report = new self(time(), $server_id_, $server->fqdn, $external_name, $cpu, $ram, $data);
     return $report;
 }