This commit is contained in:
2023-06-16 21:44:35 -04:00
parent b553ac403e
commit adad8cea81
18 changed files with 360 additions and 0 deletions

40
app/setup/app.php Normal file
View File

@ -0,0 +1,40 @@
<?php
use DI\ContainerBuilder;
use ProVM\Wrapper\App;
require_once 'composer.php';
function buildApp(): App {
$builder = new ContainerBuilder();
$folders = [
'settings',
'setups'
];
foreach ($folders as $f) {
$folder = implode(DIRECTORY_SEPARATOR, [__DIR__, $f]);
if (!file_exists($folder)) {
continue;
}
$files = new FilesystemIterator($folder);
foreach ($files as $file) {
if ($file->isDir()) {
continue;
}
$builder->addDefinitions($file->getRealPath());
}
}
$app = new App();
$app->setContainer($builder->build());
$folder = implode(DIRECTORY_SEPARATOR, [__DIR__, 'middlewares']);
if (file_exists($folder)) {
$files = new FilesystemIterator($folder);
foreach($files as $file) {
if ($file->isDir()) {
continue;
}
require_once $file->getRealPath();
}
}
return $app;
}
return buildApp();

6
app/setup/composer.php Normal file
View File

@ -0,0 +1,6 @@
<?php
require_once implode(DIRECTORY_SEPARATOR, [
dirname(__FILE__, 2),
'vendor',
'autoload.php'
]);

View File

@ -0,0 +1,3 @@
<?php
$app->add($app->getContainer()->get(ProVM\Command\Watch::class));
$app->add($app->getContainer()->get(ProVM\Command\UpdateIp::class));

View File

@ -0,0 +1,19 @@
<?php
return [
'database' => function() {
return new DI\Container([
'host' => $_ENV['MYSQL_HOST'],
'name' => $_ENV['MYSQL_DATABASE'],
'user' => function() {
return new DI\Container([
'name' => $_ENV['MYSQL_USER'],
'password' => $_ENV['MYSQL_PASSWORD']
]);
},
'table' => 'remote_ip',
]);
},
'uri' => 'https://api64.ipify.org',
'period' => 'PT20M',
'retries' => 5
];

View File

@ -0,0 +1,8 @@
<?php
use Psr\Container\ContainerInterface;
return [
ProVM\Command\Watch::class => function(ContainerInterface $container) {
return new ProVM\Command\Watch($container->get('period'));
}
];

View File

@ -0,0 +1,60 @@
<?php
use Psr\Container\ContainerInterface;
return [
Psr\Log\LoggerInterface::class => function(ContainerInterface $container) {
return new Monolog\Logger('file', [
new Monolog\Handler\FilterHandler(
new Monolog\Handler\RotatingFileHandler('/var/log/remote.debug.log'),
Monolog\Level::Debug,
Monolog\Level::Warning
),
new Monolog\Handler\FilterHandler(
new Monolog\Handler\RotatingFileHandler('/var/log/remote.error.log'),
Monolog\Level::Error
)
], [
new Monolog\Processor\PsrLogMessageProcessor(),
new Monolog\Processor\IntrospectionProcessor(),
new Monolog\Processor\MemoryUsageProcessor(),
new Monolog\Processor\MemoryPeakUsageProcessor(),
]);
},
Psr\Http\Client\ClientInterface::class => function(ContainerInterface $container) {
return new GuzzleHttp\Client([
'base_uri' => $container->get('uri')
]);
},
ProVM\Service\Ipify::class => function(ContainerInterface $container) {
return new ProVM\Service\Ipify(
$container->get(Psr\Http\Client\ClientInterface::class),
$container->get(Psr\Log\LoggerInterface::class)
);
},
PDO::class => function(ContainerInterface $container) {
$database = $container->get('database');
$retries = $container->get('retries');
$r = 0;
$exception = null;
while($r < $retries) {
try {
$dsn = "mysql:host={$database->get('host')};dbname={$database->get('name')}";
return new PDO($dsn, $database->get('user')->get('name'), $database->get('user')->get('password'));
} catch (PDOException $e) {
if ($exception !== null) {
$e = new PDOException($e->getMessage(), $e->getCode(), $exception);
}
$exception = $e;
$container->get(Psr\Log\LoggerInterface::class)->debug('Retrying Connection');
}
}
throw $exception;
},
ProVM\Service\Repository::class => function(ContainerInterface $container) {
return new ProVM\Service\Repository(
$container->get(PDO::class),
$container->get('database')->get('table'),
$container->get(Psr\Log\LoggerInterface::class)
);
}
];