00001 <?php
00002 session_name('ATMPHPSESSID') ;
00003 session_start() ;
00004
00005 $app = "aTinyMON Real-Time monitoring application for Asterisk" ;
00006 $version = "v0.28 - 2007" ;
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 include_once ('config.php') ;
00030
00031
00032
00033
00034
00035
00036
00037 function my_htmlentities($text)
00038 {
00039 return (htmlentities($text, ENT_COMPAT, 'UTF-8')) ;
00040 }
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 function clean_dev_data($type, $dev, $forced)
00055 {
00056 $now = (DEBUG >= 2) || DEMO ? $_SESSION['last_ticket']['timestamp'] : time() ;
00057 $calls = 0 ;
00058 if (isset($_SESSION['st'][$type][$dev]['_chan']))
00059 {
00060 if ($forced)
00061 {
00062 $_SESSION['st'][$type][$dev]['_chan'] = array () ;
00063 }
00064 else
00065 {
00066 foreach (array_keys($_SESSION['st'][$type][$dev]['_chan']) as $chanid)
00067 {
00068 if ($now - $_SESSION['st'][$type][$dev]['_chan'][$chanid]['_ts'] > CALL_TIMEOUT)
00069 {
00070 unset ($_SESSION['st'][$type][$dev]['_chan'][$chanid]) ;
00071 }
00072 else
00073 {
00074 $calls++ ;
00075 }
00076 }
00077 }
00078 }
00079 if ($calls == 0 && $now - $_SESSION['st'][$type][$dev]['_ts'] > DEVICE_TIMEOUT)
00080 {
00081 unset ($_SESSION['st'][$type][$dev]) ;
00082 }
00083 return ($calls) ;
00084 }
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094 function update_dev($mode, $type, $dev, $ticket_a)
00095 {
00096 if (MASK_PSEUDO &&
00097 ($type == 'Zap' && $dev == 'pseudo' ||
00098 $type == 'OutgoingSpoolFailed'))
00099 return ;
00100
00101 switch ($mode)
00102 {
00103 case UPDATE :
00104 if (!isset($_SESSION['st'][$type][$dev]))
00105 {
00106 $_SESSION['st'][$type][$dev] = array() ;
00107 }
00108 $_SESSION['st'][$type][$dev] = array_merge($_SESSION['st'][$type][$dev], $ticket_a) ;
00109 break ;
00110
00111 case DELETE :
00112 unset ($_SESSION['st'][$type][$dev]) ;
00113 break ;
00114
00115 default :
00116 }
00117 }
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131 function parse_cnxid($cnxid)
00132 {
00133
00134 $cnxid = preg_replace('/<\w+>$/', '', $cnxid) ;
00135
00136
00137 $cnxid = preg_replace('/^([\w\/]+\/)(\w+\/)/', '$2', $cnxid) ;
00138 list ($channel, $chanid) = explode('-', $cnxid) ;
00139 list($type, $dev) = explode("/", $channel) ;
00140 return (array ($type, $dev, $chanid)) ;
00141 }
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153 function update_dev_call($mode, $cnxid, $ticket_a)
00154 {
00155 list($type, $dev, $chanid) = parse_cnxid($cnxid) ;
00156
00157 if (MASK_PSEUDO &&
00158 ($type == 'Zap' && $dev == 'pseudo' ||
00159 $type == 'OutgoingSpoolFailed'))
00160 return ;
00161
00162 $_SESSION['st'][$type][$dev]['_ts'] = $ticket_a['_ts'] ;
00163
00164 switch ($mode)
00165 {
00166 case UPDATE :
00167 if (!isset($_SESSION['st'][$type][$dev]['_chan'][$chanid]))
00168 {
00169 $_SESSION['st'][$type][$dev]['_chan'][$chanid] = array() ;
00170 }
00171 $_SESSION['st'][$type][$dev]['_chan'][$chanid] = array_merge($_SESSION['st'][$type][$dev]['_chan'][$chanid], $ticket_a) ;
00172 break ;
00173
00174 case DELETE :
00175 if (!isset($_SESSION['st'][$type][$dev]['_chan']))
00176 {
00177 $_SESSION['st'][$type][$dev]['_chan'] = array() ;
00178 }
00179 if (isset($_SESSION['st'][$type][$dev]['_chan'][$chanid]))
00180 {
00181 unset ($_SESSION['st'][$type][$dev]['_chan'][$chanid]) ;
00182 }
00183 break ;
00184
00185 default :
00186 }
00187 }
00188
00189
00190
00191 function run_session()
00192 {
00193 global $version, $ui, $status, $special, $db ;
00194
00195
00196
00197
00198 $userrequest = FALSE ;
00199 if (isset($_REQUEST['submit']['quit']))
00200 {
00201 if (isset($_COOKIE[session_name()]))
00202 setcookie(session_name(), '', time() - 42000, '/') ;
00203 $_SESSION = array() ;
00204 session_destroy() ;
00205 header('Location: ' . REDIRECT) ;
00206 exit ;
00207 }
00208 if (isset($_REQUEST['submit']['freeze']))
00209 {
00210 $_SESSION['freeze'] = TRUE ;
00211 $userrequest = TRUE ;
00212 }
00213 if (isset($_REQUEST['submit']['refresh']))
00214 {
00215 $_SESSION['freeze'] = FALSE ;
00216 $userrequest = TRUE && !(DEBUG >= 4 ) ;
00217 }
00218 if (isset($_REQUEST['submit']['view']))
00219 {
00220 foreach (array_keys($_REQUEST['submit']['view']) as $type)
00221 {
00222 $_SESSION['view'][$type] = !$_SESSION['view'][$type] ;
00223 }
00224 $userrequest = TRUE ;
00225 }
00226 if (isset($_REQUEST['submit']['showoffline']))
00227 {
00228 $_SESSION['showoffline'] = !$_SESSION['showoffline'] ;
00229 $userrequest = TRUE ;
00230 }
00231 if (isset($_REQUEST['submit']['showevents']))
00232 {
00233 $_SESSION['showevents'] = !$_SESSION['showevents'] ;
00234 $userrequest = TRUE ;
00235 }
00236 if (isset($_REQUEST['itemsperrow']))
00237 {
00238 $_SESSION['itemsperrow'] = $_REQUEST['itemsperrow'] ;
00239 $userrequest = TRUE ;
00240 }
00241 if (isset($_REQUEST['zoom']))
00242 {
00243 $_SESSION['zoom'] = $_REQUEST['zoom'] ;
00244 $userrequest = TRUE ;
00245 }
00246 if (isset($_REQUEST['id']))
00247 {
00248 $_SESSION['last_ticket']['id'] = $_REQUEST['id'] ;
00249 $_SESSION['last_ticket']['datetime'] = NULL ;
00250 $_SESSION['last_ticket']['timestamp'] = NULL ;
00251 $_SESSION['last_ticket']['ticket'] = NULL ;
00252 $_SESSION['last_ticket']['handled'] = TRUE ;
00253 $userrequest = TRUE ;
00254 }
00255
00256
00257
00258 if (!isset($_SESSION['counter']))
00259 {
00260 $_SESSION['counter'] = 0 ;
00261 }
00262 else
00263 {
00264 $_SESSION['counter']++ ;
00265 }
00266 if (!isset($_SESSION['freeze']))
00267 {
00268 $_SESSION['freeze'] = FALSE ;
00269 }
00270 if (!isset($_SESSION['online']))
00271 {
00272 $_SESSION['online'] = FALSE ;
00273 }
00274 if (!isset($_SESSION['refresh_min']))
00275 {
00276 $_SESSION['refresh_min'] = REFRESH_MIN ;
00277 }
00278 if (!isset($_SESSION['refresh_max']))
00279 {
00280 $_SESSION['refresh_max'] = REFRESH_MAX ;
00281 }
00282 if (!isset($_SESSION['last_ticket']))
00283 {
00284 $_SESSION['last_ticket']['id'] = 0 ;
00285 $_SESSION['last_ticket']['datetime'] = 0 ;
00286 $_SESSION['last_ticket']['timestamp'] = 0 ;
00287 $_SESSION['last_ticket']['ticket'] = '' ;
00288 $_SESSION['last_ticket']['handled'] = TRUE ;
00289 }
00290 if (!isset($_SESSION['st']))
00291 {
00292 $_SESSION['st'] = array () ;
00293 $_SESSION['st']['Asterisk']['status'] = 'unknown' ;
00294 }
00295 if (!isset($_SESSION['view']))
00296 {
00297 $_SESSION['view']['Asterisk'] = TRUE ;
00298 $_SESSION['view']['SIP'] = TRUE ;
00299 }
00300 if (!isset($_SESSION['itemsperrow']))
00301 {
00302 $_SESSION['itemsperrow'] = 6 ;
00303 }
00304 if (!isset($_SESSION['showoffline']))
00305 {
00306 $_SESSION['showoffline'] = OFFLINE_BY_DEFAULT ;
00307 }
00308 if (!isset($_SESSION['showevents']))
00309 {
00310 $_SESSION['showevents'] = EVENTS_BY_DEFAULT || DEBUG ;
00311 }
00312 if (!isset($_SESSION['hostname']))
00313 {
00314 $_SESSION['hostname'] = exec('hostname') ;
00315 }
00316
00317
00318
00319 $db = mysql_pconnect(DB_HOST, DB_USERNAME, DB_PASSWORD) ;
00320 if (!$db)
00321 {
00322 trigger_error(mysql_error() . ' after mysql_pconnect()', E_USER_ERROR) ;
00323 }
00324
00325
00326
00327 if ($db)
00328 {
00329 $query = "set NAMES utf8" ;
00330 $result = $db ? mysql_query($query) : FALSE ; if (!$result && $db) trigger_error(mysql_error() . ' after : ' . $query, E_USER_ERROR) ;
00331
00332
00333
00334
00335
00336 $result = mysql_select_db(DB_DATABASE) ;
00337 if (!$result)
00338 {
00339 trigger_error(mysql_error() . ' after mysql_select_db()', E_USER_ERROR) ;
00340 mysql_close($db) ;
00341 $db = NULL ;
00342 }
00343 }
00344
00345
00346
00347 if ($db && !$_SESSION['online'])
00348 {
00349 $query = "CREATE TABLE IF NOT EXISTS `tickets` (
00350 `id` int(11) NOT NULL auto_increment,
00351 `datetime` datetime NOT NULL default '0000-00-00 00:00:00',
00352 `ticket` text NOT NULL,
00353 PRIMARY KEY (`id`)
00354 ) DEFAULT CHARSET=utf8 ;" ;
00355 $result = mysql_query($query) ;
00356 if (!$result)
00357 {
00358 trigger_error(mysql_error() . ' after mysql_query()', E_USER_ERROR) ;
00359 mysql_close($db) ;
00360 $db = NULL ;
00361 }
00362 }
00363
00364
00365
00366 if ($db && !$_SESSION['online'])
00367 {
00368 if (DEMO)
00369 {
00370 $_SESSION['online'] = TRUE ;
00371 }
00372 else
00373 {
00374 $check = exec(MON_APP . ' ping') ;
00375 if ($check == 'pong')
00376 {
00377 $args = AST_USERNAME . ' ' . AST_PASSWORD .
00378 ' -d=' . DEBUG .
00379 ' -h=' . AST_HOST .
00380 ' -p=' . AST_PORT .
00381 ' -a' .
00382 ' -u' .
00383 ' -de' .
00384 ' -dbh=' . DB_HOST .
00385 ' -dbp=' . DB_PORT .
00386 ' -dbu=' . DB_USERNAME .
00387 ' -dbw=' . DB_PASSWORD .
00388 ' -dbd=' . DB_DATABASE .
00389 ' -dbt=' . DB_TABLE .
00390 ' -dbe=' . TICKETS_PURGE .
00391
00392 ' -c="loop ' . POLLING_PERIOD . ' / action: sippeers / . / ! 1 / Action: zapshowchannels / . / ! 1 / Action: status / . /"' ;
00393
00394
00395
00396 proc_close(proc_open (MON_APP . " $args &", array(), $pipes));
00397 $_SESSION['online'] = TRUE ;
00398 }
00399 else
00400 {
00401 trigger_error(MON_APP . " is not available (test result : '$check')", E_USER_ERROR) ;
00402 }
00403 }
00404 }
00405
00406 $sid = SID ? "?" . strip_tags(SID) : "" ;
00407 $url = $_SERVER['PHP_SELF'] . $sid ;
00408 $now = time() ;
00409 $_SESSION['scanstart'] = $now ;
00410
00411
00412
00413
00414
00415 header("Cache-Control: no-cache, must-revalidate") ;
00416 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT") ;
00417 header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT") ;
00418 if ($_SESSION['online'] && !$_SESSION['freeze'] && !(DEBUG >= 4 ))
00419 {
00420 $refresh_min = $_SESSION['refresh_min'] ;
00421 header("Refresh: $refresh_min; URL=$url");
00422 }
00423
00424 print "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n" ;
00425 print "<html>\n" ;
00426 print "<head>\n" ;
00427 print " <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n" ;
00428 print " <title>atinymon - " . $_SESSION['hostname'] . "</title>\n" ;
00429 print " <link type=\"text/css\" href=\"css/atinymon.css\" rel=\"stylesheet\">\n" ;
00430 print "</head>\n" ;
00431 print "<body>\n" ;
00432
00433
00434
00435
00436 $maxtime = $now + $_SESSION['refresh_max'] - $_SESSION['refresh_min'] ;
00437 $newtickets = 0 ;
00438 $maxnewtickets = TICKETS_PER_REFRESH_MAX ;
00439 $nomoretickets = FALSE ;
00440 $displaynow = FALSE ;
00441 while (!$_SESSION['freeze'] &&
00442 !$userrequest &&
00443 !($newtickets && $nomoretickets) &&
00444 $newtickets < $maxnewtickets &&
00445 time() <= $maxtime &&
00446 !$displaynow)
00447 {
00448 if ($nomoretickets)
00449 {
00450
00451 sleep (1) ;
00452 }
00453
00454 $ticketsavail = -1 ;
00455 $query = "select count(*) from `" . DB_TABLE . "` where `id`>" . $_SESSION['last_ticket']['id'] ;
00456 $result = $db ? mysql_query($query) : FALSE ; if (!$result && $db) trigger_error(mysql_error() . ' in : ' . $query, E_USER_ERROR) ;
00457 if ($result)
00458 {
00459 $num_rows = mysql_num_rows($result) ;
00460 if ($num_rows > 0)
00461 {
00462 $row = mysql_fetch_row($result) ;
00463 $ticketsavail = $row[0] ;
00464 }
00465 mysql_free_result($result) ;
00466 }
00467 else
00468 {
00469 $displaynow = TRUE ;
00470 }
00471
00472 if ($ticketsavail > 0)
00473 {
00474 $nomoretickets = FALSE ;
00475 $newtickets++ ;
00476 $displaynow = $displaynow || (DEBUG >= 4) ;
00477 $query = "select `id`, `datetime`, time_to_sec(timediff(`datetime`, now())), `ticket`from `" . DB_TABLE . "` where `id`>" . $_SESSION['last_ticket']['id'] . " limit 0, 1" ;
00478 $result = $db ? mysql_query($query) : FALSE ; if (!$result && $db) trigger_error(mysql_error() . ' in : ' . $query, E_USER_ERROR) ;
00479 if ($result)
00480 {
00481 $num_rows = mysql_num_rows($result) ;
00482 if ($num_rows > 0)
00483 {
00484 $row = mysql_fetch_row($result) ;
00485 $_SESSION['last_ticket']['id'] = $row[0] ;
00486 $_SESSION['last_ticket']['datetime'] = $row[1] ;
00487 $_SESSION['last_ticket']['timestamp'] = time() + $row[2] ;
00488 $_SESSION['last_ticket']['ticket'] = $row[3] ;
00489 $_SESSION['last_ticket']['handled'] = 0 ;
00490 }
00491 mysql_free_result($result) ;
00492 }
00493 else
00494 {
00495 $displaynow = TRUE ;
00496 }
00497
00498 $ticket_l = explode("\n", $_SESSION['last_ticket']['ticket']) ;
00499 if (preg_match("/^Asterisk Call Manager\//", $ticket_l[0]))
00500 {
00501 array_shift($ticket_l) ;
00502 }
00503 $msg = trim($ticket_l[0]) ;
00504 if (strstr($msg, ': '))
00505 {
00506 list($msg, $indication) = explode(': ', $msg) ;
00507 }
00508 else
00509 {
00510 $indication = '' ;
00511 }
00512
00513
00514
00515 switch ($msg)
00516 {
00517
00518 case 'Response' :
00519
00520 switch ($indication)
00521 {
00522 case 'Success' :
00523 $_SESSION['st']['Asterisk']['status'] = 'online' ;
00524 $_SESSION['last_ticket']['handled'] = 1 ;
00525 break ;
00526
00527 case 'Goodbye' :
00528 $_SESSION['st']['Asterisk']['status'] = 'unknown' ;
00529 $_SESSION['last_ticket']['handled'] = 1 ;
00530 break ;
00531
00532 default :
00533
00534 }
00535 break ;
00536
00537 case 'Event' :
00538
00539
00540 $_SESSION['st']['Asterisk']['status'] = 'online' ;
00541
00542
00543 $ticket_a = array('_ts' => $_SESSION['last_ticket']['timestamp']) ;
00544 foreach ($ticket_l as $line)
00545 {
00546 if (strstr($line, ': '))
00547 {
00548 $split = explode(": ", trim($line), 2) ;
00549 $item = $split[0] ;
00550 $value = count($split) > 1 ? $split[1] : '' ;
00551 $ticket_a[$item] = $value ;
00552 }
00553 }
00554
00555 $_SESSION['last_ticket']['handled'] = TRUE ;
00556 switch ($indication)
00557 {
00558 case 'Shutdown' :
00559 $_SESSION['st'] = array () ;
00560 $_SESSION['st']['Asterisk']['status'] = 'offline' ;
00561 $displaynow = $displaynow || DEMO ;
00562 break ;
00563
00564 case 'PeerEntry' :
00565 if (isset($ticket_a['Channeltype']) && isset($ticket_a['ObjectName']))
00566 {
00567 update_dev(UPDATE, $ticket_a['Channeltype'], $ticket_a['ObjectName'], $ticket_a) ;
00568 $type = $ticket_a['Channeltype'] ;
00569 $dev = $ticket_a['ObjectName'] ;
00570 if (isset($_SESSION['st'][$type][$dev]['IPaddress']) &&
00571 $_SESSION['st'][$type][$dev]['IPaddress'] == '-none-')
00572 {
00573 clean_dev_data($type, $dev, 1) ;
00574 }
00575 }
00576 break ;
00577
00578 case 'PeerStatus' :
00579 if (isset($ticket_a['Peer']))
00580 {
00581 list($type, $dev) = explode("/", $ticket_a['Peer']) ;
00582 update_dev(UPDATE, $type, $dev, $ticket_a) ;
00583 }
00584 break ;
00585
00586 case 'Newchannel' :
00587 case 'Newcallerid' :
00588 case 'Newstate' :
00589 case 'Status' :
00590 if (isset($ticket_a['Channel']))
00591 {
00592 update_dev_call(UPDATE, $ticket_a['Channel'], $ticket_a) ;
00593 }
00594 $displaynow = $displaynow || DEMO && $indication != 'Newcallerid' ;
00595 break ;
00596
00597 case 'Dial' :
00598 if (isset($ticket_a['Source']))
00599 {
00600 update_dev_call(UPDATE, $ticket_a['Source'], $ticket_a) ;
00601 }
00602 if (isset($ticket_a['Destination']))
00603 {
00604 update_dev_call(UPDATE, $ticket_a['Destination'], $ticket_a) ;
00605 }
00606 break ;
00607
00608 case 'Hangup' :
00609 if (isset($ticket_a['Channel']))
00610 {
00611 update_dev_call(DELETE, $ticket_a['Channel'], $ticket_a) ;
00612 }
00613 $displaynow = $displaynow || DEMO ;
00614 break ;
00615
00616 case 'MeetmeJoin' :
00617 case 'MeetmeLeave' :
00618 if (!isset($ticket_a['Meetme']) || !isset($ticket_a['Channel']))
00619 break ;
00620 $meetme = $ticket_a['Meetme'] ;
00621 $cnxid = $ticket_a['Channel'] ;
00622 list ($channel, $chanid) = explode('-', $cnxid) ;
00623
00624 if ($indication == 'MeetmeJoin')
00625 {
00626 update_dev_call(UPDATE, "Meetme/$meetme-$chanid", $ticket_a) ;
00627 }
00628 else
00629 {
00630 update_dev_call(DELETE, "Meetme/$meetme-$chanid", $ticket_a) ;
00631 }
00632
00633 if (isset($ticket_a['Channel']))
00634 {
00635 update_dev_call(UPDATE, $ticket_a['Channel'], $ticket_a) ;
00636 }
00637 $displaynow = $displaynow || DEMO ;
00638 break ;
00639
00640 case 'ZapShowChannels' :
00641 if (isset($ticket_a['Channel']))
00642 {
00643 update_dev(UPDATE, 'Zap', $ticket_a['Channel'], $ticket_a) ;
00644 }
00645 break ;
00646
00647 case 'Rename' :
00648 if (!isset($ticket_a['Oldname']) || !isset($ticket_a['Newname']))
00649 break ;
00650 $o_cnxid = preg_replace('/<\w+>/', '', $ticket_a['Oldname']) ;
00651 $n_cnxid = preg_replace('/<\w+>/', '', $ticket_a['Newname']) ;
00652 if ($n_cnxid != $o_cnxid)
00653 {
00654 list($o_type, $o_dev, $o_chanid) = parse_cnxid($o_cnxid) ;
00655 list($n_type, $n_dev, $n_chanid) = parse_cnxid($n_cnxid) ;
00656 update_dev_call(UPDATE, $o_cnxid, array ()) ;
00657 $_SESSION['st'][$n_type][$n_dev]['_chan'][$n_chanid] = $_SESSION['st'][$o_type][$o_dev]['_chan'][$o_chanid] ;
00658 $_SESSION['st'][$n_type][$n_dev]['_chan'][$n_chanid][$msg] = $indication ;
00659 unset ($_SESSION['st'][$o_type][$o_dev]['_chan'][$o_chanid]) ;
00660 }
00661 $displaynow = $displaynow || DEMO ;
00662 break ;
00663
00664 case 'Alarm' :
00665 if (isset($ticket_a['Channel']))
00666 {
00667 update_dev(UPDATE, 'Zap', $ticket_a['Channel'], $ticket_a) ;
00668 }
00669 break ;
00670
00671 case 'AlarmClear' :
00672 if (isset($ticket_a['Channel']))
00673 {
00674 $ticket_a['Alarm'] = 'No Alarm' ;
00675 update_dev(UPDATE, 'Zap', $ticket_a['Channel'], $ticket_a) ;
00676 }
00677 break ;
00678
00679 case 'PeerlistComplete' :
00680 case 'StatusComplete' :
00681 case 'ZapShowChannelsComplete' :
00682 case 'Newexten' :
00683 case 'OriginateSuccess' :
00684 case 'OriginateFailure' :
00685 case 'Link' :
00686 case 'Unlink' :
00687 case 'Reload' :
00688
00689 break ;
00690
00691 default :
00692 $_SESSION['last_ticket']['handled'] = FALSE ;
00693 }
00694 break ;
00695
00696 default :
00697
00698 }
00699 }
00700 else
00701 {
00702 $nomoretickets = TRUE ;
00703 }
00704 if (FREEZE_IF_NOT_HANDLED)
00705 {
00706
00707 $_SESSION['freeze'] = $_SESSION['freeze'] || !$_SESSION['last_ticket']['handled'] ;
00708 }
00709 }
00710
00711
00712
00713
00714
00715 print "<table style=\"width: 100%;\">\n" ;
00716 print " <tbody>\n" ;
00717 print " <tr>\n" ;
00718
00719
00720
00721
00722
00723 print " <td style=\"vertical-align: top; width: 200px;\">\n" ;
00724
00725
00726
00727 print "<span class=title>aTinyMON</span>" ;
00728 if ($_SESSION['freeze'])
00729 {
00730 print " <img src=\"" . $ui['frozen'][0] . "\" title=\"" . $ui['frozen'][1] . "\"/>" ;
00731 }
00732 else
00733 {
00734 print " <img src=\"" . $ui['running'][0] . "\" title=\"" . $ui['running'][1] . "\"/>" ;
00735 }
00736 print "<br/> <span class=nota>$version - Software under GPL license</span><br/>\n" ;
00737
00738 print "aTinyMON : " . $_SESSION['hostname'] . "<br/>Asterisk : " . AST_HOST . "<br/><span class=\"info\">" . date("Y-m-d H:i:s", $now) . "</span><br/>\n" ;
00739
00740
00741
00742 print "<form action=\"$url\" method=\"post\">\n" ;
00743 foreach (array_keys($_SESSION['view']) as $type)
00744 {
00745 print "<input type=\"image\" name=\"submit[view][$type]\" src=\"" .
00746 ($_SESSION['view'][$type] ? IMG_SELECTED : IMG_NOT_SELECTED) .
00747 "\"> $type<br/>\n" ;
00748 }
00749
00750 if ($_SESSION['freeze'])
00751 {
00752 $rule_args_list = array(2, 4, 6, 8, 16) ;
00753 $preset = $_SESSION['itemsperrow'] ;
00754 print "<select name=\"itemsperrow\">" ;
00755 foreach ($rule_args_list as $arg)
00756 {
00757 $selected_status = ($arg == $preset) ? 'selected' : '' ;
00758 print "<option value=\"$arg\" $selected_status>$arg " ;
00759 }
00760 print "</select>" ;
00761 }
00762 else
00763 {
00764 print $_SESSION['itemsperrow'] ;
00765 }
00766 print " items/row<br/>" ;
00767
00768 print "<br/>\n" ;
00769 print "<input type=\"image\" name=\"submit[freeze]\" src=\"" . $ui['freeze'][0] . "\" title=\"" . $ui['freeze'][1] . "\"/>\n" ;
00770 print "<img src=\"" . IMG_BLANK . "\">\n" ;
00771 print "<input type=\"image\" name=\"submit[refresh]\" src=\"" . $ui['refresh'][0] . "\" title=\"" . $ui['refresh'][1] . "\"/>\n" ;
00772 print "<img src=\"" . IMG_BLANK . "\">\n" ;
00773 print "<input type=\"image\" name=\"submit[quit]\" src=\"" . $ui['quit'][0] . "\" title=\"" . $ui['quit'][1] . "\"/>\n" ;
00774 print "<br/><br/>\n" ;
00775
00776
00777
00778 if (isset($_SESSION['zoom']) && strstr($_SESSION['zoom'], '/'))
00779 {
00780 list($type, $dev) = explode ('/', $_SESSION['zoom']) ;
00781 print "<input type=\"submit\" name=\"zoom\" value=\"Close\"/> \n" ;
00782 print "<span class=\"info\">Zoom $type/$dev<br/>\n" ;
00783 print "<textarea name=\"ticket\" rows=\"10\" cols=\"32\" readonly>" ;
00784 if (is_array($_SESSION['st'][$type][$dev]))
00785 {
00786 foreach (array_keys($_SESSION['st'][$type][$dev]) as $attr)
00787 {
00788 if ($attr == '_chan' || $attr == '_ts')
00789 {
00790 continue ;
00791 }
00792 $value = $_SESSION['st'][$type][$dev][$attr] ;
00793 print my_htmlentities("$attr: $value\n") ;
00794 }
00795 }
00796 if (is_array($_SESSION['st'][$type][$dev]['_chan']))
00797 {
00798 foreach (array_keys($_SESSION['st'][$type][$dev]['_chan']) as $chan)
00799 {
00800 print "* Channel $chan\n" ;
00801 foreach (array_keys($_SESSION['st'][$type][$dev]['_chan'][$chan]) as $chanattr)
00802 {
00803 if ($chanattr == '_ts')
00804 {
00805 continue ;
00806 }
00807 $value = $_SESSION['st'][$type][$dev]['_chan'][$chan][$chanattr] ;
00808 print my_htmlentities("$chanattr: $value\n") ;
00809 }
00810 }
00811 }
00812 print "</textarea></span>" ;
00813 }
00814
00815 else if (isset($_SESSION['last_ticket']))
00816 {
00817 print "<input type=\"image\" name=\"submit[showoffline]\" src=\"" .
00818 ($_SESSION['showoffline'] ? IMG_SELECTED : IMG_NOT_SELECTED) . "\"> Show offline devices<br/>\n" ;
00819 print "<input type=\"image\" name=\"submit[showevents]\" src=\"" .
00820 ($_SESSION['showevents'] ? IMG_SELECTED : IMG_NOT_SELECTED) . "\"> Show AMI events<br/>\n" ;
00821 print "<span class=\"info\">Last Ticket - ID " . $_SESSION['last_ticket']['id'] . (!$_SESSION['last_ticket']['handled'] ? " <span class=\"msg\"> Not handled </span>" : "") . "<br/>\n" ;
00822 print $_SESSION['last_ticket']['datetime'] . "<br/>\n" ;
00823 if ($_SESSION['showevents'])
00824 {
00825 print "<textarea name=\"ticket\" rows=\"10\" cols=\"32\" readonly>" . my_htmlentities($_SESSION['last_ticket']['ticket']) . "</textarea></span>" ;
00826 }
00827 }
00828
00829 print "</form>" ;
00830
00831 print " </td>\n" ;
00832
00833
00834
00835
00836
00837 print " <td style=\"vertical-align: top;\">\n" ;
00838
00839 $topofpage = TRUE ;
00840 $urlsnap = (strstr ($url, '?') ? $url . '&' : '?') . 'zoom=' ;
00841
00842 ksort($_SESSION['st']) ;
00843 foreach (array_keys($_SESSION['st']) as $type)
00844 {
00845 if(!isset($_SESSION['view'][$type]))
00846 {
00847
00848 $_SESSION['view'][$type] = VIEW_BY_DEFAULT ;
00849 ksort($_SESSION['view']) ;
00850 }
00851
00852 if (!$_SESSION['view'][$type])
00853 {
00854 continue ;
00855 }
00856
00857 if (!$topofpage)
00858 {
00859 print "<hr style=\"width: 100%; height: 2px;\">\n" ;
00860 }
00861 $topofpage = FALSE ;
00862
00863 print "<div class=subtitle>$type</div>\n" ;
00864 switch ($type)
00865 {
00866 case 'Asterisk' :
00867 $sta = $_SESSION['st']['Asterisk']['status'] ;
00868 print "<table style=\"width: 100%;\"><tbody>\n<tr><td>" ;
00869 print "<img src=\"" . $status[$sta][0] . "\" alt=\"" . $status[$sta][1] . "\" title=\"" . $status[$sta][1] . "\">Asterisk \n" ;
00870 print "</td></tr></table>\n" ;
00871 break ;
00872
00873 default :
00874 if (!isset($_SESSION['st'][$type]))
00875 {
00876 continue ;
00877 }
00878
00879 $devs = array_keys($_SESSION['st'][$type]) ;
00880 sort($devs) ;
00881 print "<table style=\"width: 100%;\"><tbody>\n<tr>" ;
00882 $count = 0 ;
00883 $width = 100 / $_SESSION['itemsperrow'] ;
00884 foreach ($devs as $dev)
00885 {
00886 if ($count != 0 && $count % $_SESSION['itemsperrow'] == 0)
00887 {
00888 print "</tr>\n<tr>" ;
00889 }
00890 $channels = clean_dev_data($type, $dev, 0) ;
00891 $registered = isset($_SESSION['st'][$type][$dev]) &&
00892 ((isset($_SESSION['st'][$type][$dev]['IPaddress']) &&
00893 $_SESSION['st'][$type][$dev]['IPaddress'] != '-none-') ||
00894 (isset($_SESSION['st'][$type][$dev]['PeerStatus']) &&
00895 $_SESSION['st'][$type][$dev]['PeerStatus'] != 'Unregistered' &&
00896 $_SESSION['st'][$type][$dev]['PeerStatus'] != 'Unreachable')) ;
00897 $sta = $registered ? 'online' : 'offline' ;
00898 if ($channels)
00899 {
00900
00901
00902 foreach (array_keys($_SESSION['st'][$type][$dev]['_chan']) as $chanid)
00903 {
00904 if (!isset($_SESSION['st'][$type][$dev]['_chan'][$chanid]['State']))
00905 {
00906 $sta = 'active' ;
00907 }
00908 else
00909 {
00910 switch ($_SESSION['st'][$type][$dev]['_chan'][$chanid]['State'])
00911 {
00912 case 'Down' :
00913
00914 break ;
00915 case 'Ringing' :
00916 if ($sta != 'active')
00917 $sta = 'ringing' ;
00918 break ;
00919 default :
00920 $sta = 'active' ;
00921 }
00922 }
00923 }
00924 }
00925 if (isset($_SESSION['st'][$type][$dev]['Alarm']) &&
00926 $_SESSION['st'][$type][$dev]['Alarm'] != 'No Alarm')
00927 {
00928
00929 $sta = 'alarm' ;
00930 }
00931 if ($sta != 'offline' || $_SESSION['showoffline'])
00932 {
00933 print "<td style=\"width: $width%;\" vertical-align: top;>" ;
00934 print "<img src=\"" . (isset($special[$type][$sta]) ? $special[$type][$sta] : $status[$sta][0]) .
00935 "\" alt=\"" . $status[$sta][1] . "\" title=\"" . $status[$sta][1] . "\">" ;
00936 print "<a href=\"$urlsnap$type/$dev\">$dev</a>" ;
00937 print "</td>\n" ;
00938 $count++ ;
00939 }
00940 }
00941 while ($count++ % $_SESSION['itemsperrow'] != 0)
00942 {
00943 print "<td style=\"width: $width%;\" vertical-align: top;></td>\n" ;
00944 }
00945 print "</tr>\n" ;
00946 print "</tbody></table>\n" ;
00947 }
00948 }
00949
00950
00951 if (DEBUG >= 2)
00952 {
00953 print "<hr style=\"width: 100%; height: 2px;\"><class=\"info\"><pre>" ;
00954 if (DEBUG >= 3)
00955 {
00956 print_r($_SESSION) ;
00957 }
00958 else
00959 {
00960 foreach (array_keys($_SESSION) as $var)
00961 {
00962 print "$var = " ;
00963 if (!is_array($_SESSION[$var]))
00964 print $_SESSION[$var] . "\n" ;
00965 elseif (in_array($var, array ('st')))
00966 print "array ()\n" ;
00967 else
00968 print_r($_SESSION[$var]) ;
00969 }
00970 }
00971 print "</pre></class>\n" ;
00972 }
00973
00974 print " </td>\n" ;
00975
00976 print " </tr>\n" ;
00977 print " </tbody>\n" ;
00978 print "</table>\n" ;
00979
00980 if (isset($_SESSION['errorlist']))
00981 {
00982 display_errors() ;
00983 }
00984
00985 print "</body>\n" ;
00986 print "</html>\n" ;
00987 }
00988
00989
00990
00991
00992 function store_error($err_type, $err_msg, $err_file, $err_line)
00993 {
00994
00995 $severity = array (
00996 E_ERROR => LOG_ERR,
00997 E_WARNING => LOG_WARNING,
00998 E_PARSE => LOG_ERR,
00999 E_NOTICE => LOG_NOTICE,
01000 E_CORE_ERROR => LOG_ERR,
01001 E_CORE_WARNING => LOG_WARNING,
01002 E_COMPILE_ERROR => LOG_ERR,
01003 E_COMPILE_WARNING => LOG_WARNING,
01004 E_USER_ERROR => LOG_ERR,
01005 E_USER_WARNING => LOG_WARNING,
01006 E_USER_NOTICE => LOG_NOTICE,
01007 E_STRICT => LOG_ERR
01008 ) ;
01009
01010 if (in_array($err_type, array (E_NOTICE, E_STRICT)))
01011 {
01012 return (1) ;
01013 }
01014 $_SESSION['errorlist'][] = array ($err_type, $err_msg, $err_file, $err_line) ;
01015 $priority = isset($severity[$err_type]) ? $severity[$err_type] : LOG_ERR ;
01016 syslog($priority, "aTinyMON ($err_file:$err_line) $err_msg") ;
01017 return (1) ;
01018 }
01019
01020
01021
01022
01023 function display_errors()
01024 {
01025
01026 $type = array (
01027 E_ERROR => 'ERROR',
01028 E_WARNING => 'WARNING',
01029 E_PARSE => 'PARSE',
01030 E_NOTICE => 'NOTICE',
01031 E_CORE_ERROR => 'CORE_ERROR',
01032 E_CORE_WARNING => 'CORE_WARNING',
01033 E_COMPILE_ERROR => 'COMPILE_ERROR',
01034 E_COMPILE_WARNING => 'COMPILE_WARNING',
01035 E_USER_ERROR => 'USER_ERROR',
01036 E_USER_WARNING => 'USER_WARNING',
01037 E_USER_NOTICE => 'USER_NOTICE',
01038 E_STRICT => 'STRICT'
01039 ) ;
01040 $sid = SID ? "?" . strip_tags(SID) : '' ;
01041 $url = $_SERVER['PHP_SELF'] . $sid ;
01042
01043 print "<div class=\"alertbox\">\n" ;
01044 foreach ($_SESSION['errorlist'] as $error)
01045 {
01046 list ($err_type, $err_msg, $err_file, $err_line) = $error ;
01047 $texttype = isset($type[$err_type]) ? $type[$err_type] : "Err $err_type" ;
01048 $file = preg_replace ('/.*\
01049 print "$texttype ($file:$err_line) ". my_htmlentities($err_msg) . "<br/>\n" ;
01050 }
01051
01052 print "<br/><form action=\"$url\" method=\"post\">\n" ;
01053 print "<input type=\"submit\" name=\"close_errorlist\" value=\"close\"> " ;
01054 print "</form>\n" ;
01055 print "</div>\n" ;
01056
01057 $_SESSION['freeze'] = TRUE ;
01058 }
01059
01060 if (DEBUG > 0)
01061 {
01062 error_reporting(E_ALL) ;
01063 ini_set('display_errors', 'On') ;
01064 }
01065 set_error_handler('store_error') ;
01066 if (isset($_REQUEST['close_errorlist']))
01067 unset ($_SESSION['errorlist']) ;
01068 $db = NULL ;
01069 run_session() ;
01070
01071 ?>