95 lines
3.7 KiB
PHP
95 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands\Domain;
|
|
|
|
use App\Integrations\Domain\Extractors\DnsDomainExtractor;
|
|
use App\Integrations\Domain\Extractors\DnsDomainUserExtractor;
|
|
use App\Integrations\Domain\Extractors\DnsRecordExtractor;
|
|
use App\Integrations\Domain\Extractors\DnsServerExtractor;
|
|
use App\Integrations\Domain\Transformers\DnsDomainTransformer;
|
|
use App\Integrations\Domain\Transformers\DnsDomainUserTransformer;
|
|
use App\Integrations\Domain\Transformers\DnsRecordTransformer;
|
|
use App\Integrations\Domain\Transformers\DnsServerTransformer;
|
|
use App\Integrations\Domain\Writers\DnsDomainUserWriter;
|
|
use App\Integrations\Domain\Writers\DnsDomainWriter;
|
|
use App\Integrations\Domain\Writers\DnsRecordWriter;
|
|
use App\Integrations\Domain\Writers\DnsServerWriter;
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class SyncDomainsCommand extends Command
|
|
{
|
|
protected $signature = 'domain:sync';
|
|
|
|
protected $description = 'Extract DNS servers/domains/records/owners from the domain admin (tgs_domain_prod) database and upsert them locally';
|
|
|
|
public function handle(
|
|
DnsServerExtractor $serverExtractor,
|
|
DnsServerTransformer $serverTransformer,
|
|
DnsServerWriter $serverWriter,
|
|
DnsDomainExtractor $domainExtractor,
|
|
DnsDomainTransformer $domainTransformer,
|
|
DnsDomainWriter $domainWriter,
|
|
DnsRecordExtractor $recordExtractor,
|
|
DnsRecordTransformer $recordTransformer,
|
|
DnsRecordWriter $recordWriter,
|
|
DnsDomainUserExtractor $domainUserExtractor,
|
|
DnsDomainUserTransformer $domainUserTransformer,
|
|
DnsDomainUserWriter $domainUserWriter,
|
|
): int {
|
|
// Order matters: servers before domains (FK), domains before records/owners (FK).
|
|
$this->info('Syncing servers...');
|
|
$bar = $this->output->createProgressBar(DB::connection('domain')->table('dns_manager_servers')->count());
|
|
$bar->start();
|
|
foreach ($serverExtractor->extract() as $row) {
|
|
$serverWriter->write($serverTransformer->transform($row));
|
|
$bar->advance();
|
|
}
|
|
$bar->finish();
|
|
$this->newLine();
|
|
|
|
$this->info('Syncing domains...');
|
|
$bar = $this->output->createProgressBar(DB::connection('domain')->table('dns_manager_domain')->count());
|
|
$bar->start();
|
|
$skippedDomains = 0;
|
|
foreach ($domainExtractor->extract() as $row) {
|
|
if (! $domainWriter->write($domainTransformer->transform($row))) {
|
|
$skippedDomains++;
|
|
}
|
|
$bar->advance();
|
|
}
|
|
$bar->finish();
|
|
$this->newLine();
|
|
|
|
$this->info('Syncing records...');
|
|
$bar = $this->output->createProgressBar(DB::connection('domain')->table('dns_manager_ns')->count());
|
|
$bar->start();
|
|
$skippedRecords = 0;
|
|
foreach ($recordExtractor->extract() as $row) {
|
|
if (! $recordWriter->write($recordTransformer->transform($row))) {
|
|
$skippedRecords++;
|
|
}
|
|
$bar->advance();
|
|
}
|
|
$bar->finish();
|
|
$this->newLine();
|
|
|
|
$this->info('Syncing domain owners...');
|
|
$bar = $this->output->createProgressBar(DB::connection('domain')->table('dns_domain_user')->count());
|
|
$bar->start();
|
|
$skippedOwners = 0;
|
|
foreach ($domainUserExtractor->extract() as $row) {
|
|
if (! $domainUserWriter->write($domainUserTransformer->transform($row))) {
|
|
$skippedOwners++;
|
|
}
|
|
$bar->advance();
|
|
}
|
|
$bar->finish();
|
|
$this->newLine();
|
|
|
|
$this->info("Skipped: {$skippedDomains} domain(s), {$skippedRecords} record(s), {$skippedOwners} owner link(s) (unresolved FK).");
|
|
|
|
return Command::SUCCESS;
|
|
}
|
|
}
|