From b180d32843bc273923a5b5c9834ae1175f18a1bc Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Tue, 11 Mar 2025 15:49:07 +0100 Subject: [PATCH 01/19] refs #1692. Import Image. Refactor old code --- config/api_platform/ImageRepository.yaml | 8 +- .../Image/CancelTransmissionAction.php | 2 +- .../OgRepository/Image/ExportAction.php | 69 ----------------- .../OgRepository/Image/ImportAction.php | 77 +++++++++++++++++++ .../ExportImportImageRepositoryInput.php | 4 +- src/Dto/Input/ImportImageRepositoryInput.php | 15 ++++ 6 files changed, 99 insertions(+), 76 deletions(-) delete mode 100644 src/Controller/OgRepository/Image/ExportAction.php create mode 100644 src/Controller/OgRepository/Image/ImportAction.php create mode 100644 src/Dto/Input/ImportImageRepositoryInput.php diff --git a/config/api_platform/ImageRepository.yaml b/config/api_platform/ImageRepository.yaml index e57d0f9..165e425 100644 --- a/config/api_platform/ImageRepository.yaml +++ b/config/api_platform/ImageRepository.yaml @@ -57,14 +57,14 @@ resources: uriTemplate: /image-repositories/server/{uuid}/status controller: App\Controller\OgRepository\StatusAction - export_image_ogrepository: + import_image_ogrepository: shortName: OgRepository Server description: Export Image in OgRepository class: ApiPlatform\Metadata\Post method: POST - input: App\Dto\Input\ExportImportImageRepositoryInput - uriTemplate: /image-repositories/{uuid}/export-image - controller: App\Controller\OgRepository\Image\ExportAction + input: App\Dto\Input\ImportImageRepositoryInput + uriTemplate: /image-repositories/{uuid}/import-image + controller: App\Controller\OgRepository\Image\ImportAction properties: App\Entity\ImageRepository: diff --git a/src/Controller/OgRepository/Image/CancelTransmissionAction.php b/src/Controller/OgRepository/Image/CancelTransmissionAction.php index eec94f2..93aa4e0 100644 --- a/src/Controller/OgRepository/Image/CancelTransmissionAction.php +++ b/src/Controller/OgRepository/Image/CancelTransmissionAction.php @@ -54,7 +54,7 @@ class CancelTransmissionAction extends AbstractOgRepositoryController $content = $this->createRequest('DELETE', 'http://'.$image->getRepository()->getIp().':8006/ogrepository/v1/'.$method.'/images/'.$image->getImageFullsum()); - if (isset($content['error']) && $content['error'] === Response::HTTP_INTERNAL_SERVER_ERROR ) { + if (isset($content['error']) && $content['code'] === Response::HTTP_INTERNAL_SERVER_ERROR ) { throw new ValidatorException('Error cancelling transmission'); } diff --git a/src/Controller/OgRepository/Image/ExportAction.php b/src/Controller/OgRepository/Image/ExportAction.php deleted file mode 100644 index ef449e3..0000000 --- a/src/Controller/OgRepository/Image/ExportAction.php +++ /dev/null @@ -1,69 +0,0 @@ -images; - - foreach ($images as $imageEntity) { - /** @var Image $image */ - $image = $imageEntity->getEntity(); - - if (!$image->getImageFullsum()) { - throw new ValidatorException('Fullsum is required'); - } - - $params = [ - 'json' => [ - 'ID_img' => $image->getImageFullsum(), - 'repo_ip' => $repository->getIp(), - 'user' => 'opengnsys', - ] - ]; - - $this->logger->info('Exporting image', ['image' => $image->getName(), 'repository' => $repository->getIp()]); - - $content = $this->createRequest('PUT', 'http://'.$image->getRepository()->getIp().':8006/ogrepository/v1/repo/images', $params); - - $inputData = [ - 'imageName' => $image->getName(), - 'imageUuid' => $image->getUuid(), - 'repositoryUuid' => $repository->getUuid(), - ]; - - $this->createService->__invoke($image->getClient(), CommandTypes::EXPORT_IMAGE, TraceStatus::IN_PROGRESS, $content['job_id'], $inputData); - - $image->setStatus(ImageStatus::TRANSFERING); - $this->entityManager->persist($image); - $this->entityManager->flush(); - } - - return new JsonResponse(data: [], status: Response::HTTP_OK); - } -} \ No newline at end of file diff --git a/src/Controller/OgRepository/Image/ImportAction.php b/src/Controller/OgRepository/Image/ImportAction.php new file mode 100644 index 0000000..a12f9d0 --- /dev/null +++ b/src/Controller/OgRepository/Image/ImportAction.php @@ -0,0 +1,77 @@ +name; + + $params = [ + 'json' => [ + 'image' => $image.'.img' + ] + ]; + + $this->logger->info('Creating aux files', ['image' => $image]); + + $content = $this->createRequest('POST', 'http://'.$repository->getIp().':8006/ogrepository/v1/images/torrentsum', $params); + + if (isset($content['error']) && $content['code'] === Response::HTTP_INTERNAL_SERVER_ERROR ) { + throw new ValidatorException('Error importing image'); + } + + $inputData = [ + 'imageName' => $image + ]; + + $this->createService->__invoke(null, CommandTypes::CREATE_IMAGE_AUX_FILE, TraceStatus::IN_PROGRESS, $content['job_id'], $inputData); + + $imageEntity = $this->entityManager->getRepository(Image::class)->findOneBy(['name' => $image]); + + if (!$imageEntity){ + $imageEntity = new Image(); + $imageEntity->setName($image); + $imageEntity->setRemotePc(false); + $imageEntity->setIsGlobal(false); + + $this->entityManager->persist($imageEntity); + } + + $imageImageRepositoryEntity = new ImageImageRepository(); + $imageImageRepositoryEntity->setStatus(ImageStatus::AUX_FILES_PENDING); + $imageImageRepositoryEntity->setImage($imageEntity); + $imageImageRepositoryEntity->setRepository($repository); + + $this->entityManager->persist($imageImageRepositoryEntity); + $this->entityManager->flush(); + + return new JsonResponse(data: [], status: Response::HTTP_OK); + } +} \ No newline at end of file diff --git a/src/Dto/Input/ExportImportImageRepositoryInput.php b/src/Dto/Input/ExportImportImageRepositoryInput.php index b6111b2..690500b 100644 --- a/src/Dto/Input/ExportImportImageRepositoryInput.php +++ b/src/Dto/Input/ExportImportImageRepositoryInput.php @@ -13,6 +13,6 @@ class ExportImportImageRepositoryInput * @var ImageOutput[] */ #[Assert\NotNull] - #[Groups(['image-image-repository:write'])] - public array $repositories = []; + #[Groups(['repository:write'])] + public array $images = []; } \ No newline at end of file diff --git a/src/Dto/Input/ImportImageRepositoryInput.php b/src/Dto/Input/ImportImageRepositoryInput.php new file mode 100644 index 0000000..9a31c0a --- /dev/null +++ b/src/Dto/Input/ImportImageRepositoryInput.php @@ -0,0 +1,15 @@ + Date: Tue, 11 Mar 2025 17:09:36 +0100 Subject: [PATCH 02/19] refs #1693. Convert Image. Refactor old code --- config/api_platform/ImageRepository.yaml | 9 +++ .../OgRepository/Image/ConvertAction.php | 78 +++++++++++++++++++ src/Dto/Input/ConvertImageRepositoryInput.php | 15 ++++ src/Model/CommandTypes.php | 3 +- 4 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 src/Controller/OgRepository/Image/ConvertAction.php create mode 100644 src/Dto/Input/ConvertImageRepositoryInput.php diff --git a/config/api_platform/ImageRepository.yaml b/config/api_platform/ImageRepository.yaml index 165e425..97cd0b9 100644 --- a/config/api_platform/ImageRepository.yaml +++ b/config/api_platform/ImageRepository.yaml @@ -66,6 +66,15 @@ resources: uriTemplate: /image-repositories/{uuid}/import-image controller: App\Controller\OgRepository\Image\ImportAction + convert_image_ogrepository: + shortName: OgRepository Server + description: Convert Image in OgRepository + class: ApiPlatform\Metadata\Post + method: POST + input: App\Dto\Input\ConvertImageRepositoryInput + uriTemplate: /image-repositories/{uuid}/convert-image + controller: App\Controller\OgRepository\Image\ConvertAction + properties: App\Entity\ImageRepository: id: diff --git a/src/Controller/OgRepository/Image/ConvertAction.php b/src/Controller/OgRepository/Image/ConvertAction.php new file mode 100644 index 0000000..5cc8a73 --- /dev/null +++ b/src/Controller/OgRepository/Image/ConvertAction.php @@ -0,0 +1,78 @@ +name; + + $params = [ + 'json' => [ + 'filesystem' => 'ext4', + 'virtual_image' => $image + ] + ]; + + $this->logger->info('Converting image', ['image' => $image]); + + $content = $this->createRequest('POST', 'http://'.$repository->getIp().':8006/ogrepository/v1/images/virtual', $params); + + if (isset($content['error']) && $content['code'] === Response::HTTP_INTERNAL_SERVER_ERROR ) { + throw new ValidatorException('Error importing image'); + } + + $inputData = [ + 'imageName' => $image + ]; + + $this->createService->__invoke(null, CommandTypes::CONVERT_IMAGE, TraceStatus::IN_PROGRESS, $content['job_id'], $inputData); + + $imageEntity = $this->entityManager->getRepository(Image::class)->findOneBy(['name' => $image]); + + if (!$imageEntity){ + $imageEntity = new Image(); + $imageEntity->setName($image); + $imageEntity->setRemotePc(false); + $imageEntity->setIsGlobal(false); + + $this->entityManager->persist($imageEntity); + } + + $imageImageRepositoryEntity = new ImageImageRepository(); + $imageImageRepositoryEntity->setStatus(ImageStatus::PENDING); + $imageImageRepositoryEntity->setImage($imageEntity); + $imageImageRepositoryEntity->setRepository($repository); + + $this->entityManager->persist($imageImageRepositoryEntity); + $this->entityManager->flush(); + + return new JsonResponse(data: [], status: Response::HTTP_OK); + } +} \ No newline at end of file diff --git a/src/Dto/Input/ConvertImageRepositoryInput.php b/src/Dto/Input/ConvertImageRepositoryInput.php new file mode 100644 index 0000000..a7c8d21 --- /dev/null +++ b/src/Dto/Input/ConvertImageRepositoryInput.php @@ -0,0 +1,15 @@ + 'Deploy Image', self::RESTORE_IMAGE => 'Update Cache', self::CREATE_IMAGE => 'Create Image', + self::CONVERT_IMAGE => 'Convert Image', self::CREATE_IMAGE_AUX_FILE => 'Crear fichero auxiliar en repositorio', self::BACKUP_IMAGE => 'Crear backup de imagen', self::IMPORT_IMAGE => 'Importar imagen', From 350dcd1d2446f7960a91ece5733783c5c41d46d6 Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Tue, 11 Mar 2025 17:21:11 +0100 Subject: [PATCH 03/19] refs #1692. Import Image. --- src/Controller/OgRepository/Image/ImportAction.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Controller/OgRepository/Image/ImportAction.php b/src/Controller/OgRepository/Image/ImportAction.php index a12f9d0..f83f363 100644 --- a/src/Controller/OgRepository/Image/ImportAction.php +++ b/src/Controller/OgRepository/Image/ImportAction.php @@ -64,6 +64,12 @@ class ImportAction extends AbstractOgRepositoryController $this->entityManager->persist($imageEntity); } + $imageImageRepositoryEntity = $this->entityManager->getRepository(ImageImageRepository::class)->findOneBy(['image' => $imageEntity, 'repository' => $repository]); + + if ($imageImageRepositoryEntity){ + throw new ValidatorException('This image already exists in this repository'); + } + $imageImageRepositoryEntity = new ImageImageRepository(); $imageImageRepositoryEntity->setStatus(ImageStatus::AUX_FILES_PENDING); $imageImageRepositoryEntity->setImage($imageEntity); From 7c37bd418a4e4675c9c23ba8e4db4ff1a1fe5fd8 Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Tue, 11 Mar 2025 17:37:44 +0100 Subject: [PATCH 04/19] refs #1692. Import Image. Changes --- .../OgRepository/Image/ImportAction.php | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/src/Controller/OgRepository/Image/ImportAction.php b/src/Controller/OgRepository/Image/ImportAction.php index f83f363..79ea5ad 100644 --- a/src/Controller/OgRepository/Image/ImportAction.php +++ b/src/Controller/OgRepository/Image/ImportAction.php @@ -33,26 +33,6 @@ class ImportAction extends AbstractOgRepositoryController { $image = $input->name; - $params = [ - 'json' => [ - 'image' => $image.'.img' - ] - ]; - - $this->logger->info('Creating aux files', ['image' => $image]); - - $content = $this->createRequest('POST', 'http://'.$repository->getIp().':8006/ogrepository/v1/images/torrentsum', $params); - - if (isset($content['error']) && $content['code'] === Response::HTTP_INTERNAL_SERVER_ERROR ) { - throw new ValidatorException('Error importing image'); - } - - $inputData = [ - 'imageName' => $image - ]; - - $this->createService->__invoke(null, CommandTypes::CREATE_IMAGE_AUX_FILE, TraceStatus::IN_PROGRESS, $content['job_id'], $inputData); - $imageEntity = $this->entityManager->getRepository(Image::class)->findOneBy(['name' => $image]); if (!$imageEntity){ @@ -70,6 +50,27 @@ class ImportAction extends AbstractOgRepositoryController throw new ValidatorException('This image already exists in this repository'); } + $params = [ + 'json' => [ + 'image' => $image.'.img' + ] + ]; + + $this->logger->info('Creating aux files', ['image' => $image]); + + $content = $this->createRequest('POST', 'http://'.$repository->getIp().':8006/ogrepository/v1/images/torrentsum', $params); + + if (isset($content['error']) && $content['code'] === Response::HTTP_INTERNAL_SERVER_ERROR ) { + throw new ValidatorException('Error importing image'); + } + + $inputData = [ + 'imageName' => $image, + 'imageUuid' => $imageImageRepositoryEntity->getUuid(), + ]; + + $this->createService->__invoke(null, CommandTypes::CREATE_IMAGE_AUX_FILE, TraceStatus::IN_PROGRESS, $content['job_id'], $inputData); + $imageImageRepositoryEntity = new ImageImageRepository(); $imageImageRepositoryEntity->setStatus(ImageStatus::AUX_FILES_PENDING); $imageImageRepositoryEntity->setImage($imageEntity); From b9e894f2d0a8313f81408269885bd40d13a2e222 Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Wed, 12 Mar 2025 08:25:45 +0100 Subject: [PATCH 05/19] refs #1692. Import Image. Changes in logic --- .../OgRepository/Image/ImportAction.php | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Controller/OgRepository/Image/ImportAction.php b/src/Controller/OgRepository/Image/ImportAction.php index 79ea5ad..cb28a67 100644 --- a/src/Controller/OgRepository/Image/ImportAction.php +++ b/src/Controller/OgRepository/Image/ImportAction.php @@ -50,14 +50,22 @@ class ImportAction extends AbstractOgRepositoryController throw new ValidatorException('This image already exists in this repository'); } + $imageImageRepositoryEntity = new ImageImageRepository(); + $imageImageRepositoryEntity->setStatus(ImageStatus::AUX_FILES_PENDING); + $imageImageRepositoryEntity->setImage($imageEntity); + $imageImageRepositoryEntity->setRepository($repository); + + $this->entityManager->persist($imageImageRepositoryEntity); + $this->entityManager->flush(); + + $this->logger->info('Creating aux files', ['image' => $image]); + $params = [ 'json' => [ 'image' => $image.'.img' ] ]; - $this->logger->info('Creating aux files', ['image' => $image]); - $content = $this->createRequest('POST', 'http://'.$repository->getIp().':8006/ogrepository/v1/images/torrentsum', $params); if (isset($content['error']) && $content['code'] === Response::HTTP_INTERNAL_SERVER_ERROR ) { @@ -71,14 +79,6 @@ class ImportAction extends AbstractOgRepositoryController $this->createService->__invoke(null, CommandTypes::CREATE_IMAGE_AUX_FILE, TraceStatus::IN_PROGRESS, $content['job_id'], $inputData); - $imageImageRepositoryEntity = new ImageImageRepository(); - $imageImageRepositoryEntity->setStatus(ImageStatus::AUX_FILES_PENDING); - $imageImageRepositoryEntity->setImage($imageEntity); - $imageImageRepositoryEntity->setRepository($repository); - - $this->entityManager->persist($imageImageRepositoryEntity); - $this->entityManager->flush(); - return new JsonResponse(data: [], status: Response::HTTP_OK); } } \ No newline at end of file From fca9bb3ae395151d260ff0c0c62d85aae13f035a Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Wed, 12 Mar 2025 08:30:15 +0100 Subject: [PATCH 06/19] refs #1693. Convert Image. Experimental commit --- .../OgRepository/Image/ConvertAction.php | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/Controller/OgRepository/Image/ConvertAction.php b/src/Controller/OgRepository/Image/ConvertAction.php index 5cc8a73..38b8b67 100644 --- a/src/Controller/OgRepository/Image/ConvertAction.php +++ b/src/Controller/OgRepository/Image/ConvertAction.php @@ -3,6 +3,7 @@ namespace App\Controller\OgRepository\Image; use App\Controller\OgRepository\AbstractOgRepositoryController; +use App\Dto\Input\ConvertImageRepositoryInput; use App\Dto\Input\ImportImageRepositoryInput; use App\Entity\Image; use App\Entity\ImageImageRepository; @@ -29,31 +30,10 @@ class ConvertAction extends AbstractOgRepositoryController * @throws RedirectionExceptionInterface * @throws ClientExceptionInterface */ - public function __invoke(ImportImageRepositoryInput $input, ImageRepository $repository): JsonResponse + public function __invoke(ConvertImageRepositoryInput $input, ImageRepository $repository): JsonResponse { $image = $input->name; - $params = [ - 'json' => [ - 'filesystem' => 'ext4', - 'virtual_image' => $image - ] - ]; - - $this->logger->info('Converting image', ['image' => $image]); - - $content = $this->createRequest('POST', 'http://'.$repository->getIp().':8006/ogrepository/v1/images/virtual', $params); - - if (isset($content['error']) && $content['code'] === Response::HTTP_INTERNAL_SERVER_ERROR ) { - throw new ValidatorException('Error importing image'); - } - - $inputData = [ - 'imageName' => $image - ]; - - $this->createService->__invoke(null, CommandTypes::CONVERT_IMAGE, TraceStatus::IN_PROGRESS, $content['job_id'], $inputData); - $imageEntity = $this->entityManager->getRepository(Image::class)->findOneBy(['name' => $image]); if (!$imageEntity){ @@ -73,6 +53,28 @@ class ConvertAction extends AbstractOgRepositoryController $this->entityManager->persist($imageImageRepositoryEntity); $this->entityManager->flush(); + $this->logger->info('Converting image', ['image' => $image]); + + $params = [ + 'json' => [ + 'filesystem' => 'ext4', + 'virtual_image' => $image + ] + ]; + + $content = $this->createRequest('POST', 'http://'.$repository->getIp().':8006/ogrepository/v1/images/virtual', $params); + + if (isset($content['error']) && $content['code'] === Response::HTTP_INTERNAL_SERVER_ERROR ) { + throw new ValidatorException('Error converting image'); + } + + $inputData = [ + 'imageName' => $image, + 'imageUuid' => $imageImageRepositoryEntity->getUuid(), + ]; + + $this->createService->__invoke(null, CommandTypes::CONVERT_IMAGE, TraceStatus::IN_PROGRESS, $content['job_id'], $inputData); + return new JsonResponse(data: [], status: Response::HTTP_OK); } } \ No newline at end of file From 405149776173f3c0f28c7fcaa9a3e3bc7781eb92 Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Wed, 12 Mar 2025 17:35:24 +0100 Subject: [PATCH 07/19] refs #1693. Convert Image. Webhook updated. --- src/Controller/OgRepository/Image/ConvertAction.php | 13 ++++++++++--- .../OgRepository/Webhook/ResponseController.php | 1 + src/Dto/Input/ConvertImageRepositoryInput.php | 4 ++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Controller/OgRepository/Image/ConvertAction.php b/src/Controller/OgRepository/Image/ConvertAction.php index 38b8b67..c36d2e6 100644 --- a/src/Controller/OgRepository/Image/ConvertAction.php +++ b/src/Controller/OgRepository/Image/ConvertAction.php @@ -32,7 +32,8 @@ class ConvertAction extends AbstractOgRepositoryController */ public function __invoke(ConvertImageRepositoryInput $input, ImageRepository $repository): JsonResponse { - $image = $input->name; + $fileSystem = $input->filesystem; + $image = pathinfo($input->name, PATHINFO_FILENAME); $imageEntity = $this->entityManager->getRepository(Image::class)->findOneBy(['name' => $image]); @@ -45,6 +46,12 @@ class ConvertAction extends AbstractOgRepositoryController $this->entityManager->persist($imageEntity); } + $imageImageRepositoryEntity = $this->entityManager->getRepository(ImageImageRepository::class)->findOneBy(['image' => $imageEntity, 'repository' => $repository]); + + if ($imageImageRepositoryEntity){ + throw new ValidatorException('This image already exists in this repository'); + } + $imageImageRepositoryEntity = new ImageImageRepository(); $imageImageRepositoryEntity->setStatus(ImageStatus::PENDING); $imageImageRepositoryEntity->setImage($imageEntity); @@ -57,8 +64,8 @@ class ConvertAction extends AbstractOgRepositoryController $params = [ 'json' => [ - 'filesystem' => 'ext4', - 'virtual_image' => $image + 'filesystem' => $fileSystem, + 'virtual_image' => $input->name ] ]; diff --git a/src/Controller/OgRepository/Webhook/ResponseController.php b/src/Controller/OgRepository/Webhook/ResponseController.php index ae66f39..28a8315 100644 --- a/src/Controller/OgRepository/Webhook/ResponseController.php +++ b/src/Controller/OgRepository/Webhook/ResponseController.php @@ -37,6 +37,7 @@ class ResponseController extends AbstractOgRepositoryController str_starts_with($action, "CreateAuxiliarFiles_") => $this->handleImageRepositoryAction($data, true), str_starts_with($action, "TransferImage_"), str_starts_with($action, "ExportImage_") => $this->processImageAction($data), str_starts_with($action, "BackupImage_") => $this->handleImageRepositoryAction($data), + str_starts_with($action, "ConvertImage_") => $this->handleImageRepositoryAction($data), default => $this->jsonResponseError('Invalid action', Response::HTTP_BAD_REQUEST), }; } diff --git a/src/Dto/Input/ConvertImageRepositoryInput.php b/src/Dto/Input/ConvertImageRepositoryInput.php index a7c8d21..d23b49d 100644 --- a/src/Dto/Input/ConvertImageRepositoryInput.php +++ b/src/Dto/Input/ConvertImageRepositoryInput.php @@ -12,4 +12,8 @@ class ConvertImageRepositoryInput #[Assert\NotNull] #[Groups(['repository:write'])] public ?string $name = ''; + + #[Assert\NotNull] + #[Groups(['repository:write'])] + public ?string $filesystem = ''; } \ No newline at end of file From 663b0d19281599911a00372394bd219c35d73dc3 Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Thu, 13 Mar 2025 11:11:15 +0100 Subject: [PATCH 08/19] refs #1671. Udpated deploy method type. Added udpcast-direct' --- src/Model/DeployMethodTypes.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/DeployMethodTypes.php b/src/Model/DeployMethodTypes.php index 053a009..4c48e55 100644 --- a/src/Model/DeployMethodTypes.php +++ b/src/Model/DeployMethodTypes.php @@ -8,7 +8,7 @@ final class DeployMethodTypes public const string MULTICAST_UFTP = 'uftp'; public const string MULTICAST_UFTP_DIRECT = 'uftp-direct'; public const string MULTICAST_UDPCAST = 'udpcast'; - public const string MULTICAST_UDPCAST_DIRECT = 'udp-direct'; + public const string MULTICAST_UDPCAST_DIRECT = 'udpcast-direct'; public const string UNICAST = 'unicast'; public const string UNICAST_DIRECT = 'unicast-direct'; public const string TORRENT = 'p2p'; From 8bc9cb1006f5c98d9c1e07ac5ef488604d902580 Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Thu, 13 Mar 2025 12:55:49 +0100 Subject: [PATCH 09/19] refs #1702. Updated ogLive sync. Deleted wrong or uninstalled oglives --- config/packages/web_profiler.yaml | 8 +++++ config/services/api_platform.yaml | 2 +- src/Controller/OgBoot/OgLive/SyncAction.php | 23 ++++++++++++ .../Webhook/InstallOgLiveResponseAction.php | 35 ++++++++++--------- src/Model/OgLiveStatus.php | 7 ++-- 5 files changed, 54 insertions(+), 21 deletions(-) diff --git a/config/packages/web_profiler.yaml b/config/packages/web_profiler.yaml index b946111..948758c 100644 --- a/config/packages/web_profiler.yaml +++ b/config/packages/web_profiler.yaml @@ -15,3 +15,11 @@ when@test: framework: profiler: { collect: false } + +when@prod: + web_profiler: + toolbar: false + intercept_redirects: false + + framework: + profiler: { collect: false } \ No newline at end of file diff --git a/config/services/api_platform.yaml b/config/services/api_platform.yaml index 8ec0610..eabd61c 100644 --- a/config/services/api_platform.yaml +++ b/config/services/api_platform.yaml @@ -82,7 +82,7 @@ services: api_platform.filter.og_live.search: parent: 'api_platform.doctrine.orm.search_filter' - arguments: [ { 'id': 'exact', 'name': 'partial', } ] + arguments: [ { 'id': 'exact', 'name': 'partial', 'status': 'exact' } ] tags: [ 'api_platform.filter' ] api_platform.filter.og_live.boolean: diff --git a/src/Controller/OgBoot/OgLive/SyncAction.php b/src/Controller/OgBoot/OgLive/SyncAction.php index 286f1b8..1c169e0 100644 --- a/src/Controller/OgBoot/OgLive/SyncAction.php +++ b/src/Controller/OgBoot/OgLive/SyncAction.php @@ -20,16 +20,21 @@ use Symfony\Contracts\HttpClient\HttpClientInterface; class SyncAction extends AbstractOgBootController { const string OG_BOOT_DIRECTORY = '/opt/opengnsys/ogboot/tftpboot//'; + /** * @throws TransportExceptionInterface * @throws ServerExceptionInterface * @throws RedirectionExceptionInterface * @throws ClientExceptionInterface + * @throws \Exception */ public function __invoke(): JsonResponse { $content = $this->createRequest('GET', 'http://'.$this->ogBootApiUrl . '/ogboot/v1/oglives'); + $allOgLives = $this->entityManager->getRepository(OgLive::class)->findAll(); + $apiChecksums = array_map(fn($ogLive) => $ogLive['id'], $content['message']['installed_ogLives']); + foreach ($content['message']['installed_ogLives'] as $ogLive) { $ogLiveEntity = $this->entityManager->getRepository(OgLive::class)->findOneBy(['checksum' => $ogLive['id']]); @@ -43,6 +48,17 @@ class SyncAction extends AbstractOgBootController $this->extracted($ogLiveEntity, $ogLive); $this->entityManager->persist($ogLiveEntity); } + + foreach ($allOgLives as $localOgLive) { + if ($localOgLive->getStatus() === OgLiveStatus::PENDING ) { + continue; + } + + if (!in_array($localOgLive->getChecksum(), $apiChecksums)) { + $this->entityManager->remove($localOgLive); + } + } + $this->entityManager->flush(); if (isset($content['message']['default_oglive'])) { @@ -75,6 +91,13 @@ class SyncAction extends AbstractOgBootController private function serDefaultOgLive(string $defaultOgLive): void { + $oldDefaultOgLive = $this->entityManager->getRepository(OgLive::class)->findAll(); + + foreach ($oldDefaultOgLive as $oldOgLive) { + $oldOgLive->setIsDefault(false); + $this->entityManager->persist($oldOgLive); + } + $ogLiveEntity = $this->entityManager->getRepository(OgLive::class)->findOneBy(['filename' => $defaultOgLive]); if (!$ogLiveEntity) { diff --git a/src/Controller/OgBoot/OgLive/Webhook/InstallOgLiveResponseAction.php b/src/Controller/OgBoot/OgLive/Webhook/InstallOgLiveResponseAction.php index 5a12077..9d16625 100644 --- a/src/Controller/OgBoot/OgLive/Webhook/InstallOgLiveResponseAction.php +++ b/src/Controller/OgBoot/OgLive/Webhook/InstallOgLiveResponseAction.php @@ -6,6 +6,7 @@ use App\Controller\OgBoot\AbstractOgBootController; use App\Entity\OgLive; use App\Entity\Trace; use App\Model\OgLiveStatus; +use App\Model\TraceStatus; use App\Service\Utils\ExtractOgLiveFilenameDateService; use App\Service\Utils\SymflipyOgLiveFilenameService; use Doctrine\ORM\EntityManagerInterface; @@ -51,6 +52,8 @@ class InstallOgLiveResponseAction extends AbstractController return new JsonResponse(['error' => 'Invalid JSON data'], Response::HTTP_BAD_REQUEST); } + $this->logger->info('OgLive Webhook data received: '.json_encode($data)); + $data = $data['webhookData']; if ($data === null || !isset($data['message'], $data['ogCoreId'], $data['status'])) { @@ -69,8 +72,9 @@ class InstallOgLiveResponseAction extends AbstractController } if ($trace) { - $trace->setStatus($status === self::OG_LIVE_INSTALL_SUCCESS ? 'success' : 'failure'); + $trace->setStatus($status === self::OG_LIVE_INSTALL_SUCCESS ? TraceStatus::SUCCESS : TraceStatus::FAILED); $this->entityManager->persist($trace); + $this->entityManager->flush(); } if ($ogLive->getStatus() === OgLiveStatus::ACTIVE) { @@ -86,12 +90,12 @@ class InstallOgLiveResponseAction extends AbstractController /** * @throws \Exception */ - private function updateOgLive (OgLive $ogLive, array $details, string $status): void + private function updateOgLive (OgLive $ogLive, mixed $details, string $status): void { - if ($status === self::OG_LIVE_INSTALL_SUCCESS) { - $ogLive->setName($this->symflipyOgLiveFilenameService->__invoke($details['filename'])); - $ogLive->setDate(new \DateTime($this->extractOgLiveFilenameDateService->__invoke($details['filename']))); - $ogLive->setFilename(str_replace(self::OG_BOOT_DIRECTORY, '', $ogLive['directory'])); + if ( is_array($details) && $status === self::OG_LIVE_INSTALL_SUCCESS) { + $ogLive->setName($this->symflipyOgLiveFilenameService->__invoke($details['directory'])); + $ogLive->setDate(new \DateTime($this->extractOgLiveFilenameDateService->__invoke($details['directory']))); + $ogLive->setFilename(str_replace(self::OG_BOOT_DIRECTORY, '', $details['directory'])); $ogLive->setInstalled(true); $ogLive->setSynchronized(true); $ogLive->setChecksum($details['id']); @@ -100,21 +104,20 @@ class InstallOgLiveResponseAction extends AbstractController $ogLive->setArchitecture($details['architecture']); $ogLive->setRevision($details['revision']); $ogLive->setDirectory($details['directory']); + + $oldDefaultOgLive = $this->entityManager->getRepository(OgLive::class)->findAll(); + foreach ($oldDefaultOgLive as $oldOgLive) { + $oldOgLive->setIsDefault(false); + $this->entityManager->persist($oldOgLive); + } + + $ogLive->setIsDefault(true); + $this->entityManager->persist($ogLive); } $ogLive->setStatus($status === self::OG_LIVE_INSTALL_SUCCESS ? OgLiveStatus::ACTIVE : OgLiveStatus::FAILED); $ogLive->setInstalled($status === self::OG_LIVE_INSTALL_SUCCESS); - $oldDefaultOgLive = $this->entityManager->getRepository(OgLive::class)->findBy(['isDefault' => true]); - - foreach ($oldDefaultOgLive as $oldOgLive) { - $oldOgLive->setIsDefault(false); - $this->entityManager->persist($oldOgLive); - } - - $ogLive->setIsDefault(true); - $this->entityManager->persist($ogLive); - $this->entityManager->flush(); } } \ No newline at end of file diff --git a/src/Model/OgLiveStatus.php b/src/Model/OgLiveStatus.php index 2b9e744..f4b1dbf 100644 --- a/src/Model/OgLiveStatus.php +++ b/src/Model/OgLiveStatus.php @@ -8,13 +8,12 @@ final class OgLiveStatus public const string ACTIVE = 'active'; public const string INACTIVE = 'inactive'; public const string DELETED = 'deleted'; - public const string FAILED = 'failed'; private const array OG_LIVE_STATUSES = [ - self::PENDING => 'Pendiente', - self::ACTIVE => 'Activo', - self::INACTIVE => 'Inactivo', + self::PENDING => 'Instalando', + self::ACTIVE => 'Instalada', + self::INACTIVE => 'Sin instalar', self::DELETED => 'Eliminado', self::FAILED => 'Fallido', ]; From 4a76186e97dec6ae5ff8db492a906e92ab9ffe37 Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Mon, 17 Mar 2025 08:55:42 +0100 Subject: [PATCH 10/19] Test refactor transferImage --- config/api_platform/ImageImageRepository.yaml | 11 +++++++- .../OgRepository/Image/TransferAction.php | 5 ++-- ...balAction.php => TransferGlobalAction.php} | 25 ++++++------------- src/Dto/Input/TransferGlobalImageInput.php | 18 +++++++++++++ .../ImageRepositorySubscriber.php | 6 ++--- src/State/Processor/ImageProcessor.php | 7 ------ 6 files changed, 42 insertions(+), 30 deletions(-) rename src/Controller/OgRepository/Image/{TransferIsGlobalAction.php => TransferGlobalAction.php} (68%) create mode 100644 src/Dto/Input/TransferGlobalImageInput.php diff --git a/config/api_platform/ImageImageRepository.yaml b/config/api_platform/ImageImageRepository.yaml index 05fd121..ff64ea0 100644 --- a/config/api_platform/ImageImageRepository.yaml +++ b/config/api_platform/ImageImageRepository.yaml @@ -88,7 +88,7 @@ resources: description: Export Image in OgRepository class: ApiPlatform\Metadata\Post method: POST - input: App\Dto\Input\ExportImportImageRepositoryInput + input: App\Dto\Input\TransferGlobalImageInput uriTemplate: /image-image-repositories/{uuid}/transfer-image controller: App\Controller\OgRepository\Image\TransferAction @@ -101,6 +101,15 @@ resources: uriTemplate: /image-image-repositories/server/{uuid}/status controller: App\Controller\OgRepository\Image\GetStatusAction + transfer_global_image_repository: + shortName: OgRepository Server + description: Transfer Global Image in OgRepository + class: ApiPlatform\Metadata\Post + method: POST + input: false + uriTemplate: /image-image-repositories/server/{uuid}/transfer-global + controller: App\Controller\OgRepository\Image\TransferGlobalAction + properties: App\Entity\ImageImageRepository: id: diff --git a/src/Controller/OgRepository/Image/TransferAction.php b/src/Controller/OgRepository/Image/TransferAction.php index a0eadac..c0513bb 100644 --- a/src/Controller/OgRepository/Image/TransferAction.php +++ b/src/Controller/OgRepository/Image/TransferAction.php @@ -4,6 +4,7 @@ namespace App\Controller\OgRepository\Image; use App\Controller\OgRepository\AbstractOgRepositoryController; use App\Dto\Input\ExportImportImageRepositoryInput; +use App\Dto\Input\TransferGlobalImageInput; use App\Entity\Image; use App\Entity\ImageImageRepository; use App\Entity\ImageRepository; @@ -28,7 +29,7 @@ class TransferAction extends AbstractOgRepositoryController * @throws RedirectionExceptionInterface * @throws ClientExceptionInterface */ - public function __invoke(ExportImportImageRepositoryInput $input, ImageImageRepository $imageImageRepository): JsonResponse + public function __invoke(TransferGlobalImageInput $input, ImageImageRepository $imageImageRepository): JsonResponse { $repositories = $input->repositories; @@ -45,7 +46,7 @@ class TransferAction extends AbstractOgRepositoryController $params = [ 'json' => [ 'image' => $image->getName().'.img', - 'repo_ip' => $image->getClient()->getRepository()->getIp(), + 'repo_ip' => $imageImageRepository->getRepository()->getIp(), 'user' => 'opengnsys', ] ]; diff --git a/src/Controller/OgRepository/Image/TransferIsGlobalAction.php b/src/Controller/OgRepository/Image/TransferGlobalAction.php similarity index 68% rename from src/Controller/OgRepository/Image/TransferIsGlobalAction.php rename to src/Controller/OgRepository/Image/TransferGlobalAction.php index d1d6c7f..795967a 100644 --- a/src/Controller/OgRepository/Image/TransferIsGlobalAction.php +++ b/src/Controller/OgRepository/Image/TransferGlobalAction.php @@ -21,7 +21,7 @@ use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface; use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface; #[AsController] -class TransferIsGlobalAction extends AbstractOgRepositoryController +class TransferGlobalAction extends AbstractOgRepositoryController { /** * @throws TransportExceptionInterface @@ -29,26 +29,17 @@ class TransferIsGlobalAction extends AbstractOgRepositoryController * @throws RedirectionExceptionInterface * @throws ClientExceptionInterface */ - public function __invoke(?array $repositories = [], Image $image): JsonResponse + public function __invoke(ImageImageRepository $imageImageRepository): JsonResponse { + $repositories = $this->entityManager->getRepository(ImageRepository::class)->findAll(); + foreach ($repositories as $repository) { - try { - $imageImageRepository = $this->entityManager->getRepository(ImageImageRepository::class)->findOneBy(['image' => $image, 'repository' => $repository]); - - if ($imageImageRepository) { - $content = $this->createRequest('GET', 'http://'.$repository->getIp().':8006/ogrepository/v1/images/'.$imageImageRepository->getImageFullsum()); - - $this->logger->info('Image already exists', ['image' => $imageImageRepository->getImage()->getName(), 'repository' => $repository->getIp()]); - continue; - } - } catch ( \Exception $e) { - - } + $image = $imageImageRepository->getImage(); $params = [ 'json' => [ 'image' => $image->getName().'.img', - 'repo_ip' => $image->getClient()->getRepository()->getIp(), + 'repo_ip' => $imageImageRepository->getRepository()->getIp(), 'user' => 'opengnsys', ] ]; @@ -64,13 +55,13 @@ class TransferIsGlobalAction extends AbstractOgRepositoryController $inputData = [ 'imageName' => $image->getName(), 'imageUuid' => $image->getUuid(), - //'imageImageRepositoryUuid' => $imageImageRepository?->getUuid(), + 'imageImageRepositoryUuid' => $imageImageRepository?->getUuid(), 'repositoryUuid' => $repository->getUuid(), ]; $this->createService->__invoke($image->getClient(), CommandTypes::TRANSFER_IMAGE, TraceStatus::IN_PROGRESS, $content['job_id'], $inputData); - //$imageImageRepository->setStatus(ImageStatus::TRANSFERRING); + $imageImageRepository->setStatus(ImageStatus::TRANSFERRING); $this->entityManager->persist($image); $this->entityManager->flush(); } diff --git a/src/Dto/Input/TransferGlobalImageInput.php b/src/Dto/Input/TransferGlobalImageInput.php new file mode 100644 index 0000000..7193d13 --- /dev/null +++ b/src/Dto/Input/TransferGlobalImageInput.php @@ -0,0 +1,18 @@ +source !== 'input') { $response = $this->createImageActionController->__invoke($image); - } else { - if ($data->isGlobal === true) { - $repositories = $this->imageRepositoryRepository->findAll(); - $this->transferActionController->__invoke($repositories, $image); - } } $this->imageRepository->save($image); From b41c489ce34d8ecd3d63f3d6a525d5b84b263595 Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Mon, 17 Mar 2025 16:48:29 +0100 Subject: [PATCH 11/19] Refactor transferImages --- src/Controller/OgRepository/Image/BackupImageAction.php | 2 +- src/Controller/OgRepository/Image/ConvertAction.php | 2 +- .../OgRepository/Image/TransferGlobalAction.php | 8 ++++++++ .../OgRepository/Webhook/ResponseController.php | 7 ++++++- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/Controller/OgRepository/Image/BackupImageAction.php b/src/Controller/OgRepository/Image/BackupImageAction.php index 549a46b..8f8662d 100644 --- a/src/Controller/OgRepository/Image/BackupImageAction.php +++ b/src/Controller/OgRepository/Image/BackupImageAction.php @@ -55,7 +55,7 @@ class BackupImageAction extends AbstractOgRepositoryController $inputData = [ 'imageName' => $image->getName(), 'repositoryUuid' => $repository->getUuid(), - 'imageUuid' => $imageImageRepository->getUuid(), + 'imageImageRepositoryUuid' => $imageImageRepository->getUuid(), 'ID_img' => $imageImageRepository->getImageFullsum(), 'repo_ip' => $input->repoIp, 'remote_path' => $input->remotePath diff --git a/src/Controller/OgRepository/Image/ConvertAction.php b/src/Controller/OgRepository/Image/ConvertAction.php index c36d2e6..a41589a 100644 --- a/src/Controller/OgRepository/Image/ConvertAction.php +++ b/src/Controller/OgRepository/Image/ConvertAction.php @@ -77,7 +77,7 @@ class ConvertAction extends AbstractOgRepositoryController $inputData = [ 'imageName' => $image, - 'imageUuid' => $imageImageRepositoryEntity->getUuid(), + 'imageImageRepositoryUuid' => $imageImageRepositoryEntity->getUuid(), ]; $this->createService->__invoke(null, CommandTypes::CONVERT_IMAGE, TraceStatus::IN_PROGRESS, $content['job_id'], $inputData); diff --git a/src/Controller/OgRepository/Image/TransferGlobalAction.php b/src/Controller/OgRepository/Image/TransferGlobalAction.php index 795967a..152d847 100644 --- a/src/Controller/OgRepository/Image/TransferGlobalAction.php +++ b/src/Controller/OgRepository/Image/TransferGlobalAction.php @@ -34,6 +34,14 @@ class TransferGlobalAction extends AbstractOgRepositoryController $repositories = $this->entityManager->getRepository(ImageRepository::class)->findAll(); foreach ($repositories as $repository) { + + $hasImage = $this->entityManager->getRepository(ImageImageRepository::class) + ->findOneBy(['image' => $imageImageRepository->getImage(), 'repository' => $repository]); + + if ($hasImage) { + continue; + } + $image = $imageImageRepository->getImage(); $params = [ diff --git a/src/Controller/OgRepository/Webhook/ResponseController.php b/src/Controller/OgRepository/Webhook/ResponseController.php index 28a8315..ef8b690 100644 --- a/src/Controller/OgRepository/Webhook/ResponseController.php +++ b/src/Controller/OgRepository/Webhook/ResponseController.php @@ -72,8 +72,13 @@ class ResponseController extends AbstractOgRepositoryController $image = $this->getImage($trace); $repository = $this->getRepository($trace); + $originImageImageRepository = $this->getImageImageRepository($trace); if (!$image) return $this->jsonResponseError('Image not found', Response::HTTP_NOT_FOUND, $trace); if (!$repository) return $this->jsonResponseError('Repository not found', Response::HTTP_NOT_FOUND, $trace); + if (!$originImageImageRepository) return $this->jsonResponseError('ImageImageRepository not found', Response::HTTP_NOT_FOUND, $trace); + + $originImageImageRepository->setStatus(ImageStatus::SUCCESS); + $this->entityManager->persist($originImageImageRepository); $newImageRepo = new ImageImageRepository(); $newImageRepo->setImage($image); @@ -128,7 +133,7 @@ class ResponseController extends AbstractOgRepositoryController private function getImageImageRepository(Trace $trace): ?ImageImageRepository { return $this->entityManager->getRepository(ImageImageRepository::class) - ->findOneBy(['uuid' => $trace->getInput()['imageUuid']]); + ->findOneBy(['uuid' => $trace->getInput()['imageImageRepositoryUuid']]); } private function jsonResponseError(string $message, int $status = Response::HTTP_BAD_REQUEST, ?Trace $trace = null): JsonResponse From c2fed1fb15613dfb22ecff9735f9c3e0d370f4a8 Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Mon, 17 Mar 2025 16:51:33 +0100 Subject: [PATCH 12/19] Refactor transferImages --- src/Controller/OgRepository/Image/CreateAuxFilesAction.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Controller/OgRepository/Image/CreateAuxFilesAction.php b/src/Controller/OgRepository/Image/CreateAuxFilesAction.php index 06c09dd..d5ebd1f 100644 --- a/src/Controller/OgRepository/Image/CreateAuxFilesAction.php +++ b/src/Controller/OgRepository/Image/CreateAuxFilesAction.php @@ -51,7 +51,7 @@ class CreateAuxFilesAction extends AbstractOgRepositoryController $inputData = [ 'imageName' => $image->getName(), - 'imageUuid' => $data->getUuid(), + 'imageImageRepositoryUuid' => $data->getUuid(), ]; $this->createService->__invoke($image->getClient(), CommandTypes::CREATE_IMAGE_AUX_FILE, TraceStatus::IN_PROGRESS, $content['job_id'], $inputData); From ec7006db9a43f087a03a6fd13f1aefe272dd478c Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Tue, 18 Mar 2025 08:42:25 +0100 Subject: [PATCH 13/19] Refactor transferImages --- src/Controller/OgRepository/Image/TransferGlobalAction.php | 6 +++++- src/Dto/Output/ImageOutput.php | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Controller/OgRepository/Image/TransferGlobalAction.php b/src/Controller/OgRepository/Image/TransferGlobalAction.php index 152d847..c69ff48 100644 --- a/src/Controller/OgRepository/Image/TransferGlobalAction.php +++ b/src/Controller/OgRepository/Image/TransferGlobalAction.php @@ -69,8 +69,12 @@ class TransferGlobalAction extends AbstractOgRepositoryController $this->createService->__invoke($image->getClient(), CommandTypes::TRANSFER_IMAGE, TraceStatus::IN_PROGRESS, $content['job_id'], $inputData); - $imageImageRepository->setStatus(ImageStatus::TRANSFERRING); + $image->setIsGlobal(true); $this->entityManager->persist($image); + + $imageImageRepository->setStatus(ImageStatus::TRANSFERRING); + $this->entityManager->persist($imageImageRepository); + $this->entityManager->flush(); } diff --git a/src/Dto/Output/ImageOutput.php b/src/Dto/Output/ImageOutput.php index 085ec55..d1f4aa1 100644 --- a/src/Dto/Output/ImageOutput.php +++ b/src/Dto/Output/ImageOutput.php @@ -21,10 +21,10 @@ final class ImageOutput extends AbstractOutput #[Groups(['image:read'])] public ?string $comments = ''; - #[Groups(['image:read'])] + #[Groups(['image:read', 'image-image-repository:read'])] public ?bool $remotePc = null; - #[Groups(['image:read'])] + #[Groups(['image:read', 'image-image-repository:read'])] public ?bool $isGlobal = null; #[Groups(['image:read'])] From 1f4a88df0f4ccc9b15483b111276b659204fbb06 Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Tue, 18 Mar 2025 17:11:13 +0100 Subject: [PATCH 14/19] Refactor Images/Repositories modules --- .../Webhook/ResponseController.php | 9 ++++---- src/Dto/Input/ImageRepositoryInput.php | 3 +++ src/Dto/Output/ImageRepositoryOutput.php | 4 ---- .../ImageRepositorySubscriber.php | 2 +- .../Provider/ImageRepositoryProvider.php | 22 +++---------------- 5 files changed, 12 insertions(+), 28 deletions(-) diff --git a/src/Controller/OgRepository/Webhook/ResponseController.php b/src/Controller/OgRepository/Webhook/ResponseController.php index ef8b690..fd56f3a 100644 --- a/src/Controller/OgRepository/Webhook/ResponseController.php +++ b/src/Controller/OgRepository/Webhook/ResponseController.php @@ -66,10 +66,6 @@ class ResponseController extends AbstractOgRepositoryController $trace = $this->getTrace($data['job_id']); if (!$trace) return $this->jsonResponseError('Trace not found'); - if ($data['success'] !== true) { - return $this->jsonResponseError('Action failed', Response::HTTP_BAD_REQUEST, $trace); - } - $image = $this->getImage($trace); $repository = $this->getRepository($trace); $originImageImageRepository = $this->getImageImageRepository($trace); @@ -79,6 +75,11 @@ class ResponseController extends AbstractOgRepositoryController $originImageImageRepository->setStatus(ImageStatus::SUCCESS); $this->entityManager->persist($originImageImageRepository); + $this->entityManager->flush(); + + if ($data['success'] !== true) { + return $this->jsonResponseError('Action failed', Response::HTTP_BAD_REQUEST, $trace); + } $newImageRepo = new ImageImageRepository(); $newImageRepo->setImage($image); diff --git a/src/Dto/Input/ImageRepositoryInput.php b/src/Dto/Input/ImageRepositoryInput.php index e2ea309..96e20b7 100644 --- a/src/Dto/Input/ImageRepositoryInput.php +++ b/src/Dto/Input/ImageRepositoryInput.php @@ -16,10 +16,13 @@ use Symfony\Component\Validator\Constraints as Assert; final class ImageRepositoryInput { + #[Assert\NotBlank] #[Groups(['repository:write'])] #[ApiProperty(description: 'The name of the repository', example: "Repository 1")] public ?string $name = null; + #[Assert\NotBlank] + #[Assert\Ip] #[Groups(['repository:write'])] #[ApiProperty(description: 'The IP of the repository', example: "")] public ?string $ip = null; diff --git a/src/Dto/Output/ImageRepositoryOutput.php b/src/Dto/Output/ImageRepositoryOutput.php index 6d3fdb7..daf72e3 100644 --- a/src/Dto/Output/ImageRepositoryOutput.php +++ b/src/Dto/Output/ImageRepositoryOutput.php @@ -18,9 +18,6 @@ class ImageRepositoryOutput extends AbstractOutput #[Groups(['repository:read'])] public ?string $comments = ''; - #[Groups(['repository:read'])] - public ?bool $status = true; - #[Groups(['repository:read'])] public \DateTime $createdAt; @@ -34,7 +31,6 @@ class ImageRepositoryOutput extends AbstractOutput $this->name = $imageRepository->getName(); $this->ip = $imageRepository->getIp(); $this->comments = $imageRepository->getComments(); - $this->status = $status; $this->createdAt = $imageRepository->getCreatedAt(); $this->createdBy = $imageRepository->getCreatedBy(); } diff --git a/src/EventSubscriber/ImageRepositorySubscriber.php b/src/EventSubscriber/ImageRepositorySubscriber.php index 226a9ba..cd685dd 100644 --- a/src/EventSubscriber/ImageRepositorySubscriber.php +++ b/src/EventSubscriber/ImageRepositorySubscriber.php @@ -54,7 +54,7 @@ final readonly class ImageRepositorySubscriber implements EventSubscriberInterfa $imagesToImport = $this->entityManager->getRepository(Image::class)->findBy(['isGlobal' => true]); foreach($imagesToImport as $imageToImport) { - $this->transferIsGlobalAction->__invoke([$imageToImport], $imageRepositoryOutput->getEntity()); + //$this->transferIsGlobalAction->__invoke($imageRepositoryOutput->getEntity()); } } } \ No newline at end of file diff --git a/src/State/Provider/ImageRepositoryProvider.php b/src/State/Provider/ImageRepositoryProvider.php index 5e45ff1..4230b45 100644 --- a/src/State/Provider/ImageRepositoryProvider.php +++ b/src/State/Provider/ImageRepositoryProvider.php @@ -9,23 +9,17 @@ use ApiPlatform\Metadata\Patch; use ApiPlatform\Metadata\Put; use ApiPlatform\State\Pagination\TraversablePaginator; use ApiPlatform\State\ProviderInterface; -use App\Controller\OgRepository\StatusAction; use App\Dto\Input\ImageInput; use App\Dto\Input\ImageRepositoryInput; use App\Dto\Output\ImageOutput; use App\Dto\Output\ImageRepositoryOutput; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface; -use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface; -use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface; -use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface; readonly class ImageRepositoryProvider implements ProviderInterface { public function __construct( - private ProviderInterface $collectionProvider, - private ProviderInterface $itemProvider, - private StatusAction $statusAction + private ProviderInterface $collectionProvider, + private ProviderInterface $itemProvider ) { } @@ -43,23 +37,13 @@ readonly class ImageRepositoryProvider implements ProviderInterface } } - /** - * @throws TransportExceptionInterface - * @throws ServerExceptionInterface - * @throws RedirectionExceptionInterface - * @throws ClientExceptionInterface - */ private function provideCollection(Operation $operation, array $uriVariables = [], array $context = []): object { $paginator = $this->collectionProvider->provide($operation, $uriVariables, $context); $items = new \ArrayObject(); foreach ($paginator->getIterator() as $item){ - $statusResponse = $this->statusAction->__invoke($item); - $content = json_decode($statusResponse->getContent(), true); - $status = !isset($content['error']); - - $items[] = new ImageRepositoryOutput($item, $status); + $items[] = new ImageRepositoryOutput($item); } return new TraversablePaginator($items, $paginator->getCurrentPage(), $paginator->getItemsPerPage(), $paginator->getTotalItems()); From 5be87008c4e5a0323021518d2da13b81df8f585e Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Wed, 19 Mar 2025 15:44:35 +0100 Subject: [PATCH 15/19] refs #1701. Updated Sync with ogLive. Parse new data --- .../OgBoot/AbstractOgBootController.php | 4 ++-- src/Controller/OgBoot/OgLive/GetIsosAction.php | 2 +- src/Controller/OgBoot/OgLive/InstallAction.php | 2 +- src/Controller/OgBoot/OgLive/SyncAction.php | 2 +- .../Webhook/InstallOgLiveResponseAction.php | 5 +++-- .../Utils/SymflipyOgLiveFilenameService.php | 15 --------------- 6 files changed, 8 insertions(+), 22 deletions(-) delete mode 100644 src/Service/Utils/SymflipyOgLiveFilenameService.php diff --git a/src/Controller/OgBoot/AbstractOgBootController.php b/src/Controller/OgBoot/AbstractOgBootController.php index d39cfd7..c85e0fd 100644 --- a/src/Controller/OgBoot/AbstractOgBootController.php +++ b/src/Controller/OgBoot/AbstractOgBootController.php @@ -7,7 +7,7 @@ namespace App\Controller\OgBoot; use App\Controller\OgBoot\PxeBootFile\PostAction; use App\Service\Trace\CreateService; use App\Service\Utils\ExtractOgLiveFilenameDateService; -use App\Service\Utils\SymflipyOgLiveFilenameService; +use App\Service\Utils\SimplifyOgLiveFilenameService; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\DependencyInjection\Attribute\Autowire; @@ -34,7 +34,7 @@ abstract class AbstractOgBootController extends AbstractController protected readonly EntityManagerInterface $entityManager, protected readonly HttpClientInterface $httpClient, protected readonly CreateService $createService, - protected readonly SymflipyOgLiveFilenameService $symflipyOgLiveFilenameService, + protected readonly SimplifyOgLiveFilenameService $simplifyOgLiveFilenameService, protected readonly ExtractOgLiveFilenameDateService $extractOgLiveFilenameDateService, ) { diff --git a/src/Controller/OgBoot/OgLive/GetIsosAction.php b/src/Controller/OgBoot/OgLive/GetIsosAction.php index d284859..f451d88 100644 --- a/src/Controller/OgBoot/OgLive/GetIsosAction.php +++ b/src/Controller/OgBoot/OgLive/GetIsosAction.php @@ -30,7 +30,7 @@ class GetIsosAction extends AbstractOgBootController } $isos = array_map(function ($iso) { - $filename = $this->symflipyOgLiveFilenameService->__invoke($iso['filename']); + $filename = $this->simplifyOgLiveFilenameService->__invoke($iso['filename']); return [ 'id' => $iso['id'], diff --git a/src/Controller/OgBoot/OgLive/InstallAction.php b/src/Controller/OgBoot/OgLive/InstallAction.php index bbc1e06..f736f13 100644 --- a/src/Controller/OgBoot/OgLive/InstallAction.php +++ b/src/Controller/OgBoot/OgLive/InstallAction.php @@ -49,7 +49,7 @@ class InstallAction extends AbstractOgBootController $this->createService->__invoke(null, CommandTypes::INSTALL_OGLIVE, TraceStatus::IN_PROGRESS, 'InstallOgLive_'.$data->getUuid(), $inputData); - $data->setName($this->symflipyOgLiveFilenameService->__invoke($data->getFilename())); + $data->setName($this->simplifyOgLiveFilenameService->__invoke($data->getFilename())); $data->setDate(new \DateTime()); $data->setStatus(OgLiveStatus::PENDING); $this->entityManager->persist($data); diff --git a/src/Controller/OgBoot/OgLive/SyncAction.php b/src/Controller/OgBoot/OgLive/SyncAction.php index 1c169e0..69cabd0 100644 --- a/src/Controller/OgBoot/OgLive/SyncAction.php +++ b/src/Controller/OgBoot/OgLive/SyncAction.php @@ -76,7 +76,7 @@ class SyncAction extends AbstractOgBootController */ private function extracted(OgLive $ogLiveEntity, mixed $ogLive): void { - $ogLiveEntity->setName($this->symflipyOgLiveFilenameService->__invoke(str_replace(self::OG_BOOT_DIRECTORY, '', $ogLive['directory']))); + $ogLiveEntity->setName($this->simplifyOgLiveFilenameService->__invoke(str_replace(self::OG_BOOT_DIRECTORY, '', $ogLive['directory']))); $ogLiveEntity->setDate(new \DateTime($this->extractOgLiveFilenameDateService->__invoke(str_replace(self::OG_BOOT_DIRECTORY, '', $ogLive['directory'])))); $ogLiveEntity->setInstalled(true); $ogLiveEntity->setArchitecture($ogLive['architecture']); diff --git a/src/Controller/OgBoot/OgLive/Webhook/InstallOgLiveResponseAction.php b/src/Controller/OgBoot/OgLive/Webhook/InstallOgLiveResponseAction.php index 9d16625..645fe8f 100644 --- a/src/Controller/OgBoot/OgLive/Webhook/InstallOgLiveResponseAction.php +++ b/src/Controller/OgBoot/OgLive/Webhook/InstallOgLiveResponseAction.php @@ -8,6 +8,7 @@ use App\Entity\Trace; use App\Model\OgLiveStatus; use App\Model\TraceStatus; use App\Service\Utils\ExtractOgLiveFilenameDateService; +use App\Service\Utils\SimplifyOgLiveFilenameService; use App\Service\Utils\SymflipyOgLiveFilenameService; use Doctrine\ORM\EntityManagerInterface; use Psr\Log\LoggerInterface; @@ -34,7 +35,7 @@ class InstallOgLiveResponseAction extends AbstractController public function __construct( protected readonly EntityManagerInterface $entityManager, protected readonly LoggerInterface $logger, - protected readonly SymflipyOgLiveFilenameService $symflipyOgLiveFilenameService, + protected readonly SimplifyOgLiveFilenameService $simplifyOgLiveFilenameService, protected readonly ExtractOgLiveFilenameDateService $extractOgLiveFilenameDateService, ) { @@ -93,7 +94,7 @@ class InstallOgLiveResponseAction extends AbstractController private function updateOgLive (OgLive $ogLive, mixed $details, string $status): void { if ( is_array($details) && $status === self::OG_LIVE_INSTALL_SUCCESS) { - $ogLive->setName($this->symflipyOgLiveFilenameService->__invoke($details['directory'])); + $ogLive->setName($this->simplifyOgLiveFilenameService->__invoke($details['directory'])); $ogLive->setDate(new \DateTime($this->extractOgLiveFilenameDateService->__invoke($details['directory']))); $ogLive->setFilename(str_replace(self::OG_BOOT_DIRECTORY, '', $details['directory'])); $ogLive->setInstalled(true); diff --git a/src/Service/Utils/SymflipyOgLiveFilenameService.php b/src/Service/Utils/SymflipyOgLiveFilenameService.php deleted file mode 100644 index 820e3a2..0000000 --- a/src/Service/Utils/SymflipyOgLiveFilenameService.php +++ /dev/null @@ -1,15 +0,0 @@ - Date: Wed, 19 Mar 2025 15:45:07 +0100 Subject: [PATCH 16/19] refs #1731. New endpoint integration. Convert image to virtual --- config/api_platform/ImageImageRepository.yaml | 8 +++ config/packages/framework.yaml | 1 + .../Image/ConvertImageToVirtualAction.php | 65 +++++++++++++++++++ src/Dto/Input/ConvertImageToVirtualInput.php | 15 +++++ src/Model/CommandTypes.php | 10 +-- .../Utils/SimplifyOgLiveFilenameService.php | 28 ++++++++ 6 files changed, 123 insertions(+), 4 deletions(-) create mode 100644 src/Controller/OgRepository/Image/ConvertImageToVirtualAction.php create mode 100644 src/Dto/Input/ConvertImageToVirtualInput.php create mode 100644 src/Service/Utils/SimplifyOgLiveFilenameService.php diff --git a/config/api_platform/ImageImageRepository.yaml b/config/api_platform/ImageImageRepository.yaml index ff64ea0..279d72a 100644 --- a/config/api_platform/ImageImageRepository.yaml +++ b/config/api_platform/ImageImageRepository.yaml @@ -56,6 +56,14 @@ resources: uriTemplate: /image-image-repositories/{uuid}/backup-image controller: App\Controller\OgRepository\Image\BackupImageAction + convert_image_to_virtual_image_ogrepository: + shortName: OgRepository Server + class: ApiPlatform\Metadata\Post + method: POST + input: App\Dto\Input\ConvertImageToVirtualInput + uriTemplate: /image-image-repositories/{uuid}/convert-image-to-virtual + controller: App\Controller\OgRepository\Image\ConvertImageToVirtualAction + trash_delete_image_ogrepository: shortName: OgRepository Server description: Delete Image in OgRepository diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml index 5b303be..b6cfd9e 100644 --- a/config/packages/framework.yaml +++ b/config/packages/framework.yaml @@ -12,6 +12,7 @@ framework: handler_id: null cookie_secure: auto cookie_samesite: lax + storage_factory_id: session.storage.factory.native #esi: true #fragments: true diff --git a/src/Controller/OgRepository/Image/ConvertImageToVirtualAction.php b/src/Controller/OgRepository/Image/ConvertImageToVirtualAction.php new file mode 100644 index 0000000..898e67f --- /dev/null +++ b/src/Controller/OgRepository/Image/ConvertImageToVirtualAction.php @@ -0,0 +1,65 @@ +getImage(); + + if (!$image->getName()) { + throw new ValidatorException('Name is required'); + } + + $params = [ + 'json' => [ + 'ID_img' => $imageImageRepository->getImageFullsum(), + 'vm_extension' => 'opengnsys' + ] + ]; + + $this->logger->info('Convert image to virtual', ['image' => $image->getName()]); + + $repository = $imageImageRepository->getRepository(); + + $content = $this->createRequest('PUT', 'http://'.$repository->getIp().':8006/ogrepository/v1/images/virtual', $params); + + $inputData = [ + 'imageName' => $image->getName(), + 'repositoryUuid' => $repository->getUuid(), + 'imageImageRepositoryUuid' => $imageImageRepository->getUuid(), + 'ID_img' => $imageImageRepository->getImageFullsum(), + ]; + + $this->createService->__invoke($image->getClient(), CommandTypes::CONVERT_IMAGE_TO_VIRTUAL, TraceStatus::IN_PROGRESS, $content['job_id'], $inputData); + + $imageImageRepository->setStatus(ImageStatus::TRANSFERRING); + $this->entityManager->persist($imageImageRepository); + $this->entityManager->flush(); + + return new JsonResponse(data: $content, status: Response::HTTP_OK); + } +} \ No newline at end of file diff --git a/src/Dto/Input/ConvertImageToVirtualInput.php b/src/Dto/Input/ConvertImageToVirtualInput.php new file mode 100644 index 0000000..d1d0e84 --- /dev/null +++ b/src/Dto/Input/ConvertImageToVirtualInput.php @@ -0,0 +1,15 @@ + 'Update Cache', self::CREATE_IMAGE => 'Create Image', self::CONVERT_IMAGE => 'Convert Image', - self::CREATE_IMAGE_AUX_FILE => 'Crear fichero auxiliar en repositorio', - self::BACKUP_IMAGE => 'Crear backup de imagen', - self::IMPORT_IMAGE => 'Importar imagen', - self::EXPORT_IMAGE => 'Exportar imagen', + self::CONVERT_IMAGE_TO_VIRTUAL => 'Convert Image to Virtual', + self::CREATE_IMAGE_AUX_FILE => 'Create Image Aux File', + self::BACKUP_IMAGE => 'Backup Image', + self::IMPORT_IMAGE => 'Import image', + self::EXPORT_IMAGE => 'Export image', self::POWER_ON => 'Encender', self::REBOOT => 'Reiniciar', self::SHUTDOWN => 'Apagar', diff --git a/src/Service/Utils/SimplifyOgLiveFilenameService.php b/src/Service/Utils/SimplifyOgLiveFilenameService.php new file mode 100644 index 0000000..2ac5d0c --- /dev/null +++ b/src/Service/Utils/SimplifyOgLiveFilenameService.php @@ -0,0 +1,28 @@ + Date: Wed, 19 Mar 2025 16:04:55 +0100 Subject: [PATCH 17/19] Updated ogrepo sync funcionality --- src/Controller/OgRepository/SyncAction.php | 23 +++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/Controller/OgRepository/SyncAction.php b/src/Controller/OgRepository/SyncAction.php index 10ff6b9..f4fd765 100644 --- a/src/Controller/OgRepository/SyncAction.php +++ b/src/Controller/OgRepository/SyncAction.php @@ -25,14 +25,24 @@ class SyncAction extends AbstractOgRepositoryController */ public function __invoke(ImageRepository $input): JsonResponse { - $content = $this->createRequest('GET', 'http://'.$input->getIp(). ':8006/ogrepository/v1/images'); + $content = $this->createRequest('GET', 'http://' . $input->getIp() . ':8006/ogrepository/v1/images'); if (!isset($content['output']['REPOSITORY']['images'])) { return new JsonResponse(data: 'No images found', status: Response::HTTP_NOT_FOUND); } + $repository = $this->entityManager->getRepository(ImageImageRepository::class); + + $existingImages = $repository->findBy(['repository' => $input]); + + $newImageFullsums = array_column($content['output']['REPOSITORY']['images'], 'fullsum'); + foreach ($content['output']['REPOSITORY']['images'] as $image) { - $imageImageRepositoryEntity = $this->entityManager->getRepository(ImageImageRepository::class)->findOneBy(['imageFullsum' => $image['fullsum'], 'repository' => $input]); + $imageImageRepositoryEntity = $repository->findOneBy([ + 'imageFullsum' => $image['fullsum'], + 'repository' => $input + ]); + $imageEntity = $this->entityManager->getRepository(Image::class)->findOneBy(['name' => $image['name']]); if (!$imageEntity) { @@ -53,10 +63,17 @@ class SyncAction extends AbstractOgRepositoryController $this->entityManager->persist($imageImageRepositoryEntity); } - } + + foreach ($existingImages as $existingImage) { + if (!in_array($existingImage->getImageFullsum(), $newImageFullsums)) { + $this->entityManager->remove($existingImage); + } + } + $this->entityManager->flush(); return new JsonResponse(data: $content, status: Response::HTTP_OK); } + } \ No newline at end of file From a06a0998f969f154267710c5aa6d3159aa504df9 Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Wed, 19 Mar 2025 16:49:31 +0100 Subject: [PATCH 18/19] Updated ogrepo sync funcionality --- .../OgRepository/Image/ConvertImageToVirtualAction.php | 5 +++-- src/Controller/OgRepository/Webhook/ResponseController.php | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Controller/OgRepository/Image/ConvertImageToVirtualAction.php b/src/Controller/OgRepository/Image/ConvertImageToVirtualAction.php index 898e67f..cf3545c 100644 --- a/src/Controller/OgRepository/Image/ConvertImageToVirtualAction.php +++ b/src/Controller/OgRepository/Image/ConvertImageToVirtualAction.php @@ -4,6 +4,7 @@ namespace App\Controller\OgRepository\Image; use App\Controller\OgRepository\AbstractOgRepositoryController; use App\Dto\Input\BackupImageInput; +use App\Dto\Input\ConvertImageToVirtualInput; use App\Entity\ImageImageRepository; use App\Model\CommandTypes; use App\Model\ImageStatus; @@ -26,7 +27,7 @@ class ConvertImageToVirtualAction extends AbstractOgRepositoryController * @throws RedirectionExceptionInterface * @throws ClientExceptionInterface */ - public function __invoke(ConvertImageToVirtualAction $input, ImageImageRepository $imageImageRepository): JsonResponse + public function __invoke(ConvertImageToVirtualInput $input, ImageImageRepository $imageImageRepository): JsonResponse { $image = $imageImageRepository->getImage(); @@ -37,7 +38,7 @@ class ConvertImageToVirtualAction extends AbstractOgRepositoryController $params = [ 'json' => [ 'ID_img' => $imageImageRepository->getImageFullsum(), - 'vm_extension' => 'opengnsys' + 'vm_extension' => $input->extension, ] ]; diff --git a/src/Controller/OgRepository/Webhook/ResponseController.php b/src/Controller/OgRepository/Webhook/ResponseController.php index fd56f3a..b4900f7 100644 --- a/src/Controller/OgRepository/Webhook/ResponseController.php +++ b/src/Controller/OgRepository/Webhook/ResponseController.php @@ -37,7 +37,8 @@ class ResponseController extends AbstractOgRepositoryController str_starts_with($action, "CreateAuxiliarFiles_") => $this->handleImageRepositoryAction($data, true), str_starts_with($action, "TransferImage_"), str_starts_with($action, "ExportImage_") => $this->processImageAction($data), str_starts_with($action, "BackupImage_") => $this->handleImageRepositoryAction($data), - str_starts_with($action, "ConvertImage_") => $this->handleImageRepositoryAction($data), + str_starts_with($action, "ConvertImageToVirtual") => $this->handleImageRepositoryAction($data), + str_starts_with($action, "ConvertImageFromVirtual") => $this->handleImageRepositoryAction($data), default => $this->jsonResponseError('Invalid action', Response::HTTP_BAD_REQUEST), }; } From 84d757415cab21897612de874d07cb9ba07cac42 Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Wed, 26 Mar 2025 06:41:20 +0100 Subject: [PATCH 19/19] Added changelog --- CHANGELOG.md | 27 ++++++++++++++----- ...troller.php => AgentSessionController.php} | 2 +- 2 files changed, 21 insertions(+), 8 deletions(-) rename src/Controller/OgAgent/Webhook/{OgAgentController.php => AgentSessionController.php} (98%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0258bd7..f634b22 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,26 +1,38 @@ # Changelog +## [0.10.0] - 2025-03-25 +### Added +- Nuevo endpoint ogRepository. Convertir imagen en imagen virtual. +- Nuevo endpoint ogRepository. Importar imágenes externas al sistema. +- Nuevo método para desplegar imagenes sin cache. + +--- ## [0.9.5] - 2025-03-19 ### Added - Jenkinsfile updated to publish in repo +--- ## [0.9.4] - 2025-03-17 ### Fixed - Mercure service behind nginx server for containers, expose port in docker compose for nginx +--- ## [0.9.3] - 2025-03-17 ### Fixed - Mercure service behind nginx server for containers +--- ## [0.9.2] - 2025-03-12 ### Fixed - Added mercure service in docker compose file for deployments. +--- ## [0.9.1] - 2025-03-12 -### 🐛 Fixed +### Fixed - Corrección en la cancelacion de transmisiones p2p. +--- ## [0.9.0] - 2025-03-04 -### 🔹 Added +### Added - Nueva funcionalidad para tener notificaciones en tiempo real. Instalación de bundle "Mercure". - Creacion de EventListener en Symfony, para publicar mensajes en Mercure, cuando se realicen cambios en la base de datos ( cambio de estado en lo equipos, y trazas). - Nuevo endpoint "backup image". Integracion con ogRepository. @@ -30,24 +42,24 @@ - Nueva funcionalidad para cancelar despliegues de imagenes. - Añadido nuevo campo "cancelado" en trazas. -### ⚡ Changed +### Changed - Cambios en logs. Cambios en salida (stderror -> file.log) - Modulo DHCP. Añadir equipos, ahora se gestiona con una unica llamada a la API. - Acciones masivas en equipos. Se ha cambiado la respuesta para que no fallen las peticiones si uno o mas equipos no da respuesta. --- ## [0.8.1] - 2025-02-25 -### 🐛 Fixed +### Fixed - Corrección de bug en el deploy de imágenes --- ## [0.8.0] - 2025-01-10 -### 🔹 Added +### Added - Nuevos campos en "aulas" para la jerarquia en clientes. - Nueva funcionalidad "imagen global". Integracion con ogRepository. -### ⚡ Changed +### Changed - Limpieza en campos "name" y "date" de ogLive. Es necesario parsear el campo "filename" para facilitar el uso al usuario en la web. ### 🐛 Fixed - Corrección de bug que impedia borrar un cliente si tenia una traza enlazada. @@ -55,7 +67,7 @@ ## [0.7.3] - 2025-01-03 -### 🔹 Added +### Added - Adaptados cambios en los endpoints para multiseleccion de clientes. - Se agregó la funcionalidad de importar/exportar. Integración con ogRepository. - Se agregó la funcionalidad de borrar imágenes. Integración con ogRepository. @@ -70,4 +82,5 @@ - **Added**: Secciones con nuevas características. - **Fixed**: Corrección de errores y bugs. - **Changed**: Modificaciones o mejoras en funcionalidades existentes. +- **Improved**: Mejoras en funcionalidades existentes. - **Removed**: Funcionalidades o dependencias eliminadas. diff --git a/src/Controller/OgAgent/Webhook/OgAgentController.php b/src/Controller/OgAgent/Webhook/AgentSessionController.php similarity index 98% rename from src/Controller/OgAgent/Webhook/OgAgentController.php rename to src/Controller/OgAgent/Webhook/AgentSessionController.php index dfa8b04..67d6a6e 100644 --- a/src/Controller/OgAgent/Webhook/OgAgentController.php +++ b/src/Controller/OgAgent/Webhook/AgentSessionController.php @@ -15,7 +15,7 @@ use Symfony\Component\HttpKernel\Attribute\AsController; use Symfony\Component\Routing\Annotation\Route; #[AsController] -class OgAgentController extends AbstractController +class AgentSessionController extends AbstractController { public function __construct( protected readonly EntityManagerInterface $entityManager