Portions created by the Initial Developer are Copyright (C) 2008-2021 the Initial Developer. All Rights Reserved. Contributor(s): Mark J Crane James Rose */ //includes require_once "root.php"; require_once "resources/require.php"; require_once "resources/check_auth.php"; //check permissions if (permission_exists('log_view')) { //access granted } else { echo "access denied"; exit; } //add multi-lingual support $language = new text; $text = $language->get(); //set a default line number value (off) if (!isset($_POST['line_number']) || $_POST['line_number'] == '') { $_POST['line_number'] = 0; } //set a default ordinal (descending) if (!isset($_POST['sort']) || $_POST['sort'] == '') { $_POST['sort'] = "asc"; } //set a default file size if (!isset($_POST['size']) || strlen($_POST['size']) == 0) { $_POST['size'] = "32"; } //set a default filter if (!isset($_POST['filter'])) { $_POST['filter'] = ''; } //set default default log file if (isset($_POST['log_file'])) { $approved_files = glob($_SESSION['switch']['log']['dir'].'/freeswitch.log*'); foreach($approved_files as $approved_file) { if ($approved_file == $_SESSION['switch']['log']['dir'].'/'.$_POST['log_file']) { $log_file = $approved_file; } } } else { $log_file = $_SESSION['switch']['log']['dir'].'/freeswitch.log'; } //download the log if (permission_exists('log_download')) { if (isset($_GET['n'])) { if (isset($filename)) { unset($filename); } $approved_files = glob($_SESSION['switch']['log']['dir'].'/freeswitch.log*'); foreach($approved_files as $approved_file) { if ($approved_file == $_SESSION['switch']['log']['dir'].'/'.$_GET['n']) { $filename = $approved_file; } } if (isset($filename) && file_exists($filename)) { session_cache_limiter('public'); $fd = fopen($filename, "rb"); header("Content-Type: binary/octet-stream"); header("Content-Length: " . filesize($filename)); header('Content-Disposition: attachment; filename="'.basename($filename).'"'); fpassthru($fd); exit; } } } //include the header $document['title'] = $text['title-log_viewer']; require_once "resources/header.php"; //show the content echo "
\n"; echo "
".$text['title-log_viewer']."
\n"; echo "
\n"; echo "
\n"; echo " ".$text['label-log_file']." \n"; echo $text['label-filter']." "; echo ""; echo ""; echo $text['label-display']." ".$text['label-size']; echo button::create(['type'=>'submit','label'=>$text['button-update'],'icon'=>$_SESSION['theme']['button_icon_save'],'style'=>'margin-left: 15px;','name'=>'submit']); if (permission_exists('log_download')) { echo button::create(['type'=>'button','label'=>$text['button-download'],'icon'=>$_SESSION['theme']['button_icon_download'],'style'=>'margin-left: 15px;','link'=>'log_viewer.php?a=download&n='.basename($log_file)]); } echo "
\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "\n"; echo " \n"; echo " "; echo " \n"; echo "
"; if (permission_exists('log_view')) { $MAXEL = 3; //pattern2, pattern3|color2, color3 etc... $user_file_size = '0'; $default_color = '#fff'; $default_type = 'normal'; $default_font = 'monospace'; $default_file_size = '512000'; //put the color matches here... $array_filter[0]['pattern'] = '[NOTICE]'; $array_filter[0]['color'] = 'cyan'; $array_filter[0]['type'] = 'normal'; $array_filter[0]['font'] = 'monospace'; $array_filter[1]['pattern'] = '[INFO]'; $array_filter[1]['color'] = 'chartreuse'; $array_filter[1]['type'] = 'normal'; $array_filter[1]['font'] = 'monospace'; $array_filter[2]['pattern'] = 'Dialplan:'; $array_filter[2]['color'] = 'burlywood'; $array_filter[2]['type'] = 'normal'; $array_filter[2]['font'] = 'monospace'; $array_filter[2]['pattern2'] = 'Regex (PASS)'; $array_filter[2]['color2'] = 'chartreuse'; $array_filter[2]['pattern3'] = 'Regex (FAIL)'; $array_filter[2]['color3'] = 'red'; $array_filter[3]['pattern'] = '[WARNING]'; $array_filter[3]['color'] = 'fuchsia'; $array_filter[3]['type'] = 'normal'; $array_filter[3]['font'] = 'monospace'; $array_filter[4]['pattern'] = '[ERR]'; $array_filter[4]['color'] = 'red'; $array_filter[4]['type'] = 'bold'; $array_filter[4]['font'] = 'monospace'; $array_filter[5]['pattern'] = '[DEBUG]'; $array_filter[5]['color'] = 'gold'; $array_filter[5]['type'] = 'bold'; $array_filter[5]['font'] = 'monospace'; $array_filter[6]['pattern'] = '[CRIT]'; $array_filter[6]['color'] = 'red'; $array_filter[6]['type'] = 'bold'; $array_filter[6]['font'] = 'monospace'; $file_size = filesize($log_file); /* // removed: duplicate of above if (isset($_POST['submit'])) { if (strlen($_POST['size']) == 0) { $_POST['size'] = "32"; } } */ echo "
"; $user_file_size = '32768'; if (isset($_POST['submit'])) { if (!is_numeric($_POST['size'])) { //should generate log warning here... $user_file_size = 1024 * 32; } else { $user_file_size = $_POST['size'] * 1024; } if (strlen($_REQUEST['filter']) > 0) { $filter = $_REQUEST['filter']; } } //echo "Log File Size: " . $file_size . " bytes.
"; echo " ".$text['label-displaying']." ".number_format($user_file_size,0,'.',',')." of ".number_format($file_size,0,'.',',')." ".$text['label-bytes']."."; echo "
"; $file = fopen($log_file, "r") or exit($text['error-open_file']); //set pointer in file if ($user_file_size >= '0') { if ($user_file_size == '0') { $user_file_size = $default_file_size; } if ($file_size >= $user_file_size) { //set an offset on fopen $byte_count=$file_size-$user_file_size; fseek($file, $byte_count); //echo "opening at " . $byte_count . " bytes
"; } else { if ($file_size >= $default_file_size) { //set an offset on fopen $byte_count=$file_size-$default_file_size; fseek($file, $byte_count); echo $text['label-open_at']." " . $byte_count . " ".$text['label-bytes']."
"; } else { //open the file $byte_count='0'; fseek($file, 0); echo "
".$text['label-open_file']."
"; } } } else { if ( $file_size >= $default_file_size ) { //set an offset on fopen $byte_count = $file_size - $default_file_size; fseek($file, $byte_count); echo $text['label-open_at']." " . $byte_count . " ".$text['label-bytes']."
"; } else { //open the file $byte_count='0'; fseek($file, 0); echo "
".$text['label-open_file']."
"; } } //start processing $byte_count = 0; while(!feof($file)) { $log_line = escape(fgets($file)); $byte_count++; $noprint = false; $skip_line = false; if (!empty($filter) ) { $uuid_match = strpos($log_line, $filter); if ($uuid_match === false) { $skip_line = true; } else { $skip_line = false; } } if ($skip_line === false) { foreach ($array_filter as $v1) { $pos = strpos($log_line, escape($v1['pattern'])); //echo "
POS is: '$pos'
"; if ($pos !== false) { //color adjustments on words in log line for ($i=2; $i<=$MAXEL; $i++) { if (isset($v1["pattern".$i])) { $log_line = str_replace(escape($v1["pattern".$i]), "".$v1["pattern".$i]."", $log_line); } } $array_output[] = "".$log_line."
"; $noprint = true; } } if ($noprint !== true) { $array_output[] = "".$log_line."
"; } } } // output according to ordinal selected if ($_POST['sort'] == 'desc') { $array_output = array_reverse($array_output); $adj_index = 0; } else { $adj_index = 1; } foreach ($array_output as $index => $line) { $line_num = ""; if ($line != "
") { if ($_POST['line_number']) { $line_num = "".($index + $adj_index)."   "; } echo $line_num." ".$line; } } fclose($file); echo " "; } echo "
\n"; //include the footer require_once "resources/footer.php"; ?>