summaryrefslogblamecommitdiffstats
path: root/modules-available/dnbd3/inc/dnbd3.inc.php
blob: def4e0626e4a8950072437cd0b9b02624c24a63d (plain) (tree)
1
2
3
4
5
6
7
8
9




                                             
                                                       
                                                       
 
                                                
         
                                                                  




                                                                 
                                            

         
                                                     
         
                                                                       





                                                                      








                                                                       
 




                                                                                      
                                                                                                    






                                                                                              







                                                                                                         
 
<?php

class Dnbd3 {

	const PROP_ENABLED = 'dnbd3.enabled';
	const PROP_NFS_FALLBACK = 'dnbd3.nfs-fallback';
	const PROP_PREFER_LOCAL = 'dnbd3.prefer-local';

	public static function isEnabled(): bool
	{
		return (bool)Property::get(self::PROP_ENABLED, 0);
	}

	public static function setEnabled($bool)
	{
		Property::set(self::PROP_ENABLED, $bool ? 1 : 0);
		Trigger::mount(false, true);
	}

	public static function hasNfsFallback(): bool
	{
		return (bool)Property::get(self::PROP_NFS_FALLBACK, 0);
	}

	public static function setNfsFallback($bool)
	{
		Property::set(self::PROP_NFS_FALLBACK, $bool ? 1 : 0);
	}
	public static function preferLocal(): bool
	{
		return (bool)Property::get(self::PROP_PREFER_LOCAL, 0);
	}

	public static function setPreferLocal($bool)
	{
		Property::set(self::PROP_PREFER_LOCAL, $bool ? 1 : 0);
	}

	public static function getActiveServers(): array
	{
		$res = Database::simpleQuery('SELECT s.serverid, m.clientip, s.fixedip
			FROM dnbd3_server s
			LEFT JOIN machine m ON (s.machineuuid = m.machineuuid)
			WHERE s.lastseen > :cutoff', ['cutoff' => CONFIG_DEBUG ? 0 : time() - 310]);
		$lookup = [];
		foreach ($res as $row) {
			$lookup[$row['fixedip'] ?? $row['clientip'] ?? ''] = $row['serverid'];
		}
		return $lookup;
	}

	public static function getServer(string $serverId)
	{
		return Database::queryFirst('SELECT s.serverid, IFNULL(s.fixedip, m.clientip) AS clientip
			FROM dnbd3_server s
			LEFT JOIN machine m ON (s.machineuuid = m.machineuuid)
			WHERE s.serverid = :id', ['id' => $serverId]);
	}

}