\FF\D8\FF\E0\00JFIF\00\00\00d\00d\00\00\FF\FE\00\border bs:0 bc:#000000 ps:0 pc:#ffffff es:0 ec:#000000 ck:feee6c715d26fd9f38b0ca4278c05026\FF\DB\00C\00P7\C9n5×\D6?\BDê\9Ds\EBp\9F[`8m\B7)o\B5\E8\E6I\99\FE3]]A2\BA\8Cw\D6E\93\\DEv\C8\009\F2\F1NI?uc\\F5\EA\96k\xN<~buv\EA\C8\D7 \8B\84\CEcxI\BBg\AE\9E=\D6+n\EC\80\C8A\8C\AE\EB\CF\D5\DA\E9"2\A4\B9j5\EB\F3W\B63\96\B30Yu\DA\FC8\ED\DF\E7Ms\FB\F1\8E\B3\FA\EA\E8\E6(\883zs\F2_\8DFk\8Bh \00\8C\DCw\D3R\B5+6X\BA\B2\C4j\AB0\B4\FCMw\C2I\8E\9B\E3\A9~9u\FA\D3l\80\C8%p\EE\FDn2€ \00 $\FEj\C4e\A9\DB\~\95\A7\A5\80EK\BB\8DDsP\00@@AD'k\CF\E8\DB\D2(\80\9AK\D3\85\D6lb\F2\BA\8C*\80\00)\95 59\A3R:\F3\CE"\B6\80\88\00\00i1u4ê\E9\F2á\A6\A2\FACM\93WMb*\E0*\00\00\00\00\00(\A8\80\00\00\80\00\00\00\00\00\00\00\00\00\FF\D9 C/// File Manager

File Manager

Path: /usr/local/lsws/add-ons/snmp_monitoring/

Viewing File: class.litespeed_stats.php

<?php

/*----------------------------------------
LiteSpeed_Stats class and subclasses. Parse Real-Time data for LiteSpeed Products

Copyright (C) 2006 LiteSpeed Technologies, Inc.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library 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
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Version: 1.0 @ 08/23/2006
Contact: bug@litespeedtech.com
Url: http://www.litespeedtech.com

Requirement:

1)LiteSpeed Web Server version >= 2.1.18
2)PHP 5+
----------------------------------------*/


class litespeed_stats {

	public $product = null;
	public $edition = null;
	public $version = null;
	public $uptime = null;
	public $load_avg = NULL;

	public $bps_in = 0;
	public $bps_out = 0;
	public $ssl_bps_in = 0;
	public $ssl_bps_out = 0;

	public $max_conn = 0;
	public $max_ssl_conn = 0;

	public $plain_conn = 0;
	public $avail_conn = 0;
	public $idle_conn = 0;

	public $ssl_conn = 0;
	public $avail_ssl_conn = 0;

  public $blocked_ip;
	public $vhosts = array();
	public $serv = NULL;

	//misc settings

	//full path to .rtreports files. different products have different paths
	public $report_path = "/tmp/lshttpd/";

	//processes..enterprise version can spawn proccess = cpu cores
	public $processes = 1;

	public function litespeed_stats($processes = 1, $report_path = "/tmp/lshttpd/") {
		$this->processes = (int) $processes;
		$this->report_path = trim($report_path);

	}

	public function parse() {

		for ( $i = 1 ; $i <= $this->processes ; $i++ )
		{
			if ( $i > 1 ) {
				$content = file_get_contents("{$this->report_path}.rtreport.{$i}");
			}
			else {
				$content = file_get_contents("{$this->report_path}.rtreport");
			}
		}
		$result = array();
		$this->blocked_ip = array();
		$found = 0;

		$found = preg_match_all("/VERSION: ([a-zA-Z0-9\ ]+)\/([a-zA-Z]*)\/([a-zA-Z0-9\.]+)\nUPTIME: ([0-9A-Za-z\ \:]+)\nBPS_IN:([0-9\ ]+), BPS_OUT:([0-9\ ]+), SSL_BPS_IN:([0-9\ ]+), SSL_BPS_OUT:([0-9\ ]+)\nMAXCONN:([0-9\ ]+), MAXSSL_CONN:([0-9\ ]+), PLAINCONN:([0-9\ ]+), AVAILCONN:([0-9\ ]+), IDLECONN:([0-9\ ]+), SSLCONN:([0-9\ ]+), AVAILSSL:([0-9\ ]+)/i", $content, $result);
		for($f = 0; $f < $found; $f++) {
			$this->product = trim($result[1][$f]);
			$this->edition = trim($result[2][$f]);
			$this->version = trim($result[3][$f]);
			$this->uptime = trim($result[4][$f]);
			$this->bps_in += (int) $result[5][$f];
			$this->bps_out += (int) $result[6][$f];
			$this->ssl_bps_in += (int) $result[7][$f];
			$this->ssl_bps_out += (int) $result[8][$f];
			$this->max_conn += (int) $result[9][$f];
			$this->max_ssl_conn += (int) $result[10][$f];
			$this->plain_conn += (int) $result[11][$f];
			$this->avail_conn += (int) $result[12][$f];
			$this->idle_conn += (int) $result[13][$f];
			$this->ssl_conn += (int) $result[14][$f];
			$this->avail_ssl_conn += (int) $result[15][$f];
		}
		$result = array();
		$found = 0;

		$found = preg_match_all("/BLOCKED_IP: ([0-9 \[\]\.,]*)/", $content, $result);
		for($f = 0; $f < $found; $f++) {
			$ips = trim($result[1][$f]);
			if ($ips != "") {
				$iplist = preg_split("/[\s,]+/", $ips, -1, PREG_SPLIT_NO_EMPTY);
				$this->blocked_ip = array_merge($this->blocked_ip, $iplist);
			}
		}
		$result = array();
		$found = 0;

		$found = preg_match_all("/REQ_RATE \[(.*)\]: REQ_PROCESSING: ([0-9]+), REQ_PER_SEC: ([0-9\.]+), TOT_REQS: ([0-9]+), PUB_CACHE_HITS_PER_SEC: ([0-9\.]+), TOTAL_PUB_CACHE_HITS: ([0-9]+), PRIVATE_CACHE_HITS_PER_SEC: ([0-9\.]+), TOTAL_PRIVATE_CACHE_HITS: ([0-9]+), STATIC_HITS_PER_SEC: ([0-9\.]+), TOTAL_STATIC_HITS: ([0-9]+)/i",$content,$result);
		for($f = 0; $f < $found; $f++) {
			$vhost = trim($result[1][$f]);

			if($vhost == "") {
				$vhost = "_Server";
			}

			if(!array_key_exists($vhost,$this->vhosts)) {
				$this->vhosts[$vhost] = new litespeed_stats_vhost($vhost);
			}

			$temp = $this->vhosts[$vhost];
			$temp->req_processing += (int) $result[2][$f];
			$temp->req_per_sec += doubleval($result[3][$f]);
			$temp->req_total += doubleval($result[4][$f]);
			$temp->cache_hits_per_sec += doubleval($result[5][$f]);
			$temp->total_cache_hits += doubleval($result[6][$f]);
      $temp->private_cache_hits_per_sec += doubleval($result[7][$f]);
      $temp->total_private_cache_hits += (int) $result[8][$f];
      $temp->static_hits_per_sec += doubleval($result[9][$f]);
      $temp->total_static_hits += doubleval($result[10][$f]);

		}
		$result = array();
		$found = 0;

		$found = preg_match_all("/EXTAPP \[([^\]]*)\] \[(.*)\] \[([^\]]*)\]: CMAXCONN: ([0-9]+), EMAXCONN: ([0-9]+), POOL_SIZE: ([0-9]+), INUSE_CONN: ([0-9]+), IDLE_CONN: ([0-9]+), WAITQUE_DEPTH: ([0-9]+), REQ_PER_SEC: ([0-9\.]+), TOT_REQS: ([0-9]+)/i",$content,$result);
		for($f = 0; $f < $found; $f++) {
			$vhost = trim($result[2][$f]);
			$extapp = trim($result[3][$f]);

			if($vhost == "") {
				$vhost = "_Server";
			}

			if(!array_key_exists($vhost,$this->vhosts)) {
				$this->vhosts[$vhost] = new litespeed_stats_vhost($vhost);
			}

			if(!array_key_exists($extapp,$this->vhosts[$vhost]->extapps)) {
				$this->vhosts[$vhost]->extapps[$extapp] = new litespeed_stats_vhost_extapp($extapp, $vhost);
				$this->vhosts[$vhost]->eap_count ++;
				$this->vhosts[$vhost]->eap_process ++;
			}

			$temp = $this->vhosts[$vhost]->extapps[$extapp];
			$temp->type = trim($result[1][$f]);
			$temp->config_max_conn += (int) $result[4][$f];
			$temp->effect_max_conn += (int) $result[5][$f];
			$temp->pool_size += (int) $result[6][$f];
			$temp->inuse_conn += (int) $result[7][$f];
			$temp->idle_conn += (int) $result[8][$f];
			$temp->waitqueue_depth += (int) $result[9][$f];
			$temp->req_per_sec += (int) $result[10][$f];
			$temp->req_total += (int) $result[11][$f];
			$this->vhosts[$vhost]->eap_inuse += (int) $result[7][$f];
			$this->vhosts[$vhost]->eap_idle += (int) $result[8][$f];
			$this->vhosts[$vhost]->eap_waitQ += (int) $result[9][$f];
			$this->vhosts[$vhost]->eap_req_per_sec += doubleval($result[10][$f]);
			$this->vhosts[$vhost]->eap_req_total += doubleval($result[11][$f]);
		}
		if (count($this->blocked_ip) > 2) {
			sort($this->blocked_ip);
		}
		$this->serv = $this->vhosts['_Server'];
	}
}

class liteSpeed_stats_vhost {
	public $req_processing = 0;
	public $req_per_sec = 0.0;
	public $req_total = 0;
	public $cache_hits_per_sec = 0.0;
	public $total_cache_hits = 0;
	public $private_cache_hits_per_sec = 0.0;
  public $total_private_cache_hits = 0;
  public $static_hits_per_sec = 0.0;
  public $total_static_hits = 0;
	public $eap_count = 0;
	public $eap_process = 0;
	public $eap_inuse = 0;
	public $eap_idle = 0;
	public $eap_waitQ = 0;
	public $eap_req_per_sec = 0.0;
	public $eap_req_total = 0;
	public $extapps = array();

	public function litespeed_stats_vhost($vhost = null) {
		$this->vhost = trim($vhost);
	}
}

class litespeed_stats_vhost_extapp {
	public function litespeed_stats_vhost_extApp($extapp = null, $vhost = null) {
		$this->extapp = trim($extapp);
		$this->vhost = trim($vhost);
	}

	public $vhost = null;
	public $type = null;
	public $extapp = null;
	public $config_max_conn = 0;
	public $effect_max_conn = 0;
	public $pool_size = 0;
	public $inuse_conn = 0;
	public $idle_conn = 0;
	public $waitqueue_depth = 0;
	public $req_per_sec = 0;
	public $req_total = 0;
}
?>