HEX
Server: Apache/2.4.67 (Debian)
System: Linux hosting103 6.1.0-49-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64
User: muzikaecom (1013)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: //usr/local/sbin/hp-monitord
#!/usr/bin/env php
<?php
require_once("/usr/local/share/hostingplatform/esrpc.php");

$client = new ESRPCConnection();
$client->connect("hp-esrpc");
$target = $client->get();

$packages = $target->listHostingPackages();

$counters = array();

$file = "/tmp/hp-monitord.sock";

$server = socket_create(AF_UNIX, SOCK_STREAM, 0) or die ("Cannot create socket!");
if (file_exists($file)) unlink($file);
socket_bind($server, $file) or die ("Cannot bind socket!");
socket_listen($server, 10) or die ("Cannot listen on socket!");
socket_set_nonblock($server) or die ("Cannot set socket nonblocking!");

proc_nice(10);

foreach ($packages as $packagename => $package) {
	foreach ($package['domains'] as $domain) {
		$counters[$domain] = new LogCounter(
			"/var/log/apache2/hostingpackages/$packagename/$domain-access.log"
		);
	}
}

$json = false;
while (true) {
	foreach ($counters as $domain => $counter) {
		if ($counter->update())
			$json = false;
	}

	while (($client = @socket_accept($server)) !== false) {
		if (!$json) {
			$data = array();
			foreach($counters as $domain => $counter)
				$data[$domain] = $counter->out;
			$json = json_encode($data);
		}
		
		socket_write($client, $json);
		socket_close($client);
	}

	sleep(1);
}

class LogCounter {
	var $out = 0;

	var $__file;
	var $__ifp;
	var $__pos = 0;

	var $__maxLines = 10000;

	var $__pattern = "/(?xU)
		\S+             	# address
		\s+


		\S+\s+\S+\s+    	# - -


		# date
		\[			# date opening bracket
		(?P<day>\d+)	# day
		\/

		(?P<month>\w+)	# month
		\/

		(?P<year>\d+)	# year

		:.*		# time
		\]			# date closing bracket
		\s+


		# URL
		\".*\"
		\s+

		\d+			# Status code
		\s+	

		(?P<size>\d+)	# Size
		\s+

		# Reminder...
		.*
	/";

	function __construct($file) {
		$this->__file = $file;
	}

	function __open() {
   		$this->__ifp = fopen($this->__file, "r");
	}

	function update() {
		if (!$this->__ifp) $this->__open();

		$linecount = 0;

		fseek($this->__ifp, $this->__pos);
		while($line = fgets($this->__ifp)) {
			$r = preg_match($this->__pattern, $line, $matches);
			$this->out += round($matches["size"]);
			if (++$linecount > $this->__maxLines) break;
		}
		$this->__pos = ftell($this->__ifp);

		return $linecount != 0;
	}
}