repository = $repository; $this->kernel = $kernel; $this->params = $params; parent::__construct(); } protected function configure() { $this ->setDescription('Show a chart of temperature') ; } protected function execute(InputInterface $input, OutputInterface $output): int { chdir($this->getContainer()->get('kernel')->getProjectDir()); $entities = $this->repository->findByDateRange( new \DateTime('now - 1 day'), new \DateTime('now'), 42, 'DESC' ); $entities = array_reverse($entities); $table = new Table($output); $table->setHeaders(['ID', 'Date', 'Value']); $perfect = (int) $this->params->get('temperature_trigger_max'); $min = (int) $this->params->get('temperature_trigger_min'); $stats = ['Value,Perfect,Min']; $xtics = []; foreach ($entities as $i => $entity) { $stats1[] = $entity->getvalue(); $stats2[] = (float) 27; $stats3[] = (float) $min; if ($i % 5 === 0) { $xtics[] = sprintf('"%s" %d', $entity->getDate()->format('H:i'), $i); } $table->addRow([ $i, $entity->getDate()->format('d/m/Y H:i'), $entity->getValue().'°', ]); } $filename1 = tempnam('./', self::$defaultName); $filename2 = tempnam('./', self::$defaultName); $filename3 = tempnam('./', self::$defaultName); file_put_contents($filename1, implode("\n", $stats1)); file_put_contents($filename2, implode("\n", $stats2)); file_put_contents($filename3, implode("\n", $stats3)); $process = new Process([ './lib/eplot/eplot', '-d', '--xtics', sprintf('(%s)', implode(', ', $xtics)), '-r', '[0:45][10:35]', '-t', 'Perfect@Min@Temperature', '-m', basename($filename2), basename($filename3), basename($filename1), ]); $process->run(); $graph = $process->getOutput(); $output->writeln($graph); $table->render(); unlink($filename1); unlink($filename2); unlink($filename3); return 0; } }