56 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
| declare(strict_types=1);
 | |
| 
 | |
| namespace Mcp\Cron;
 | |
| 
 | |
| use Mcp\OpenSim;
 | |
| use Mcp\Util\Util;
 | |
| 
 | |
| class RegionChecker extends CronJob
 | |
| {
 | |
|     public function __construct(\Mcp\Mcp $app)
 | |
|     {
 | |
|         parent::__construct($app, Frequency::DAILY);
 | |
|     }
 | |
| 
 | |
|     public function run(): bool
 | |
|     {
 | |
|         $statement = $this->app->db()->prepare("SELECT uuid,regionName,owner_uuid,serverURI,OfflineTimer FROM regions JOIN mcp_regions_info ON regions.uuid = mcp_regions_info.regionID COLLATE utf8mb3_unicode_ci");
 | |
|         $statement->execute();
 | |
| 
 | |
|         while ($row = $statement->fetch()) {
 | |
|             $curl = curl_init($row['serverURI'] . 'jsonSimStats');
 | |
|             curl_setopt($curl, CURLOPT_TIMEOUT, 15);
 | |
|             curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
 | |
|             $result = curl_exec($curl);
 | |
| 
 | |
|             if ($result === false || strlen($result) == 0) {
 | |
|                 $opensim = new OpenSim($this->app->db());
 | |
| 
 | |
|                 $longOffline = ($row['OfflineTimer'] + 3600) <= time();
 | |
|                 echo "Die Region " . $row['regionName'] . " von " . $opensim->getUserName($row['owner_uuid']) . " ist " . ($longOffline ? "seit über einer Stunde" : "") . " nicht erreichbar.\n"; //TODO: Increase to 1-3 months
 | |
| 
 | |
|                 if ($longOffline) {
 | |
|                     if ($this->app->config('grid')['delete-inactive-regions']) {
 | |
|                         Util::sendInworldIM("00000000-0000-0000-0000-000000000000", $row['owner_uuid'], "Region", $this->app->config('grid')['homeurl'], "WARNUNG: Deine Region '" . $row['regionName'] . "' ist nicht erreichbar und wurde deshalb aus dem Grid entfernt.");
 | |
| 
 | |
|                         $statementUpdate = $this->app->db()->prepare('DELETE FROM regions WHERE uuid = :uuid');
 | |
|                         $statementUpdate->execute(['uuid' => $row['uuid']]);
 | |
|                     }
 | |
|                     $statementRemoveStats = $this->app->db()->prepare('DELETE FROM mcp_regions_info WHERE regionID = :uuid');
 | |
|                     $statementRemoveStats->execute(['uuid' => $row['uuid']]);
 | |
|                 } elseif ($this->app->config('grid')['warn-inactive-regions']) {
 | |
|                     Util::sendInworldIM("00000000-0000-0000-0000-000000000000", $row['owner_uuid'], "Region", $this->app->config('grid')['homeurl'], "WARNUNG: Deine Region '" . $row['regionName'] . "' ist nicht erreichbar!");
 | |
|                 }
 | |
|             } else {
 | |
|                 $regionData = json_decode($result);
 | |
| 
 | |
|                 $statementAccounts = $this->app->db()->prepare('REPLACE INTO `mcp_regions_info` (`regionID`, `RegionVersion`, `ProcMem`, `Prims`, `SimFPS`, `PhyFPS`, `OfflineTimer`) VALUES (:regionID, :RegionVersion, :ProcMem, :Prims, :SimFPS, :PhyFPS, :OfflineTimer)');
 | |
|                 $statementAccounts->execute(['regionID' => $row['uuid'], 'RegionVersion' => $regionData->Version, 'ProcMem' => $regionData->ProcMem, 'Prims' => $regionData->Prims, 'SimFPS' => $regionData->SimFPS, 'PhyFPS' => $regionData->PhyFPS, 'OfflineTimer' => time()]);
 | |
|             }
 | |
|         }
 | |
|         
 | |
|         return true;
 | |
|     }
 | |
| }
 |