19use Psr\Log\LoggerInterface;
27 private LoggerInterface $logger;
31 private ParsoidSiteConfig $parsoidSiteConfig;
45 ParsoidSiteConfig $parsoidSiteConfig
47 parent::__construct(
'parsoidCachePrewarm',
$params );
50 $this->logger = LoggerFactory::getInstance(
'ParsoidCachePrewarmJob' );
51 $this->parserOutputAccess = $parserOutputAccess;
52 $this->pageLookup = $pageLookup;
53 $this->revisionLookup = $revisionLookup;
54 $this->parsoidSiteConfig = $parsoidSiteConfig;
73 $pageId = $page->getId();
79 "parsoidCachePrewarm:$pageId:$revisionId:$pageTouched:{$params['options']}"
82 $opts = [
'removeDuplicates' => true ];
85 'parsoidCachePrewarm',
87 'revId' => $revisionId,
89 'page_touched' => $pageTouched,
95 private function doParsoidCacheUpdate() {
96 $page = $this->pageLookup->getPageById( $this->params[
'pageId'] );
97 $revId = $this->params[
'revId'];
99 if ( $page ===
null ) {
101 $this->logger->info(
"Page with ID {$this->params['pageId']} not found" );
107 'ParsoidCachePrewarmJob: The ID of the new revision does not match the page\'s current revision ID'
112 $rev = $this->revisionLookup->getRevisionById( $revId );
117 $parserOpts = ParserOptions::newFromAnon();
118 $parserOpts->setUseParsoid();
120 $renderReason = $this->params[
'causeAction'] ?? $this->command;
121 $parserOpts->setRenderReason( $renderReason );
123 $mainSlot = $rev->getSlot( SlotRecord::MAIN );
124 if ( !$this->parsoidSiteConfig->supportsContentModel( $mainSlot->getModel() ) ) {
125 $this->logger->debug( __METHOD__ .
': Parsoid does not support content model ' . $mainSlot->getModel() );
129 $this->logger->debug( __METHOD__ .
': generating Parsoid output' );
132 $options = $this->params[
'options'] ?? 0;
135 $status = $this->parserOutputAccess->getParserOutput(
142 if ( !$status->isOK() ) {
143 $this->logger->error( __METHOD__ .
': Parsoid error', [
144 'errors' => $status->getErrors(),
146 'rev' => $rev->getId(),
153 $this->doParsoidCacheUpdate();
160class_alias( ParsoidCachePrewarmJob::class,
'ParsoidCachePrewarmJob' );
Service for getting rendered output of a given page.
Service for looking up information about wiki pages.
getDBkey()
Get the page title in DB key form.