type = $type; $this->rootType = !empty($rootType) ? $rootType : $type; $this->id = $id; $this->rootID = !empty($rootID) ? $rootID : $id; $this->serverID = $serverID; $this->childrenMethod = $childrenMethod; $userGroups = users_get_groups(); if (empty($userGroups)) $this->userGroups = false; else $this->userGroups = $userGroups; global $config; include_once($config['homedir']."/include/functions_servers.php"); if (defined("METACONSOLE")) enterprise_include_once("meta/include/functions_ui_meta.php"); $this->strictACL = (bool) db_get_value("strict_acl", "tusuario", "id_user", $config['id_user']); if ($this->strictACL) { require_once($config['homedir']."/include/functions_tags.php"); $this->acltags = tags_get_user_module_and_tags($config['id_user'], 'AR'); } } public function setType($type) { $this->type = $type; } public function setFilter($filter) { $this->filter = $filter; } public function isStrict () { return $this->strictACL; } public function setStrict ($value) { $this->strictACL = (bool) $value; } protected function getAgentStatusFilter ($status = -1) { if ($status == -1) $status = $this->filter['statusAgent']; $agent_status_filter = ""; switch ($status) { case AGENT_STATUS_NOT_INIT: $agent_status_filter = " AND (ta.total_count = 0 OR ta.total_count = ta.notinit_count) "; break; case AGENT_STATUS_CRITICAL: $agent_status_filter = " AND ta.critical_count > 0 "; break; case AGENT_STATUS_WARNING: $agent_status_filter = " AND (ta.critical_count = 0 AND ta.warning_count > 0) "; break; case AGENT_STATUS_UNKNOWN: $agent_status_filter = " AND (ta.critical_count = 0 AND ta.warning_count = 0 AND ta.unknown_count > 0) "; break; case AGENT_STATUS_NORMAL: $agent_status_filter = " AND (ta.critical_count = 0 AND ta.warning_count = 0 AND ta.unknown_count = 0 AND ta.normal_count > 0) "; break; } return $agent_status_filter; } protected function getAgentCounterColumnsSql ($agent_table) { // Add the agent counters to the columns $agent_status_filter = ""; if ($this->filter['statusAgent'] == -1) { // Critical $agent_critical_filter = $this->getAgentStatusFilter(AGENT_STATUS_CRITICAL); $agents_critical_count = "($agent_table $agent_critical_filter) AS total_critical_count"; // Warning $agent_warning_filter = $this->getAgentStatusFilter(AGENT_STATUS_WARNING); $agents_warning_count = "($agent_table $agent_warning_filter) AS total_warning_count"; // Unknown $agent_unknown_filter = $this->getAgentStatusFilter(AGENT_STATUS_UNKNOWN); $agents_unknown_count = "($agent_table $agent_unknown_filter) AS total_unknown_count"; // Normal $agent_normal_filter = $this->getAgentStatusFilter(AGENT_STATUS_NORMAL); $agents_normal_count = "($agent_table $agent_normal_filter) AS total_normal_count"; // Not init $agent_not_init_filter = $this->getAgentStatusFilter(AGENT_STATUS_NOT_INIT); $agents_not_init_count = "($agent_table $agent_not_init_filter) AS total_not_init_count"; // Alerts fired $agents_fired_count = "($agent_table AND ta.fired_count > 0) AS total_fired_count"; // Total $agents_total_count = "($agent_table) AS total_count"; $columns = "$agents_critical_count, $agents_warning_count, " . "$agents_unknown_count, $agents_normal_count, $agents_not_init_count, " . "$agents_fired_count, $agents_total_count"; } else { // Alerts fired $agents_fired_count = "($agent_table AND ta.fired_count > 0) AS total_fired_count"; // Total $agents_total_count = "($agent_table) AS total_count"; switch ($this->filter['statusAgent']) { case AGENT_STATUS_NOT_INIT: // Not init $agent_not_init_filter = $this->getAgentStatusFilter(AGENT_STATUS_NOT_INIT); $agents_not_init_count = "($agent_table $agent_not_init_filter) AS total_not_init_count"; $columns = "$agents_not_init_count, $agents_fired_count, $agents_total_count"; break; case AGENT_STATUS_CRITICAL: // Critical $agent_critical_filter = $this->getAgentStatusFilter(AGENT_STATUS_CRITICAL); $agents_critical_count = "($agent_table $agent_critical_filter) AS total_critical_count"; $columns = "$agents_critical_count, $agents_fired_count, $agents_total_count"; break; case AGENT_STATUS_WARNING: // Warning $agent_warning_filter = $this->getAgentStatusFilter(AGENT_STATUS_WARNING); $agents_warning_count = "($agent_table $agent_warning_filter) AS total_warning_count"; $columns = "$agents_warning_count, $agents_fired_count, $agents_total_count"; break; case AGENT_STATUS_UNKNOWN: // Unknown $agent_unknown_filter = $this->getAgentStatusFilter(AGENT_STATUS_UNKNOWN); $agents_unknown_count = "($agent_table $agent_unknown_filter) AS total_unknown_count"; $columns = "$agents_unknown_count, $agents_fired_count, $agents_total_count"; break; case AGENT_STATUS_NORMAL: // Normal $agent_normal_filter = $this->getAgentStatusFilter(AGENT_STATUS_NORMAL); $agents_normal_count = "($agent_table $agent_normal_filter) AS total_normal_count"; $columns = "$agents_normal_count, $agents_fired_count, $agents_total_count"; break; } } return $columns; } protected function getAgentCountersSql ($agent_table) { $columns = $this->getAgentCounterColumnsSql($agent_table); $columns = "SELECT $columns FROM dual LIMIT 1"; return $columns; } protected function getSql ($item_for_count = false) { // Get the type if (empty($this->type)) $type = 'none'; else $type = $this->type; // Get the root type if (empty($this->rootType)) $rootType = 'none'; else $rootType = $this->rootType; // Get the parent $parent = $this->id; // Get the root id $rootID = $this->rootID; // Get the server id $serverID = $this->serverID; // Agent name filter $agent_search_filter = ""; if (!empty($this->filter['searchAgent'])) { $agent_search_filter = " AND ta.nombre LIKE '%".$this->filter['searchAgent']."%' "; } // Agent status filter $agent_status_filter = ""; if (isset($this->filter['statusAgent']) && $this->filter['statusAgent'] != AGENT_STATUS_ALL) { $agent_status_filter = $this->getAgentStatusFilter($this->filter['statusAgent']); } // Agents join $agents_join = ""; if (!empty($agent_search_filter) || !empty($agent_status_filter)) { $agents_join = "INNER JOIN tagente AS ta ON ta.disabled = 0 AND tam.id_agente = ta.id_agente $agent_search_filter $agent_status_filter"; } // Module name filter $module_search_filter = ""; if (!empty($this->filter['searchModule'])) { $module_search_filter = " AND tam.nombre LIKE '%".$this->filter['searchModule']."%' "; } // Module status filter $module_status_filter = ""; if (isset($this->filter['statusModule']) && $this->filter['statusModule'] != -1) { switch ($this->filter['statusModule']) { case AGENT_MODULE_STATUS_CRITICAL_ALERT: case AGENT_MODULE_STATUS_CRITICAL_BAD: $module_status_filter = " AND (tae.estado = ".AGENT_MODULE_STATUS_CRITICAL_ALERT." OR tae.estado = ".AGENT_MODULE_STATUS_CRITICAL_BAD.") "; break; case AGENT_MODULE_STATUS_WARNING_ALERT: case AGENT_MODULE_STATUS_WARNING: $module_status_filter = " AND (tae.estado = ".AGENT_MODULE_STATUS_WARNING_ALERT." OR tae.estado = ".AGENT_MODULE_STATUS_WARNING.") "; break; case AGENT_MODULE_STATUS_UNKNOWN: $module_status_filter = " AND tae.estado = ".AGENT_MODULE_STATUS_UNKNOWN." "; break; case AGENT_MODULE_STATUS_NO_DATA: case AGENT_MODULE_STATUS_NOT_INIT: $module_status_filter = " AND (tae.estado = ".AGENT_MODULE_STATUS_NO_DATA." OR tae.estado = ".AGENT_MODULE_STATUS_NOT_INIT.") "; break; case AGENT_MODULE_STATUS_NORMAL_ALERT: case AGENT_MODULE_STATUS_NORMAL: $module_status_filter = " AND (tae.estado = ".AGENT_MODULE_STATUS_NORMAL_ALERT." OR tae.estado = ".AGENT_MODULE_STATUS_NORMAL.") "; break; } } // Modules join $modules_join = ""; $module_status_join = ""; if (!empty($module_search_filter) || !empty($module_status_filter)) { if (!empty($module_status_filter)) { $module_status_join = "INNER JOIN tagente_estado AS tae ON tam.id_agente_modulo IS NOT NULL AND tam.id_agente_modulo = tae.id_agente_modulo $module_status_filter"; } $modules_join = "INNER JOIN tagente_modulo AS tam ON tam.disabled = 0 AND ta.id_agente = tam.id_agente $module_search_filter $module_status_join"; } if (empty($module_status_join)) { $module_status_join = "LEFT JOIN tagente_estado AS tae ON tam.id_agente_modulo = tae.id_agente_modulo"; } $sql = false; switch ($rootType) { case 'group': // ACL Group $group_acl = ""; if (!$this->strictACL) { if (!empty($this->userGroups)) { $user_groups_str = implode(",", array_keys($this->userGroups)); $group_acl = "AND ta.id_grupo IN ($user_groups_str)"; } else { $group_acl = "AND ta.id_grupo = -1"; } } else { if (!empty($this->acltags)) { $groups = array(); foreach ($this->acltags as $group_id => $tags_str) { if (empty($tags_str)) $groups[] = $group_id; } if (!empty($groups)) { if (array_search(0, $groups) === false) { $user_groups_str = implode(",", $groups); $group_acl = " AND ta.id_grupo IN ($user_groups_str) "; } } else { $group_acl = "AND ta.id_grupo = -1"; } } else { $group_acl = "AND ta.id_grupo = -1"; } } switch ($type) { // Get the agents of a group case 'group': if (empty($rootID) || $rootID == -1) { if ($this->strictACL) return false; $columns = 'tg.id_grupo AS id, tg.nombre AS name, tg.parent, tg.icon, COUNT(DISTINCT(ta.id_agente)) AS total_count'; $order_fields = 'tg.nombre ASC, tg.id_grupo ASC'; // Add the agent counters to the columns $agent_table = "SELECT COUNT(DISTINCT(ta.id_agente)) FROM tagente AS ta LEFT JOIN tagente_modulo AS tam ON tam.disabled = 0 AND ta.id_agente = tam.id_agente $module_search_filter $module_status_join WHERE ta.disabled = 0 AND ta.id_grupo = tg.id_grupo $group_acl $agent_search_filter $agent_status_filter"; $counter_columns = $this->getAgentCounterColumnsSql($agent_table); if (!empty($counter_columns)) $columns .= ", $counter_columns"; $sql = "SELECT $columns FROM tgrupo AS tg LEFT JOIN tagente AS ta LEFT JOIN tagente_modulo AS tam ON tam.disabled = 0 AND ta.id_agente = tam.id_agente $module_search_filter $module_status_join ON ta.disabled = 0 AND tg.id_grupo = ta.id_grupo $group_acl $agent_search_filter $agent_status_filter GROUP BY tg.id_grupo ORDER BY $order_fields"; } else { $columns = 'ta.id_agente AS id, ta.nombre AS name, ta.fired_count, ta.normal_count, ta.warning_count, ta.critical_count, ta.unknown_count, ta.notinit_count, ta.total_count, ta.quiet'; $order_fields = 'ta.nombre ASC, ta.id_agente ASC'; $sql = "SELECT $columns FROM tagente AS ta LEFT JOIN tagente_modulo AS tam ON tam.disabled = 0 AND ta.id_agente = tam.id_agente $module_search_filter $module_status_join WHERE ta.disabled = 0 AND ta.id_grupo = $rootID $group_acl $agent_search_filter $agent_status_filter GROUP BY ta.id_agente ORDER BY $order_fields"; } break; // Get the modules of an agent case 'agent': $columns = 'tam.id_agente_modulo AS id, tam.nombre AS name, tam.id_tipo_modulo, tam.id_modulo, tae.estado, tae.datos'; $order_fields = 'tam.nombre ASC, tam.id_agente_modulo ASC'; $sql = "SELECT $columns FROM tagente_modulo AS tam $module_status_join INNER JOIN tagente AS ta ON ta.disabled = 0 AND tam.id_agente = ta.id_agente AND ta.id_grupo = $rootID $group_acl $agent_search_filter $agent_status_filter WHERE tam.disabled = 0 AND tam.id_agente = $parent $module_search_filter GROUP BY tam.id_agente_modulo ORDER BY $order_fields"; break; } break; case 'tag': // ACL Group $group_acl = ""; if (!$this->strictACL) { if (!empty($this->userGroups)) { $user_groups_str = implode(",", array_keys($this->userGroups)); $group_acl = " AND ta.id_grupo IN ($user_groups_str) "; } else { $group_acl = "AND ta.id_grupo = -1"; } } else { if (!empty($this->acltags) && !empty($rootID) && $rootID != -1) { $groups = array(); foreach ($this->acltags as $group_id => $tags_str) { if (!empty($tags_str)) { $tags = explode(",", $tags_str); if (in_array($rootID, $tags)) $groups[] = $group_id; } } if (!empty($groups)) { if (array_search(0, $groups) === false) { $user_groups_str = implode(",", $groups); $group_acl = " AND ta.id_grupo IN ($user_groups_str) "; } } else { $group_acl = "AND ta.id_grupo = -1"; } } else { $group_acl = "AND ta.id_grupo = -1"; } } switch ($type) { // Get the agents of a tag case 'tag': if (empty($rootID) || $rootID == -1) { if ($this->strictACL) return false; $columns = 'tt.id_tag AS id, tt.name AS name'; $order_fields = 'tt.name ASC, tt.id_tag ASC'; // Tags SQL if ($item_for_count === false) { $sql = "SELECT $columns FROM ttag AS tt INNER JOIN ttag_module AS ttm ON tt.id_tag = ttm.id_tag INNER JOIN tagente_modulo AS tam ON tam.disabled = 0 AND ttm.id_agente_modulo = tam.id_agente_modulo $module_search_filter $module_status_join INNER JOIN tagente AS ta ON ta.disabled = 0 AND tam.id_agente = ta.id_agente $group_acl $agent_search_filter $agent_status_filter GROUP BY tt.id_tag ORDER BY $order_fields"; } // Counters SQL else { $agent_table = "SELECT COUNT(DISTINCT(ta.id_agente)) FROM tagente AS ta INNER JOIN tagente_modulo AS tam ON tam.disabled = 0 AND ta.id_agente = tam.id_agente $module_search_filter $module_status_join INNER JOIN ttag_module AS ttm ON tam.id_agente_modulo = ttm.id_agente_modulo AND ttm.id_tag = $item_for_count WHERE ta.disabled = 0 $group_acl $agent_search_filter $agent_status_filter"; $sql = $this->getAgentCountersSql($agent_table); } } else { $columns = 'ta.id_agente AS id, ta.nombre AS name, ta.fired_count, ta.normal_count, ta.warning_count, ta.critical_count, ta.unknown_count, ta.notinit_count, ta.total_count, ta.quiet'; $order_fields = 'ta.nombre ASC, ta.id_agente ASC'; $sql = "SELECT $columns FROM tagente AS ta INNER JOIN tagente_modulo AS tam ON tam.disabled = 0 AND ta.id_agente = tam.id_agente $module_search_filter $module_status_join INNER JOIN ttag_module AS ttm ON tam.id_agente_modulo = ttm.id_agente_modulo AND ttm.id_tag = $rootID WHERE ta.disabled = 0 $group_acl $agent_search_filter $agent_status_filter GROUP BY ta.id_agente ORDER BY $order_fields"; } break; // Get the modules of an agent case 'agent': $columns = 'tam.id_agente_modulo AS id, tam.nombre AS name, tam.id_tipo_modulo, tam.id_modulo, tae.estado, tae.datos'; $order_fields = 'tam.nombre ASC, tam.id_agente_modulo ASC'; $sql = "SELECT $columns FROM tagente_modulo AS tam INNER JOIN ttag_module AS ttm ON tam.id_agente_modulo = ttm.id_agente_modulo AND ttm.id_tag = $rootID $module_status_join INNER JOIN tagente AS ta ON ta.disabled = 0 AND tam.id_agente = ta.id_agente $group_acl $agent_search_filter $agent_status_filter WHERE tam.disabled = 0 AND tam.id_agente = $parent $module_search_filter GROUP BY tam.id_agente_modulo ORDER BY $order_fields"; break; } break; case 'os': // ACL Group $group_acl = ""; if (!empty($this->userGroups)) { $user_groups_str = implode(",", array_keys($this->userGroups)); $group_acl = " AND ta.id_grupo IN ($user_groups_str) "; } else { $group_acl = "AND ta.id_grupo = -1"; } switch ($type) { // Get the agents of an os case 'os': if (empty($rootID) || $rootID == -1) { $columns = 'tos.id_os AS id, tos.name AS name, tos.icon_name AS os_icon'; $order_fields = 'tos.icon_name ASC, tos.id_os ASC'; // OS SQL if ($item_for_count === false) { $sql = "SELECT $columns FROM tconfig_os AS tos INNER JOIN tagente AS ta ON ta.disabled = 0 AND ta.id_os = tos.id_os $agent_search_filter $agent_status_filter $group_acl $modules_join GROUP BY tos.id_os ORDER BY $order_fields"; } // Counters SQL else { $agent_table = "SELECT COUNT(DISTINCT(ta.id_agente)) FROM tagente AS ta $modules_join WHERE ta.disabled = 0 AND ta.id_os = $item_for_count $group_acl $agent_search_filter $agent_status_filter"; $sql = $this->getAgentCountersSql($agent_table); } } else { $columns = 'ta.id_agente AS id, ta.nombre AS name, ta.fired_count, ta.normal_count, ta.warning_count, ta.critical_count, ta.unknown_count, ta.notinit_count, ta.total_count, ta.quiet'; $order_fields = 'ta.nombre ASC, ta.id_agente ASC'; $sql = "SELECT $columns FROM tagente AS ta $modules_join WHERE ta.disabled = 0 AND ta.id_os = $rootID $group_acl $agent_search_filter $agent_status_filter GROUP BY ta.id_agente ORDER BY $order_fields"; } break; // Get the modules of an agent case 'agent': $columns = 'tam.id_agente_modulo AS id, tam.nombre AS name, tam.id_tipo_modulo, tam.id_modulo, tae.estado, tae.datos'; $order_fields = 'tam.nombre ASC, tam.id_agente_modulo ASC'; $os_filter = "AND ta.id_os = $rootID"; $agent_filter = "AND ta.id_agente = $parent"; $sql = "SELECT $columns FROM tagente_modulo AS tam $module_status_join INNER JOIN tagente AS ta ON ta.disabled = 0 AND tam.id_agente = ta.id_agente $os_filter $group_acl $agent_search_filter $agent_status_filter WHERE tam.disabled = 0 $agent_filter $module_search_filter GROUP BY tam.id_agente_modulo ORDER BY $order_fields"; break; } break; case 'module_group': // ACL Group $group_acl = ""; if (!empty($this->userGroups)) { $user_groups_str = implode(",", array_keys($this->userGroups)); $group_acl = " AND ta.id_grupo IN ($user_groups_str) "; } else { $group_acl = "AND ta.id_grupo = -1"; } switch ($type) { // Get the agents of a module group case 'module_group': if (empty($rootID) || $rootID == -1) { $columns = 'tmg.id_mg AS id, tmg.name AS name'; $order_fields = 'tmg.name ASC, tmg.id_mg ASC'; // Module groups SQL if ($item_for_count === false) { $sql = "SELECT $columns FROM tmodule_group AS tmg INNER JOIN tagente_modulo AS tam ON tam.disabled = 0 AND tam.id_module_group = tmg.id_mg $module_search_filter $module_status_join INNER JOIN tagente AS ta ON ta.disabled = 0 AND tam.id_agente = ta.id_agente $group_acl $agent_search_filter $agent_status_filter GROUP BY tmg.id_mg ORDER BY $order_fields"; } // Counters SQL else { $agent_table = "SELECT COUNT(DISTINCT(ta.id_agente)) FROM tagente AS ta INNER JOIN tagente_modulo AS tam ON tam.disabled = 0 AND ta.id_agente = tam.id_agente AND tam.id_module_group = $item_for_count $module_search_filter $module_status_join WHERE ta.disabled = 0 $group_acl $agent_search_filter $agent_status_filter"; $sql = $this->getAgentCountersSql($agent_table); } } else { $columns = 'ta.id_agente AS id, ta.nombre AS name, ta.fired_count, ta.normal_count, ta.warning_count, ta.critical_count, ta.unknown_count, ta.notinit_count, ta.total_count, ta.quiet'; $order_fields = 'ta.nombre ASC, ta.id_agente ASC'; $sql = "SELECT $columns FROM tagente AS ta INNER JOIN tagente_modulo AS tam ON tam.disabled = 0 AND ta.id_agente = tam.id_agente AND tam.id_module_group = $rootID $module_search_filter $module_status_join WHERE ta.disabled = 0 $group_acl $agent_search_filter $agent_status_filter GROUP BY ta.id_agente ORDER BY $order_fields"; } break; // Get the modules of an agent case 'agent': $columns = 'tam.id_agente_modulo AS id, tam.nombre AS name, tam.id_tipo_modulo, tam.id_modulo, tae.estado, tae.datos'; $order_fields = 'tam.nombre ASC, tam.id_agente_modulo ASC'; $module_group_filter = "AND tam.id_module_group = $rootID"; $agent_filter = "AND tam.id_agente = $parent"; $sql = "SELECT $columns FROM tagente_modulo AS tam $module_status_join INNER JOIN tagente AS ta ON ta.disabled = 0 AND tam.id_agente = ta.id_agente $group_acl $agent_search_filter $agent_status_filter WHERE tam.disabled = 0 $agent_filter $module_group_filter $module_search_filter GROUP BY tam.id_agente_modulo ORDER BY $order_fields"; break; } break; case 'module': // ACL Group $group_acl = ""; if (!empty($this->userGroups)) { $user_groups_str = implode(",", array_keys($this->userGroups)); $group_acl = " AND ta.id_grupo IN ($user_groups_str) "; } else { $group_acl = "AND ta.id_grupo = -1"; } switch ($type) { // Get the agents of a module case 'module': if (empty($rootID) || $rootID == -1) { $columns = 'tam.nombre AS name'; $order_fields = 'tam.nombre ASC'; // Modules SQL if ($item_for_count === false) { $sql = "SELECT $columns FROM tagente_modulo AS tam INNER JOIN tagente AS ta ON ta.disabled = 0 AND tam.id_agente = ta.id_agente $group_acl $agent_search_filter $agent_status_filter $module_status_join WHERE tam.disabled = 0 $module_search_filter GROUP BY tam.nombre ORDER BY $order_fields"; } // Counters SQL else { $agent_table = "SELECT COUNT(DISTINCT(ta.id_agente)) FROM tagente AS ta INNER JOIN tagente_modulo AS tam ON tam.disabled = 0 AND ta.id_agente = tam.id_agente AND tam.nombre = '$item_for_count' $module_group_filter $module_search_filter $module_status_join WHERE ta.disabled = 0 $group_acl $agent_search_filter $agent_status_filter"; $sql = $this->getAgentCountersSql($agent_table); } } else { $columns = 'ta.id_agente AS id, ta.nombre AS name, ta.fired_count, ta.normal_count, ta.warning_count, ta.critical_count, ta.unknown_count, ta.notinit_count, ta.total_count, ta.quiet'; $order_fields = 'ta.nombre ASC, ta.id_agente ASC'; $symbols = ' !"#$%&\'()*+,./:;<=>?@[\\]^{|}~'; $name = $rootID; for ($i = 0; $i < strlen($symbols); $i++) { $name = str_replace('_articapandora_' . ord(substr($symbols, $i, 1)) .'_pandoraartica_', substr($symbols, $i, 1), $name); } $name = io_safe_input($name); $sql = "SELECT $columns FROM tagente AS ta INNER JOIN tagente_modulo AS tam ON tam.disabled = 0 AND ta.id_agente = tam.id_agente AND tam.nombre = '$name' $module_group_filter $module_search_filter $module_status_join WHERE ta.disabled = 0 $group_acl $agent_search_filter $agent_status_filter GROUP BY ta.id_agente ORDER BY $order_fields"; } break; // Get the modules of an agent case 'agent': $columns = 'tam.id_agente_modulo AS id, tam.nombre AS name, tam.id_tipo_modulo, tam.id_modulo, tae.estado, tae.datos'; $order_fields = 'tam.nombre ASC, tam.id_agente_modulo ASC'; $symbols = ' !"#$%&\'()*+,./:;<=>?@[\\]^{|}~'; $name = $rootID; for ($i = 0; $i < strlen($symbols); $i++) { $name = str_replace('_articapandora_' . ord(substr($symbols, $i, 1)) .'_pandoraartica_', substr($symbols, $i, 1), $name); } $name = io_safe_input($name); $module_name_filter = "AND tam.nombre = '$name'"; $agent_filter = "AND tam.id_agente = $parent"; // We need the agents table if (empty($agents_join)) { $agents_join = "INNER JOIN tagente AS ta ON ta.disabled = 0 AND tam.id_agente = ta.id_agente $group_acl"; } else { $agents_join .= " $group_acl"; } $sql = "SELECT $columns FROM tagente_modulo AS tam $module_status_join INNER JOIN tagente AS ta ON ta.disabled = 0 AND tam.id_agente = ta.id_agente $group_acl WHERE tam.disabled = 0 $agent_filter $module_name_filter $module_group_filter $module_search_filter GROUP BY tam.id_agente_modulo ORDER BY $order_fields"; break; } break; default: $sql = $this->getSqlExtended($item_for_count, $type, $rootType, $parent, $rootID, $agent_search_filter, $agent_status_filter, $agents_join, $module_search_filter, $module_status_filter, $modules_join, $module_status_join); } return $sql; } // Override this method protected function getSqlExtended ($item_for_count, $type, $rootType, $parent, $rootID, $agent_search_filter, $agent_status_filter, $agents_join, $module_search_filter, $module_status_filter, $modules_join, $module_status_join) { return false; } protected function getItems ($item_for_count = false) { $sql = $this->getSql($item_for_count); if (empty($sql)) return array(); $data = db_process_sql($sql); if (empty($data)) return array(); return $data; } protected function getCounters ($id) { $counters = $this->getItems($id); if (!empty($counters)) { $counters = array_pop($counters); } return $counters; } static function cmpSortNames($a, $b) { return strcmp($a["name"], $b["name"]); } protected function getGroupsChildren($groups, $parent_id, $server = false, $remove_empty = false) { $children = array(); foreach ($groups as $key => $group) { if ((isset($group['parent']) && $group['parent'] == $parent_id) || (isset($group['_parent_id_']) && $group['_parent_id_'] == $parent_id)) { $children_aux = $this->getProcessedItem($group, $server, $groups, $remove_empty); if (!empty($children_aux)) $children[] = $children_aux; } } return $children; } protected function getProcessedItem ($item, $server = false, $items = array(), $remove_empty = false) { $processed_item = array(); $processed_item['id'] = $item['id']; $processed_item['name'] = $item['name']; $processed_item['rootID'] = $item['id']; $processed_item['rootType'] = $this->rootType; $processed_item['searchChildren'] = 1; if (isset($item['type'])) $processed_item['type'] = $item['type']; else $processed_item['type'] = $this->type; if (isset($item['rootType'])) $processed_item['rootType'] = $item['rootType']; else $processed_item['rootType'] = $this->rootType; if ($processed_item['type'] == 'group') { if (!empty($item['iconHTML'])) $processed_item['iconHTML'] = $item['iconHTML']; else if (!empty($item['icon'])) $processed_item['icon'] = $item['icon'].".png"; else $processed_item['icon'] = "without_group.png"; } if (defined("METACONSOLE") && !empty($server)) { $processed_item['serverID'] = $server['id']; } $counters = array(); if (isset($item['total_unknown_count'])) $counters['unknown'] = $item['total_unknown_count']; if (isset($item['total_critical_count'])) $counters['critical'] = $item['total_critical_count']; if (isset($item['total_warning_count'])) $counters['warning'] = $item['total_warning_count']; if (isset($item['total_not_init_count'])) $counters['not_init'] = $item['total_not_init_count']; if (isset($item['total_normal_count'])) $counters['ok'] = $item['total_normal_count']; if (isset($item['total_count'])) $counters['total'] = $item['total_count']; if (isset($item['total_fired_count'])) $counters['alerts'] = $item['total_fired_count']; if ($processed_item['type'] == 'group' && !empty($items)) { $children = $this->getGroupsChildren($items, $item['id'], $server, $remove_empty); if (!empty($children)) { $processed_item['children'] = $children; foreach ($children as $key => $child) { if (isset($child['counters'])) { foreach ($child['counters'] as $type => $value) { if (isset($counters[$type])) $counters[$type] += $value; } } } } } if (!empty($counters)) $processed_item['counters'] = $counters; if ($remove_empty && $processed_item['type'] == 'group' && (!isset($processed_item['counters']['total']) || empty($processed_item['counters']['total']))) { $processed_item = array(); } return $processed_item; } // This function should be used only when retrieving the data of the metaconsole's nodes protected function getMergedItems ($items) { // This variable holds the result $mergedItems = array(); foreach ($items as $key => $item) { // Avoid the deleted items if (!isset($items[$key]) || empty($item)) continue; // Store the item in a temporary element $resultItem = $item; // The 'id' parameter will be stored as 'server_id' => 'id' $resultItem['id'] = array(); $resultItem['id'][$item['serverID']] = $item['id']; $resultItem['rootID'] = array(); $resultItem['rootID'][$item['serverID']] = $item['rootID']; $resultItem['serverID'] = array(); $resultItem['serverID'][$item['serverID']] = $item['rootID']; // Initialize counters if any of it don't exist if (!isset($resultItem['counters'])) $resultItem['counters'] = array(); if (!isset($resultItem['counters']['unknown'])) $resultItem['counters']['unknown'] = 0; if (!isset($resultItem['counters']['critical'])) $resultItem['counters']['critical'] = 0; if (!isset($resultItem['counters']['warning'])) $resultItem['counters']['warning'] = 0; if (!isset($resultItem['counters']['not_init'])) $resultItem['counters']['not_init'] = 0; if (!isset($resultItem['counters']['ok'])) $resultItem['counters']['ok'] = 0; if (!isset($resultItem['counters']['total'])) $resultItem['counters']['total'] = 0; if (!isset($resultItem['counters']['alerts'])) $resultItem['counters']['alerts'] = 0; if ($item['type'] == 'group') { // Add the children if (!isset($resultItem['children'])) $resultItem['children'] = array(); } // Iterate over the list to search items that match the actual item foreach ($items as $key2 => $item2) { // Skip the actual or empty items if ($key == $key2 || !isset($items[$key2])) continue; // Match with the name and type if ($item['name'] == $item2['name'] && $item['type'] == $item2['type']) { // Add the matched ids $resultItem['id'][$item2['serverID']] = $item2['id']; $resultItem['rootID'][$item2['serverID']] = $item2['rootID']; $resultItem['serverID'][$item2['serverID']] = $item2['rootID']; // Add the matched counters if (isset($item2['counters']) && !empty($item2['counters'])) { foreach ($item2['counters'] as $type => $value) { if (isset($resultItem['counters'][$type])) $resultItem['counters'][$type] += $value; } } if ($item['type'] == 'group') { // Add the matched children if (isset($item2['children'])) $resultItem['children'] = array_merge($resultItem['children'], $item2['children']); } // Remove the item unset($items[$key2]); } } if ($item['type'] == 'group') { // Get the merged children (recursion) if (!empty($resultItem['children'])) $resultItem['children'] = $this->getMergedItems($resultItem['children']); } // Add the resulting item if (!empty($resultItem) && !empty($resultItem['counters']['total'])) $mergedItems[] = $resultItem; // Remove the item unset($items[$key]); } usort($mergedItems, array("Tree", "cmpSortNames")); return $mergedItems; } protected function processModule (&$module, $server = false) { global $config; $module['type'] = 'module'; $module['id'] = (int) $module['id']; $module['name'] = $module['name']; $module['id_module_type'] = (int) $module['id_tipo_modulo']; $module['server_type'] = (int) $module['id_modulo']; $module['status'] = $module['estado']; $module['value'] = $module['datos']; if (defined("METACONSOLE") && !empty($server)) { $module['serverID'] = $server['id']; $module['serverName'] = $server['server_name']; } else{ $module['serverName'] = false; $module['serverID'] = false; } if (!isset($module['value'])) $module['value'] = modules_get_last_value($module['id']); // Status switch ($module['status']) { case AGENT_MODULE_STATUS_CRITICAL_ALERT: $module['alert'] = 1; case AGENT_MODULE_STATUS_CRITICAL_BAD: $statusType = STATUS_MODULE_CRITICAL_BALL; $statusTitle = __('CRITICAL'); $module['statusText'] = "critical"; break; case AGENT_MODULE_STATUS_WARNING_ALERT: $module['alert'] = 1; case AGENT_MODULE_STATUS_WARNING: $statusType = STATUS_MODULE_WARNING_BALL; $statusTitle = __('WARNING'); $module['statusText'] = "warning"; break; case AGENT_MODULE_STATUS_UNKNOWN: $statusType = STATUS_MODULE_UNKNOWN_BALL; $statusTitle = __('UNKNOWN'); $module['statusText'] = "unknown"; break; case AGENT_MODULE_STATUS_NO_DATA: case AGENT_MODULE_STATUS_NOT_INIT: $statusType = STATUS_MODULE_NO_DATA_BALL; $statusTitle = __('NO DATA'); $module['statusText'] = "not_init"; break; case AGENT_MODULE_STATUS_NORMAL_ALERT: $module['alert'] = 1; case AGENT_MODULE_STATUS_NORMAL: default: $statusType = STATUS_MODULE_OK_BALL; $statusTitle = __('NORMAL'); $module['statusText'] = "ok"; break; } if ($statusType !== STATUS_MODULE_UNKNOWN_BALL && $statusType !== STATUS_MODULE_NO_DATA_BALL) { if (is_numeric($module["value"])) { $statusTitle .= " : " . format_for_graph($module["value"]); } else { $statusTitle .= " : " . substr(io_safe_output($module["value"]),0,42); } } $module['statusImageHTML'] = ui_print_status_image($statusType, $statusTitle, true); // HTML of the server type image $module['serverTypeHTML'] = servers_show_type($module['server_type']); // Link to the Module graph $graphType = return_graphtype($module['id_module_type']); $winHandle = dechex(crc32($module['id'] . $module['name'])); if (!defined('METACONSOLE')) { $moduleGraphURL = $config['homeurl'] . "/operation/agentes/stat_win.php?" . "type=$graphType&" . "period=" . SECONDS_1DAY . "&" . "id=" . $module['id'] . "&" . "label=" . rawurlencode(urlencode(base64_encode($module['name']))) . "&" . "refresh=" . SECONDS_10MINUTES; } else if (!empty($server)) { $moduleGraphURL = ui_meta_get_url_console_child( $server, null, null, null, null, "operation/agentes/stat_win.php?" . "type=$graphType&" . "period=" . SECONDS_1DAY . "&" . "id=" . $module["id"] . "&" . "label=" . rawurlencode(urlencode(base64_encode($module['name']))) . "&" . "refresh=" . SECONDS_10MINUTES); } if (!empty($moduleGraphURL)) { $module['moduleGraph'] = array( 'url' => $moduleGraphURL, 'handle' => $winHandle ); } // Alerts fired image $has_alerts = (bool) db_get_value( 'COUNT(DISTINCT(id_agent_module))', 'talert_template_modules', 'id_agent_module', $module['id']); if ($has_alerts) { $module['alertsImageHTML'] = html_print_image("images/bell.png", true, array("title" => __('Module alerts'))); } } protected function processModules (&$modules, $server = false) { foreach ($modules as $iterator => $module) { $this->processModule($modules[$iterator], $server); } } protected function processAgent (&$agent, $server = false) { global $config; $agent['type'] = 'agent'; $agent['id'] = (int) $agent['id']; $agent['name'] = $agent['name']; $agent['rootID'] = $this->rootID; $agent['rootType'] = $this->rootType; if (defined("METACONSOLE") && !empty($server)) $agent['serverID'] = $server['id']; // Counters if (empty($agent['counters'])) { $agent['counters'] = array(); if (isset($agent['unknown_count'])) $agent['counters']['unknown'] = $agent['unknown_count']; else $agent['counters']['unknown'] = agents_monitor_unknown($agent['id']); if (isset($agent['critical_count'])) $agent['counters']['critical'] = $agent['critical_count']; else $agent['counters']['critical'] = agents_monitor_critical($agent['id']); if (isset($agent['warning_count'])) $agent['counters']['warning'] = $agent['warning_count']; else $agent['counters']['warning'] = agents_monitor_warning($agent['id']); if (isset($agent['notinit_count'])) $agent['counters']['not_init'] = $agent['notinit_count']; else $agent['counters']['not_init'] = agents_monitor_notinit($agent['id']); if (isset($agent['normal_count'])) $agent['counters']['ok'] = $agent['normal_count']; else $agent['counters']['ok'] = agents_monitor_ok($agent['id']); if (isset($agent['total_count'])) $agent['counters']['total'] = $agent['total_count']; else $agent['counters']['total'] = agents_monitor_total($agent['id']); if (isset($agent['fired_count'])) $agent['counters']['alerts'] = $agent['fired_count']; else $agent['counters']['alerts'] = agents_get_alerts_fired($agent['id']); } // Status image $agent['statusImageHTML'] = agents_tree_view_status_img_ball( $agent['counters']['critical'], $agent['counters']['warning'], $agent['counters']['unknown'], $agent['counters']['total'], $agent['counters']['not_init']); // Alerts fired image $agent["alertImageHTML"] = agents_tree_view_alert_img_ball($agent['counters']['alerts']); // Quiet image if (isset($agent['quiet']) && $agent['quiet']) $agent['quietImageHTML'] = html_print_image("/images/dot_green.disabled.png", true, array("title" => __('Quiet'))); // Status $agent['statusRaw'] = agents_get_status($agent['id']); switch ($agent['statusRaw']) { case AGENT_STATUS_NORMAL: $agent['status'] = "ok"; break; case AGENT_STATUS_WARNING: $agent['status'] = "warning"; break; case AGENT_STATUS_CRITICAL: $agent['status'] = "critical"; break; case AGENT_STATUS_UNKNOWN: $agent['status'] = "unknown"; break; case AGENT_STATUS_NOT_INIT: $agent['status'] = "not_init"; break; default: $agent['status'] = "none"; break; } // Children if (empty($agent['children'])) { $agent['children'] = array(); if ($agent['counters']['total'] > 0) { switch ($this->childrenMethod) { case 'on_demand': $agent['searchChildren'] = 1; break; case 'live': $agent['searchChildren'] = 0; // if ($searchChildren) // $agent['children'] = $this->getModules($agent['id'], $modulesFilter); break; } } else { switch ($this->childrenMethod) { case 'on_demand': $agent['searchChildren'] = 0; break; case 'live': $agent['searchChildren'] = 0; break; } } } } protected function processAgents (&$agents, $server = false) { if (!empty($agents)) { foreach ($agents as $iterator => $agent) { $this->processAgent($agents[$iterator], $server); } } } public function getData() { if (! $this->strictACL) { switch ($this->type) { case 'os': $this->getDataOS(); break; case 'group': $this->getDataGroup(); break; case 'module_group': $this->getDataModuleGroup(); break; case 'module': $this->getDataModules(); break; case 'tag': $this->getDataTag(); break; case 'agent': $this->getDataAgent(); break; default: $this->getDataExtended(); } } else { switch ($this->type) { case 'group': case 'tag': $this->getDataStrict(); break; case 'agent': $this->getDataAgent(); break; } } } protected function getDataExtended () { // Override this method to add new types } private function getDataAgent () { $processed_items = array(); // Module names if ($this->id == -1) { } // Agents else { if (! defined ('METACONSOLE')) { $items = $this->getItems(); $this->processModules($items); $processed_items = $items; } else { $items = array(); if ($this->serverID !== false) { $server = metaconsole_get_servers($this->serverID); if (metaconsole_connect($server) == NOERR) { db_clean_cache(); $newItems = $this->getItems(); $this->processModules($newItems, $server); $items = array_merge($items, $newItems); metaconsole_restore_db(); } } if (!empty($items)) usort($items, array("Tree", "cmpSortNames")); $processed_items = $items; } } $this->tree = $processed_items; } private function getDataStrict () { global $config; require_once($config['homedir']."/include/functions_groups.php"); $processed_items = array(); // Groups and tags if ($this->id == -1) { if (! defined ('METACONSOLE')) { $items = group_get_data($config['id_user'], $this->strictACL, $this->acltags, false, 'tree'); // Build the group and tag hierarchy $processed_items = array(); foreach ($items as $key => $item) { if (empty($item['_parent_id_'])) { unset($items[$key]); $item['id'] = $item['_id_']; $item['name'] = $item['_name_']; if (isset($item['_is_tag_']) && $item['_is_tag_']) { $item['type'] = 'tag'; $item['rootType'] = 'tag'; } else { $item['type'] = 'group'; $item['rootType'] = 'group'; $item['parent'] = $item['_parent_id_']; if (!empty($item['_iconImg_'])) $item['iconHTML'] = $item['_iconImg_']; } if (isset($item['_agents_unknown_'])) $item['total_unknown_count'] = $item['_agents_unknown_']; if (isset($item['_agents_critical_'])) $item['total_critical_count'] = $item['_agents_critical_']; if (isset($item['_agents_warning_'])) $item['total_warning_count'] = $item['_agents_warning_']; if (isset($item['_agents_not_init_'])) $item['total_not_init_count'] = $item['_agents_not_init_']; if (isset($item['_agents_ok_'])) $item['total_normal_count'] = $item['_agents_ok_']; if (isset($item['_total_agents_'])) $item['total_count'] = $item['_total_agents_']; if (isset($item['_monitors_alerts_fired_'])) $item['total_fired_count'] = $item['_monitors_alerts_fired_']; $processed_item = $this->getProcessedItem($item, false, $items); if (!empty($processed_item) && isset($processed_item['counters']) && isset($processed_item['counters']['total']) && !empty($processed_item['counters']['total'])) { $processed_items[] = $processed_item; } } } } else { $unmerged_items = array(); $servers = metaconsole_get_servers(); foreach ($servers as $server) { if (metaconsole_connect($server) != NOERR) continue; db_clean_cache(); $items = group_get_data($config['id_user'], $this->strictACL, $this->acltags, false, 'tree'); // Build the group hierarchy $processed_items = array(); foreach ($items as $key => $item) { if (empty($item['_parent_id_'])) { unset($items[$key]); $item['id'] = $item['_id_']; $item['name'] = $item['_name_']; if (isset($item['_is_tag_']) && $item['_is_tag_']) { $item['type'] = 'tag'; $item['rootType'] = 'tag'; } else { $item['type'] = 'group'; $item['rootType'] = 'group'; $item['parent'] = $item['_parent_id_']; if (!empty($item['_iconImg_'])) $item['iconHTML'] = $item['_iconImg_']; } if (isset($item['_agents_unknown_'])) $item['total_unknown_count'] = $item['_agents_unknown_']; if (isset($item['_agents_critical_'])) $item['total_critical_count'] = $item['_agents_critical_']; if (isset($item['_agents_warning_'])) $item['total_warning_count'] = $item['_agents_warning_']; if (isset($item['_agents_not_init_'])) $item['total_not_init_count'] = $item['_agents_not_init_']; if (isset($item['_agents_ok_'])) $item['total_normal_count'] = $item['_agents_ok_']; if (isset($item['_total_agents_'])) $item['total_count'] = $item['_total_agents_']; if (isset($item['_monitors_alerts_fired_'])) $item['total_fired_count'] = $item['_monitors_alerts_fired_']; $processed_items[] = $this->getProcessedItem($item, $server, $items); } } $unmerged_items += $processed_items; metaconsole_restore_db(); } $processed_items = $this->getMergedItems($unmerged_items); } } // Agents else { if (! defined ('METACONSOLE')) { $items = $this->getItems(); $this->processAgents($items); $processed_items = $items; } else { $rootIDs = $this->rootID; $items = array(); foreach ($rootIDs as $serverID => $rootID) { $server = metaconsole_get_servers($serverID); if (metaconsole_connect($server) != NOERR) continue; db_clean_cache(); $this->rootID = $rootID; $newItems = $this->getItems(); $this->processAgents($newItems, $server); $items = array_merge($items, $newItems); metaconsole_restore_db(); } $this->rootID = $rootIDs; if (!empty($items)) usort($items, array("Tree", "cmpSortNames")); $processed_items = $items; } } $this->tree = $processed_items; } private function getDataGroup() { $processed_items = array(); // Groups if ($this->id == -1) { if (! defined ('METACONSOLE')) { $items = $this->getItems(); // Build the group hierarchy foreach ($items as $key => $item) { if (empty($item['parent'])) { unset($items[$key]); $processed_item = $this->getProcessedItem($item, false, $items, true); if (!empty($processed_item) && isset($processed_item['counters']) && isset($processed_item['counters']['total']) && !empty($processed_item['counters']['total'])) $processed_items[] = $processed_item; } } } else { $servers = metaconsole_get_servers(); $item_list = array(); foreach ($servers as $server) { if (metaconsole_connect($server) != NOERR) continue; db_clean_cache(); $items = $this->getItems(); // Build the group hierarchy $processed_items = array(); foreach ($items as $key => $item) { if (empty($item['parent'])) { unset($items[$key]); $processed_items[] = $this->getProcessedItem($item, $server, $items); } } $item_list = array_merge($item_list, $processed_items); metaconsole_restore_db(); } $processed_items = $this->getMergedItems($item_list); } } // Agents else { if (! defined ('METACONSOLE')) { $items = $this->getItems(); $this->processAgents($items); $processed_items = $items; } else { $rootIDs = $this->rootID; $items = array(); foreach ($rootIDs as $serverID => $rootID) { $server = metaconsole_get_servers($serverID); if (metaconsole_connect($server) != NOERR) continue; db_clean_cache(); $this->rootID = $rootID; $newItems = $this->getItems(); $this->processAgents($newItems, $server); $items = array_merge($items, $newItems); metaconsole_restore_db(); } $this->rootID = $rootIDs; if (!empty($items)) usort($items, array("Tree", "cmpSortNames")); $processed_items = $items; } } $this->tree = $processed_items; } private function getDataTag() { $processed_items = array(); // Tags if ($this->id == -1) { if (! defined ('METACONSOLE')) { $items = $this->getItems(); foreach ($items as $key => $item) { $counters = $this->getCounters($item['id']); if (!empty($counters)) { foreach ($counters as $type => $value) { $item[$type] = $value; } } $processed_item = $this->getProcessedItem($item); $processed_items[] = $processed_item; } } else { $servers = metaconsole_get_servers(); $item_list = array(); foreach ($servers as $server) { if (metaconsole_connect($server) != NOERR) continue; db_clean_cache(); $items = $this->getItems(); $processed_items = array(); foreach ($items as $key => $item) { $counters = $this->getCounters($item['id']); if (!empty($counters)) { foreach ($counters as $type => $value) { $item[$type] = $value; } } $processed_item = $this->getProcessedItem($item, $server); $processed_items[] = $processed_item; } $item_list = array_merge($item_list, $processed_items); metaconsole_restore_db(); } $processed_items = $this->getMergedItems($item_list); } } // Agents else { if (! defined ('METACONSOLE')) { $items = $this->getItems(); $this->processAgents($items); $processed_items = $items; } else { $rootIDs = $this->rootID; $items = array(); foreach ($rootIDs as $serverID => $rootID) { $server = metaconsole_get_servers($serverID); if (metaconsole_connect($server) != NOERR) continue; db_clean_cache(); $this->rootID = $rootID; $newItems = $this->getItems(); $this->processAgents($newItems, $server); $items = array_merge($items, $newItems); metaconsole_restore_db(); } $this->rootID = $rootIDs; if (!empty($items)) usort($items, array("Tree", "cmpSortNames")); $processed_items = $items; } } $this->tree = $processed_items; } private function getDataModules() { $processed_items = array(); // Module names if ($this->id == -1) { if (! defined ('METACONSOLE')) { $items = $this->getItems(); foreach ($items as $key => $item) { $counters = $this->getCounters($item['name']); if (!empty($counters)) { foreach ($counters as $type => $value) { $item[$type] = $value; } } $name = str_replace(array(' ','#','/','.','(',')','¿','?','¡','!'), array( '_articapandora_'.ord(' ').'_pandoraartica_', '_articapandora_'.ord('#').'_pandoraartica_', '_articapandora_'.ord('/').'_pandoraartica_', '_articapandora_'.ord('.').'_pandoraartica_', '_articapandora_'.ord('(').'_pandoraartica_', '_articapandora_'.ord(')').'_pandoraartica_', '_articapandora_'.ord('¿').'_pandoraartica_', '_articapandora_'.ord('?').'_pandoraartica_', '_articapandora_'.ord('¡').'_pandoraartica_', '_articapandora_'.ord('!').'_pandoraartica_'), io_safe_output($item['name'])); $processed_item = $this->getProcessedItem($item); $processed_item['id'] = $name; $processed_item['rootID'] = $name; $processed_items[] = $processed_item; } } else { $servers = metaconsole_get_servers(); $item_list = array(); foreach ($servers as $server) { if (metaconsole_connect($server) != NOERR) continue; db_clean_cache(); $items = $this->getItems(); $processed_items = array(); foreach ($items as $key => $item) { $counters = $this->getCounters($item['name']); if (!empty($counters)) { foreach ($counters as $type => $value) { $item[$type] = $value; } } $name = str_replace(array(' ','#','/','.','(',')','¿','?','¡','!'), array( '_articapandora_'.ord(' ').'_pandoraartica_', '_articapandora_'.ord('#').'_pandoraartica_', '_articapandora_'.ord('/').'_pandoraartica_', '_articapandora_'.ord('.').'_pandoraartica_', '_articapandora_'.ord('(').'_pandoraartica_', '_articapandora_'.ord(')').'_pandoraartica_', '_articapandora_'.ord('¿').'_pandoraartica_', '_articapandora_'.ord('?').'_pandoraartica_', '_articapandora_'.ord('¡').'_pandoraartica_', '_articapandora_'.ord('!').'_pandoraartica_'), io_safe_output($item['name'])); $processed_item = $this->getProcessedItem($item, $server); $processed_item['id'] = $name; $processed_item['rootID'] = $name; $processed_items[] = $processed_item; } $item_list = array_merge($item_list, $processed_items); metaconsole_restore_db(); } $processed_items = $this->getMergedItems($item_list); } } // Agents else { if (! defined ('METACONSOLE')) { $items = $this->getItems(); $this->processAgents($items); $processed_items = $items; } else { $rootIDs = $this->rootID; $items = array(); foreach ($rootIDs as $serverID => $rootID) { $server = metaconsole_get_servers($serverID); if (metaconsole_connect($server) != NOERR) continue; db_clean_cache(); $this->rootID = $rootID; $newItems = $this->getItems(); $this->processAgents($newItems, $server); $items = array_merge($items, $newItems); metaconsole_restore_db(); } $this->rootID = $rootIDs; if (!empty($items)) usort($items, array("Tree", "cmpSortNames")); $processed_items = $items; } } $this->tree = $processed_items; } private function getDataModuleGroup() { $processed_items = array(); // Module groups if ($this->id == -1) { if (! defined ('METACONSOLE')) { $items = $this->getItems(); foreach ($items as $key => $item) { $counters = $this->getCounters($item['id']); if (!empty($counters)) { foreach ($counters as $type => $value) { $item[$type] = $value; } } $processed_item = $this->getProcessedItem($item); $processed_items[] = $processed_item; } } else { $servers = metaconsole_get_servers(); $item_list = array(); foreach ($servers as $server) { if (metaconsole_connect($server) != NOERR) continue; db_clean_cache(); $items = $this->getItems(); $processed_items = array(); foreach ($items as $key => $item) { $counters = $this->getCounters($item['id']); if (!empty($counters)) { foreach ($counters as $type => $value) { $item[$type] = $value; } } $processed_item = $this->getProcessedItem($item, $server); $processed_items[] = $processed_item; } $item_list = array_merge($item_list, $processed_items); metaconsole_restore_db(); } $processed_items = $this->getMergedItems($item_list); } } // Agents else { if (! defined ('METACONSOLE')) { $items = $this->getItems(); $this->processAgents($items); $processed_items = $items; } else { $rootIDs = $this->rootID; $items = array(); foreach ($rootIDs as $serverID => $rootID) { $server = metaconsole_get_servers($serverID); if (metaconsole_connect($server) != NOERR) continue; db_clean_cache(); $this->rootID = $rootID; $newItems = $this->getItems(); $this->processAgents($newItems, $server); $items = array_merge($items, $newItems); metaconsole_restore_db(); } $this->rootID = $rootIDs; if (!empty($items)) usort($items, array("Tree", "cmpSortNames")); $processed_items = $items; } } $this->tree = $processed_items; } private function getDataOS() { $processed_items = array(); // OS if ($this->id == -1) { if (! defined ('METACONSOLE')) { $items = $this->getItems(); foreach ($items as $key => $item) { $counters = $this->getCounters($item['id']); if (!empty($counters)) { foreach ($counters as $type => $value) { $item[$type] = $value; } } $processed_item = $this->getProcessedItem($item); $processed_item['icon'] = $item['os_icon']; $processed_items[] = $processed_item; } } else { $servers = metaconsole_get_servers(); $item_list = array(); foreach ($servers as $server) { if (metaconsole_connect($server) != NOERR) continue; db_clean_cache(); $items = $this->getItems(); $processed_items = array(); foreach ($items as $key => $item) { $counters = $this->getCounters($item['id']); if (!empty($counters)) { foreach ($counters as $type => $value) { $item[$type] = $value; } } $processed_item = $this->getProcessedItem($item, $server); $processed_item['icon'] = $item['os_icon']; $processed_items[] = $processed_item; } $item_list = array_merge($item_list, $processed_items); metaconsole_restore_db(); } $processed_items = $this->getMergedItems($item_list); } } // Agents else { if (! defined ('METACONSOLE')) { $items = $this->getItems(); $this->processAgents($items); $processed_items = $items; } else { $rootIDs = $this->rootID; $items = array(); foreach ($rootIDs as $serverID => $rootID) { $server = metaconsole_get_servers($serverID); if (metaconsole_connect($server) != NOERR) continue; db_clean_cache(); $this->rootID = $rootID; $newItems = $this->getItems(); $this->processAgents($newItems, $server); $items = array_merge($items, $newItems); metaconsole_restore_db(); } $this->rootID = $rootIDs; if (!empty($items)) usort($items, array("Tree", "cmpSortNames")); $processed_items = $items; } } $this->tree = $processed_items; } public function getJSON() { $this->getData(); return json_encode($this->tree); } public function getArray() { $this->getData(); return $this->tree; } } ?>