note($this->trans('commands.database.log.poll.messages.warning')); $this->getDefaultOptions($input); $this->duration = $input->getArgument('duration'); $this->pollForEvents($io); } /** * {@inheritdoc} */ protected function configure() { $this ->setName('database:log:poll') ->setDescription($this->trans('commands.database.log.poll.description')); $this->addDefaultLoggingOptions(); $this->addArgument( 'duration', InputArgument::OPTIONAL, $this->trans('commands.database.log.poll.arguments.duration'), '10' ); } /** * @param DrupalStyle $io */ protected function pollForEvents(DrupalStyle $io) { $query = $this->makeQuery($io)->countQuery(); $results = $query->execute()->fetchAssoc(); $count = $results['expression'] - 1;//minus 1 so the newest message always prints $tableHeader = $this->createTableHeader(); //Poll, force no wait on first loop $lastExec = time() - $this->duration; while (1) { if (time() > $lastExec + $this->duration) { //Print out any new db logs $query = $this->makeQuery($io, $count); $results = $query->execute()->fetchAll(); $count += count($results); $tableRows = []; foreach ($results as $r) { $tableRows[] = $this->createTableRow($r); } if (!empty($tableRows)) { $io->table($tableHeader, $tableRows); } //update the last exec time $lastExec = time(); } } } }