'index.php?sec=main', 'text' => __('Main')), array('link' => 'index.php?sec=estado&sec2=operation/agentes/status_monitor', 'text' => __('Monitor view'))); ui_meta_print_page_header($nav_bar); } $ag_freestring = get_parameter ('ag_freestring'); $ag_modulename = (string) get_parameter ('ag_modulename'); $ag_group = (int) get_parameter ('ag_group', 0); $offset = (int) get_parameter ('offset'); $status = (int) get_parameter ('status', 4); $modulegroup = (int) get_parameter ('modulegroup', -1); $tag_filter = (int) get_parameter('tag_filter', 0); $sql_extra = ''; $refr = get_parameter('refr', 0); // Sort functionality $sortField = get_parameter('sort_field'); $sort = get_parameter('sort', 'none'); echo '
"; // Sort functionality $selected = 'border: 1px solid black;'; $selectAgentNameUp = ''; $selectAgentNameDown = ''; $selectTypeUp = ''; $selectTypeDown = ''; $selectModuleNameUp = ''; $selectModuleNameDown = ''; $selectIntervalUp = ''; $selectIntervalDown = ''; $selectStatusUp = ''; $selectStatusDown = ''; $selectDataUp = ''; $selectDataDown = ''; $selectTimestampUp = ''; $selectTimestampDown = ''; $order = null; switch ($sortField) { case 'agent_name': switch ($sort) { case 'up': $selectAgentNameUp = $selected; $order = array('field' => 'tagente.nombre', 'order' => 'ASC'); break; case 'down': $selectAgentNameDown = $selected; $order = array('field' => 'tagente.nombre', 'order' => 'DESC'); break; } break; case 'type': switch ($sort) { case 'up': $selectTypeUp = $selected; $order = array('field' => 'tagente_modulo.id_tipo_modulo', 'order' => 'ASC'); break; case 'down': $selectTypeDown = $selected; $order = array('field' => 'tagente_modulo.id_tipo_modulo', 'order' => 'DESC'); break; } break; case 'module_name': switch ($sort) { case 'up': $selectModuleNameUp = $selected; $order = array('field' => 'tagente_modulo.nombre', 'order' => 'ASC'); break; case 'down': $selectModuleNameDown = $selected; $order = array('field' => 'tagente_modulo.nombre', 'order' => 'DESC'); break; } break; case 'interval': switch ($sort) { case 'up': $selectIntervalUp = $selected; $order = array('field' => 'tagente_modulo.module_interval', 'order' => 'ASC'); break; case 'down': $selectIntervalDown = $selected; $order = array('field' => 'tagente_modulo.module_interval', 'order' => 'DESC'); break; } break; case 'status': switch ($sort) { case 'up': $selectStatusUp = $selected; $order = array('field' => 'tagente_estado.estado', 'order' => 'ASC'); break; case 'down': $selectStatusDown = $selected; $order = array('field' => 'tagente_estado.estado', 'order' => 'DESC'); break; } break; case 'data': switch ($sort) { case 'up': $selectDataUp = $selected; $order = array('field' => 'tagente_estado.datos', 'order' => 'ASC'); break; case 'down': $selectDataDown = $selected; $order = array('field' => 'tagente_estado.datos', 'order' => 'DESC'); break; } break; case 'timestamp': switch ($sort) { case 'up': $selectTimestampUp = $selected; $order = array('field' => 'tagente_estado.utimestamp', 'order' => 'ASC'); break; case 'down': $selectTimestampDown = $selected; $order = array('field' => 'tagente_estado.utimestamp', 'order' => 'DESC'); break; } break; default: $selectAgentNameUp = $selected; $selectAgentNameDown = ''; $selectTypeUp = ''; $selectTypeDown = ''; $selectModuleNameUp = ''; $selectModuleNameDown = ''; $selectIntervalUp = ''; $selectIntervalDown = ''; $selectStatusUp = ''; $selectStatusDown = ''; $selectDataUp = ''; $selectDataDown = ''; $selectTimestampUp = ''; $selectTimestampDown = ''; $order = array('field' => 'tagente.nombre', 'order' => 'ASC'); break; } // Begin Build SQL sentences $sql = " FROM tagente, tagente_modulo, tagente_estado WHERE $sql_extra (tagente.id_agente = tagente_modulo.id_agente AND tagente_modulo.disabled = 0 AND tagente.disabled = 0 AND tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo"; // Agent group selector if ($ag_group > 0 && check_acl ($config["id_user"], $ag_group, "AR")) { $sql .= sprintf (" AND tagente.id_grupo = %d", $ag_group); } elseif($user_groups != '') { // User has explicit permission on group 1 ? $sql .= " AND tagente.id_grupo IN (".$user_groups.")"; } // Module group if ($modulegroup > -1) { $sql .= sprintf (" AND tagente_modulo.id_module_group = '%d'", $modulegroup); } // Module name selector if ($ag_modulename != "") { $sql .= sprintf (" AND tagente_modulo.nombre = '%s'", $ag_modulename); } // Freestring selector if ($ag_freestring != "") { $sql .= sprintf (" AND (tagente.nombre LIKE '%%%s%%' OR tagente_modulo.nombre LIKE '%%%s%%' OR tagente_modulo.descripcion LIKE '%%%s%%')", $ag_freestring, $ag_freestring, $ag_freestring); } // Status selector if ($status == 0) { //Normal $sql .= " AND tagente_estado.estado = 0 AND (utimestamp > 0 OR (tagente_modulo.id_tipo_modulo IN(21,22,23,100))) "; } elseif ($status == 2) { //Critical $sql .= " AND tagente_estado.estado = 1 AND utimestamp > 0"; } elseif ($status == 1) { //Warning $sql .= " AND tagente_estado.estado = 2 AND utimestamp > 0"; } elseif ($status == 4) { //Not normal $sql .= " AND tagente_estado.estado <> 0"; } elseif ($status == 3) { //Unknown $sql .= " AND tagente_estado.estado = 3 AND tagente_estado.utimestamp <> 0"; } elseif ($status == 5) { //Not init $sql .= " AND tagente_estado.utimestamp = 0 AND tagente_modulo.id_tipo_modulo NOT IN (21,22,23,100)"; } //Filter by tag if ($tag_filter != 0) { $sql .= " AND tagente_modulo.id_agente_modulo IN ( SELECT ttag_module.id_agente_modulo FROM ttag_module WHERE ttag_module.id_tag = " . $tag_filter . " )"; } // Build final SQL sentences $count = db_get_sql ("SELECT COUNT(tagente_modulo.id_agente_modulo) " . $sql . ")"); switch ($config["dbtype"]) { case "mysql": $sql = "SELECT (SELECT GROUP_CONCAT(ttag.name SEPARATOR ',') FROM ttag WHERE ttag.id_tag IN ( SELECT ttag_module.id_tag FROM ttag_module WHERE ttag_module.id_agente_modulo = tagente_modulo.id_agente_modulo)) AS tags, tagente_modulo.id_agente_modulo, tagente.intervalo AS agent_interval, tagente.nombre AS agent_name, tagente_modulo.nombre AS module_name, tagente_modulo.id_agente_modulo, tagente_modulo.history_data, tagente_modulo.flag AS flag, tagente.id_grupo AS id_group, tagente.id_agente AS id_agent, tagente_modulo.id_tipo_modulo AS module_type, tagente_modulo.module_interval, tagente_estado.datos, tagente_estado.estado, tagente_modulo.min_warning, tagente_modulo.max_warning, tagente_modulo.str_warning, tagente_modulo.unit, tagente_modulo.min_critical, tagente_modulo.max_critical, tagente_modulo.str_critical, tagente_modulo.extended_info, tagente_modulo.critical_inverse, tagente_modulo.warning_inverse, tagente_modulo.critical_instructions, tagente_modulo.warning_instructions, tagente_modulo.unknown_instructions, tagente_estado.utimestamp AS utimestamp".$sql.") ORDER BY " . $order['field'] . " " . $order['order'] . " LIMIT ".$offset.",".$config["block_size"]; break; case "postgresql": $sql = "SELECT (SELECT STRING_AGG(ttag.name, ',') FROM ttag WHERE ttag.id_tag IN ( SELECT ttag_module.id_tag FROM ttag_module WHERE ttag_module.id_agente_modulo = tagente_modulo.id_agente_modulo)) AS tags, tagente_modulo.id_agente_modulo, tagente.intervalo AS agent_interval, tagente.nombre AS agent_name, tagente_modulo.nombre AS module_name, tagente_modulo.id_agente_modulo, tagente_modulo.history_data, tagente_modulo.flag AS flag, tagente.id_grupo AS id_group, tagente.id_agente AS id_agent, tagente_modulo.id_tipo_modulo AS module_type, tagente_modulo.module_interval, tagente_estado.datos, tagente_estado.estado, tagente_modulo.min_warning, tagente_modulo.max_warning, tagente_modulo.str_warning, tagente_modulo.min_critical, tagente_modulo.unit, tagente_modulo.max_critical, tagente_modulo.str_critical, tagente_modulo.extended_info, tagente_modulo.critical_inverse, tagente_modulo.warning_inverse, tagente_modulo.critical_instructions, tagente_modulo.warning_instructions, tagente_modulo.unknown_instructions, tagente_estado.utimestamp AS utimestamp".$sql.") LIMIT " . $config["block_size"] . " OFFSET " . $offset; break; case "oracle": $set = array(); $set['limit'] = $config["block_size"]; $set['offset'] = $offset; $sql = "SELECT (SELECT wmsys.wm_concat(ttag.name) FROM ttag WHERE ttag.id_tag IN ( SELECT ttag_module.id_tag FROM ttag_module WHERE ttag_module.id_agente_modulo = tagente_modulo.id_agente_modulo)) AS tags, tagente_modulo.id_agente_modulo, tagente.intervalo AS agent_interval, tagente.nombre AS agent_name, tagente_modulo.nombre AS module_name, tagente_modulo.history_data, tagente_modulo.flag AS flag, tagente.id_grupo AS id_group, tagente.id_agente AS id_agent, tagente_modulo.id_tipo_modulo AS module_type, tagente_modulo.module_interval, tagente_estado.datos, tagente_estado.estado, tagente_modulo.min_warning, tagente_modulo.max_warning, tagente_modulo.str_warning, tagente_modulo.unit, tagente_modulo.min_critical, tagente_modulo.max_critical, tagente_modulo.str_critical, tagente_modulo.extended_info, tagente_modulo.critical_inverse, tagente_modulo.warning_inverse, tagente_modulo.critical_instructions, tagente_modulo.warning_instructions, tagente_modulo.unknown_instructions, tagente_estado.utimestamp AS utimestamp" . $sql; $sql = oracle_recode_query ($sql, $set); break; } if (! defined ('METACONSOLE')) { $result = db_get_all_rows_sql ($sql); if ($count > $config["block_size"]) { ui_pagination ($count, false, $offset); } if ($result === false) { $result = array (); } } else { // For each server defined and not disabled: $servers = db_get_all_rows_sql ("SELECT * FROM tmetaconsole_setup WHERE disabled = 0"); if ($servers === false) $servers = array(); $result = array(); foreach($servers as $server) { // If connection was good then retrieve all data server if (metaconsole_connect($server) == NOERR){ $connection = true; } else{ $connection = false; } $result_server = db_get_all_rows_sql ($sql); if(!empty($result_server)) { $result = array_merge($result, $result_server); } } } if (($config['dbtype'] == 'oracle') && ($result !== false)) { for ($i=0; $i < count($result); $i++) { unset($result[$i]['rnum']); } } $table->cellpadding = 4; $table->cellspacing = 4; $table->width = "100%"; $table->class = "databox"; $table->head = array (); $table->data = array (); $table->size = array (); $table->align = array (); if ($isFunctionPolicies !== ENTERPRISE_NOT_HOOK) $table->head[0] = "" . __('P.') . ""; $table->head[1] = __('Agent') . ' ' . html_print_image("images/sort_up.png", true, array("style" => $selectAgentNameUp, "alt" => "up")) . '' . '' . html_print_image("images/sort_down.png", true, array("style" => $selectAgentNameDown, "alt" => "down")) . ''; $table->head[2] = __('Type'). ' ' . html_print_image("images/sort_up.png", true, array("style" => $selectTypeUp, "alt" => "up")) . '' . '' . html_print_image("images/sort_down.png", true, array("style" => $selectTypeDown, "alt" => "down")) . ''; $table->align[2] = "left"; $table->head[3] = __('Module name') . ' ' . html_print_image("images/sort_up.png", true, array("style" => $selectModuleNameUp, "alt" => "up")) . '' . '' . html_print_image("images/sort_down.png", true, array("style" => $selectModuleNameDown, "alt" => "down")) . ''; $table->head[4] = __('Tags'); $table->head[5] = __('Interval') . ' ' . html_print_image("images/sort_up.png", true, array("style" => $selectIntervalUp, "alt" => "up")) . '' . '' . html_print_image("images/sort_down.png", true, array("style" => $selectIntervalDown, "alt" => "down")) . ''; $table->align[5] = "center"; $table->head[6] = __('Status') . ' ' . html_print_image("images/sort_up.png", true, array("style" => $selectStatusUp, "alt" => "up")) . '' . '' . html_print_image("images/sort_down.png", true, array("style" => $selectStatusDown, "alt" => "down")) . ''; $table->align[6] = "center"; $table->head[7] = __('Graph'); $table->align[7] = "center"; $table->head[8] = __('Warn'); $table->align[8] = "left"; $table->head[9] = __('Data') . ' ' . html_print_image("images/sort_up.png", true, array("style" => $selectDataUp, "alt" => "up")) . '' . '' . html_print_image("images/sort_down.png", true, array("style" => $selectDataDown, "alt" => "down")) . ''; $table->align[9] = "left"; $table->head[10] = __('Timestamp') . ' ' . html_print_image("images/sort_up.png", true, array("style" => $selectTimestampUp, "alt" => "up")) . '' . '' . html_print_image("images/sort_down.png", true, array("style" => $selectTimestampDown, "alt" => "down")) . ''; $table->align[10] = "right"; $rowPair = true; $iterator = 0; foreach ($result as $row) { if ($rowPair) $table->rowclass[$iterator] = 'rowPair'; else $table->rowclass[$iterator] = 'rowOdd'; $rowPair = !$rowPair; $iterator++; $data = array (); if ($isFunctionPolicies !== ENTERPRISE_NOT_HOOK) { $policyInfo = policies_info_module_policy($row['id_agente_modulo']); if ($policyInfo === false) $data[0] = ''; else { $linked = policies_is_module_linked($row['id_agente_modulo']); $adopt = false; if (policies_is_module_adopt($row['id_agente_modulo'])) { $adopt = true; } if ($linked) { if ($adopt) { $img = 'images/policies_brick.png'; $title = __('(Adopt) ') . $policyInfo['name_policy']; } else { $img = 'images/policies.png'; $title = $policyInfo['name_policy']; } } else { if ($adopt) { $img = 'images/policies_not_brick.png'; $title = __('(Unlinked) (Adopt) ') . $policyInfo['name_policy']; } else { $img = 'images/unlinkpolicy.png'; $title = __('(Unlinked) ') . $policyInfo['name_policy']; } } $data[0] = '' . html_print_image($img,true, array('title' => $title)) . ''; } } $data[1] = ''; $data[1] .= ui_print_truncate_text($row["agent_name"], 'agent_medium', false, true, false, '[…]', 'font-size:7.5pt;'); $data[1] .= ''; $data[2] = html_print_image("images/" . modules_show_icon_type ($row["module_type"]), true); $data[3] = ui_print_truncate_text($row["module_name"], 'module_small', false, true, true); if ($row["extended_info"] != "") { $data[3] .= ui_print_help_tip ($row["extended_info"], true, '/images/comments.png'); } $data[4] = $row['tags']; $data[5] = ($row['module_interval'] == 0) ? human_time_description_raw($row['agent_interval']) : human_time_description_raw($row['module_interval']); if ($row['utimestamp'] == 0 && (($row['module_type'] < 21 || $row['module_type'] > 23) && $row['module_type'] != 100)) { $data[6] = ui_print_status_image(STATUS_MODULE_NO_DATA, __('NOT INIT'), true); } elseif ($row["estado"] == 0) { $data[6] = ui_print_status_image(STATUS_MODULE_OK, __('NORMAL').": ".$row["datos"], true); } elseif ($row["estado"] == 1) { $data[6] = ui_print_status_image(STATUS_MODULE_CRITICAL, __('CRITICAL').": ".$row["datos"], true); } elseif ($row["estado"] == 2) { $data[6] = ui_print_status_image(STATUS_MODULE_WARNING, __('WARNING').": ".$row["datos"], true); } else { $last_status = modules_get_agentmodule_last_status($row['id_agente_modulo']); switch($last_status) { case 0: $data[6] = ui_print_status_image(STATUS_MODULE_UNKNOWN, __('UNKNOWN')." - ".__('Last status')." ".__('NORMAL').": ".$row["datos"], true); break; case 1: $data[6] = ui_print_status_image(STATUS_MODULE_UNKNOWN, __('UNKNOWN')." - ".__('Last status')." ".__('CRITICAL').": ".$row["datos"], true); break; case 2: $data[6] = ui_print_status_image(STATUS_MODULE_UNKNOWN, __('UNKNOWN')." - ".__('Last status')." ".__('WARNING').": ".$row["datos"], true); break; } } $data[7] = ""; if ($row['history_data'] == 1) { $graph_type = return_graphtype ($row["module_type"]); $nombre_tipo_modulo = modules_get_moduletype_name ($row["module_type"]); $handle = "stat".$nombre_tipo_modulo."_".$row["id_agente_modulo"]; $url = 'include/procesos.php?agente='.$row["id_agente_modulo"]; $win_handle=dechex(crc32($row["id_agente_modulo"].$row["module_name"])); $link ="winopeng('operation/agentes/stat_win.php?type=$graph_type&period=86400&id=".$row["id_agente_modulo"]."&label=".base64_encode($row["module_name"])."&refresh=600','day_".$win_handle."')"; $data[7] = '' . html_print_image("images/chart_curve.png", true, array("border" => '0', "alt" => "")) . ''; $data[7] .= " " . html_print_image('images/binary.png', true, array("style" => '0', "alt" => '')) . ""; } $data[8] = ui_print_module_warn_value($row['max_warning'], $row['min_warning'], $row['str_warning'], $row['max_critical'], $row['min_critical'], $row['str_critical']); if (is_numeric($row["datos"])) { $salida = format_numeric($row["datos"]); // Show units ONLY in numeric data types if (isset($row["unit"])) { $salida .= " " . ''. io_safe_output($row["unit"]) . ''; } } else { $module_value = io_safe_output($row["datos"]); $sub_string = substr(io_safe_output($row["datos"]), 0, 12); if ($module_value == $sub_string) { $salida = $module_value; } else { if (strlen($module_value) > 35) $mod_val = substr($module_value, 0, 35) . '...'; else $mod_val = $module_value; $salida = html_print_input_hidden("value_replace_module_" . $row["id_agente_modulo"], $mod_val, true) . "" . '' . $sub_string . ' ' . "" . html_print_image("images/rosette.png", true) . "" . ""; } } $data[9] = $salida; if ($row["module_interval"] > 0) $interval = $row["module_interval"]; else $interval = $row["agent_interval"]; if ($row['estado'] == 3) { $option = array ("html_attr" => 'class="redb"'); } else { $option = array (); } $data[10] = ui_print_timestamp ($row["utimestamp"], true, $option); array_push ($table->data, $data); } if (!empty ($table->data)) { html_print_table ($table); } else { echo '