orbit/src/Orbit/Console.php
2020-08-26 17:57:01 -05:00

120 lines
2.9 KiB
PHP

<?php
namespace Orbit;
use Monolog\Logger;
use Monolog\Formatter\LineFormatter;
use Monolog\Handler\StreamHandler;
class Console extends \Qi_Console_Client
{
public function execute()
{
if ($this->_args->version) {
$this->showVersion();
return 0;
}
if ($this->_args->help) {
$this->showHelp();
return 0;
}
$config = new Config();
if ($this->_args->host) {
$config->host = $this->_args->host;
}
if ($this->_args->port) {
$config->port = $this->_args->port;
}
if ($this->_args->log) {
$config->log_file = $this->_args->log;
}
if ($this->_args->quiet) {
$config->quiet = $this->_args->quiet;
}
if ($this->_args->verbose) {
$config->verbose = $this->_args->verbose;
}
if (!$config->quiet) {
print "Orbit // Gemini server software\n";
}
$server = new Server($config);
$server->setLogger($this->makeLogger($config));
$server->listen();
}
public function makeLogger($config)
{
$pid = getmypid();
$output = "[%datetime%] $pid %channel%.%level_name%: %message% %context%\n";
$formatter = new LineFormatter($output, 'Y-m-d\TH:i:s');
$logger = new Logger('orbit');
$level = Logger::INFO;
if ($config->verbose) {
$level = Logger::DEBUG;
}
$log_stream = new StreamHandler($config->log_file, $level);
$log_stream->setFormatter($formatter);
$logger->pushHandler($log_stream);
if (!$config->quiet) {
$std_stream = new StreamHandler('php://stdout', $level);
$std_stream->setFormatter($formatter);
$logger->pushHandler($std_stream);
}
return $logger;
}
public function showVersion()
{
print "Orbit " . Server::$version . "\n";
}
public function showHelp()
{
$this->showVersion();
$out = $this->_terminal->do_op()
. "Usage: orbit [options]\n"
. "\n"
. $this->_terminal->do_setaf(3)
. "Options:\n"
. $this->_terminal->do_op();
foreach ($this->_args->getHelp() as $key => $value) {
if (strpos($key, "|")) {
$parts = explode("|", $key);
$left = sprintf("-%s, --%s", $parts[0], $parts[1]);
} else {
$left = sprintf(" --%s", $key);
}
if ($left[-1] == ":") {
$left = substr($left, 0, -1) . " <arg>";
}
$out .= sprintf(
" %s%s %s%s\n",
$this->_terminal->do_setaf(2),
str_pad($left, 20),
$this->_terminal->do_op(),
$value,
);
}
print $out;
}
}