diff options
Diffstat (limited to 'modules-available/dnbd3/inc/dnbd3rpc.inc.php')
-rw-r--r-- | modules-available/dnbd3/inc/dnbd3rpc.inc.php | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/modules-available/dnbd3/inc/dnbd3rpc.inc.php b/modules-available/dnbd3/inc/dnbd3rpc.inc.php new file mode 100644 index 00000000..cdcda508 --- /dev/null +++ b/modules-available/dnbd3/inc/dnbd3rpc.inc.php @@ -0,0 +1,58 @@ +<?php + +class Dnbd3Rpc { + + const QUERY_UNREACHABLE = 1; + const QUERY_NOT_200 = 2; + const QUERY_NOT_JSON = 3; + + /** + * Query given DNBD3 server for status information. + * + * @param string $server server address + * @param int $port server port + * @param bool $stats include general stats + * @param bool $clients include client list + * @param bool $images include image list + * @param bool $diskSpace include disk space stats + * @param bool $config get config + * @param bool $altservers list of alt servers with status + * @return int|array the queried data as an array, or false on error + */ + public static function query($server, $port, $stats, $clients, $images, $diskSpace = false, $config = false, $altservers = false) + { + // Special case - local server + if ($server === '<self>') { + $server = '127.0.0.1'; + } + $url = 'http://' . $server . ':' . $port . '/query?'; + if ($stats) { + $url .= 'q=stats&'; + } + if ($clients) { + $url .= 'q=clients&'; + } + if ($images) { + $url .= 'q=images&'; + } + if ($diskSpace) { + $url .= 'q=space&'; + } + if ($config) { + $url .= 'q=config&'; + } + if ($altservers) { + $url .= 'q=altservers&'; + } + $str = Download::asString($url, 3, $code); + if ($str === false) + return self::QUERY_UNREACHABLE; + if ($code !== 200) + return self::QUERY_NOT_200; + $ret = json_decode($str, true); + if (!is_array($ret)) + return self::QUERY_NOT_JSON; + return $ret; + } + +} |