Skip to content

Commit 7863110

Browse files
authored
Use MediaWikiHostResolver in all Jobs and Commands (#988)
* remove obsolete apiUrl assignment * refactor MediawikiInit Job * refactor MediawikiSandboxLoadData * refactor CirrusSearchJob * refactor SiteStatsUpdateJob * Revert "remove obsolete apiUrl assignment" This reverts commit f8635db. * refactor PageFetcher and its uses * refactor PollForMediaWikiJobsJob * refactor WikiEntityImportJob * refactor UpdateWikiSiteStatsJob * fix copypasta * add Wiki::getBackendHost * use Wiki::getBackendHost in UpdateWikiSiteStatsJob * refactor CirrusSearchJob * update SiteStatsUpdateJob * attempt to fix wikiEntityImportJob * remove Wiki::getBackendHost() * typo * add function keyword * add ; * remove ; * fix MediawikiInitTest * CirrusSearchJob fix resolver access * wikiEntityImportJob: fix mwHostResolver access in static method * refactor class creation * add mock resoler to ElasticSearchIndexInitTest * mock resolver in ForceSearchIndexTest * mock resolver in QueueSearchIndexBatchesTest * fix PollForMediaWikiJobsJob * fix SiteStatsUpdateJobTest * streamline tests * streamline naming * fix PageFetcher * cleanup * fix UpdateWikiSiteStatsJob * fix WikiEntityImportJob * undo refactoring * fix PlatformStatsSummaryJob * fix RebuildQueryserviceData * run pint fix * remove changes from #994 * linting * clean up usages of PLATFORM_MW_BACKEND_HOST in tests * fix rebase * fix rebase part 2
1 parent 3850315 commit 7863110

20 files changed

Lines changed: 228 additions & 84 deletions

app/Console/Commands/RebuildQueryserviceData.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use App\Constants\MediawikiNamespace;
66
use App\Jobs\SpawnQueryserviceUpdaterJob;
77
use App\QueryserviceNamespace;
8+
use App\Services\MediaWikiHostResolver;
89
use App\Traits;
910
use App\Wiki;
1011
use App\WikiSetting;
@@ -25,11 +26,10 @@ class RebuildQueryserviceData extends Command {
2526

2627
protected string $queueName;
2728

28-
public function handle() {
29+
public function handle(MediaWikiHostResolver $mwHostResolver) {
2930
$this->chunkSize = intval($this->option('chunkSize'));
3031
$this->sparqlUrlFormat = $this->option('sparqlUrlFormat');
3132
$this->queueName = $this->option('queueName');
32-
$this->apiUrl = getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php';
3333

3434
$wikiDomains = $this->option('domain');
3535
$exitCode = 0;
@@ -42,6 +42,8 @@ public function handle() {
4242
$skippedWikis = 0;
4343
$processedWikis = 0;
4444
foreach ($wikis as $wiki) {
45+
$this->apiUrl = $mwHostResolver->getBackendHostForDomain($wiki->domain) . '/w/api.php'; // used in PageFetcher::fetchPagesInNamespace
46+
4547
try {
4648
$entities = $this->getEntitiesForWiki($wiki);
4749
$sparqlUrl = $this->getSparqlUrl($wiki);

app/Jobs/CirrusSearch/CirrusSearchJob.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use App\Http\Curl\HttpRequest;
66
use App\Jobs\Job;
7+
use App\Services\MediaWikiHostResolver;
78
use App\Wiki;
89
use App\WikiSetting;
910
use Illuminate\Contracts\Queue\ShouldBeUnique;
@@ -41,7 +42,7 @@ public function wikiId(): int {
4142
/**
4243
* @return void
4344
*/
44-
public function handle(HttpRequest $request) {
45+
public function handle(HttpRequest $request, MediaWikiHostResolver $mwHostResolver) {
4546
$this->wiki = Wiki::whereId($this->wikiId)->with('settings')->with('wikiDb')->first();
4647

4748
// job got triggered but no wiki
@@ -69,7 +70,7 @@ public function handle(HttpRequest $request) {
6970

7071
$request->setOptions(
7172
[
72-
CURLOPT_URL => getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php?action=' . $this->apiModule() . $this->getQueryParams(),
73+
CURLOPT_URL => $mwHostResolver->getBackendHostForDomain($this->wiki->domain) . '/w/api.php?action=' . $this->apiModule() . $this->getQueryParams(),
7374
CURLOPT_RETURNTRANSFER => true,
7475
CURLOPT_ENCODING => '',
7576
CURLOPT_TIMEOUT => $this->getRequestTimeout(),

app/Jobs/MediawikiInit.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace App\Jobs;
44

55
use App\Http\Curl\HttpRequest;
6+
use App\Services\MediaWikiHostResolver;
67

78
class MediawikiInit extends Job {
89
private $wikiDomain;
@@ -23,14 +24,14 @@ public function __construct($wikiDomain, $username, $email) {
2324
/**
2425
* @return void
2526
*/
26-
public function handle(HttpRequest $request) {
27+
public function handle(HttpRequest $request, MediaWikiHostResolver $mwHostResolver) {
2728
$data = [
2829
'username' => $this->username,
2930
'email' => $this->email,
3031
];
3132

3233
$request->setOptions([
33-
CURLOPT_URL => getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php?action=wbstackInit&format=json',
34+
CURLOPT_URL => $mwHostResolver->getBackendHostForDomain($this->wikiDomain) . '/w/api.php?action=wbstackInit&format=json',
3435
CURLOPT_RETURNTRANSFER => true,
3536
CURLOPT_ENCODING => '',
3637
CURLOPT_TIMEOUT => 60,

app/Jobs/MediawikiSandboxLoadData.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace App\Jobs;
44

5+
use App\Services\MediaWikiHostResolver;
6+
57
class MediawikiSandboxLoadData extends Job {
68
private $wikiDomain;
79

@@ -18,14 +20,14 @@ public function __construct($wikiDomain, $dataSet) {
1820
/**
1921
* @return void
2022
*/
21-
public function handle() {
23+
public function handle(MediaWikiHostResolver $mwHostResolver) {
2224
$data = [
2325
'dataSet' => $this->dataSet,
2426
];
2527

2628
$curl = curl_init();
2729
curl_setopt_array($curl, [
28-
CURLOPT_URL => getenv('PLATFORM_MW_BACKEND_HOST') . '/w/rest.php/wikibase-exampledata/v0/load',
30+
CURLOPT_URL => $mwHostResolver->getBackendHostForDomain($this->wikiDomain) . '/w/rest.php/wikibase-exampledata/v0/load',
2931
CURLOPT_RETURNTRANSFER => true,
3032
CURLOPT_ENCODING => '',
3133
CURLOPT_TIMEOUT => 10 * 60, // TODO Long 10 mins (probably shouldn't keep the request open...)

app/Jobs/PlatformStatsSummaryJob.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use App\Constants\MediawikiNamespace;
66
use App\Helper\MWTimestampHelper;
7+
use App\Services\MediaWikiHostResolver;
78
use App\Traits;
89
use App\User;
910
use App\Wiki;
@@ -39,10 +40,11 @@ class PlatformStatsSummaryJob extends Job {
3940

4041
private $platformSummaryStatsVersion = 'v1';
4142

43+
private MediaWikiHostResolver $mwHostResolver;
44+
4245
public function __construct() {
4346
$this->inactiveThreshold = Config::get('wbstack.platform_summary_inactive_threshold');
4447
$this->creationRateRanges = Config::get('wbstack.platform_summary_creation_rate_ranges');
45-
$this->apiUrl = getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php';
4648
}
4749

4850
private function isNullOrEmpty($value): bool {
@@ -77,6 +79,7 @@ public function prepareStats(array $allStats, $wikis): array {
7779
$currentTime = CarbonImmutable::now();
7880

7981
foreach ($wikis as $wiki) {
82+
$this->apiUrl = $this->mwHostResolver->getBackendHostForDomain($wiki->domain) . '/w/api.php'; // used in PageFetcher::fetchPagesInNamespace
8083

8184
if (!is_null($wiki->deleted_at)) {
8285
$deletedWikis[] = $wiki;
@@ -164,7 +167,8 @@ public function prepareStats(array $allStats, $wikis): array {
164167
];
165168
}
166169

167-
public function handle(DatabaseManager $manager): void {
170+
public function handle(DatabaseManager $manager, MediaWikiHostResolver $mwHostResolver): void {
171+
$this->mwHostResolver = $mwHostResolver;
168172
$wikis = Wiki::withTrashed()->with('wikidb')->get();
169173

170174
$conn = $manager->connection('mysql');

app/Jobs/PollForMediaWikiJobsJob.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,20 @@
22

33
namespace App\Jobs;
44

5+
use App\Services\MediaWikiHostResolver;
56
use App\Wiki;
67
use Illuminate\Contracts\Queue\ShouldBeUnique;
78
use Illuminate\Contracts\Queue\ShouldQueue;
89
use Illuminate\Support\Facades\Http;
910
use Illuminate\Support\Facades\Log;
1011

1112
class PollForMediaWikiJobsJob extends Job implements ShouldBeUnique, ShouldQueue {
13+
private MediaWikiHostResolver $mwHostResolver;
14+
1215
public $timeout = 1800;
1316

14-
public function handle(): void {
17+
public function handle(MediaWikiHostResolver $mwHostResolver): void {
18+
$this->mwHostResolver = $mwHostResolver;
1519
$allWikiDomains = Wiki::all()->pluck('domain');
1620
foreach ($allWikiDomains as $wikiDomain) {
1721
if ($this->hasPendingJobs($wikiDomain)) {
@@ -24,7 +28,7 @@ private function hasPendingJobs(string $wikiDomain): bool {
2428
$response = Http::withHeaders([
2529
'host' => $wikiDomain,
2630
])->get(
27-
getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php?action=query&meta=siteinfo&siprop=statistics&format=json'
31+
$this->mwHostResolver->getBackendHostForDomain($wikiDomain) . '/w/api.php?action=query&meta=siteinfo&siprop=statistics&format=json'
2832
);
2933

3034
if ($response->failed()) {

app/Jobs/SiteStatsUpdateJob.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace App\Jobs;
44

55
use App\Http\Curl\HttpRequest;
6+
use App\Services\MediaWikiHostResolver;
67
use App\Wiki;
78
use Illuminate\Bus\Batchable;
89
use Illuminate\Support\Facades\Log;
@@ -22,18 +23,18 @@ public function __construct($wiki_id) {
2223
$this->wiki_id = $wiki_id;
2324
}
2425

25-
public function handle(HttpRequest $request): void {
26+
public function handle(HttpRequest $request, MediaWikiHostResolver $mwHostResolver): void {
2627
$timeStart = microtime(true);
2728

2829
$wiki = Wiki::where('id', $this->wiki_id)->first();
2930
if (!$wiki) {
3031
$this->fail(new \RuntimeException(" Could not find wiki with id: $this->wiki_id"));
3132
}
3233

33-
Log::info(__METHOD__ . ": Updating stats for or $wiki->domain");
34+
Log::info(__METHOD__ . ": Updating stats for $wiki->domain");
3435

3536
$request->setOptions([
36-
CURLOPT_URL => getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php?action=wbstackSiteStatsUpdate&format=json',
37+
CURLOPT_URL => $mwHostResolver->getBackendHostForDomain($wiki->domain) . '/w/api.php?action=wbstackSiteStatsUpdate&format=json',
3738
CURLOPT_RETURNTRANSFER => true,
3839
CURLOPT_ENCODING => '',
3940
CURLOPT_TIMEOUT => 60 * 5,

app/Jobs/UpdateWikiSiteStatsJob.php

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace App\Jobs;
44

5+
use App\Services\MediaWikiHostResolver;
56
use App\Wiki;
67
use App\WikiSiteStats;
78
use Carbon\Carbon;
@@ -17,7 +18,11 @@ class UpdateWikiSiteStatsJob extends Job implements ShouldBeUnique {
1718

1819
public $timeout = 3600;
1920

20-
public function handle(): void {
21+
private MediaWikiHostResolver $mwHostResolver;
22+
23+
public function handle(MediaWikiHostResolver $mwHostResolver): void {
24+
$this->mwHostResolver = $mwHostResolver;
25+
2126
$allWikis = Wiki::all();
2227
foreach ($allWikis as $wiki) {
2328
try {
@@ -54,7 +59,7 @@ private function updateSiteStats(Wiki $wiki): void {
5459
$response = Http::withHeaders([
5560
'host' => $wiki->getAttribute('domain'),
5661
])->get(
57-
getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php?action=query&meta=siteinfo&siprop=statistics&format=json'
62+
$this->mwHostResolver->getBackendHostForDomain($wiki->domain) . '/w/api.php?action=query&meta=siteinfo&siprop=statistics&format=json'
5863
);
5964

6065
if ($response->failed()) {
@@ -76,7 +81,7 @@ private function updateSiteStats(Wiki $wiki): void {
7681

7782
private function getFirstEditedDate(Wiki $wiki): ?CarbonInterface {
7883
$allRevisions = Http::withHeaders(['host' => $wiki->getAttribute('domain')])->get(
79-
getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php',
84+
$this->mwHostResolver->getBackendHostForDomain($wiki->domain) . '/w/api.php',
8085
[
8186
'action' => 'query',
8287
'format' => 'json',
@@ -94,7 +99,7 @@ private function getFirstEditedDate(Wiki $wiki): ?CarbonInterface {
9499
}
95100

96101
$revisionInfo = Http::withHeaders(['host' => $wiki->getAttribute('domain')])->get(
97-
getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php',
102+
$this->mwHostResolver->getBackendHostForDomain($wiki->domain) . '/w/api.php',
98103
[
99104
'action' => 'query',
100105
'format' => 'json',
@@ -114,7 +119,7 @@ private function getFirstEditedDate(Wiki $wiki): ?CarbonInterface {
114119

115120
private function getLastEditedDate(Wiki $wiki): ?CarbonInterface {
116121
$allRevisions = Http::withHeaders(['host' => $wiki->getAttribute('domain')])->get(
117-
getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php',
122+
$this->mwHostResolver->getBackendHostForDomain($wiki->domain) . '/w/api.php',
118123
[
119124
'action' => 'query',
120125
'format' => 'json',
@@ -132,7 +137,7 @@ private function getLastEditedDate(Wiki $wiki): ?CarbonInterface {
132137
}
133138

134139
$revisionInfo = Http::withHeaders(['host' => $wiki->getAttribute('domain')])->get(
135-
getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php',
140+
$this->mwHostResolver->getBackendHostForDomain($wiki->domain) . '/w/api.php',
136141
[
137142
'action' => 'query',
138143
'format' => 'json',

app/Jobs/WikiEntityImportJob.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace App\Jobs;
44

5+
use App\Services\MediaWikiHostResolver;
56
use App\Wiki;
67
use App\WikiEntityImport;
78
use App\WikiEntityImportStatus;
@@ -27,20 +28,20 @@ public function __construct(
2728
public int $wikiId,
2829
public string $sourceWikiUrl,
2930
public array $entityIds,
30-
public int $importId,
31+
public int $importId
3132
) {}
3233

3334
private string $targetWikiUrl;
3435

3536
/**
3637
* Execute the job.
3738
*/
38-
public function handle(Client $kubernetesClient): void {
39+
public function handle(Client $kubernetesClient, MediaWikiHostResolver $mwHostResolver): void {
3940
$import = null;
4041
try {
4142
$wiki = Wiki::findOrFail($this->wikiId);
4243
$import = WikiEntityImport::findOrFail($this->importId);
43-
$creds = $this->acquireCredentials($wiki->domain);
44+
$creds = $this->acquireCredentials($wiki->domain, $mwHostResolver);
4445

4546
$this->targetWikiUrl = $this->domainToOrigin($wiki->domain);
4647

@@ -77,9 +78,9 @@ private static function domainToOrigin(string $domain): string {
7778
: 'https://' . $domain;
7879
}
7980

80-
private static function acquireCredentials(string $wikiDomain): OAuthCredentials {
81+
private static function acquireCredentials(string $wikiDomain, MediaWikiHostResolver $mwHostResolver): OAuthCredentials {
8182
$response = Http::withHeaders(['host' => $wikiDomain])->asForm()->post(
82-
getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php?action=wbstackPlatformOauthGet&format=json',
83+
$mwHostResolver->getBackendHostForDomain($wikiDomain) . '/w/api.php?action=wbstackPlatformOauthGet&format=json',
8384
[
8485
'consumerName' => 'WikiEntityImportJob',
8586
'ownerOnly' => '1',

phpunit.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
<env name="APP_ENV" value="testing"/>
1010
<env name="CACHE_DRIVER" value="array"/>
1111
<env name="QUEUE_CONNECTION" value="sync"/>
12-
<env name="PLATFORM_MW_BACKEND_HOST" value="mediawiki-139-app-backend.default.svc.cluster.default"/>
1312
<env name="WBSTACK_SUMMARY_CREATION_RATE_RANGES" value="PT24H,P30D"/>
1413
</php>
1514
<source>

0 commit comments

Comments
 (0)