286 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			286 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?
 | 
						|
/*
 | 
						|
Jorge - frontend for mod_logdb - ejabberd server-side message archive module.
 | 
						|
 | 
						|
Copyright (C) 2009 Zbigniew Zolkiewski
 | 
						|
 | 
						|
This program is free software; you can redistribute it and/or
 | 
						|
modify it under the terms of the GNU General Public License
 | 
						|
as published by the Free Software Foundation; either version 2
 | 
						|
of the License, or (at your option) any later version.
 | 
						|
 | 
						|
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.
 | 
						|
 | 
						|
You should have received a copy of the GNU General Public License
 | 
						|
along with this program; if not, write to the Free Software
 | 
						|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 | 
						|
 | 
						|
*/
 | 
						|
require_once("headers.php");
 | 
						|
require_once("upper.php");
 | 
						|
 | 
						|
if (ADMIN_NAME !== TOKEN) { 
 | 
						|
 | 
						|
	print 'no access'; 
 | 
						|
	exit; 
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
// vhost stats
 | 
						|
$vhost_selected = $_POST['stats_vhost'];
 | 
						|
if (array_key_exists($vhost_selected, $vhosts) === true) {
 | 
						|
 | 
						|
		$vhost_valid = true;
 | 
						|
		$vhost_active = $vhost_selected;
 | 
						|
 | 
						|
	}
 | 
						|
	else{
 | 
						|
 | 
						|
		$vhost_valid = false;
 | 
						|
		$vhost_active = null;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
$html->set_body('<form name="stats_form" method="post"><b>'.$stats_vhost_select[$lang].' </b><select class="settings" name="stats_vhost" onchange="javascript:document.stats_form.submit();">
 | 
						|
		<option value="null">'.$vhost_select[$lang].'</option>
 | 
						|
	');
 | 
						|
 | 
						|
while (array_keys($vhosts)) {
 | 
						|
 | 
						|
	$vhost = key($vhosts);
 | 
						|
	if ($_POST['stats_vhost'] == $vhost) {
 | 
						|
 | 
						|
			$marked_vhost="selected=\"selected\"";
 | 
						|
 | 
						|
		}
 | 
						|
		else {
 | 
						|
 | 
						|
			unset($marked_vhost);
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	$html->set_body('<option value="'.$vhost.'" '.$marked_vhost.'>'.$vhost.'</option>');
 | 
						|
	array_shift($vhosts);
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
$html->set_body('</select></form>');
 | 
						|
 | 
						|
if ($vhost_valid === true) {
 | 
						|
 | 
						|
 | 
						|
		$db->total_messages($vhost_active);
 | 
						|
		$total_messages = $db->result;
 | 
						|
		$html->set_body('<h2><u>'.$stats_for[$lang].$vhost_active.'</u></h2><p style="padding-left: 10px;">
 | 
						|
			'.$stats_messages[$lang].' <b>'.number_format($total_messages[1][total_messages]).'</b> 
 | 
						|
				'.$stats_messages_b[$lang].'<b>'.number_format($total_messages[1][total_chats]).'</b>'.$stats_messages_c[$lang].'</b></p>
 | 
						|
			<hr size="1" noshade="noshade" style="color: #cccccc;">');
 | 
						|
 | 
						|
		// get dates
 | 
						|
		$today = date("Y-n-j");
 | 
						|
		$yesterday = date("Y-n-j", strtotime("-1 day"));
 | 
						|
		$last_week = date("Y-n-j", strtotime("-7 days"));
 | 
						|
		for ($ds=0;$ds<=4;$ds++) {
 | 
						|
 | 
						|
			$days[$ds] = date("Y-n-j", strtotime("-$ds day"));
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		// Top 10
 | 
						|
		$html->set_body('<table class="ff" cellpadding="0" cellspacing="0" style="display:inline;">
 | 
						|
					<tr><td><b>'.$stats_top[$lang].'</b></td></tr><tr><td style="width:420px; border: 0px; vertical-align: top;">');
 | 
						|
		foreach ($days as $current_day) {
 | 
						|
 | 
						|
			$i=0;
 | 
						|
			$html->set_body('<b>'.verbose_date($current_day,$months_names,$weekdays,true).' :</b><br>');
 | 
						|
			$db->get_top_ten($current_day,$vhost_active);
 | 
						|
			$result = $db->result;
 | 
						|
			foreach ($result as $entry) {
 | 
						|
	
 | 
						|
				$i++;
 | 
						|
				$db->get_user_name($entry[owner_id],$vhost_active);
 | 
						|
				$local_user = $db->result->username;
 | 
						|
				$db->get_user_name($entry[peer_name_id],$vhost_active);
 | 
						|
				$peer_name = $db->result->username;
 | 
						|
				$db->get_server_name($entry[peer_server_id],$vhost_active);
 | 
						|
				$peer_server = $db->result->server_name;
 | 
						|
				$html->set_body('
 | 
						|
					 <b>'.$i.'.</b> '.htmlspecialchars($local_user).'@'.$vhost_active.'<b> --> </b>
 | 
						|
					'.htmlspecialchars($peer_name).'@'.htmlspecialchars($peer_server).' (<i><b>'.$entry[count].'</b></i>)<br>
 | 
						|
					');
 | 
						|
 | 
						|
			}
 | 
						|
			$html->set_body('<br>');
 | 
						|
 | 
						|
		}
 | 
						|
		$html->set_body('</td></tr></table>');
 | 
						|
 | 
						|
		// get data for graphs. We can now draw data only if we have full array. This is known issue.
 | 
						|
		$db->get_monthly_stats($vhost_active);
 | 
						|
		$result = $db->result;
 | 
						|
 | 
						|
		if (count($result)<30) { 
 | 
						|
 | 
						|
				$html->status_message($stats_not_eno[$lang]);
 | 
						|
		
 | 
						|
			} 
 | 
						|
		else { 
 | 
						|
	
 | 
						|
 | 
						|
				foreach ($result as $entry) {
 | 
						|
 | 
						|
					$i++;
 | 
						|
					$f[$i] = $entry[time_unix];
 | 
						|
					$d[$i] = $entry[messages];
 | 
						|
					$e[$i] = $entry[users_total];
 | 
						|
	
 | 
						|
				}
 | 
						|
 | 
						|
				// hourly stats
 | 
						|
				$db->get_hourly_stats($yesterday,$vhost_active);
 | 
						|
				$result = $db->result;
 | 
						|
				foreach ($result as $entry) {
 | 
						|
 | 
						|
					$hs[$entry[hour]] = $entry[value];
 | 
						|
				}
 | 
						|
 | 
						|
				// weekly stats
 | 
						|
				$db->get_weekly_stats($last_week,$yesterday,$vhost_active);
 | 
						|
				$result = $db->result;
 | 
						|
				foreach ($result as $entry) {
 | 
						|
	
 | 
						|
					$idx++;
 | 
						|
					$hy[$idx] = $entry[value];
 | 
						|
 | 
						|
				}
 | 
						|
 | 
						|
				$html->set_body('<table class="ff" cellpadding="0" cellspacing="0" style="display:inline;">
 | 
						|
					<tr>
 | 
						|
					<td style="padding-left: 10px vertical-align: top;">
 | 
						|
					<div id="no_users" style="width:800px;height:200px;"></div><br>
 | 
						|
					<div id="no_messages" style="width:800px;height:200px;"></div><br>
 | 
						|
					<div id="hourly_yesterday" style="width:800px;height:200px;"></div><br>
 | 
						|
					<div id="hourly_week" style="width:800px;height:200px;"></div>
 | 
						|
					</td>
 | 
						|
					</table>
 | 
						|
					<script id="source" language="javascript" type="text/javascript">
 | 
						|
					$(function () {
 | 
						|
 | 
						|
  					  var d1 = [
 | 
						|
 | 
						|
					');
 | 
						|
 | 
						|
				$cn=31;
 | 
						|
				for ($z=1;$z<31;$z++) {
 | 
						|
 | 
						|
					$cn--;
 | 
						|
					$html->set_body("[$f[$cn],$e[$cn]],");
 | 
						|
			
 | 
						|
				}
 | 
						|
 | 
						|
				$html->set_body('
 | 
						|
 | 
						|
 | 
						|
					];
 | 
						|
 | 
						|
   					 var d2 = [
 | 
						|
 | 
						|
				');
 | 
						|
 | 
						|
				$cn=31;
 | 
						|
				for ($z=1; $z<31; $z++) {
 | 
						|
		
 | 
						|
					$cn--;
 | 
						|
					$html->set_body("[$f[$cn],$d[$cn]],");
 | 
						|
			
 | 
						|
				}
 | 
						|
 | 
						|
				$html->set_body('
 | 
						|
 | 
						|
 | 
						|
					];
 | 
						|
 | 
						|
  					var d3 = [
 | 
						|
 | 
						|
				');
 | 
						|
	
 | 
						|
				for ($z=0;$z<24;$z++) {
 | 
						|
		
 | 
						|
					$html->set_body("[$z,$hs[$z]],");
 | 
						|
			
 | 
						|
				}
 | 
						|
 | 
						|
				$html->set_body('
 | 
						|
 | 
						|
					];
 | 
						|
 | 
						|
   					var d4 = [
 | 
						|
				');
 | 
						|
 | 
						|
				$idx=0;
 | 
						|
				for ($z=0;$z<168;$z++) {
 | 
						|
		
 | 
						|
					$idx++;
 | 
						|
					$html->set_body("[$z,$hy[$idx]],");
 | 
						|
				}
 | 
						|
 | 
						|
				$html->set_body('
 | 
						|
 | 
						|
					];
 | 
						|
    
 | 
						|
			 	   $.plot($("#no_users"), [{
 | 
						|
 | 
						|
						xaxis: { 
 | 
						|
							mode: "time" 
 | 
						|
						},
 | 
						|
						color: "#ff0000",
 | 
						|
						label: "'.$stats_graph1[$lang].'", 
 | 
						|
						data: d1,
 | 
						|
						shadowSize: 10,
 | 
						|
						lines: { show: true, fill: true },
 | 
						|
						points: { show: true, fill: true, radius: 3}
 | 
						|
					}]);
 | 
						|
 | 
						|
				    $.plot($("#no_messages"), [{ 
 | 
						|
 | 
						|
						xaxis: { mode: "time" },
 | 
						|
						color: "#3480ff",
 | 
						|
						label: "'.$stats_graph2[$lang].'",
 | 
						|
						shadowSize: 10, 
 | 
						|
						data: d2,
 | 
						|
						lines: { show: true, fill: true },
 | 
						|
						points: { show: true, fill: true, radius: 3}
 | 
						|
				
 | 
						|
					}]);
 | 
						|
    
 | 
						|
				    $.plot($("#hourly_yesterday"), [{
 | 
						|
 | 
						|
						color: "#ff0000",
 | 
						|
						label: "'.$stats_graph3[$lang].' ('.$yesterday.')", shadowSize: 10, data: d3,
 | 
						|
						bars: { show: true }
 | 
						|
					}]);
 | 
						|
				
 | 
						|
				    $.plot($("#hourly_week"), [{
 | 
						|
 | 
						|
						color: "#3480ff",
 | 
						|
						label: "'.$stats_graph4[$lang].' ('.$last_week.' - '.$yesterday.')", shadowSize: 10, data: d4,
 | 
						|
						bars: { show: true }
 | 
						|
				
 | 
						|
					}]);
 | 
						|
 | 
						|
					});
 | 
						|
 | 
						|
					</script>
 | 
						|
 | 
						|
				');
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
require_once("footer.php");
 | 
						|
?>
 |