/** * {@inheritdoc} */ public function supports(JobExecution $jobExecution) { foreach ($jobExecution->getJobInstance()->getJob()->getSteps() as $step) { if ($step instanceof ItemStep && $this->isUsableWriter($step->getWriter())) { return true; } } return false; }
function it_returns_false_for_the_unsupported_job(ItemReaderInterface $reader, JobExecution $jobExecution, JobInstance $jobInstance, Job $job, ItemStep $step) { $jobExecution->getJobInstance()->willReturn($jobInstance); $jobExecution->getId()->willReturn(12); $jobInstance->getJob()->willReturn($job); $jobInstance->getType()->willReturn('type'); $jobInstance->getAlias()->willReturn('alias'); $job->getSteps()->willReturn([$step]); $step->getReader()->willReturn($reader); $this->supports($jobExecution)->shouldReturn(false); }
/** * {@inheritdoc} */ public function updateJobExecution(JobExecution $jobExecution) { $uow = $this->getJobManager()->getUnitOfWork(); $jobInstance = $jobExecution->getJobInstance(); if ($jobInstance && UnitOfWork::STATE_DETACHED === $uow->getEntityState($jobInstance)) { /** @var JobInstance $jobInstance */ $jobInstance = $uow->merge($jobInstance); $jobExecution->setJobInstance($jobInstance); } parent::updateJobExecution($jobExecution); }
function let(NotificationManager $manager, JobExecutionEvent $event, JobExecution $jobExecution, StepExecution $stepExecution, ArrayCollection $warnings, JobInstance $jobInstance, UserInterface $user, BatchStatus $status) { $this->beConstructedWith($manager); $jobExecution->getUser()->willReturn($user); $jobExecution->getStepExecutions()->willReturn([$stepExecution]); $jobExecution->getStatus()->willReturn($status); $jobExecution->getJobInstance()->willReturn($jobInstance); $stepExecution->getWarnings()->willReturn($warnings); $jobExecution->getId()->willReturn(5); $jobInstance->getType()->willReturn('export'); $jobInstance->getLabel()->willReturn('Foo export'); $event->getJobExecution()->willReturn($jobExecution); }
/** * Archive files used by job execution (input / output) * * @param JobExecution $jobExecution */ public function archive(JobExecution $jobExecution) { foreach ($jobExecution->getJobInstance()->getJob()->getSteps() as $step) { if (!$step instanceof ItemStep) { continue; } $reader = $step->getReader(); if ($reader instanceof FileIteratorReader) { $key = strtr($this->getRelativeArchivePath($jobExecution), ['%filename%' => basename($reader->getFilePath())]); $this->filesystem->put($key, file_get_contents($reader->getFilePath())); } } }
function it_archives_unvalid_items(InvalidItemsCollector $collector, CsvWriter $writer, JobExecution $jobExecution, JobInstance $jobInstance, Filesystem $filesystem) { $collector->getInvalidItems()->willReturn(['items']); $jobExecution->getId()->willReturn('id'); $jobExecution->getJobInstance()->willReturn($jobInstance); $jobInstance->getType()->willReturn('type'); $jobInstance->getAlias()->willReturn('alias'); $filesystem->put('type/alias/id/invalid/invalid_items.csv', '')->shouldBeCalled(); $writer->setFilePath('/tmp/archivist/type/alias/id/invalid/invalid_items.csv')->shouldBeCalled(); $writer->initialize()->shouldBeCalled(); $writer->write(['items'])->shouldBeCalled(); $writer->flush()->shouldBeCalled(); $this->archive($jobExecution); }
/** * {@inheritdoc} */ public function archive(JobExecution $jobExecution) { foreach ($jobExecution->getJobInstance()->getJob()->getSteps() as $step) { if (!$step instanceof ItemStep) { continue; } $writer = $step->getWriter(); if ($writer instanceof FileWriter && $writer instanceof ArchivableWriterInterface && count($writer->getWrittenFiles()) > 1) { $filesystem = $this->getZipFilesystem($jobExecution, sprintf('%s.zip', pathinfo($writer->getPath(), PATHINFO_FILENAME))); foreach ($writer->getWrittenFiles() as $fullPath => $localPath) { $filesystem->write($localPath, file_get_contents($fullPath), true); } } } }
/** * Archive files used by job execution (input / output) * * @param JobExecution $jobExecution */ public function archive(JobExecution $jobExecution) { foreach ($jobExecution->getJobInstance()->getJob()->getSteps() as $step) { if (!$step instanceof ItemStep) { continue; } $writer = $step->getWriter(); if ($writer instanceof ArchivableWriterInterface && count($writer->getWrittenFiles()) > 1) { continue; } if ($writer instanceof FileWriter && is_file($path = $writer->getPath())) { $key = strtr($this->getRelativeArchivePath($jobExecution), array('%filename%' => basename($writer->getPath()))); $this->filesystem->write($key, file_get_contents($path), true); } } }
function it_creates_a_file_if_writer_is_correct(CsvWriter $writer, JobExecution $jobExecution, JobInstance $jobInstance, Job $job, ItemStep $step, $factory, $filesystem) { $jobExecution->getJobInstance()->willReturn($jobInstance); $jobExecution->getId()->willReturn(12); $jobInstance->getJob()->willReturn($job); $jobInstance->getType()->willReturn('type'); $jobInstance->getAlias()->willReturn('alias'); $job->getSteps()->willReturn([$step]); $step->getWriter()->willReturn($writer); $writer->getWrittenFiles()->willReturn(['/tmp/tmp' => 'tmp', '/tmp/tmp2' => 'tmp2']); $writer->getPath()->willReturn('/tmp/tmp'); $adapter = new LocalAdapter('/tmp'); $fs = new Filesystem($adapter); $fs->write('tmp', '', true); $fs->write('tmp2', '', true); $factory->createZip(Argument::any())->willReturn($filesystem); $filesystem->write('tmp', '', true)->shouldBeCalled(); $filesystem->write('tmp2', '', true)->shouldBeCalled(); $this->archive($jobExecution); }
function it_creates_a_file_if_writer_is_correct(CsvWriter $writer, JobExecution $jobExecution, JobInstance $jobInstance, Job $job, ItemStep $step, $factory, $filesystem) { $file1 = tempnam(sys_get_temp_dir(), 'spec'); $file2 = tempnam(sys_get_temp_dir(), 'spec'); $jobExecution->getJobInstance()->willReturn($jobInstance); $jobExecution->getId()->willReturn(12); $jobInstance->getJob()->willReturn($job); $jobInstance->getType()->willReturn('type'); $jobInstance->getAlias()->willReturn('alias'); $job->getSteps()->willReturn([$step]); $step->getWriter()->willReturn($writer); $writer->getWrittenFiles()->willReturn([$file1 => 'file1', $file2 => 'file2']); $writer->getPath()->willReturn(sys_get_temp_dir()); $filesystem->has('type/alias/12/archive')->willReturn(false); $filesystem->createDir('type/alias/12/archive')->shouldBeCalled(); $factory->createZip(Argument::any())->willReturn($filesystem); $filesystem->put('file1', '')->shouldBeCalled(); $filesystem->put('file2', '')->shouldBeCalled(); $this->archive($jobExecution); unlink($file1); unlink($file2); }
/** * @param JobExecution $jobExecution * @param string|UserInterface $user * @param string $type * @param string $status */ protected function generateMassEditNotify(JobExecution $jobExecution, $user, $type, $status) { $this->manager->notify([$user], sprintf('pim_mass_edit.notification.%s.%s', $type, $status), $status, ['route' => 'pim_enrich_job_tracker_show', 'routeParams' => ['id' => $jobExecution->getId()], 'messageParams' => ['%label%' => $jobExecution->getJobInstance()->getLabel()]]); }
/** * Get the relative archive path in the file system * * @param JobExecution $jobExecution * * @return string */ protected function getRelativeArchivePath(JobExecution $jobExecution) { $jobInstance = $jobExecution->getJobInstance(); return sprintf('%s/%s/%s/%s/%%filename%%', $jobInstance->getType(), $jobInstance->getAlias(), $jobExecution->getId(), $this->getName()); }
/** * Get the relative archive path in the file system * * @param JobExecution $jobExecution * * @return string */ protected function getRelativeArchivePath(JobExecution $jobExecution) { $jobInstance = $jobExecution->getJobInstance(); return $jobInstance->getType() . DIRECTORY_SEPARATOR . $jobInstance->getAlias() . DIRECTORY_SEPARATOR . $jobExecution->getId() . DIRECTORY_SEPARATOR . $this->getName() . DIRECTORY_SEPARATOR . '%filename%'; }
/** * {@inheritDoc} */ public function getJobInstance() { $this->__initializer__ && $this->__initializer__->__invoke($this, 'getJobInstance', array()); return parent::getJobInstance(); }