2008-04-23 22:51:37 +02:00
< ? php
2009-06-08 20:17:33 +02:00
// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2009 Artica Soluciones Tecnologicas
// Please see http://pandorafms.org for full contribution list
2008-04-23 22:51:37 +02:00
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
2009-06-08 20:17:33 +02:00
// as published by the Free Software Foundation for version 2.
2008-04-23 22:51:37 +02:00
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
2009-06-08 20:17:33 +02:00
2009-03-05 18:40:40 +01:00
ini_set ( 'display_errors' , 0 ); //Don't display other errors, messes up XML
2009-03-12 19:44:37 +01:00
2009-03-05 18:40:40 +01:00
require_once " ../../include/config.php " ;
require_once " ../../include/functions.php " ;
2008-07-25 20:37:32 +02:00
require_once " ../../include/functions_db.php " ;
2010-01-25 20:47:38 +01:00
require_once " ../../include/functions_api.php " ;
2010-07-02 14:21:39 +02:00
2010-01-25 20:47:38 +01:00
$ipOrigin = $_SERVER [ 'REMOTE_ADDR' ];
// Uncoment this to activate ACL on RSS Events
2010-09-27 13:24:43 +02:00
if ( ! isInACL ( $ipOrigin )) {
2010-01-25 20:47:38 +01:00
exit ;
2010-09-27 13:24:43 +02:00
}
2010-09-01 15:34:15 +02:00
// Check user credentials
$user = get_parameter ( 'user' );
$hashup = get_parameter ( 'hashup' );
$pss = get_user_info ( $user );
$hashup2 = md5 ( $user . $pss [ 'password' ]);
if ( $hashup != $hashup2 ){
exit ;
}
2010-01-25 20:47:38 +01:00
header ( " Content-Type: application/xml; charset=UTF-8 " ); //Send header before starting to output
2008-04-23 22:51:37 +02:00
2009-03-05 18:40:40 +01:00
function rss_error_handler ( $errno , $errstr , $errfile , $errline ) {
global $config ;
$base = 'http' . ( isset ( $_SERVER [ 'HTTPS' ]) && $_SERVER [ 'HTTPS' ] == TRUE ? 's' : '' ) . '://' . $_SERVER [ 'HTTP_HOST' ];
$url = $base . $config [ " homeurl " ];
$selfurl = $base . $_SERVER [ 'PHP_SELF' ] . '?' . $_SERVER [ 'QUERY_STRING' ];
$rss_feed = '<?xml version="1.0" encoding="utf-8" ?>' ; //' Fixes certain highlighters freaking out on the PHP closing tag
$rss_feed .= '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">' ;
$rss_feed .= '<channel><title>Pandora RSS Feed</title><description>Latest events on Pandora</description>' ;
$rss_feed .= '<lastBuildDate>' . date ( DATE_RFC822 , 0 ) . '</lastBuildDate>' ;
$rss_feed .= '<link>' . $url . '</link>' ; //Link back to the main Pandora page
2009-03-12 19:44:37 +01:00
$rss_feed .= '<atom:link href="' . safe_input ( $selfurl ) . '" rel="self" type="application/rss+xml" />' ; //Alternative for Atom feeds. It's the same.
2009-03-05 18:40:40 +01:00
$rss_feed .= '<item><guid>' . $url . '/index.php?sec=eventos&sec2=operation/events/events</guid><title>Error creating feed</title>' ;
$rss_feed .= '<description>There was an error creating the feed: ' . $errno . ' - ' . $errstr . ' in ' . $errfile . ' on line ' . $errline . '</description>' ;
$rss_feed .= '<link>' . $url . '/index.php?sec=eventos&sec2=operation/events/events</link></item>' ;
exit ( $rss_feed ); //Exit by displaying the feed
}
set_error_handler ( 'rss_error_handler' , E_ALL ); //Errors output as RSS
2009-03-12 19:44:37 +01:00
2008-09-03 17:47:09 +02:00
$ev_group = get_parameter ( " ev_group " , 0 ); // group
$search = get_parameter ( " search " , " " ); // free search
$event_type = get_parameter ( " event_type " , '' ); // 0 all
$severity = ( int ) get_parameter ( " severity " , - 1 ); // -1 all
$status = ( int ) get_parameter ( " status " , 0 ); // -1 all, 0 only red, 1 only green
$id_agent = ( int ) get_parameter ( " id_agent " , - 1 );
$id_event = ( int ) get_parameter ( " id_event " , - 1 ); //This will allow to select only 1 event (eg. RSS)
2010-07-02 14:21:39 +02:00
$event_view_hr = ( int ) get_parameter ( " event_view_hr " , 0 );
2008-04-23 22:51:37 +02:00
2008-09-03 17:47:09 +02:00
$sql_post = " " ;
2010-07-02 14:21:39 +02:00
if ( $event_view_hr > 0 ) {
$unixtime = ( int ) ( get_system_time () - ( $event_view_hr * 3600 )); //Put hours in seconds
$sql_post .= " AND `tevento`.`utimestamp` > " . $unixtime ;
}
2008-09-03 17:47:09 +02:00
if ( $ev_group > 1 )
$sql_post .= " AND `tevento`.`id_grupo` = $ev_group " ;
2010-09-27 13:24:43 +02:00
switch ( $status ) {
case 0 :
case 1 :
case 2 :
$sql_post .= " AND `tevento`.`estado` = " . $status ;
break ;
case 3 :
$sql_post .= " AND (`tevento`.`estado` = 0 OR `tevento`.`estado` = 2) " ;
break ;
}
2008-09-03 17:47:09 +02:00
if ( $search != " " )
2009-03-05 18:40:40 +01:00
$sql_post .= " AND `tevento`.`evento` LIKE '% $search %' " ;
2010-07-02 14:21:39 +02:00
if ( $event_type != " " ){
// If normal, warning, could be several (going_up_warning, going_down_warning... too complex
// for the user so for him is presented only "warning, critical and normal"
if ( $event_type == " warning " || $event_type == " critical " || $event_type == " normal " ){
$sql_post .= " AND `tevento`.`event_type` LIKE '% $event_type %' " ;
}
elseif ( $event_type == " not_normal " ){
$sql_post .= " AND `tevento`.`event_type` LIKE '%warning%' OR `tevento`.`event_type` LIKE '%critical%' OR `tevento`.`event_type` LIKE '%unknown%' " ;
}
else
$sql_post .= " AND `tevento`.`event_type` = ' " . $event_type . " ' " ;
}
2008-09-03 17:47:09 +02:00
if ( $severity != - 1 )
2009-03-05 18:40:40 +01:00
$sql_post .= " AND `tevento`.`criticity` >= " . $severity ;
2010-09-27 13:24:43 +02:00
if ( $id_agent == - 2 ) {
$text_agent = ( string ) get_parameter ( " text_agent " , __ ( " All " ));
switch ( $text_agent )
{
case __ ( 'All' ) :
$id_agent = - 1 ;
break ;
case __ ( 'Server' ) :
$id_agent = 0 ;
break ;
default :
$id_agent = get_agent_id ( $text_agent );
break ;
}
}
else {
switch ( $id_agent )
{
case - 1 :
$text_agent = __ ( 'All' );
break ;
case 0 :
$text_agent = __ ( 'Server' );
break ;
default :
$text_agent = get_agent_name ( $id_agent );
break ;
}
}
2008-09-03 17:47:09 +02:00
if ( $id_agent != - 1 )
$sql_post .= " AND `tevento`.`id_agente` = " . $id_agent ;
if ( $id_event != - 1 )
$sql_post .= " AND id_evento = " . $id_event ;
2010-07-02 14:21:39 +02:00
2010-09-01 15:34:15 +02:00
// Avoid to show system events to not administrators
if ( ! check_acl ( $user , 0 , " PM " ))
$sql_post .= " AND `tevento`.`event_type` <> 'system' " ;
2008-09-03 17:47:09 +02:00
$sql = " SELECT `tevento`.`id_evento` AS event_id,
2010-07-02 14:21:39 +02:00
`tevento` . `id_agente` AS id_agent ,
2008-09-03 17:47:09 +02:00
`tevento` . `id_usuario` AS validated_by ,
2010-09-01 15:34:15 +02:00
`tevento` . `id_grupo` AS id_group ,
2008-09-03 17:47:09 +02:00
`tevento` . `estado` AS validated ,
`tevento` . `evento` AS event_descr ,
2010-07-02 14:21:39 +02:00
`tevento` . `utimestamp` AS unix_timestamp ,
`tevento` . `event_type` AS event_type
FROM tevento
WHERE 1 = 1 " . $sql_post . "
2008-09-03 17:47:09 +02:00
ORDER BY utimestamp DESC LIMIT 0 , 30 " ;
2008-04-23 22:51:37 +02:00
2008-09-03 17:47:09 +02:00
$result = get_db_all_rows_sql ( $sql );
2008-04-23 22:51:37 +02:00
2009-03-05 18:40:40 +01:00
$base = 'http' . ( isset ( $_SERVER [ 'HTTPS' ]) && $_SERVER [ 'HTTPS' ] == TRUE ? 's' : '' ) . '://' . $_SERVER [ 'HTTP_HOST' ];
$url = $base . $config [ " homeurl " ];
$selfurl = $base . $_SERVER [ 'PHP_SELF' ] . '?' . $_SERVER [ 'QUERY_STRING' ];
if ( empty ( $result )) {
$lastbuild = 0 ; //Last build in 1970
} else {
$lastbuild = ( int ) $result [ 0 ][ 'unix_timestamp' ];
}
2008-04-23 22:51:37 +02:00
2009-03-12 19:44:37 +01:00
$rss_feed = '<?xml version="1.0" encoding="utf-8" ?>' ; // ' <?php ' -- Fixes highlighters thinking that the closing tag is PHP
2009-03-05 18:40:40 +01:00
$rss_feed .= '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">' ;
2008-09-03 17:47:09 +02:00
$rss_feed .= '<channel><title>Pandora RSS Feed</title><description>Latest events on Pandora</description>' ;
2009-03-05 18:40:40 +01:00
$rss_feed .= '<lastBuildDate>' . date ( DATE_RFC822 , $lastbuild ) . '</lastBuildDate>' ; //Last build date is the last event - that way readers won't mark it as having new posts
$rss_feed .= '<link>' . $url . '</link>' ; //Link back to the main Pandora page
2009-03-12 19:44:37 +01:00
$rss_feed .= '<atom:link href="' . safe_input ( $selfurl ) . '" rel="self" type="application/rss+xml" />' ; //Alternative for Atom feeds. It's the same.
2008-04-23 22:51:37 +02:00
2009-03-05 18:40:40 +01:00
if ( empty ( $result )) {
2008-09-03 17:47:09 +02:00
$result = array ();
2009-03-12 19:44:37 +01:00
$rss_feed .= '<item><guid>' . safe_input ( $url . '/index.php?sec=eventos&sec2=operation/events/events' ) . '</guid><title>No results</title>' ;
2008-09-03 17:47:09 +02:00
$rss_feed .= '<description>There are no results. Click on the link to see all Pending events</description>' ;
2009-03-12 19:44:37 +01:00
$rss_feed .= '<link>' . safe_input ( $url . '/index.php?sec=eventos&sec2=operation/events/events' ) . '</link></item>' ;
2008-09-03 17:47:09 +02:00
}
2008-04-23 22:51:37 +02:00
2008-09-03 17:47:09 +02:00
foreach ( $result as $row ) {
2010-09-01 15:34:15 +02:00
if ( ! check_acl ( $user , $row [ " id_group " ], " AR " )) {
continue ;
}
2010-07-02 14:21:39 +02:00
if ( $row [ " event_type " ] == " system " ) {
$agent_name = __ ( 'System' );
}
elseif ( $row [ " id_agent " ] > 0 ) {
// Agent name
$agent_name = get_agent_name ( $row [ " id_agent " ]);
}
else {
$agent_name = __ ( 'Alert' ) . __ ( 'SNMP' );
}
2008-04-23 22:51:37 +02:00
//This is mandatory
$rss_feed .= '<item><guid>' ;
2009-03-12 19:44:37 +01:00
$rss_feed .= safe_input ( $url . " /index.php?sec=eventos&sec2=operation/events/events&id_event= " . $row [ 'event_id' ]);
2008-04-23 22:51:37 +02:00
$rss_feed .= '</guid><title>' ;
2010-07-02 14:21:39 +02:00
$rss_feed .= $agent_name ;
2008-04-23 22:51:37 +02:00
$rss_feed .= '</title><description>' ;
2009-11-25 15:56:51 +01:00
$rss_feed .= safe_input ( $row [ 'event_descr' ]);
2008-09-03 17:47:09 +02:00
if ( $row [ 'validated' ] == 1 ) {
2010-07-02 14:21:39 +02:00
$rss_feed .= safe_input ( '<br /><br />' ) . 'Validated by ' . safe_input ( $row [ 'validated_by' ]);
2008-09-03 17:47:09 +02:00
}
2008-04-23 22:51:37 +02:00
$rss_feed .= '</description><link>' ;
2009-03-12 19:44:37 +01:00
$rss_feed .= safe_input ( $url . " /index.php?sec=eventos&sec2=operation/events/events&id_event= " . $row [ " event_id " ]);
2008-04-23 22:51:37 +02:00
$rss_feed .= '</link>' ;
2008-09-03 17:47:09 +02:00
2008-04-23 22:51:37 +02:00
//The rest is optional
$rss_feed .= '<pubDate>' . date ( DATE_RFC822 , $row [ 'unix_timestamp' ]) . '</pubDate>' ;
//This is mandatory again
$rss_feed .= '</item>' ;
}
$rss_feed .= " </channel></rss> " ;
echo $rss_feed ;
2009-06-08 20:17:33 +02:00
?>