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; }