v0.5.0
This commit is contained in:
40
app/setup/app.php
Normal file
40
app/setup/app.php
Normal 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
6
app/setup/composer.php
Normal file
@ -0,0 +1,6 @@
|
||||
<?php
|
||||
require_once implode(DIRECTORY_SEPARATOR, [
|
||||
dirname(__FILE__, 2),
|
||||
'vendor',
|
||||
'autoload.php'
|
||||
]);
|
3
app/setup/middlewares/commands.php
Normal file
3
app/setup/middlewares/commands.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php
|
||||
$app->add($app->getContainer()->get(ProVM\Command\Watch::class));
|
||||
$app->add($app->getContainer()->get(ProVM\Command\UpdateIp::class));
|
19
app/setup/settings/01_env.php
Normal file
19
app/setup/settings/01_env.php
Normal 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
|
||||
];
|
8
app/setup/setups/commands.php
Normal file
8
app/setup/setups/commands.php
Normal 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'));
|
||||
}
|
||||
];
|
60
app/setup/setups/services.php
Normal file
60
app/setup/setups/services.php
Normal 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)
|
||||
);
|
||||
}
|
||||
];
|
Reference in New Issue
Block a user