1) $result = 1; return $result; } /** * Adds an audit log entry. * * @param string $id User id * @param string $ip Client IP * @param string $accion Action description * @param string $descripcion Long action description */ function audit_db ($id, $ip, $accion, $descripcion){ $accion = safe_input($accion); $descripcion = safe_input($descripcion); $sql = sprintf ("INSERT INTO tsesion (ID_usuario, accion, fecha, IP_origen,descripcion, utimestamp) VALUES ('%s','%s',NOW(),'%s','%s',UNIX_TIMESTAMP(NOW()))",$id,$accion,$ip,$descripcion); process_sql ($sql); } /** * Log in a user into Pandora. * * @param string $id_user User id * @param string $ip Client user IP address. */ function logon_db ($id_user, $ip) { audit_db ($id_user, $ip, "Logon", "Logged in"); // Update last registry of user to set last logon. How do we audit when the user was created then? $sql = sprintf ("UPDATE tusuario SET fecha_registro = NOW() WHERE id_usuario = '%s'", $id_user); process_sql ($sql); } /** * Log out a user into Pandora. * * @param string $id_user User id * @param string $ip Client user IP address. */ function logoff_db ($id_user, $ip) { audit_db ($id_user, $ip, "Logoff", "Logged out"); } /** * Get profile name from id. * * @param int $id_profile Id profile in tperfil * * @return string Profile name of the given id */ function dame_perfil ($id_profile) { return (string) get_db_value ('name', 'tperfil', 'id_perfil', (int) $id_profile); } /** * Get disabled field of a group * * @param int id_group Group id * * @return bool Disabled field of given group */ function give_disabled_group ($id_group) { return (bool) get_db_value ('disabled', 'tgrupo', 'id_grupo', (int) $id_group); } /** * Get all the agents within a group(s). For non-godmode usage get_user_groups should be used. * * @param mixed $id_group Group id or an array of ID's. If nothing is selected, it will select all * * @param bool $disabled Add disabled agents to agents. Default: False. * * @param string $case Which case to return the agentname as (lower, upper, none) * * @return array An array with all agents in the group or an empty array */ function get_group_agents ($id_group = 0, $disabled = false, $case = "lower") { $id_group = safe_int ($id_group, 1); //If id_group is an array, then if (empty ($id_group) || in_array (1, (array) $id_group)) { //If All is included in the group list, just select All $id_group = 1; } else { //If All is not included, select what we need $id_group = implode (",", (array) $id_group); } /* 'All' group must return all agents */ $search = ''; if (!empty ($id_group) && $id_group > 1) { $search .= sprintf (' WHERE id_grupo IN (%s)', $id_group); } if ($disabled !== false) { $search .= (($search == '') ? ' WHERE' : ' AND' ).' disabled = 0'; } $sql = sprintf ("SELECT id_agente, nombre FROM tagente%s ORDER BY nombre", $search); $result = get_db_all_rows_sql ($sql); if ($result === false) return array (); //Return an empty array $agents = array (); foreach ($result as $row) { switch ($case) { case "lower": $agents[$row["id_agente"]] = mb_strtolower ($row["nombre"],"UTF-8"); break; case "upper": $agents[$row["id_agente"]] = mb_strtoupper ($row["nombre"],"UTF-8"); break; default: $agents[$row["id_agente"]] = $row["nombre"]; } } return ($agents); } /** * Get all the modules in an agent. If an empty list is passed it will select all * * @param mixed $id_agent Agent id. If empty it selects all, array or int can be passed too * @param mixed $details Array, comma delimited list or singular value of rows to select. If nothing is specified, nombre will be selected * * @return array An array with all modules in the agent. If multiple rows are selected, they will be in an array */ function get_agent_modules ($id_agent, $details = false) { $id_agent = safe_int ($id_agent, 1); if (empty ($id_agent)) { $filter = ''; } else { $filter = sprintf (' WHERE id_agente IN (%s)', implode (",", (array) $id_agent)); } if (empty ($details)) { $details = "nombre"; } else { $details = safe_input ($details); } $sql = "SELECT id_agente_modulo,".implode (",", (array) $details)." FROM tagente_modulo".$filter." ORDER BY nombre"; $result = get_db_all_rows_sql ($sql); //cast as array, that way a false will be converted into an array if (empty ($result)) { return array (); } $modules = array (); foreach ($result as $row) { if (is_array ($details)) { $modules[$row["id_agente_modulo"]] = $row; //Just stack the information in array by ID } else { $modules[$row["id_agente_modulo"]] = $row[$details]; } } return $modules; } /** * Get all the simple alerts of an agent. * * @param int $id_agent Agent id * @param string $filter Filter on "fired", "notfired" or "disabled" * * @return array An array with all simple alerts defined for an agent. */ function get_agent_alerts_simple ($id_agent, $filter = false) { switch ($filter) { case "notfired": $filter = ' AND times_fired = 0 AND disable = 0'; break; case "fired": $filter = ' AND times_fired > 0 AND disable = 0'; break; case "disabled": $filter = ' AND disable = 1'; break; default: $filter = ''; } $sql = sprintf ("SELECT talerta_agente_modulo.* FROM talerta_agente_modulo, tagente_modulo WHERE talerta_agente_modulo.id_agente_modulo = tagente_modulo.id_agente_modulo AND tagente_modulo.id_agente = %d%s", $id_agent, $filter); $alerts = get_db_all_rows_sql ($sql); if ($alerts === false) return array (); return $alerts; } /** * Get all the combined alerts of an agent. * * @param int $id_agent Agent id * * @return array An array with all combined alerts defined for an agent. */ function get_agent_alerts_combined ($id_agent, $filter = false) { switch ($filter) { case "notfired": $filter = ' AND times_fired = 0 AND disable = 0'; break; case "fired": $filter = ' AND times_fired > 0 AND disable = 0'; break; case "disabled": $filter = ' AND disable = 1'; break; default: $filter = ''; } $sql = sprintf ("SELECT * FROM talerta_agente_modulo WHERE id_agent = %d%s", $id_agent, $filter); $alerts = get_db_all_rows_sql ($sql); if ($alerts === false) return array (); return $alerts; } /** * Get all the alerts of an agent, simple and combined. * * @param int $id_agent Agent id * * @return array An array with all alerts defined for an agent. */ function get_agent_alerts ($id_agent, $filter = false) { $simple_alerts = get_agent_alerts_simple ($id_agent, $filter); $combined_alerts = get_agent_alerts_combined ($id_agent, $filter); return array_merge ($simple_alerts, $combined_alerts); } /** * Get a list of the reports the user can view. * * A user can view a report by two ways: * - The user created the report (id_user field in treport) * - The report is not private and the user has reading privileges on * the group associated to the report * * @param string $id_user User id * * @return array An array with all the reports the user can view. */ function get_reports ($id_user) { $user_reports = array (); $all_reports = get_db_all_rows_in_table ('treport', 'name'); if ($all_reports === false) { return $user_reports; } foreach ($all_reports as $report) { /* The report is private and it does not belong to the user */ if ($report['private'] && $report['id_user'] != $id_user) continue; /* Check ACL privileges on report group */ if (! give_acl ($id_user, $report['id_group'], 'AR')) continue; array_push ($user_reports, $report); } return $user_reports; } /** * Get group icon from group. * * @param int id_group Id group to get the icon * * @return string Icon path of the given group */ function dame_grupo_icono ($id_group) { return (string) get_db_value ('icon', 'tgrupo', 'id_grupo', (int) $id_group); } /** * Get agent id from an agent name. * * @param string $agent_name Agent name to get its id. * * @return int Id from the agent of the given name. */ function dame_agente_id ($agent_name) { return (int) get_db_value ('id_agente', 'tagente', 'nombre', $agent_name); } /** * Get name of an agent. * * @param int $id_agent Agent id. * @param string $case Case (upper, lower, none) * * @return string Name of the given agent. */ function get_agent_name ($id_agent, $case = "upper") { $agent = (string) get_db_value ('nombre', 'tagente', 'id_agente', (int) $id_agent); switch ($case) { case "upper": return mb_strtoupper ($agent,"UTF-8"); break; case "lower": return mb_strtolower ($agent,"UTF-8"); break; default: return ($agent); } } /** * Get MD5 encrypted password of a user. * * @param string id_usuario User id. * * @return string Password of a user (should be compared to MD5 string) */ function get_user_password ($id_user) { return (string) get_db_value ('password', 'tusuario', 'id_usuario', $id_user); } /** * Get type name for alerts (e-mail, text, internal, ...) based on type number * * @param int id_alert Alert type id. * * @return string Type name of the alert. */ function get_alert_type ($id_type) { return (string) get_db_value ('nombre', 'talerta', 'id_alerta', (int) $id_type); } /** * Get name of a module group. * * @param int $id_module_group Module group id. * * @return string Name of the given module group. */ function dame_nombre_grupomodulo ($id_module_group) { return (string) get_db_value ('name', 'tmodule_group', 'id_mg', (int) $id_module_group); } /** * Get the name of an exporting server * * @param int $id_server Server id * * @return string The name of given server. */ function dame_nombre_servidorexportacion ($id_server) { return (string) get_db_value ('name', 'tserver_export', 'id', (int) $id_server); } /** * Get the name of a plugin * * @param int id_plugin Plugin id. * * @return string The name of the given plugin */ function dame_nombre_pluginid ($id_plugin) { return (string) get_db_value ('name', 'tplugin', 'id', (int) $id_plugin); } /** * Get the name of a module type * * @param int $id_type Type id * * @return string The name of the given type. */ function giveme_module_type ($id_type) { return (string) get_db_value ('nombre', 'ttipo_modulo', 'id_tipo', (int) $id_type); } /** * Get agent id of an agent module. * * @param int $id_agentmodule Agent module id. * * @return int The id of the agent of given agent module */ function get_agentmodule_agent ($id_agentmodule) { return (int) get_db_value ('id_agente', 'tagente_modulo', 'id_agente_modulo', (int) $id_agentmodule); } /** * Get agent name of an agent module. * * @param int $id_agente_modulo Agent module id. * * @return string The name of the given agent module. */ function get_agentmodule_agent_name ($id_agentmodule) { return (string) get_agent_name (get_agentmodule_agent ($id_agentmodule)); //since this is a helper function we don't need to do casting } /** * Get the module name of an agent module. * * @param int $id_agente_modulo Agent module id. * * @return string Name of the given agent module. */ function get_agentmodule_name ($id_agente_modulo) { return (string) get_db_value ('nombre', 'tagente_modulo', 'id_agente_modulo', (int) $id_agente_modulo); } /** * Get the module type of an agent module. * * @param int $id_agentmodule Agent module id. * * @return string Module type of the given agent module. */ function get_agentmodule_type ($id_agentmodule) { return (int) get_db_value ('id_tipo_modulo', 'tagente_modulo', 'id_agente_modulo', (int) $id_agentmodule); } /** * Get the real name of an user. * * @param string $id_user User id * * @return string Real name of given user. */ function dame_nombre_real ($id_user) { return (string) get_db_value ('nombre_real', 'tusuario', 'id_usuario', $id_user); } /** * Get all the times a monitor went down during a period. * * @param int $id_agent_module Agent module of the monitor. * @param int $period Period timed to check from date * @param int $date Date to check (now by default) * * @return int The number of times a monitor went down. */ function get_monitor_downs_in_period ($id_agent_module, $period, $date = 0) { if ($date == 0) { $date = get_system_time (); } $datelimit = $date - $period; $sql = sprintf ("SELECT COUNT(`id_agentmodule`) FROM `tevento` WHERE `event_type` = 'monitor_down' AND `id_agentmodule` = %d AND `utimestamp` > %d AND `utimestamp` <= %d", $id_agent_module, $datelimit, $date); return get_db_sql ($sql); } /** * Get the last time a monitor went down during a period. * * @param int $id_agent_module Agent module of the monitor. * @param int $period Period timed to check from date * @param int $date Date to check (now by default) * * @return int The last time a monitor went down. */ function get_monitor_last_down_timestamp_in_period ($id_agent_module, $period, $date = 0) { if ($date == 0) { $date = get_system_time (); } $datelimit = $date - $period; $sql = sprintf ("SELECT MAX(`timestamp`) FROM `tevento` WHERE event_type = 'monitor_down' AND `id_agentmodule` = %d AND `utimestamp` > %d AND `utimestamp` <= %d", $id_agent_module, $datelimit, $date); return get_db_sql ($sql); } /** * Get all the monitors defined in an group. * * @param int $id_group Group id to get all the monitors. * * @return array An array with all the monitors defined in the group (tagente_modulo). */ function get_monitors_in_group ($id_group) { if ($id_group <= 1) { //We select all groups the user has access to if it's 0, -1 or 1 global $config; $id_group = array_keys (get_user_groups ($config['id_user'])); } if (is_array ($id_group)) { $id_group = implode (",",$id_group); } $sql = sprintf ("SELECT `tagente_modulo`.* FROM `tagente_modulo`, `ttipo_modulo`, `tagente` WHERE `id_tipo_modulo` = `id_tipo` AND `tagente`.`id_agente` = `tagente_modulo`.`id_agente` AND `ttipo_modulo`.`nombre` LIKE '%%_proc' AND `tagente`.`id_grupo` IN (%s) ORDER BY `tagente`.`nombre`", $id_group); return get_db_all_rows_sql ($sql); } /** * Get all the events happened in a group during a period of time. * * The returned events will be in the time interval ($date - $period, $date] * * @param int $id_group Group id to get events. * @param int $period Period of time in seconds to get events. * @param int $date Beginning date to get events. * * @return array An array with all the events happened. */ function get_group_events ($id_group, $period, $date) { $datelimit = $date - $period; if ($id_group == 1) { $sql = sprintf ('SELECT * FROM tevento WHERE utimestamp > %d AND utimestamp <= %d ORDER BY utimestamp ASC', $datelimit, $date); } else { $sql = sprintf ('SELECT * FROM tevento WHERE utimestamp > %d AND utimestamp <= %d AND id_grupo = %d ORDER BY utimestamp ASC', $datelimit, $date, $id_group); } return get_db_all_rows_sql ($sql); } /** * Get all the monitors defined in an agent. * * @param int $id_agent Agent id to get all the monitors. * * @return array An array with all the monitors defined (tagente_modulo). */ function get_monitors_in_agent ($id_agent) { $sql = sprintf ("SELECT `tagente_modulo`.* FROM `tagente_modulo`, `ttipo_modulo`, `tagente` WHERE `id_tipo_modulo` = `id_tipo` AND `tagente`.`id_agente` = `tagente_modulo`.`id_agente` AND `ttipo_modulo`.`nombre` LIKE '%%_proc' AND `tagente`.`id_agente` = %d", $id_agent); return get_db_all_rows_sql ($sql); } /** * Get all the monitors down during a period of time. * * @param array $monitors An array with all the monitors to check. Each * element of the array must be a dictionary. * @param int $period Period of time to check the monitors. * @param int $date Beginning date to check the monitors. * * @return array An array with all the monitors that went down in that * period of time. */ function get_monitors_down ($monitors, $period = 0, $date = 0) { $monitors_down = array (); if (empty ($monitors)) return $monitors_down; foreach ($monitors as $monitor) { $down = get_monitor_downs_in_period ($monitor['id_agente_modulo'], $period, $date); if ($down > 0) array_push ($monitors_down, $monitor); } return $monitors_down; } /** * Get all the times an alerts fired during a period. * * @param int $id_agent_module Agent module of the alert. * @param int $period Period timed to check from date * @param int $date Date to check (now by default) * * @return int The number of times an alert fired. */ function get_alert_fires_in_period ($id_agent_module, $period, $date = 0) { if (!$date) $date = get_system_time (); $datelimit = $date - $period; $sql = sprintf ("SELECT COUNT(`id_agentmodule`) FROM `tevento` WHERE `event_type` = 'alert_fired' AND `id_agentmodule` = %d AND `utimestamp` > %d AND `utimestamp` <= %d", $id_agent_module, $datelimit, $date); return (int) get_db_sql ($sql); } /** * Get all the alerts defined in a group. * * It gets all the alerts of all the agents on a given group. * * @param int $id_group Group id to check. * * @return array An array with alerts dictionaries defined in a group. */ function get_group_alerts ($id_group) { $alerts = array (); $agents = get_group_agents ($id_group, false, "none"); foreach ($agents as $agent_id => $agent_name) { $agent_alerts = get_agent_alerts ($agent_id); $alerts = array_merge ($alerts, $agent_alerts); } return $alerts; } /** * Get all the alerts fired during a period, given a list of alerts. * * @param array $alerts A list of alerts to check. See get_alerts_in_group() * @param int $period Period of time to check fired alerts. * @param int $date Beginning date to check fired alerts in UNIX format (current date by default) * * @return array An array with the alert id as key and the number of times * the alert was fired (only included if it was fired). */ function get_alerts_fired ($alerts, $period = 0, $date = 0) { if (! $date) $date = get_system_time (); $datelimit = $date - $period; $alerts_fired = array (); $agents = array (); foreach ($alerts as $alert) { $fires = get_alert_fires_in_period ($alert['id_agente_modulo'], $period, $date); if (! $fires) { continue; } $alerts_fired[$alert['id_aam']] = $fires; } return $alerts_fired; } /** * Get the last time an alert fired during a period. * * @param int $id_agent_module Agent module of the monitor. * @param int $period Period timed to check from date * @param int $date Date to check (now by default) * * @return int The last time an alert fired. */ function get_alert_last_fire_timestamp_in_period ($id_agent_module, $period, $date = 0) { if ($date == 0) { $date = get_system_time (); } $datelimit = $date - $period; $sql = sprintf ("SELECT MAX(`timestamp`) FROM `tevento` WHERE `event_type` = 'alert_fired' AND `id_agentmodule` = %d AND `utimestamp` > %d AND `utimestamp` <= %d", $id_agent_module, $datelimit, $date); return get_db_sql ($sql); } /** * Get the server name. * * @param int $id_server Server id. * * @return string Name of the given server */ function get_server_name ($id_server) { return (string) get_db_value ('name', 'tserver', 'id_server', (int) $id_server); } /** * Get the module type name (type = generic_data, remote_snmp, ...) * * @param int $id_type Type id * * @return string Name of the given type. */ function get_moduletype_name ($id_type) { return (string) get_db_value ('nombre', 'ttipo_modulo', 'id_tipo', (int) $id_type); } /** * @deprecated Use get_agent_group ($id) now (fully compatible) */ function dame_id_grupo ($id_agent) { return get_agent_group ($id_agent); } /** * Get the number of pandora data packets in the database. * * In case an array is passed, it will have a value for every agent passed * incl. a total otherwise it will just return the total * * @param mixed $id_agent Agent id or array of agent id's, 0 for all * * @return mixed The number of data in the database */ function get_agent_modules_data_count ($id_agent = 0) { $id_agent = safe_int ($id_agent, 1); if (empty ($id_agent)) { $id_agent = array (); } else { $id_agent = (array) $id_agent; } $count = array (); $count["total"] = 0; $query[0] = "SELECT COUNT(*) FROM tagente_datos"; //$query[1] = "SELECT COUNT(*) FROM tagente_datos_inc"; //$query[2] = "SELECT COUNT(*) FROM tagente_datos_string"; foreach ($id_agent as $agent_id) { //Init value $count[$agent_id] = 0; $modules = array_keys (get_agent_modules ($agent_id)); foreach ($query as $sql) { //Add up each table's data $count[$agent_id] += (int) get_db_sql ($sql." WHERE id_agente_modulo IN (".implode (",", $modules).")"); } //Add total agent count to total count $count["total"] += $count[$agent_id]; } if ($count["total"] == 0) { foreach ($query as $sql) { $count["total"] += (int) get_db_sql ($sql); } } if (!isset ($agent_id)) { //If agent_id is not set, it didn't loop through any agents return $count["total"]; } return $count; //Return the array } /** * Get the operating system name. * * @param int id_os Operating system id. * * @return string Name of the given operating system. */ function get_os_name ($id_os) { return (string) get_db_value ('name', 'tconfig_os', 'id_os', (int) $id_os); } /** * Update user last login timestamp. * * @param string $id_user User id */ function update_user_contact ($id_user) { global $config; $sql = sprintf ("UPDATE `tusuario` set `fecha_registro` = NOW() WHERE 'id_usuario' = %d",$id_user); process_sql ($sql); } /** * Get the user email * * @param string $id_user User id. * * @return string Get the email address of an user */ function dame_email ($id_user) { return (string) get_db_value ('direccion', 'tusuario', 'id_usuario', $id_user); } /** * Checks if a user is administrator. * * @param string $id_user User id. * * @return bool True is the user is admin */ function dame_admin ($id_user) { $level = get_db_value ('nivel', 'tusuario', 'id_usuario', $id_user); if ($level == 1) { return true; } else { return false; } } /** * @deprecated Use check_login () instead */ function comprueba_login () { return check_login (); } /** * Check if an agent has alerts fired. * * @param int $id_agent Agent id. * * @return bool True if the agent has fired alerts. */ function check_alert_fired ($id_agent) { $sql = "SELECT COUNT(*) FROM talerta_agente_modulo, tagente_modulo WHERE talerta_agente_modulo.id_agente_modulo = tagente_modulo.id_agente_modulo AND times_fired > 0 AND id_agente = ".$id_agent; $value = get_db_sql ($sql); if ($value > 0) return true; return false; } /** * Check is a user exists in the system * * @param string $id_user User id. * * @return bool True if the user exists. */ function existe ($id_user) { $user = get_db_row ('tusuario', 'id_usuario', $id_user); if (! $user) return false; return true; } /** * Get the interval value of an agent module. * * If the module interval is not set, the agent interval is returned * * @param int $id_agent_module Id agent module to get the interval value. * * @return int Module interval or agent interval if no module interval */ function get_module_interval ($id_agent_module) { $interval = (int) get_db_value ('module_interval', 'tagente_modulo', 'id_agente_modulo', (int) $id_agent_module); if ($interval > 0) return $interval; $id_agent = give_agent_id_from_module_id ($id_agent_module); return (int) get_agent_interval ($id_agent); } /** * Get the interval of an agent. * * @param int $id_agent Agent id. * * @return int The interval value of a given agent */ function get_agent_interval ($id_agent) { return (int) get_db_value ('intervalo', 'tagente', 'id_agente', $id_agent); } /** * Get the flag value of an agent module. * * @param int $id_agent_module Agent module id. * * @return bool The flag value of an agent module. */ function give_agentmodule_flag ($id_agent_module) { return get_db_value ('flag', 'tagente_modulo', 'id_agente_modulo', $id_agent_module); } /** * Prints a list of HTML tags with the groups the user has * reading privileges. * * @deprecated Use get_user_groups () in combination with print_select () * instead * * @param string $id_user User id * @param bool $show_all Flag to show all the groups or not. True by default. * * @return array An array with all the groups */ function list_group ($id_user, $show_all = 1){ $mis_grupos = array (); // Define array mis_grupos to put here all groups with Agent Read permission $sql = 'SELECT id_grupo, nombre FROM tgrupo ORDER BY nombre'; $result = get_db_all_rows_sql ($sql); if (!$result) return $mis_grupos; foreach ($result as $row) { if (($row["id_grupo"] != 1 || $show_all == 1) && $row["id_grupo"] != 0 && give_acl($id_user,$row["id_grupo"], "AR") == 1) { //Put in an array all the groups the user belongs to array_push ($mis_grupos, $row["id_grupo"]); echo ''; } } return ($mis_grupos); } /** * Get a list of the groups a user has reading privileges to. * * @deprecated Use get_user_groups () instead * * @param int $id_user User id * * @return array A list of the groupid => groups the user has reading privileges. */ function list_group2 ($id_user) { $mis_grupos = array (); // Define array mis_grupos to put here all groups with Agent Read permission $result = get_db_all_fields_in_table ('tgrupo', 'id_grupo'); if (!$result) return $mis_grupos; foreach ($result as $row) { if (give_acl ($id_user, $row["id_grupo"], "AR") == 1) { array_push ($mis_grupos, $row["id_grupo"]); //Put in array all the groups the user belongs to } } return ($mis_grupos); } /** * Get a list of all users in an array [username] => real name * * @param string $order by (id_usuario, nombre_real or fecha_registro) * * @return array An array of users */ function list_users ($order = "nombre_real") { switch ($order) { case "id_usuario": case "fecha_registro": case "nombre_real": break; default: $order = "nombre_real"; } $output = array(); $result = get_db_all_rows_sql ("SELECT id_usuario, nombre_real FROM tusuario ORDER BY ".$order); if ($result !== false) { foreach ($result as $row) { $output[$row["id_usuario"]] = $row["nombre_real"]; } } return $output; } /** * Get all the groups a user has reading privileges. * * @param string $id_user User id * @param string $privilege The privilege to evaluate * @return array A list of the groups the user has certain privileges. */ function get_user_groups ($id_user = 0, $privilege = "AR") { if ($id_user == 0) { global $config; $id_user = $config['id_user']; } $user_groups = array (); $groups = get_db_all_rows_in_table ('tgrupo', 'nombre'); if (!$groups) return $user_groups; foreach ($groups as $group) { if (! give_acl ($id_user, $group["id_grupo"], $privilege)) continue; $user_groups[$group['id_grupo']] = $group['nombre']; } return $user_groups; } /** * Get module type icon. * * TODO: Create print_moduletype_icon and print the full tag including hover etc. * @deprecated Use print_moduletype_icon instead * * @param int $id_type Module type id * * @return string Icon filename of the given group */ function show_icon_type ($id_type) { return (string) get_db_value ('icon', 'ttipo_modulo', 'id_tipo', $id_type); } /** * Return a string containing image tag for a given target id (server) * TODO: Make this print_servertype_icon and move to functions_ui.php. Make XHTML compatible. Make string translatable * * @deprecated Use print_servertype_icon instead * * @param int $id Server type id * * @return string Fully formatted IMG HTML tag with icon */ function show_server_type ($id){ global $config; switch ($id) { case 1: return ''; break; case 2: return ''; break; case 4: return ''; break; case 5: return ''; break; case 6: return ''; break; default: return "--"; } } /** * Get a module category name * * @param id_category Id category * * @return Name of the given category */ function give_modulecategory_name ($id_category) { switch ($id_category) { case 0: return __('Software agent data'); break; case 1: return __('Software agent monitor'); break; case 2: return __('Network agent data'); break; case 3: return __('Network agent monitor'); break; } return __('Unknown'); } /** * Get a network component group name * * @param int $id_network_component_group Id network component group. * * @return string Name of the given network component group */ function give_network_component_group_name ($id_network_component_group) { return (string) get_db_value ('name', 'tnetwork_component_group', 'id_sg', $id_network_component_group); } /** * Get a network profile name. * * @param int $id_network_profile Id network profile * * @return string Name of the given network profile. */ function get_networkprofile_name ($id_network_profile) { return (string) get_db_value ('name', 'tnetwork_profile', 'id_np', $id_network_profile); } /** * Assign an IP address to an agent. * * @param int id_agent Agent id * @param string ip_address IP address to assign */ function agent_add_address ($id_agent, $ip_address) { // Check if already is attached to agent $sql = sprintf ("SELECT COUNT(`ip`) FROM taddress_agent, taddress WHERE taddress_agent.id_a = taddress.id_a AND ip = '%s' AND id_agent = %d",$ip_address,$id_agent); $current_address = get_db_sql ($sql); if ($current_address > 0) return; // Look for a record with this IP Address $id_address = (int) get_db_value ('id_a', 'taddress', 'ip', $ip_address); if ($id_address === 0) { // Create IP address in tadress table $sql = sprintf("INSERT INTO taddress (ip) VALUES ('%s')",$ip_address); $id_address = process_sql ($sql, "insert_id"); } // Add address to agent $sql = sprintf("INSERT INTO taddress_agent (id_a, id_agent) VALUES (%d, %d)",$id_address, $id_agent); process_sql ($sql); } /** * Unassign an IP address from an agent. * * @param int $id_agent Agent id * @param string $ip_address IP address to unassign */ function agent_delete_address ($id_agent, $ip_address) { $sql = sprintf ("SELECT id_ag FROM taddress_agent, taddress WHERE taddress_agent.id_a = taddress.id_a AND ip = '%s' AND id_agent = %d",$ip_address, $id_agent); $id_ag = get_db_sql ($sql); if ($id_ag !== false) { $sql = sprintf ("DELETE FROM taddress_agent WHERE id_ag = %d",$id_ag); process_sql ($sql); } // Need to change main address? if (get_agent_address ($id_agent) == $ip_address) { $new_ips = get_agent_addresses ($id_agent); // Change main address in agent to first one in the list $query = sprintf ("UPDATE tagente SET `direccion` = '%s' WHERE id_agente = %d", current ($new_ips), $id_agent); process_sql ($query); } } /** * Get address of an agent. * * @param int $id_agent Agent id * * @return string The address of the given agent */ function get_agent_address ($id_agent) { return (string) get_db_value ('direccion', 'tagente', 'id_agente', (int) $id_agent); } /** * Get the agent that matches an IP address * * @param string $ip_address IP address to get the agents. * * @return mixed The agent that has the IP address given. False if none were found. */ function get_agent_with_ip ($ip_address) { $sql = sprintf ('SELECT tagente.* FROM tagente, taddress, taddress_agent WHERE tagente.id_agente = taddress_agent.id_agent AND taddress_agent.id_a = taddress.id_a AND ip = "%s"', $ip_address); return get_db_row_sql ($sql); } /** * Get all IP addresses of an agent * * @param int $id_agent Agent id * * @return array Array with the IP address of the given agent or an empty array. */ function get_agent_addresses ($id_agent) { $sql = sprintf ("SELECT ip FROM taddress_agent, taddress WHERE taddress_agent.id_a = taddress.id_a AND id_agent = %d", $id_agent); $ips = get_db_all_rows_sql ($sql); if ($ips === false) { $ips = array (); } $ret_arr = array (); foreach ($ips as $row) { $ret_arr[$row["ip"]] = $row["ip"]; } return $ret_arr; } /** * Get agent id from an agent module. * * @param int id_agent_module Id of the agent module. * * @return int The agent if of the given module. */ function give_agent_id_from_module_id ($id_agent_module) { return (int) get_db_value ('id_agente', 'tagente_modulo', 'id_agente_modulo', $id_agent_module); } $sql_cache = array ('saved' => 0); /** * Get the first value of the first row of a table in the database. * * @param string $field Field name to get * @param string $table Table to retrieve the data * @param string $field_search Field to filter elements * @param string $condition Condition the field must have * * @return mixed Value of first column of the first row. False if there were no row. */ function get_db_value ($field, $table, $field_search = 1, $condition = 1) { if (is_int ($condition)) { $sql = sprintf ("SELECT %s FROM %s WHERE %s = %d LIMIT 1", $field, $table, $field_search, $condition); } else if (is_float ($condition) || is_double ($condition)) { $sql = sprintf ("SELECT %s FROM %s WHERE %s = %f LIMIT 1", $field, $table, $field_search, $condition); } else { $sql = sprintf ("SELECT %s FROM %s WHERE %s = '%s' LIMIT 1", $field, $table, $field_search, $condition); } $result = get_db_all_rows_sql ($sql); if ($result === false) return false; return $result[0][$field]; } /** * Get the first row of an SQL database query. * * @param string $sql SQL select statement to execute. * * @return mixed The first row of the result or false */ function get_db_row_sql ($sql) { $sql .= " LIMIT 1"; $result = get_db_all_rows_sql ($sql); if($result === false) return false; return $result[0]; } /** * Get the first row of a database query into a table. * * The SQL statement executed would be something like: * "SELECT * FROM $table WHERE $field_search = $condition" * * @param string $table Table to get the row * @param string $field_search Field to filter elementes * @param string $condition Condition the field must have. * * @return mixed The first row of a database query or false. */ function get_db_row ($table, $field_search, $condition) { if (is_int ($condition)) { $sql = sprintf ("SELECT * FROM `%s` WHERE `%s` = %d LIMIT 1", $table, $field_search, $condition); } else if (is_float ($condition) || is_double ($condition)) { $sql = sprintf ("SELECT * FROM `%s` WHERE `%s` = %f LIMIT 1", $table, $field_search, $condition); } else { $sql = sprintf ("SELECT * FROM `%s` WHERE `%s` = '%s' LIMIT 1", $table, $field_search, $condition); } $result = get_db_all_rows_sql ($sql); if($result === false) return false; return $result[0]; } /** * Get a single field in the databse from a SQL query. * * @param string $sql SQL statement to execute * @param mixed $field Field number or row to get, beggining by 0. Default: 0 * * @return mixed The selected field of the first row in a select statement. */ function get_db_sql ($sql, $field = 0) { $result = get_db_all_rows_sql ($sql); if($result === false) return false; return $result[0][$field]; } /** * Get all the result rows using an SQL statement. * * @param string $sql SQL statement to execute. * * @return mixed A matrix with all the values returned from the SQL statement or * false in case of empty result */ function get_db_all_rows_sql ($sql) { $return = process_sql ($sql); if (! empty ($return)) return $return; //Return false, check with === or !== return false; } /** * Error handler function when an SQL error is triggered. * * @param int $errno Level of the error raised (not used, but required by set_error_handler()). * @param string $errstr Contains the error message. * * @return bool */ function sql_error_handler ($errno, $errstr) { if (error_reporting () <= $errno) return false; echo "SQL error: ".$errstr."
\n"; return true; } /** * This function comes back with an array in case of SELECT * in case of UPDATE, DELETE etc. with affected rows * an empty array in case of SELECT without results * Queries that return data will be cached so queries don't get repeated * * @param string $sql SQL statement to execute * * @param string $rettype (optional) What type of info to return in case of INSERT/UPDATE. * 'affected_rows' will return mysql_affected_rows (default value) * 'insert_id' will return the ID of an autoincrement value * 'info' will return the full (debug) information of a query * * @return mixed An array with the rows, columns and values in a multidimensional array or false in error */ function process_sql ($sql, $rettype = "affected_rows") { global $config; global $sql_cache; $retval = array(); if ($sql == '') return false; if (! empty ($sql_cache[$sql])) { $retval = $sql_cache[$sql]; $sql_cache['saved']++; } else { $result = mysql_query ($sql); if ($result === false) { $backtrace = debug_backtrace (); $error = sprintf ('%s (\'%s\') in %s on line %d', mysql_error (), $sql, $backtrace[0]['file'], $backtrace[0]['line']); set_error_handler ('sql_error_handler'); trigger_error ($error); restore_error_handler (); return false; } elseif ($result === true) { if ($rettype == "insert_id") { return mysql_insert_id (); } elseif ($rettype == "info") { return mysql_info (); } return mysql_affected_rows (); //This happens in case the statement was executed but didn't need a resource } else { while ($row = mysql_fetch_array ($result)) { array_push ($retval, $row); } $sql_cache[$sql] = $retval; mysql_free_result ($result); } } if (! empty ($retval)) return $retval; //Return false, check with === or !== return false; } /** * Get all the rows in a table of the database. * * @param string $table Database table name. * @param string $order_field Field to order by. * * @return mixed A matrix with all the values in the table */ function get_db_all_rows_in_table ($table, $order_field = "") { if ($order_field != "") { return get_db_all_rows_sql ("SELECT * FROM `".$table."` ORDER BY ".$order_field); } else { return get_db_all_rows_sql ("SELECT * FROM `".$table."`"); } } /** * Get all the rows in a table of the databes filtering from a field. * * @param string $table Database table name. * @param string $field Field of the table. * @param string $condition Condition the field must have to be selected. * @param string $order_field Field to order by. * * @return mixed A matrix with all the values in the table that matches the condition in the field or false */ function get_db_all_rows_field_filter ($table, $field, $condition, $order_field = "") { if (is_int ($condition)) { $sql = sprintf ("SELECT * FROM `%s` WHERE `%s` = %d", $table, $field, $condition); } else if (is_float ($condition) || is_double ($condition)) { $sql = sprintf ("SELECT * FROM `%s` WHERE `%s` = %f", $table, $field, $condition); } else { $sql = sprintf ("SELECT * FROM `%s` WHERE `%s` = '%s'", $table, $field, $condition); } if ($order_field != "") $sql .= sprintf (" ORDER BY %s", $order_field); return get_db_all_rows_sql ($sql); } /** * Get all the rows in a table of the databes filtering from a field. * * @param string $table Database table name. * @param string $field Field of the table. * * @return mixed A matrix with all the values in the table that matches the condition in the field */ function get_db_all_fields_in_table ($table, $field = '', $condition = '', $order_field = '') { $sql = sprintf ("SELECT * FROM `%s`", $table); if ($condition != '') { $sql .= sprintf (" WHERE `%s` = '%s'", $field, $condition); } if ($order_field != "") $sql .= sprintf (" ORDER BY %s", $order_field); return get_db_all_rows_sql ($sql); } /** * Get the status of an alert assigned to an agent module. * * @param int id_agentmodule Id agent module to check. * * @return bool True if there were alerts fired. */ function return_status_agent_module ($id_agentmodule = 0) { $status = get_db_value ('estado', 'tagente_estado', 'id_agente_modulo', $id_agentmodule); if ($status == 100) { // We need to check if there are any alert on this item $times_fired = get_db_value ('SUM(times_fired)', 'talerta_agente_modulo', 'id_agente_modulo', $id_agentmodule); if ($times_fired > 0) { return 0; } // No alerts fired for this agent module return 1; } elseif ($status == 0) { // 0 is ok for estado field return 1; } else { return 0; } } /** * Get the status of a layout. * * It gets all the data of the contained elements (including nested * layouts), and makes an AND operation to be sure that all the items * are OK. If any of them is down, then result is down (0) * * @param int $id_layout Id of the layout * * @return bool The status of the given layout. */ function return_status_layout ($id_layout = 0) { $temp_status = 0; $temp_total = 0; $sql = sprintf ('SELECT id_agente_modulo, parent_item, id_layout_linked FROM `tlayout_data` WHERE `id_layout` = %d', $id_layout); $result = get_db_all_rows_sql ($sql); if ($result === false) return 0; foreach ($result as $rownum => $data) { if (($data["id_layout_linked"] != 0) && ($data["id_agente_modulo"] == 0)) { $temp_status += return_status_layout ($data["id_layout_linked"]); $temp_total++; } else { $temp_status += return_status_agent_module ($data["id_agente_modulo"]); $temp_total++; } } if ($temp_status == $temp_total) { return 1; } return 0; } /** * Get the current value of an agent module. * * @param int $id_agentmodule * * @return int a numerically formatted value */ function return_value_agent_module ($id_agentmodule) { return format_numeric (get_db_value ('datos', 'tagente_estado', 'id_agente_modulo', $id_agentmodule)); } /** * Get the X axis coordinate of a layout item * * @param int $id_layoutdata Id of the layout to get. * * @return int The X axis coordinate value. */ function get_layoutdata_x ($id_layoutdata) { return (float) get_db_value ('pos_x', 'tlayout_data', 'id', $id_layoutdata); } /** * Get the Y axis coordinate of a layout item * * @param int $id_layoutdata Id of the layout to get. * * @return int The Y axis coordinate value. */ function get_layoutdata_y ($id_layoutdata){ return (float) get_db_value ('pos_y', 'tlayout_data', 'id', $id_layoutdata); } /** * Get the previous data to the timestamp provided. * * It's useful to know the first value of a module in an interval, * since it will be the last value in the table which has a timestamp * before the beginning of the interval. All this calculation is due * to the data compression algorithm. * * @param int $id_agent_module Agent module id * @param int $utimestamp The timestamp to look backwards from and get the data. * * @return mixed The row of tagente_datos of the last period. False if there were no data. */ function get_previous_data ($id_agent_module, $utimestamp) { $interval = get_module_interval ($id_agent_module); $sql = sprintf ('SELECT * FROM tagente_datos WHERE id_agente_modulo = %d AND utimestamp <= %d AND utimestamp > %d ORDER BY utimestamp DESC', $id_agent_module, $utimestamp, $utimestamp - $interval); return get_db_row_sql ($sql); } /** * Get the average value of an agent module in a period of time. * * @param int $id_agent_module Agent module id * @param int $period Period of time to check (in seconds) * @param int $date Top date to check the values. Default current time. * * @return int The average module value in the interval. */ function get_agentmodule_data_average ($id_agent_module, $period, $date = 0) { if (! $date) $date = get_system_time (); $datelimit = $date - $period; $sql = sprintf ("SELECT SUM(datos), COUNT(*) FROM tagente_datos WHERE id_agente_modulo = %d AND utimestamp > %d AND utimestamp <= %d ORDER BY utimestamp ASC", $id_agent_module, $datelimit, $date); $values = get_db_row_sql ($sql); $sum = (float) $values[0]; $total = (int) $values[1]; /* Get also the previous data before the selected interval. */ $previous_data = get_previous_data ($id_agent_module, $datelimit); if ($previous_data) return ($previous_data['datos'] + $sum) / ($total + 1); if ($total > 0) return $sum / $total; return 0; } /** * Get the maximum value of an agent module in a period of time. * * @param int $id_agent_module Agent module id to get the maximum value. * @param int $period Period of time to check (in seconds) * @param int $date Top date to check the values. Default current time. * * @return int The maximum module value in the interval. */ function get_agentmodule_data_max ($id_agent_module, $period, $date = 0) { if (! $date) $date = get_system_time (); $datelimit = $date - $period; $sql = sprintf ("SELECT MAX(datos) FROM tagente_datos WHERE id_agente_modulo = %d AND utimestamp > %d AND utimestamp <= %d", $id_agent_module, $datelimit, $date); $max = (float) get_db_sql ($sql); /* Get also the previous report before the selected interval. */ $previous_data = get_previous_data ($id_agent_module, $datelimit); if ($previous_data) return max ($previous_data['datos'], $max); return max ($previous_data, $max); } /** * Get the minimum value of an agent module in a period of time. * * @param int $id_agent_module Agent module id to get the minimum value. * @param int $period Period of time to check (in seconds) * @param int $date Top date to check the values. Default current time. * * @return int The minimum module value of the module */ function get_agentmodule_data_min ($id_agent_module, $period, $date = 0) { if (! $date) $date = get_system_time (); $datelimit = $date - $period; $sql = sprintf ("SELECT MIN(datos) FROM tagente_datos WHERE id_agente_modulo = %d AND utimestamp > %d AND utimestamp <= %d", $id_agent_module, $datelimit, $date); $min = (float) get_db_sql ($sql); /* Get also the previous data before the selected interval. */ $previous_data = get_previous_data ($id_agent_module, $datelimit); if ($previous_data) return min ($previous_data['datos'], $min); return $min; } /** * Get the sum of values of an agent module in a period of time. * * @param int $id_agent_module Agent module id to get the sumatory. * @param int $period Period of time to check (in seconds) * @param int $date Top date to check the values. Default current time. * * @return int The sumatory of the module values in the interval. */ function get_agentmodule_data_sum ($id_agent_module, $period, $date = 0) { if (! $date) $date = get_system_time (); $datelimit = $date - $period; // limit date $id_module_type = get_db_value ('id_tipo_modulo', 'tagente_modulo','id_agente_modulo', $id_agent_module); $module_name = get_db_value ('nombre', 'ttipo_modulo', 'id_tipo', $id_module_type); if (is_module_data_string ($module_name)) { return __('Wrong module type'); } // Get the whole interval of data $sql = sprintf ('SELECT utimestamp, datos FROM tagente_datos WHERE id_agente_modulo = %d AND utimestamp > %d AND utimestamp <= %d ORDER BY utimestamp ASC', $id_agent_module, $datelimit, $date); $datas = get_db_all_rows_sql ($sql); /* Get also the previous data before the selected interval. */ $previous_data = get_previous_data ($id_agent_module, $datelimit); if ($previous_data) { /* Add data to the beginning */ array_unshift ($datas, $previous_data); } if ($datas === false) { return 0; } $last_data = ""; $total_badtime = 0; $module_interval = get_module_interval ($id_agent_module); $timestamp_begin = $datelimit + $module_interval; $timestamp_end = 0; $sum = 0; $data_value = 0; foreach ($datas as $data) { $timestamp_end = $data["utimestamp"]; $elapsed = $timestamp_end - $timestamp_begin; $times = intval ($elapsed / $module_interval); if (is_module_inc ($module_name)) { $data_value = $data['datos'] * $module_interval; } else { $data_value = $data['datos']; } $sum += $times * $data_value; $timestamp_begin = $data["utimestamp"]; } /* The last value must be get from tagente_estado, but it will count only if it's not older than date demanded */ $timestamp_end = get_db_value ('utimestamp', 'tagente_estado', 'id_agente_modulo', $id_agent_module); if ($timestamp_end <= $datelimit) { $elapsed = $timestamp_end - $timestamp_begin; $times = intval ($elapsed / $module_interval); if (is_module_inc ($module_name)) { $data_value = $data['datos'] * $module_interval; } else { $data_value = $data['datos']; } $sum += $times * $data_value; } return (float) $sum; } /** * Get a translated string * * @param string $string String to translate * * @return string The translated string. If not defined, the same string will be returned */ function __ ($string) { global $l10n; if (is_null ($l10n)) return $string; return $l10n->translate ($string); } /** * Get the numbers of servers up. * * This check assumes that server_keepalive should be at least 15 minutes. * * @return int The number of servers alive. */ function check_server_status () { $sql = "SELECT COUNT(id_server) FROM tserver WHERE status = 1 AND keepalive > NOW() - INTERVAL 15 MINUTE"; $status = (int) get_db_sql ($sql); //Cast as int will assure a number value // Set servers to down if ($status == 0){ process_sql ("UPDATE tserver SET status = 0"); } return $status; } /** * @deprecated Will show a small HTML table with some compound alert information * * @param int $id_combined_alert * * @return string HTML block */ function show_alert_row_mini ($id_combined_alert) { $color=1; $sql = sprintf ("SELECT talerta_agente_modulo.*,tcompound_alert.operation FROM talerta_agente_modulo, tcompound_alert WHERE tcompound_alert.id_aam = talerta_agente_modulo.id_aam AND tcompound_alert.id = %d", $id_combined_alert); $result = get_db_all_rows_sql ($sql); if ($result === false) return; echo ""; echo ""; echo ""; /* Translators: Abbrevation for Time threshold */ echo ""; echo ""; echo ""; /* Translators: Abbrevation for Description */ echo ""; echo ""; echo ""; echo ""; echo ""; foreach ($result as $row2) { if ($color == 1) { $tdcolor = "datos"; $color = 0; } else { $tdcolor = "datos2"; $color = 1; } echo ""; if ($row2["disable"] == 1) { $tdcolor = "datos3"; } echo ""; echo ""; echo ""; if ($row2["dis_min"]!=0) { $mytempdata = fmod ($row2["dis_min"], 1); if ($mytempdata == 0) { $mymin = intval ($row2["dis_min"]); } else { $mymin = format_for_graph ($row2["dis_min"]); } } else { $mymin = 0; } if ($row2["dis_max"]!=0) { $mytempdata = fmod ($row2["dis_max"], 1); if ($mytempdata == 0) { $mymax = intval ($row2["dis_max"]); } else { $mymax = format_for_graph ($row2["dis_max"]); } } else { $mymax = 0; } if (($mymin == 0) && ($mymax == 0)) { $mymin = __('N/A'); $mymax = $mymin; } // We have alert text ? if ($row2["alert_text"]!= "") { echo ""; } else { echo ""; } // Alert times echo ""; } else { echo ""; } } echo "
".__('Name')."".__('Oper')."".__('Tt')."".__('Firing')."".__('Time')."".__('Desc')."".__('Recovery')."".__('MinMax.Al')."".__('Days')."".__('Fired')."
".get_db_sql ("SELECT nombre FROM tagente_modulo WHERE id_agente_modulo =".$row2["id_agente_modulo"])."".$row2["operation"]."".human_time_description ($row2["time_threshold"])."".__('Text')."".$mymin."/".$mymax.""; echo get_alert_times ($row2); // Description echo "".substr ($row2["descripcion"],0,20); // Has recovery notify activated ? if ($row2["recovery_notify"] > 0) { $recovery_notify = __('Yes'); } else { $recovery_notify = __('No'); } echo "".$recovery_notify; // calculare firing conditions if ($row2["alert_text"] != ""){ $firing_cond = __('Text')."(".substr ($row2["alert_text"],0,8).")"; } else { $firing_cond = $row2["min_alerts"]." / ".$row2["max_alerts"]; } echo "".$firing_cond; // calculate days $firing_days = get_alert_days ( $row2 ); echo "".$firing_days; // Fired ? if ($row2["times_fired"]>0) { echo "
"; } /** * @deprecated use get_server_info instead * Get statistical information for a given server * * @param int $id_server * * @return array Serverinfo array */ function server_status ($id_server) { $serverinfo = get_server_info ($id_server); return $serverinfo[$id_server]; } /** * This function will delete the agent from the database in a transaction * You can pass a variable or an array of ID's to be removed (int) * * @param mixed $id_agents An array or variable with integeres of ID's to be erased * * @return bool false in case of a problem, true in case of successful */ function delete_agent ($id_agents) { //Init vars $errors = 0; //Subfunciton for less typing /** * @ignore */ function temp_sql_delete ($table, $row, $value) { global $errors; //Globalize the errors variable $sql = sprintf ("DELETE FROM %s WHERE %s = %s", $table, $row, $value); $result = process_sql ($sql); if ($result === false) $errors++; } //Convert single values to an array if (!is_array ($id_agents)) { $id_agents[0] = (int) $id_agents; } //Start transaction process_sql ("SET AUTOCOMMIT = 0;"); $trerr = process_sql ("START TRANSACTION;"); if ($trerr === false) { echo "Error starting transaction"; return false; } foreach ($id_agents as $id_agent) { $id_agent = (int) $id_agent; //Cast as integer $agent_name = get_agent_name ($id_agent); if ($id_agent < 1) continue; //If an agent is not an integer or invalid, don't process it //A variable where we store that long subquery thing for //modules $tmodbase = "ANY(SELECT id_agente_modulo FROM tagente_modulo WHERE id_agente = ".$id_agent.")"; //IP address $sql = sprintf ("SELECT id_ag FROM taddress_agent, taddress WHERE taddress_agent.id_a = taddress.id_a AND id_agent = %d", $id_agent); $result = get_db_all_rows_sql ($sql); if ($result) foreach ($result as $row) { temp_sql_delete ("taddress_agent", "id_ag", $row["id_ag"]); } // We cannot delete tagente_datos and tagente_datos_string here // because it's a huge ammount of time. tagente_module has a special // field to mark for delete each module of agent deleted and in // daily maintance process, all data for that modules are deleted //Alert temp_sql_delete ("tcompound_alert", "id_aam", "ANY(SELECT id_aam FROM talerta_agente_modulo WHERE id_agent = ".$id_agent.")"); temp_sql_delete ("talerta_agente_modulo", "id_agente_modulo", $tmodbase); temp_sql_delete ("talerta_agente_modulo", "id_agent", $id_agent); //Events (up/down monitors) temp_sql_delete ("tevento", "id_agente", $id_agent); //Graphs, layouts & reports temp_sql_delete ("tgraph_source", "id_agent_module", $tmodbase); temp_sql_delete ("tlayout_data", "id_agente_modulo", $tmodbase); temp_sql_delete ("treport_content", "id_agent_module", $tmodbase); //Planned Downtime temp_sql_delete ("tplanned_downtime_agents", "id_agent", $id_agent); //The status of the module temp_sql_delete ("tagente_estado", "id_agente_modulo", $tmodbase); //The actual modules, don't put anything based on //tagente_modulo after this temp_sql_delete ("tagente_modulo", "id_agente", $id_agent); process_sql ('UPDATE tagente_modulo SET delete_pending = 1, disabled = 1 WHERE id_agente = '. $id_agent); //Access entries temp_sql_delete ("tagent_access", "id_agent", $id_agent); //And at long last, the agent temp_sql_delete ("tagente", "id_agente", $id_agent); // Delete remote configuration $agent_md5 = md5($agent_name, FALSE); if (file_exists($config["remote_config"] . "/" . $agent_md5 . ".md5")) { // Agent remote configuration editor $file_name = $config["remote_config"] . "/" . $agent_md5 . ".conf"; unlink ($file_name); $file_name = $config["remote_config"] . "/" . $agent_md5 . ".md5"; unlink ($file_name); } } if ($errors > 0) { process_sql ("ROLLBACK;"); process_sql ("SET AUTOCOMMIT = 1;"); return false; } else { process_sql ("COMMIT;"); process_sql ("SET AUTOCOMMIT = 1;"); return true; } } /** * This function will get all the server information in an array or a specific server * * @param mixed $id_server An optional integer or array of integers to select specific servers * * @return bool false in case the server doesn't exist or an array with info */ function get_server_info ($id_server = -1) { if (is_array ($id_server)) { $select_id = " WHERE id_server IN (".implode (",", $id_server).")"; } elseif ($id_server > 0) { $select_id = " WHERE id_server IN (".(int) $id_server.")"; } else { $select_id = ""; } $sql = "SELECT * FROM tserver".$select_id; $result = get_db_all_rows_sql ($sql); if (empty ($result)) { return false; } $return = array (); foreach ($result as $server) { if ($server["network_server"] == 1) { $server["type"] = "network"; } elseif ($server["data_server"] == 1) { $server["type"] = "data"; } elseif ($server["plugin_server"] == 1) { $server["type"] = "plugin"; } elseif ($server["wmi_server"] == 1) { $server["type"] = "wmi"; } elseif ($server["recon_server"] == 1) { $server["type"] = "recon"; } elseif ($server["snmp_server"] == 1) { $server["type"] = "snmp"; } elseif ($server["prediction_server"] == 1) { $server["type"] = "prediction"; } else { $server["type"] = "unknown"; } $server["modules"] = get_db_sql ("SELECT COUNT(*) FROM tagente_estado, tagente_modulo WHERE tagente_modulo.id_agente_modulo = tagente_estado.id_agente_modulo AND tagente_modulo.disabled = 0 AND tagente_estado.running_by = ".$server["id_server"]); $server["module_lag"] = get_db_sql ("SELECT COUNT(*) FROM tagente_estado, tagente_modulo, tagente WHERE tagente_estado.last_execution_try > 0 AND tagente_estado.running_by = ".$server["id_server"]." AND tagente_modulo.id_agente = tagente.id_agente AND tagente.disabled = 0 AND tagente_modulo.disabled = 0 AND tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo AND (UNIX_TIMESTAMP() - tagente_estado.last_execution_try - tagente_estado.current_interval < 1200)"); // Lag over 1200 seconds is not lag, is module without contacting data in several time.or with a // 1200 sec is 20 min $server["lag"] = get_db_sql ("SELECT MAX(tagente_estado.last_execution_try - tagente_estado.current_interval) FROM tagente_estado, tagente_modulo, tagente WHERE tagente_estado.last_execution_try > 0 AND tagente_estado.running_by = ".$server["id_server"]." AND tagente_modulo.id_agente = tagente.id_agente AND tagente.disabled = 0 AND tagente_modulo.disabled = 0 AND tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo AND (UNIX_TIMESTAMP() - tagente_estado.last_execution_try - tagente_estado.current_interval < 1200)"); if (empty ($server["lag"])) { $server["lag"] = 0; } else { $server["lag"] = get_system_time () - $server["lag"]; } //Push the raw data on the return stack $return[$server["id_server"]] = $server; } return $return; } /** * This function will return the number of all agent modules in the database * * @param mixed $id_agent array of or just integers with agent(s). Leave empty to select everything * * @return int The number of agent modules * */ function get_agent_modules_count ($id_agent = 0) { $id_agent = safe_int ($id_agent, 1); //Make sure we're all int's and filter out bad stuff if (empty ($id_agent)) { //If the array proved empty or the agent is less than 1 (eg. -1) $filter = ''; } else { $filter = sprintf (" WHERE id_agente IN (%s)", implode (",", (array) $id_agent)); } return (int) get_db_sql ("SELECT COUNT(*) FROM tagente_modulo".$filter); } /** * This function gets the agent group for a given agent module * * @param int $id_module: The agent module id * * @return int The group id */ function get_agentmodule_group ($id_module) { $agent = (int) get_agentmodule_agent ((int) $id_module); return (int) get_agent_group ($agent); } /** * This function gets the group for a given agent * * @param int $id_agent: The agent id * * @return int The group id */ function get_agent_group ($id_agent) { return (int) get_db_value ('id_grupo', 'tagente', 'id_agente', (int) $id_agent); } /** * This function gets the group name for a given group id * * @param int $id_group: The group id * * @return string The group name */ function get_group_name ($id_group) { return (string) get_db_value ('nombre', 'tgrupo', 'id_grupo', (int) $id_group); } /** * Validates an alert id or an array of alert id's * * @param mixed $alert_id Array of or a single id * * @return bool True if it was successful, false if it doesn't */ function process_alerts_validate ($id_alert) { global $config; require_once ("include/functions_events.php"); $id_alert = safe_int ($id_alert, 1); if (empty ($id_alert)) { return false; } else { $id_alert = (array) $id_alert; } foreach ($id_alert as $id_aam) { $alert = get_db_row ("talerta_agente_modulo", "id_aam", $id_aam); if (empty ($alert["id_agent"])) { //Simple alert $agent_id = get_agentmodule_agent ($alert["id_agente_modulo"]); $group_id = get_agentmodule_group ($alert["id_agente_modulo"]); } else { //Combined alert $agent_id = $alert["id_agent"]; $group_id = get_agent_group ($agent_id); } if (give_acl ($config['id_user'], $group_id, "AW") == 0) { continue; } $sql = sprintf ("UPDATE talerta_agente_modulo SET times_fired = 0, internal_counter = 0 WHERE id_aam = %d", $id_aam); $result = process_sql ($sql); if ($result > 0) { create_event ("Manual validation of alert for ".$alert["descripcion"], $group_id, $agent_id, 1, $config["id_user"], "alert_manual_validation", 1, $alert["id_agente_modulo"], $id_aam); } elseif ($result === false) { return false; } } return true; } /** * Gets all module groups. (General, Networking, System). Module groups are merely for sorting frontend * * @return array All module groups */ function get_modulegroups () { $result = get_db_all_fields_in_table ("tmodule_group"); $return = array (); if (empty ($result)) { return $return; } foreach ($result as $modulegroup) { $return[$modulegroup["id_mg"]] = $modulegroup["name"]; } return $return; } /** * Gets a modulegroup name based on the id * * @param int $modulegroup_id The id of the modulegroup * * @return string The modulegroup name */ function get_modulegroup_name ($modulegroup_id) { return (string) get_db_value ('name', 'tmodule_group', 'id_mg', (int) $modulegroup_id); } ?>