/** * Runs procedures attached to a hook. * * @param hook_name Name of hook to run. * @param args Array of optional arguments set by * phpldapadmin. It is normally in a form known * by call_user_func_array() : * <pre>[ 'server_id' => 0, * 'dn' => 'uid=epoussa,ou=tech,o=corp,o=fr' ]</pre> * * @return true if all procedures returned true, false otherwise. */ function run_hook($hook_name, $args) { global $hooks; $debug = 0; syslog_debug("Running hook {$hook_name}."); if (!array_key_exists($hook_name, $hooks)) { syslog_notice("Hook '{$hook_name}' not defined !\n"); return true; } unset($rollbacks); $rollbacks = array(); reset($hooks[$hook_name]); /** Execution of procedures attached is done using a numeric order * since all procedures have been attached to the hook with a * numerical weight. */ while (list($key, $hook) = each($hooks[$hook_name])) { array_push($rollbacks, $hook['rollback_function']); syslog_debug("Calling " . $hook['hook_function'] . "\n"); $result = call_user_func_array($hook['hook_function'], $args); syslog_notice("Called " . $hook['hook_function'] . "\n"); /** If a procedure fails, its optional rollback is executed with * the same arguments. After that, all rollbacks from * previously executed procedures are executed in the reverse * order. */ if ($result != true) { syslog_debug("Function " . $hook['hook_function'] . " returned {$result}\n"); while ($rollbacks) { $rollback = array_pop($rollbacks); if ($rollback != false) { syslog_debug("Executing rollback {$rollback}\n"); call_user_func_array($rollback, $args); } } return false; } } return true; }
$headtext .= "<html><head><style type='text/css'>"; $headtext .= file_get_contents($config['base_path'] . '/plugins/syslog/syslog.css'); $headtext .= '</style></head>'; $headtext .= "<body class='body'><h1 class='h1'>" . $syslog_report['name'] . "</h1><table>\n" . "<tr><th class='th'>Date</th><th class='th'>Time</th><th class='th'>Message</th></tr>\n" . $reptext; $headtext .= "</table>\n"; $smsalert = $headtext; // Send mail syslog_sendemail($syslog_report['email'], '', 'Event Report - ' . $syslog_report['name'], $headtext, $smsalert); } } } else { print ' Next Send: ' . date('Y-m-d H:i:s', $next_run_time) . "\n"; } } } syslog_debug('Finished processing Reports...'); syslog_process_log($start_time, $syslog_deleted, $syslog_incoming, $syslog_removed, $syslog_xferred, $syslog_alerts, $syslog_alarms, $syslog_reports); function syslog_process_log($start_time, $deleted, $incoming, $removed, $xferred, $alerts, $alarms, $reports) { global $database_default; /* record the end time */ list($micro, $seconds) = explode(' ', microtime()); $end_time = $seconds + $micro; cacti_log('SYSLOG STATS:Time:' . round($end_time - $start_time, 2) . ' Deletes:' . $deleted . ' Incoming:' . $incoming . ' Removes:' . $removed . ' XFers:' . $xferred . ' Alerts:' . $alerts . ' Alarms:' . $alarms . ' Reports:' . $reports, true, 'SYSTEM'); db_execute('REPLACE INTO `' . $database_default . "`.`settings` SET name='syslog_stats', value='time:" . round($end_time - $start_time, 2) . ' deletes:' . $deleted . ' incoming:' . $incoming . ' removes:' . $removed . ' xfers:' . $xferred . ' alerts:' . $alerts . ' alarms:' . $alarms . ' reports:' . $reports . "'"); } function display_help() { echo "Syslog Poller Process 2.0, Copyright 2007-2016, The Cacti Group, Inc.\n\n"; echo "The main Syslog poller process script for Cacti Syslogging.\n\n"; echo "usage: syslog_process.php [--debug|-d]\n\n";
if (empty($syslog_cnn)) { if (strtolower($database_hostname) == strtolower($syslogdb_hostname) && $database_default == $syslogdb_default) { /* move on, using Cacti */ $syslog_cnn = $cnn_id; } else { if (!isset($syslogdb_port)) { $syslogdb_port = "3306"; } $syslog_cnn = db_connect_real($syslogdb_hostname, $syslogdb_username, $syslogdb_password, $syslogdb_default, $syslogdb_type, $syslogdb_port); } } /* If Syslog Collection is Disabled, Exit Here */ if (read_config_option("syslog_enabled") == '') { print "NOTE: Syslog record transferral and alerting/reporting is disabled. Exiting\n"; exit - 1; } /* remove records that don't need to to be transferred */ syslog_debug("Syslog Batch Transfer / Remove Process started ...... "); $syslog_items = syslog_manage_items("syslog", "syslog_removed"); $syslog_removed = $syslog_items["removed"]; $syslog_xferred = $syslog_items["xferred"]; syslog_debug("Removed " . $syslog_removed . ", Message(s) from the 'syslog' table"); syslog_debug("Xferred " . $syslog_xferred . ", Message(s) to the 'syslog_removed' table"); syslog_debug("Finished processing..."); function display_help() { echo "Syslog Batch Process 1.0, Copyright 2004-2011 - The Cacti Group\n\n"; echo "The Syslog batch process script for Cacti Syslogging.\n\n"; echo "This script removes old messages from main view prior.\n\n"; echo "usage: syslog_batch_transfer.php [--debug|-d]\n\n"; }
$headtext .= "<html><head><style type='text/css'>"; $headtext .= file_get_contents($config['base_path'] . "/plugins/syslog/syslog.css"); $headtext .= "</style></head>"; $headtext .= "<body class='body'><h1 class='h1'>" . $syslog_report['name'] . "</h1><table>\n" . "<tr><th class='th'>Date</th><th class='th'>Time</th><th class='th'>Message</th></tr>\n" . $reptext; $headtext .= "</table>\n"; $smsalert = $headtext; // Send mail syslog_sendemail($syslog_report['email'], '', 'Event Report - ' . $syslog_report['name'], $headtext, $smsalert); } } } else { print ' Next Send: ' . date("Y-m-d H:i:s", $next_run_time) . "\n"; } } } syslog_debug("Finished processing Reports..."); syslog_process_log($start_time, $syslog_deleted, $syslog_incoming, $syslog_removed, $syslog_xferred, $syslog_alerts, $syslog_alarms, $syslog_reports); function syslog_process_log($start_time, $deleted, $incoming, $removed, $xferred, $alerts, $alarms, $reports) { global $database_default; /* record the end time */ list($micro, $seconds) = explode(" ", microtime()); $end_time = $seconds + $micro; cacti_log("SYSLOG STATS:Time:" . round($end_time - $start_time, 2) . " Deletes:" . $deleted . " Incoming:" . $incoming . " Removes:" . $removed . " XFers:" . $xferred . " Alerts:" . $alerts . " Alarms:" . $alarms . " Reports:" . $reports, true, "SYSTEM"); db_execute("REPLACE INTO `" . $database_default . "`.`settings` SET name='syslog_stats', value='time:" . round($end_time - $start_time, 2) . " deletes:" . $deleted . " incoming:" . $incoming . " removes:" . $removed . " xfers:" . $xferred . " alerts:" . $alerts . " alarms:" . $alarms . " reports:" . $reports . "'"); } function display_help() { echo "Syslog Poller Process 1.0, Copyright 2004-2011 - The Cacti Group\n\n"; echo "The main Syslog poller process script for Cacti Syslogging.\n\n"; echo "usage: syslog_process.php [--debug|-d]\n\n";
function syslog_manage_items($from_table, $to_table) { global $config, $syslog_cnn, $syslog_incoming_config; include dirname(__FILE__) . "/config.php"; /* Select filters to work on */ $rows = syslog_db_fetch_assoc("SELECT * FROM `" . $syslogdb_default . "`.`syslog_remove` WHERE enabled='on'"); //$rows = syslog_db_fetch_assoc("SELECT * FROM `" . $syslogdb_default . "`.`syslog_remove` WHERE enabled='on' AND message like 'last message repeated %'"); syslog_debug("Found " . sizeof($rows) . ", Removal Rule(s)" . " to process"); $removed = 0; $xferred = 0; $total = 0; if (sizeof($rows)) { foreach ($rows as $remove) { syslog_debug("Processing Rule - " . $remove['message']); $sql_sel = ""; $sql_dlt = ""; if ($remove['type'] == 'facility') { if ($remove['method'] != 'del') { $sql_sel = "SELECT seq\n\t\t\t\t\t\t\t\tFROM `" . $syslogdb_default . "`. {$from_table}\n\t\t\t\t\t\t\t\tWHERE facility_id in\n\t\t\t\t\t\t\t\t\t(SELECT distinct facility_id from `" . $syslogdb_default . "`syslog_facilities\n\t\t\t\t\t\t\t\t\t\tWHERE facility ='" . $remove['message'] . "')"; } else { $sql_dlt = "DELETE\n\t\t\t\t\t\t\t\tFROM `" . $syslogdb_default . "`. {$from_table} \n\t\t\t\t\t\t\t\tWHERE facility_id in\n\t\t\t\t\t\t\t\t\t(SELECT distinct facility_id from `" . $syslogdb_default . "`syslog_facilities\n\t\t\t\t\t\t\t\t\t\tWHERE facility ='" . $remove['message'] . "')"; } } else { if ($remove['type'] == 'host') { if ($remove['method'] != 'del') { $sql_sel = "SELECT seq\n\t\t\t\t\t\t\t\tFROM `" . $syslogdb_default . "`. {$from_table}\n\t\t\t\t\t\t\t\tWHERE host_id in\n\t\t\t\t\t\t\t\t\t(SELECT distinct host_id from `" . $syslogdb_default . "`syslog_hosts\n\t\t\t\t\t\t\t\t\t\tWHERE host ='" . $remove['message'] . "')"; } else { $sql_dlt = "DELETE\n\t\t\t\t\t\t\t\tFROM `" . $syslogdb_default . "`. {$from_table} \n\t\t\t\t\t\t\t\tWHERE host_id in\n\t\t\t\t\t\t\t\t\t(SELECT distinct host_id from `" . $syslogdb_default . "`syslog_hosts\n\t\t\t\t\t\t\t\t\t\tWHERE host ='" . $remove['message'] . "')"; } } else { if ($remove['type'] == 'messageb') { if ($remove['method'] != 'del') { $sql_sel = "SELECT seq\n\t\t\t\t\t\t\t\tFROM `" . $syslogdb_default . "`. {$from_table}\n\t\t\t\t\t\t\t\tWHERE message LIKE '" . $remove['message'] . "%' "; } else { $sql_dlt = "DELETE\n\t\t\t\t\t\t\t\tFROM `" . $syslogdb_default . "`. {$from_table} \n\t\t\t\t\t\t\t\tWHERE message LIKE '" . $remove['message'] . "%' "; } } else { if ($remove['type'] == 'messagec') { if ($remove['method'] != 'del') { $sql_sel = "SELECT seq\n\t\t\t\t\t\t\t\tFROM `" . $syslogdb_default . "`. {$from_table}\n\t\t\t\t\t\t\t\tWHERE message LIKE '%" . $remove['message'] . "%' "; } else { $sql_dlt = "DELETE\n\t\t\t\t\t\t\t\tFROM `" . $syslogdb_default . "`. {$from_table} \n\t\t\t\t\t\t\t\tWHERE message LIKE '%" . $remove['message'] . "%' "; } } else { if ($remove['type'] == 'messagee') { if ($remove['method'] != 'del') { $sql_sel = "SELECT seq\n\t\t\t\t\t\t\t\tFROM `" . $syslogdb_default . "`. {$from_table}\n\t\t\t\t\t\t\t\tWHERE message LIKE '%" . $remove['message'] . "' "; } else { $sql_dlt = "DELETE\n\t\t\t\t\t\t\t\tFROM `" . $syslogdb_default . "`. {$from_table} \n\t\t\t\t\t\t\t\tWHERE message LIKE '%" . $remove['message'] . "' "; } } else { if ($remove['type'] == 'sql') { if ($remove['method'] != 'del') { $sql_sel = "SELECT seq\n\t\t\t\t\t\t\t\tFROM `" . $syslogdb_default . "`. {$from_table}\n\t\t\t\t\t\t\t\tWHERE message (" . $remove['message'] . ") "; } else { $sql_dlt = "DELETE\n\t\t\t\t\t\t\t\tFROM `" . $syslogdb_default . "`. {$from_table} \n\t\t\t\t\t\t\t\tWHERE message (" . $remove['message'] . ") "; } } } } } } } if ($sql_sel != '' || $sql_dlt != '') { $debugm = ''; /* process the removal rule first */ if ($sql_sel != '') { $move_count = 0; /* first insert, then delete */ $move_records = syslog_db_fetch_assoc($sql_sel); syslog_debug("Found " . sizeof($move_records) . " Message(s)"); if (sizeof($move_records)) { $all_seq = ''; $messages_moved = 0; foreach ($move_records as $move_record) { $all_seq = $all_seq . ", " . $move_record['seq']; } $all_seq = eregi_replace('^,', '', $all_seq); syslog_db_execute("INSERT INTO `" . $syslogdb_default . "`.`" . $to_table . "` \n\t\t\t\t\t\t\t\t\t\t\t\t(facility_id, priority_id, host_id, logtime, message)\n\t\t\t\t\t\t\t\t\t\t\t\t(SELECT facility_id, priority_id, host_id, logtime, message \n\t\t\t\t\t\t\t\t\t\t\t\t\tFROM `" . $syslogdb_default . "`." . $from_table . "\n\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE seq in (" . $all_seq . "))"); $messages_moved = $syslog_cnn->Affected_Rows(); if ($messages_moved > 0) { syslog_db_execute("DELETE FROM `" . $syslogdb_default . "`.`" . $from_table . "` \n\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE seq in (" . $all_seq . ")"); } $xferred += $messages_moved; $move_count = $messages_moved; } $debugm = "Moved " . $move_count . " Message(s)"; } if ($sql_dlt != '') { /* now delete the remainder that match */ syslog_db_execute($sql_dlt); $removed += $syslog_cnn->Affected_Rows(); $debugm = "Deleted " . $removed . " Message(s)"; } syslog_debug($debugm); } } } return array("removed" => $removed, "xferred" => $xferred); }
if (empty($syslog_cnn)) { if (strtolower($database_hostname) == strtolower($syslogdb_hostname) && $database_default == $syslogdb_default) { /* move on, using Cacti */ $syslog_cnn = $cnn_id; } else { if (!isset($syslogdb_port)) { $syslogdb_port = '3306'; } $syslog_cnn = db_connect_real($syslogdb_hostname, $syslogdb_username, $syslogdb_password, $syslogdb_default, $syslogdb_type, $syslogdb_port); } } /* If Syslog Collection is Disabled, Exit Here */ if (read_config_option('syslog_enabled') == '') { print "NOTE: Syslog record transferral and alerting/reporting is disabled. Exiting\n"; exit - 1; } /* remove records that don't need to to be transferred */ syslog_debug('Syslog Batch Transfer / Remove Process started ...... '); $syslog_items = syslog_manage_items('syslog', 'syslog_removed'); $syslog_removed = $syslog_items['removed']; $syslog_xferred = $syslog_items['xferred']; syslog_debug("Removed " . $syslog_removed . ", Message(s) from the 'syslog' table"); syslog_debug("Xferred " . $syslog_xferred . ", Message(s) to the 'syslog_removed' table"); syslog_debug('Finished processing...'); function display_help() { echo "Syslog Batch Process 2.0, Copyright 2004-2016 - The Cacti Group\n\n"; echo "The Syslog batch process script for Cacti Syslogging.\n\n"; echo "This script removes old messages from main view prior.\n\n"; echo "usage: syslog_batch_transfer.php [--debug|-d]\n\n"; }