Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 36 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 1 |
Map | |
0.00% |
0 / 36 |
|
0.00% |
0 / 3 |
56 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
pushJob | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
2 | |||
getJobs | |
0.00% |
0 / 32 |
|
0.00% |
0 / 1 |
30 |
1 | <?php |
2 | |
3 | namespace MediaWiki\Extension\MathSearch\Graph; |
4 | |
5 | use JobQueueGroup; |
6 | use MediaWiki\MediaWikiServices; |
7 | use ToolsParser; |
8 | |
9 | class 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 | } |