1<?php 2 3// Pandora FMS - http://pandorafms.com 4// ================================================== 5// Copyright (c) 2005-2010 Artica Soluciones Tecnologicas 6// Please see http://pandorafms.org for full contribution list 7 8// This program is free software; you can redistribute it and/or 9// modify it under the terms of the GNU General Public License 10// as published by the Free Software Foundation for version 2. 11// This program is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16require_once ('include/functions_events.php'); 17require_once ('include/functions_agents.php'); 18require_once ('include/functions_ui.php'); 19require_once ('include/functions_db.php'); 20require_once ('include/functions_io.php'); 21require_once ('include/functions.php'); 22enterprise_include_once ('meta/include/functions_events_meta.php'); 23enterprise_include_once ('include/functions_metaconsole.php'); 24 25$get_events_details = (bool) get_parameter ('get_events_details'); 26$get_extended_event = (bool) get_parameter ('get_extended_event'); 27$change_status = (bool) get_parameter ('change_status'); 28$change_owner = (bool) get_parameter ('change_owner'); 29$add_comment = (bool) get_parameter ('add_comment'); 30$dialogue_event_response = (bool) get_parameter ('dialogue_event_response'); 31$perform_event_response = (bool) get_parameter ('perform_event_response'); 32$get_response = (bool) get_parameter ('get_response'); 33$get_response_target = (bool) get_parameter ('get_response_target'); 34$get_response_params = (bool) get_parameter ('get_response_params'); 35$get_response_description = (bool) get_parameter ('get_response_description'); 36$get_event_name = (bool) get_parameter ('get_event_name'); 37$meta = get_parameter ('meta', 0); 38$history = get_parameter ('history', 0); 39$table_events = get_parameter('table_events', 0); 40 41if ($get_event_name) { 42 $event_id = get_parameter ('event_id'); 43 44 if ($meta) { 45 $name = events_meta_get_event_name($event_id, $history); 46 } 47 else { 48 $name = db_get_value('evento','tevento','id_evento',$event_id); 49 } 50 51 if ($name === false) { 52 return; 53 } 54 55 ui_print_truncate_text(io_safe_output($name), 75, false, false, false, '...'); 56 57 return; 58} 59 60if ($get_response_description) { 61 $response_id = get_parameter ('response_id'); 62 63 $description = db_get_value('description','tevent_response','id',$response_id); 64 65 if ($description === false) { 66 return; 67 } 68 69 $description = io_safe_output($description); 70 $description = str_replace("\r\n", '<br>', $description); 71 72 echo $description; 73 74 return; 75} 76 77if ($get_response_params) { 78 $response_id = get_parameter ('response_id'); 79 80 $params = db_get_value('params','tevent_response','id',$response_id); 81 82 if ($params === false) { 83 return; 84 } 85 86 echo json_encode(explode(',',$params)); 87 88 return; 89} 90 91if ($get_response_target) { 92 $response_id = get_parameter ('response_id'); 93 $event_id = get_parameter ('event_id'); 94 $server_id = get_parameter ('server_id', 0); 95 96 $event_response = db_get_row('tevent_response','id',$response_id); 97 98 if (empty($event_response)) { 99 return; 100 } 101 102 echo events_get_response_target($event_id, $response_id, $server_id); 103 104 return; 105} 106 107if ($get_response) { 108 $response_id = get_parameter ('response_id'); 109 110 $event_response = db_get_row('tevent_response','id',$response_id); 111 112 if (empty($event_response)) { 113 return; 114 } 115 116 echo json_encode($event_response); 117 return; 118} 119 120if ($perform_event_response) { 121 global $config; 122 123 $command = get_parameter('target',''); 124 125 switch (PHP_OS) { 126 case "DragonFly": 127 case "FreeBSD": 128 $timeout_bin = '/usr/local/bin/gtimeout'; 129 break; 130 case "NetBSD": 131 $timeout_bin = '/usr/pkg/bin/gtimeout'; 132 break; 133 default: 134 $timeout_bin = '/usr/bin/timeout'; 135 break; 136 } 137 echo system($timeout_bin . ' 9 '.io_safe_output($command).' 2>&1'); 138 139 return; 140} 141 142if ($dialogue_event_response) { 143 global $config; 144 145 $event_id = get_parameter ('event_id'); 146 $response_id = get_parameter ('response_id'); 147 $command = get_parameter ('target'); 148 149 $event_response = db_get_row('tevent_response','id',$response_id); 150 151 $event = db_get_row('tevento','id_evento',$event_id); 152 153 $prompt = "<br>> "; 154 155 switch($event_response['type']) { 156 case 'command': 157 echo "<div style='text-align:left'>"; 158 echo $prompt.sprintf(__('Executing command: %s',$command)); 159 echo "</div><br>"; 160 161 echo "<div id='response_loading_command' style='display:none'>".html_print_image('images/spinner.gif', true)."</div>"; 162 echo "<br><div id='response_out' style='text-align:left'></div>"; 163 164 echo "<br><div id='re_exec_command' style='display:none;'>"; 165 html_print_button(__('Execute again'),'btn_str',false,'perform_response(\''.$command.'\');', "class='sub next'"); 166 echo "</div>"; 167 break; 168 case 'url': 169 $command = str_replace("localhost",$_SERVER['SERVER_NAME'],$command); 170 echo "<iframe src='$command' id='divframe' style='width:100%;height:90%;'></iframe>"; 171 break; 172 } 173} 174 175if ($add_comment) { 176 $comment = get_parameter ('comment'); 177 $event_id = get_parameter ('event_id'); 178 179 $return = events_comment ($event_id, $comment, 'Added comment', $meta, $history); 180 181 if ($return) 182 echo 'comment_ok'; 183 else 184 echo 'comment_error'; 185 186 return; 187} 188 189if ($change_status) { 190 $event_ids = get_parameter ('event_ids'); 191 $new_status = get_parameter ('new_status'); 192 193 $return = events_change_status (explode(',',$event_ids), $new_status, $meta, $history); 194 195 if ($return) 196 echo 'status_ok'; 197 else 198 echo 'status_error'; 199 200 return; 201} 202 203if ($change_owner) { 204 $new_owner = get_parameter ('new_owner'); 205 $event_id = get_parameter ('event_id'); 206 $similars = true; 207 208 if ($new_owner == -1) { 209 $new_owner = ''; 210 } 211 212 $return = events_change_owner($event_id, $new_owner, true, $meta, $history); 213 214 if ($return) 215 echo 'owner_ok'; 216 else 217 echo 'owner_error'; 218 219 return; 220} 221 222if ($get_extended_event) { 223 global $config; 224 225 $event_id = get_parameter('event_id',false); 226 $childrens_ids = get_parameter('childrens_ids'); 227 $childrens_ids = json_decode($childrens_ids); 228 229 if ($meta) { 230 $event = events_meta_get_event($event_id, false, $history, "ER"); 231 } 232 else { 233 $event = events_get_event($event_id); 234 } 235 236 $readonly = false; 237 if (!$meta && 238 isset($config['event_replication']) && 239 $config['event_replication'] == 1 && 240 $config['show_events_in_local'] == 1) { 241 $readonly = true; 242 } 243 244 // Clean url from events and store in array 245 $event['clean_tags'] = events_clean_tags($event['tags']); 246 247 // If the event is not found, we abort 248 if (empty($event)) { 249 ui_print_error_message('Event not found'); 250 return false; 251 } 252 253 $dialog_page = get_parameter('dialog_page','general'); 254 $similar_ids = get_parameter('similar_ids', $event_id); 255 $group_rep = get_parameter('group_rep',false); 256 $event_rep = get_parameter('event_rep',1); 257 $timestamp_first = get_parameter('timestamp_first', $event['utimestamp']); 258 $timestamp_last = get_parameter('timestamp_last', $event['utimestamp']); 259 $server_id = get_parameter('server_id', 0); 260 261 $event['similar_ids'] = $similar_ids; 262 $event['timestamp_first'] = $timestamp_first; 263 $event['timestamp_last'] = $timestamp_last; 264 $event['event_rep'] = $event_rep; 265 266 // Check ACLs 267 if (is_user_admin ($config["id_user"])) { 268 //Do nothing if you're admin, you get full access 269 } 270 else if ($config["id_user"] == $event['owner_user']) { 271 //Do nothing if you're the owner user, you get access 272 } 273 else if ($event['id_grupo'] == 0) { 274 //If the event has access to all groups, you get access 275 } 276 else { 277 // Get your groups 278 $groups = users_get_groups($config['id_user'], 'ER'); 279 280 if (in_array ($event['id_grupo'], array_keys ($groups))) { 281 //If the event group is among the groups of the user, you get access 282 } 283 else { 284 // If all the access types fail, abort 285 echo 'Access denied'; 286 return false; 287 } 288 } 289 290 // Print group_rep in a hidden field to recover it from javascript 291 html_print_input_hidden('group_rep',(int)$group_rep); 292 293 if ($event === false) { 294 return; 295 } 296 297 // Tabs 298 $tabs = "<ul style='background:#ffffff !important; border-top: 0px; border-left: 0px; border-right: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; border-color: #D3D3D3;'>"; 299 $tabs .= "<li><a href='#extended_event_general_page' id='link_general'>".html_print_image('images/lightning_go.png',true).__('General')."</a></li>"; 300 $tabs .= "<li><a href='#extended_event_details_page' id='link_details'>".html_print_image('images/zoom.png',true).__('Details')."</a></li>"; 301 $tabs .= "<li><a href='#extended_event_custom_fields_page' id='link_custom_fields'>".html_print_image('images/custom_field_col.png',true).__('Agent fields')."</a></li>"; 302 $tabs .= "<li><a href='#extended_event_comments_page' id='link_comments'>".html_print_image('images/pencil.png',true).__('Comments')."</a></li>"; 303 304 if (!$readonly && 305 (tags_checks_event_acl($config["id_user"], $event["id_grupo"], "EM", $event['clean_tags'], $childrens_ids)) || (tags_checks_event_acl($config["id_user"], $event["id_grupo"], "EW", $event['clean_tags'],$childrens_ids))) { 306 $tabs .= "<li><a href='#extended_event_responses_page' id='link_responses'>".html_print_image('images/event_responses_col.png',true).__('Responses')."</a></li>"; 307 } 308 if ($event['custom_data'] != '') { 309 $tabs .= "<li><a href='#extended_event_custom_data_page' id='link_custom_data'>".html_print_image('images/custom_field_col.png',true).__('Custom data')."</a></li>"; 310 } 311 $tabs .= "</ul>"; 312 313 // Get criticity image 314 switch ($event["criticity"]) { 315 default: 316 case 0: 317 $img_sev = "images/status_sets/default/severity_maintenance.png"; 318 break; 319 case 1: 320 $img_sev = "images/status_sets/default/severity_informational.png"; 321 break; 322 case 2: 323 $img_sev = "images/status_sets/default/severity_normal.png"; 324 break; 325 case 3: 326 $img_sev = "images/status_sets/default/severity_warning.png"; 327 break; 328 case 4: 329 $img_sev = "images/status_sets/default/severity_critical.png"; 330 break; 331 case 5: 332 $img_sev = "images/status_sets/default/severity_minor.png"; 333 break; 334 case 6: 335 $img_sev = "images/status_sets/default/severity_major.png"; 336 break; 337 } 338 339 if (!$readonly && 340 (tags_checks_event_acl($config["id_user"], $event["id_grupo"], "EM", $event['clean_tags'], $childrens_ids)) || (tags_checks_event_acl($config["id_user"], $event["id_grupo"], "EW", $event['clean_tags'],$childrens_ids))) { 341 $responses = events_page_responses($event, $childrens_ids); 342 } 343 else { 344 $responses = ''; 345 } 346 347 $console_url = ''; 348 // If metaconsole switch to node to get details and custom fields 349 if ($meta) { 350 $server = metaconsole_get_connection_by_id ($server_id); 351 metaconsole_connect($server); 352 } 353 else { 354 $server = ""; 355 } 356 357 $details = events_page_details($event, $server); 358 359 // Juanma (09/05/2014) Fix: Needs to reconnect to node, in previous funct node connection was lost 360 if ($meta) { 361 $server = metaconsole_get_connection_by_id ($server_id); 362 metaconsole_connect($server); 363 } 364 365 $custom_fields = events_page_custom_fields($event); 366 367 $custom_data = events_page_custom_data($event); 368 369 if ($meta) { 370 metaconsole_restore_db_force(); 371 } 372 373 $general = events_page_general($event); 374 375 $comments = events_page_comments($event, $childrens_ids); 376 377 $notifications = '<div id="notification_comment_error" style="display:none">'.ui_print_error_message(__('Error adding comment'),'',true).'</div>'; 378 $notifications .= '<div id="notification_comment_success" style="display:none">'.ui_print_success_message(__('Comment added successfully'),'',true).'</div>'; 379 $notifications .= '<div id="notification_status_error" style="display:none">'.ui_print_error_message(__('Error changing event status'),'',true).'</div>'; 380 $notifications .= '<div id="notification_status_success" style="display:none">'.ui_print_success_message(__('Event status changed successfully'),'',true).'</div>'; 381 $notifications .= '<div id="notification_owner_error" style="display:none">'.ui_print_error_message(__('Error changing event owner'),'',true).'</div>'; 382 $notifications .= '<div id="notification_owner_success" style="display:none">'.ui_print_success_message(__('Event owner changed successfully'),'',true).'</div>'; 383 384 $loading = '<div id="response_loading" style="display:none">'.html_print_image('images/spinner.gif',true).'</div>'; 385 386 $out = '<div id="tabs" style="height:95%; overflow: auto">'. 387 $tabs. 388 $notifications. 389 $loading. 390 $general. 391 $details. 392 $custom_fields. 393 $comments. 394 $responses. 395 $custom_data. 396 html_print_input_hidden('id_event',$event['id_evento']). 397 '</div>'; 398 399 $js = '<script> 400 $(function() { 401 $tabs = $( "#tabs" ).tabs({ 402 }); 403 '; 404 405 // Load the required tab 406 switch ($dialog_page) { 407 case "general": 408 $js .= '$tabs.tabs( "option", "active", 0);'; 409 break; 410 case "details": 411 $js .= '$tabs.tabs( "option", "active", 1);'; 412 break; 413 case "custom_fields": 414 $js .= '$tabs.tabs( "option", "active", 2);'; 415 break; 416 case "comments": 417 $js .= '$tabs.tabs( "option", "active", 3);'; 418 break; 419 case "responses": 420 $js .= '$tabs.tabs( "option", "active", 4);'; 421 break; 422 case "custom_data": 423 $js .= '$tabs.tabs( "option", "active", 5);'; 424 break; 425 } 426 427 $js .= ' 428 }); 429 </script>'; 430 431 echo $out.$js; 432} 433 434if ($get_events_details) { 435 $event_ids = explode(',',get_parameter ('event_ids')); 436 $events = db_get_all_rows_filter ('tevento', 437 array ('id_evento' => $event_ids, 438 'order' => 'utimestamp ASC'), 439 array ('evento', 'utimestamp', 'estado', 'criticity', 'id_usuario')); 440 441 $out = '<table class="eventtable" style="width:100%;height:100%;padding:0px 0px 0px 0px; border-spacing: 0px; margin: 0px 0px 0px 0px;">'; 442 $out .= '<tr style="font-size:0px; heigth: 0px; background: #ccc;"><td></td><td></td></tr>'; 443 foreach ($events as $event) { 444 switch ($event["estado"]) { 445 case 0: 446 $img = ui_get_full_url("images/star.png", false, false, false); 447 $title = __('New event'); 448 break; 449 case 1: 450 $img = ui_get_full_url("images/tick.png", false, false, false); 451 $title = __('Event validated'); 452 break; 453 case 2: 454 $img = ui_get_full_url("images/hourglass.png", false, false, false); 455 $title = __('Event in process'); 456 break; 457 } 458 459 $out .= '<tr class="'.get_priority_class ($event['criticity']).'" style="height: 25px;">'; 460 $out .= '<td class="'.get_priority_class ($event['criticity']).'" style="font-size:7pt" colspan=2>'; 461 $out .= io_safe_output($event['evento']); 462 $out .= '</td></tr>'; 463 464 $out .= '<tr class="'.get_priority_class ($event['criticity']).'" style="font-size:0px; height: 25px;">'; 465 $out .= '<td class="'.get_priority_class ($event['criticity']).'" style="width: 18px; text-align:center;">'; 466 $out .= html_print_image(ui_get_full_url('images/clock.png', false, false, false), true, array('title' => __('Timestamp')), false, true); 467 468 $out .= '</td>'; 469 $out .= '<td class="'.get_priority_class ($event['criticity']).'" style="font-size:7pt">'; 470 $out .= date($config['date_format'], $event['utimestamp']); 471 $out .= '</td></tr>'; 472 473 $out .= '<tr class="'.get_priority_class ($event['criticity']).'" style="font-size:0px; height: 25px;">'; 474 $out .= '<td class="'.get_priority_class ($event['criticity']).'" style="width: 18px; text-align:center;">'; 475 $out .= html_print_image($img, true, array('title' => $title), false, true); 476 $out .= '</td>'; 477 $out .= '<td class="'.get_priority_class ($event['criticity']).'" style="font-size:7pt">'; 478 $out .= $title; 479 if ($event["estado"] == 1) { 480 if (empty($event['id_usuario'])) { 481 $ack_user = '<i>' . __('Auto') . '</i>'; 482 } 483 else { 484 $ack_user = $event['id_usuario']; 485 } 486 487 $out .= ' (' . $ack_user . ')'; 488 } 489 490 $out .= '</td></tr>'; 491 492 $out .= '<tr style="font-size:0px; heigth: 0px; background: #999;"><td></td><td>'; 493 $out .= '</td></tr><tr style="font-size:0px; heigth: 0px; background: #ccc;"><td></td><td>'; 494 $out .= '</td></tr>'; 495 } 496 $out .= '</table>'; 497 498 echo $out; 499} 500 501if ($table_events) { 502 require_once ("include/functions_events.php"); 503 require_once ("include/functions_graph.php"); 504 505 $id_agente = (int)get_parameter('id_agente', 0); 506 507 // Fix: for tag functionality groups have to be all user_groups (propagate ACL funct!) 508 $groups = users_get_groups($config["id_user"]); 509 510 $tags_condition = tags_get_acl_tags($config['id_user'], 511 array_keys($groups), 'ER', 'event_condition', 'AND'); 512 513 events_print_event_table ("estado <> 1 $tags_condition", 10, '100%', 514 false, $id_agente,true); 515} 516?> 517