refs #452. Migrate clients and hardware profile ended

pull/7/head
Manuel Aranda Rosales 2024-06-12 12:40:38 +02:00
parent 8a17d8c527
commit 2893c0921e
7 changed files with 102 additions and 82 deletions

20
composer.lock generated
View File

@ -575,16 +575,16 @@
},
{
"name": "doctrine/dbal",
"version": "3.8.4",
"version": "3.8.5",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
"reference": "b05e48a745f722801f55408d0dbd8003b403dbbd"
"reference": "0e3536ba088a749985c8801105b6b3ac6c1280b6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/b05e48a745f722801f55408d0dbd8003b403dbbd",
"reference": "b05e48a745f722801f55408d0dbd8003b403dbbd",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/0e3536ba088a749985c8801105b6b3ac6c1280b6",
"reference": "0e3536ba088a749985c8801105b6b3ac6c1280b6",
"shasum": ""
},
"require": {
@ -600,12 +600,12 @@
"doctrine/coding-standard": "12.0.0",
"fig/log-test": "^1",
"jetbrains/phpstorm-stubs": "2023.1",
"phpstan/phpstan": "1.10.58",
"phpstan/phpstan-strict-rules": "^1.5",
"phpunit/phpunit": "9.6.16",
"phpstan/phpstan": "1.11.1",
"phpstan/phpstan-strict-rules": "^1.6",
"phpunit/phpunit": "9.6.19",
"psalm/plugin-phpunit": "0.18.4",
"slevomat/coding-standard": "8.13.1",
"squizlabs/php_codesniffer": "3.9.0",
"squizlabs/php_codesniffer": "3.9.2",
"symfony/cache": "^5.4|^6.0|^7.0",
"symfony/console": "^4.4|^5.4|^6.0|^7.0",
"vimeo/psalm": "4.30.0"
@ -668,7 +668,7 @@
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
"source": "https://github.com/doctrine/dbal/tree/3.8.4"
"source": "https://github.com/doctrine/dbal/tree/3.8.5"
},
"funding": [
{
@ -684,7 +684,7 @@
"type": "tidelift"
}
],
"time": "2024-04-25T07:04:44+00:00"
"time": "2024-06-08T17:49:56+00:00"
},
{
"name": "doctrine/deprecations",

View File

@ -4,10 +4,12 @@ doctrine:
default:
url: '%env(resolve:DATABASE_URL)%'
profiling_collect_backtrace: '%kernel.debug%'
use_savepoints: true
mapping_types:
enum: string
og_1:
url: '%env(resolve:OG_1_DATABASE_URL)%'
use_savepoints: true
default_connection: default
orm:

View File

@ -3,6 +3,7 @@
namespace App\Command\Migration;
use App\Entity\Client;
use App\Entity\HardwareProfile;
use App\Entity\OrganizationalUnit;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Query\ResultSetMapping;
@ -30,57 +31,56 @@ class MigrateClientsCommand extends Command
$clientRepository = $this->entityManager->getRepository(Client::class);
$organizationalUnitRepository = $this->entityManager->getRepository(OrganizationalUnit::class);
$hardwareProfileRepository = $this->entityManager->getRepository(HardwareProfile::class);
/** Obtener los ordenadores de la base de datos antigua **/
$rsmClients = new ResultSetMapping();
$rsmClients->addScalarResult('idordenador', 'idordenador');
$rsmClients->addScalarResult('nombrgrupoordenador', 'nombrgrupoordenador');
$rsmClients->addScalarResult('comentarios', 'comentarios');
$pcsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idordenador FROM ordenadores', $rsmClients);
$pcs = $pcsQuery->getResult();
$rsmClients->addScalarResult('nombreordenador', 'nombreordenador');
$rsmClients->addScalarResult('numserie', 'numserie');
$rsmClients->addScalarResult('mac', 'mac');
$rsmClients->addScalarResult('ip', 'ip');
$rsmClients->addScalarResult('netiface', 'netiface');
$rsmClients->addScalarResult('netdriver', 'netdriver');
$rsmClients->addScalarResult('idperfilhard', 'ordenadores.idperfilhard');
$rsmClients->addScalarResult('grupoid', 'ordenadores.grupoid');
$rsmClients->addScalarResult('idaula', 'ordenadores.idaula');
$clientsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idordenador, nombreordenador, numserie, ip, mac, netiface, netdriver, ordenadores.idaula, ordenadores.grupoid, ordenadores.idperfilhard FROM ordenadores LEFT JOIN aulas ON ordenadores.idaula = aulas.idaula LEFT JOIN perfileshard ON ordenadores.idperfilhard = perfileshard.idperfilhard', $rsmClients);
$clients = $clientsQuery->getResult();
/** Ordenadores **/
foreach ($pcs as $pc){
$newClient = $clientRepository->findOneBy(['migrationId' => $pc->getIdordenador()]);
if(!$newClient){
$newClient = new Client();
$newClient->setMigrationId($pc->getIdordenador());
$this->entityManager->persist($newClient);
$output->writeln("CLIENTES TOTAL: ". count($clients));
foreach ($clients as $client){
$clientEntity = $clientRepository->findOneBy(['migrationId' => $client['idordenador']]);
if(!$clientEntity){
$clientEntity = new Client();
$clientEntity->setMigrationId($client['idordenador']);
$clientEntity->setName($client['nombreordenador']);
$clientEntity->setSerialNumber($client['numserie']);
$clientEntity->setNetiface($client['netiface']);
$clientEntity->setNetdriver($client['netdriver']);
$clientEntity->setMac($client['mac']);
$clientEntity->setIp($client['ip']);
}
$newClient->setName($pc->getNombreordenador());
$newClient->setSerialNumber($pc->getNumserie());
$newClient->setNetiface($pc->getNetiface());
$newClient->setNetdriver($pc->getNetdriver());
$newClient->setMac($pc->getMac());
$newClient->setIp($pc->getIp());
//$client->setStatus();
//$newClient->setCache($pc->getCache());
//$newClient->setIdproautoexec($pc->getIdproautoexec());
//$newClient->setOglive($pc->getOglivedir());
// Netboot
//$migrationId = ""
// HardwareProfile
//$hardwareProfile = $hardwareProfileRepository->findOneBy(['migrationId' => $pc->getIdperfilhard()]);
//$newClient->setHardwareProfile($hardwareProfile);
// Menu
//$menu = $menuRepository->findOneBy(['migrationId' => $pc->getIdmenu()]);
//$newClient->setMenu($menu);
// Repository
//$repository = $repositoryRepository->findOneBy(['migrationId' => $pc->getIdrepositorio()]);
//$newClient->setRepository($repository);
// OrganizationalUnit
$migrationId = $pc->getGrupoid() == 0 ? $pc->getIdaula() : $pc->getGrupoid();
$migrationId = $client['ordenadores.grupoid'] === 0 ? $client['ordenadores.idaula'] : $client['ordenadores.grupoid'];
$organizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $migrationId]);
$newClient->setOrganizationalUnit($organizationalUnit);
if ($organizationalUnit){
$clientEntity->setOrganizationalUnit($organizationalUnit);
}
$hardwareProfile = $hardwareProfileRepository->findOneBy(['migrationId' => $client['ordenadores.idperfilhard']]);
if ($hardwareProfile){
$clientEntity->setHardwareProfile($hardwareProfile);
}
$this->entityManager->persist($clientEntity);
}
$this->entityManager->flush();
return Command::SUCCESS;
}
}

View File

@ -2,6 +2,8 @@
namespace App\Command\Migration;
use App\Entity\HardwareProfile;
use App\Entity\OrganizationalUnit;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Query\ResultSetMapping;
use Doctrine\Persistence\ManagerRegistry;
@ -10,7 +12,7 @@ use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
#[AsCommand(name: 'opengnsys:migrate_hardware_and_hardware_profile', description: 'Migrate hardware and hardware profile data')]
#[AsCommand(name: 'opengnsys:migrate-hardware-profile', description: 'Migrate hardware and hardware profile data')]
class MigrateHardwareAndHardwareProfileCommand extends Command
{
public function __construct(
@ -27,13 +29,42 @@ class MigrateHardwareAndHardwareProfileCommand extends Command
/** @var EntityManagerInterface $oldDatabaseEntityManager */
$oldDatabaseEntityManager = $this->doctrine->getManager('og_1');
$organizationalUnitRepository = $this->entityManager->getRepository(OrganizationalUnit::class);
$hardwareProfileRepository = $this->entityManager->getRepository(HardwareProfile::class);
/** Obtener los centros de la base de datos antigua **/
$rsmCenters = new ResultSetMapping();
$rsmCenters->addScalarResult('idcentro', 'idcentro');
$rsmCenters->addScalarResult('nombrecentro', 'nombrecentro');
$rsmCenters->addScalarResult('comentarios', 'comentarios');
$rsmHardwareProfiles = new ResultSetMapping();
$rsmHardwareProfiles->addScalarResult('idperfilhard', 'idperfilhard');
$rsmHardwareProfiles->addScalarResult('descripcion', 'descripcion');
$rsmHardwareProfiles->addScalarResult('comentarios', 'perfilhard.comentarios');
$rsmHardwareProfiles->addScalarResult('grupoid', 'perfilhard.grupoid');
$rsmHardwareProfiles->addScalarResult('idcentro', 'perfilhard.idcentro');
$hardwareProfilesQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idperfilhard, descripcion, grupos.comentarios, perfileshard.grupoid, perfileshard.idcentro FROM perfileshard LEFT JOIN grupos ON perfileshard.grupoid = grupos.idgrupo', $rsmHardwareProfiles);
$hardwareProfiles = $hardwareProfilesQuery->getResult();
/** Perfiles hardware **/
$output->writeln("PERFILES HARDWARE TOTAL: ". count($hardwareProfiles));
foreach ($hardwareProfiles as $hardwareProfile){
$hardwareProfileEntity = null;
$hardwareProfileEntity = $hardwareProfileRepository->findOneBy(['migrationId' => $hardwareProfile['idperfilhard']]);
if(!$hardwareProfileEntity){
$hardwareProfileEntity = new HardwareProfile();
$hardwareProfileEntity->setMigrationId($hardwareProfile['idperfilhard']);
$hardwareProfileEntity->setDescription($hardwareProfile['descripcion']);
$hardwareProfileEntity->setComments($hardwareProfile['perfilhard.comentarios']);
}
$migrationId = $hardwareProfile['perfilhard.grupoid'] === 0 ? $hardwareProfile['perfilhard.idcentro'] : $hardwareProfile['perfilhard.grupoid'];
$organizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $migrationId]);
if ($organizationalUnit){
$hardwareProfileEntity->setOrganizationalUnit($organizationalUnit);
}
$this->entityManager->persist($hardwareProfileEntity);
}
$this->entityManager->flush();
return Command::SUCCESS;
}

View File

@ -46,7 +46,7 @@ class MigrateOrganizationalUnitCommand extends Command
$rsmGroups->addScalarResult('comentarios', 'grupos.comentarios');
$rsmGroups->addScalarResult('idcentro', 'grupos.idcentro');
$groupsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idgrupo, nombregrupo, grupos.comentarios, grupos.idcentro FROM grupos INNER JOIN centros ON grupos.idcentro = centros.idcentro', $rsmGroups);
$groupsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idgrupo, nombregrupo, grupos.comentarios, grupos.idcentro FROM grupos LEFT JOIN centros ON grupos.idcentro = centros.idcentro', $rsmGroups);
$groups = $groupsQuery->getResult();
/** Obtener las aulas de la base de datos antigua **/
@ -55,6 +55,7 @@ class MigrateOrganizationalUnitCommand extends Command
$rsmClassrooms->addScalarResult('nombreaula', 'nombreaula');
$rsmClassrooms->addScalarResult('comentarios', 'aulas.comentarios');
$rsmClassrooms->addScalarResult('grupoid', 'aulas.grupoid');
$rsmClassrooms->addScalarResult('idcentro', 'aulas.idcentro');
$rsmClassrooms->addScalarResult('proxy', 'proxy');
$rsmClassrooms->addScalarResult('dns', 'dns');
$rsmClassrooms->addScalarResult('netmask', 'netmask');
@ -70,7 +71,7 @@ class MigrateOrganizationalUnitCommand extends Command
$rsmClassrooms->addScalarResult('cagnon', 'cagnon');
$rsmClassrooms->addScalarResult('ubicacion', 'ubicacion');
$roomsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idaula, nombreaula, aulas.comentarios, aulas.grupoid, proxy, dns, netmask, router, ntp, timep2p, modp2p, modomul, ipmul, velmul, pormul, pizarra, cagnon, ubicacion FROM aulas INNER JOIN grupos ON aulas.grupoid = grupos.idgrupo', $rsmClassrooms);
$roomsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idaula, nombreaula, aulas.comentarios, aulas.grupoid, aulas.idcentro, proxy, dns, netmask, router, ntp, timep2p, modp2p, modomul, ipmul, velmul, pormul, pizarra, cagnon, ubicacion FROM aulas LEFT JOIN grupos ON aulas.grupoid = grupos.idgrupo', $rsmClassrooms);
$rooms = $roomsQuery->getResult();
/** Obtener los grupos de ordenadores de la base de datos antigua **/
@ -79,7 +80,7 @@ class MigrateOrganizationalUnitCommand extends Command
$rsmClientGroups->addScalarResult('nombregrupoordenador', 'nombregrupoordenador');
$rsmClientGroups->addScalarResult('comentarios', 'gruposordenadores.comentarios');
$rsmClientGroups->addScalarResult('idaula', 'gruposordenadores.idaula');
$clientGroupsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idgrupo, nombregrupoordenador, gruposordenadores.comentarios, gruposordenadores.idaula FROM gruposordenadores INNER JOIN aulas ON gruposordenadores.idaula = aulas.idaula', $rsmClientGroups);
$clientGroupsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idgrupo, nombregrupoordenador, gruposordenadores.comentarios, gruposordenadores.idaula FROM gruposordenadores LEFT JOIN aulas ON gruposordenadores.idaula = aulas.idaula', $rsmClientGroups);
$clientGroups = $clientGroupsQuery->getResult();
$organizationalUnitRepository = $this->entityManager->getRepository(OrganizationalUnit::class);
@ -88,7 +89,7 @@ class MigrateOrganizationalUnitCommand extends Command
$output->writeln("CENTROS TOTAL: ". count($centers));
foreach ($centers as $center){
$centerOrganizationalUnit = null;
$centerOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $center['idcentro']]);
$centerOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $center['idcentro'], 'type' => OrganizationalUnitTypes::ORGANIZATIONAL_UNIT]);
if(!$centerOrganizationalUnit){
$centerOrganizationalUnit = new OrganizationalUnit();
$centerOrganizationalUnit->setMigrationId($center['idcentro']);
@ -104,7 +105,7 @@ class MigrateOrganizationalUnitCommand extends Command
$output->writeln("GRUPOS DE AULAS TOTAL: ". count($groups));
foreach ($groups as $group){
$groupPcOrganizationalUnit = null;
$groupPcOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $group['idgrupo']]);
$groupPcOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $group['idgrupo'], 'type' => OrganizationalUnitTypes::CLASSROOMS_GROUP]);
if(!$groupPcOrganizationalUnit){
$groupPcOrganizationalUnit = new OrganizationalUnit();
$groupPcOrganizationalUnit->setMigrationId($group['idgrupo']);
@ -126,7 +127,7 @@ class MigrateOrganizationalUnitCommand extends Command
$output->writeln("AULAS TOTAL: ". count($rooms));
foreach ($rooms as $room){
$roomOrganizationalUnit = null;
$roomOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $room['idaula']]);
$roomOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $room['idaula'], 'type' => OrganizationalUnitTypes::CLASSROOM]);
if(!$roomOrganizationalUnit){
$roomOrganizationalUnit = new OrganizationalUnit();
$roomOrganizationalUnit->setMigrationId($room['idaula']);
@ -137,9 +138,11 @@ class MigrateOrganizationalUnitCommand extends Command
$roomOrganizationalUnit->setLocation($room['ubicacion']);
$roomOrganizationalUnit->setType(OrganizationalUnitTypes::CLASSROOM);
$group = $organizationalUnitRepository->findOneBy(['migrationId' => $room['aulas.grupoid']]);
if ($group){
$roomOrganizationalUnit->setParent($group);
$migrationId = $room['aulas.grupoid'] === 0 ? $room['aulas.idcentro'] : $room['aulas.grupoid'];
$organizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $migrationId]);
if ($organizationalUnit){
$roomOrganizationalUnit->setParent($organizationalUnit);
}
$this->entityManager->persist($roomOrganizationalUnit);
@ -167,11 +170,10 @@ class MigrateOrganizationalUnitCommand extends Command
$this->entityManager->flush();
/** Grupo Ordenador **/
$output->writeln("GRUPOS ORDENADORES ". count($rooms));
$output->writeln("GRUPOS ORDENADORES ". count($clientGroups));
foreach ($clientGroups as $clientGroup){
var_dump($clientGroup );
$groupPcOrganizationalUnit = null;
$groupPcOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $clientGroup['idgrupo']]);
$groupPcOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $clientGroup['idgrupo'], 'type' => OrganizationalUnitTypes::CLIENTS_GROUP]);
if(!$groupPcOrganizationalUnit){
$groupPcOrganizationalUnit = new OrganizationalUnit();
$groupPcOrganizationalUnit->setMigrationId($clientGroup['idgrupo']);

View File

@ -8,8 +8,7 @@ use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: ClientRepository::class)]
class Client extends AbstractEntity
{
#[ORM\Column(length: 255, nullable: true)]
private ?string $name = null;
use NameableTrait;
#[ORM\Column(length: 255, nullable: true)]
private ?string $serialNumber = null;
@ -35,19 +34,6 @@ class Client extends AbstractEntity
#[ORM\ManyToOne(inversedBy: 'clients')]
private ?HardwareProfile $hardwareProfile = null;
public function getName(): ?string
{
return $this->name;
}
public function setName(?string $name): static
{
$this->name = $name;
return $this;
}
public function getSerialNumber(): ?string
{
return $this->serialNumber;

View File

@ -4,7 +4,6 @@ namespace Functional;
use ApiPlatform\Symfony\Bundle\Test\ApiTestCase;
use ApiPlatform\Symfony\Bundle\Test\Client;
use App\Factory\UserFactory;
use Faker\Factory;
use Faker\Generator;
use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;