Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 36
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
Map
0.00% covered (danger)
0.00%
0 / 36
0.00% covered (danger)
0.00%
0 / 3
56
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 pushJob
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 getJobs
0.00% covered (danger)
0.00%
0 / 32
0.00% covered (danger)
0.00%
0 / 1
30
1<?php
2
3namespace MediaWiki\Extension\MathSearch\Graph;
4
5use JobQueueGroup;
6use MediaWiki\MediaWikiServices;
7use ToolsParser;
8
9class Map {
10    private int $batch_size = 100000;
11    private const PAGES_PER_JOB = 100;
12    private JobQueueGroup $jobQueueGroup;
13
14    public function __construct( JobQueueGroup $jobQueueGroup = null ) {
15        $this->jobQueueGroup = $jobQueueGroup ?? MediaWikiServices::getInstance()->getJobQueueGroup();
16    }
17
18    public function pushJob(
19        array $table, int $segment, string $jobType, array $options
20    ): void {
21        $options[ 'rows' ] = $table;
22        $options[ 'segment' ] = $segment;
23        $this->jobQueueGroup->lazyPush( new $jobType( $options ) );
24    }
25
26    public function getJobs(
27        callable $output, int $batch_size, string $type, string $jobType, array $jobOptions = []
28    ): void {
29        $jobOptions[ 'jobname' ] = 'import' . date( 'ymdhms' );
30        $jobOptions[ 'prefix' ] = $type;
31
32        $configFactory =
33            MediaWikiServices::getInstance()->getConfigFactory()->makeConfig( 'wgLinkedWiki' );
34        $configDefault = $configFactory->get( "SPARQLServiceByDefault" );
35        $arrEndpoint = ToolsParser::newEndpoint( $configDefault, null );
36        $sp = $arrEndpoint["endpoint"];
37        $offset = 0;
38        $table = [];
39        $segment = 0;
40        do {
41            $output( 'Read from offset ' . $offset . ".\n" );
42            $query = $jobType == 'load' ?
43                Query::getQueryFromConfig( $type, $offset, $batch_size ) :
44                Query::getQueryFromProfileType( $type, $offset, $batch_size );
45            $rs = $sp->query( $query );
46            if ( !$rs ) {
47                $output( "No results retrieved!\n" );
48                break;
49            } else {
50                $output( "Retrieved " . count( $rs['result']['rows'] ) . " results.\n" );
51            }
52            foreach ( $rs['result']['rows'] as $row ) {
53                $qID = $row['qid'];
54
55                $table[] = $qID;
56                if ( count( $table ) > self::PAGES_PER_JOB ) {
57                    $this->pushJob( $table, $segment, $jobType, $jobOptions );
58                    $output( "Pushed jobs to segment $segment.\n" );
59                    $segment++;
60                    $table = [];
61                }
62            }
63            $offset += $this->batch_size;
64        } while ( count( $rs['result']['rows'] ) == $this->batch_size );
65        $this->pushJob( $table, $segment, $jobType, $jobOptions );
66        $output( "Pushed jobs to last segment $segment.\n" );
67    }
68}