Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
0d8a250
remove obsolete apiUrl assignment
deer-wmde Nov 4, 2025
ee34067
refactor MediawikiInit Job
deer-wmde Nov 4, 2025
ab06aaf
refactor MediawikiSandboxLoadData
deer-wmde Nov 4, 2025
335c756
refactor CirrusSearchJob
deer-wmde Nov 4, 2025
76d63be
refactor SiteStatsUpdateJob
deer-wmde Nov 4, 2025
e8d89a1
Revert "remove obsolete apiUrl assignment"
deer-wmde Nov 4, 2025
41e2db2
refactor PageFetcher and its uses
deer-wmde Nov 4, 2025
6a2b370
refactor PollForMediaWikiJobsJob
deer-wmde Nov 4, 2025
e7fa35d
refactor WikiEntityImportJob
deer-wmde Nov 4, 2025
7b21247
refactor UpdateWikiSiteStatsJob
deer-wmde Nov 4, 2025
432d652
fix copypasta
deer-wmde Nov 4, 2025
ad2ac55
add Wiki::getBackendHost
deer-wmde Nov 4, 2025
ced73c8
use Wiki::getBackendHost in UpdateWikiSiteStatsJob
deer-wmde Nov 4, 2025
72ca100
refactor CirrusSearchJob
deer-wmde Nov 4, 2025
a3788e2
update SiteStatsUpdateJob
deer-wmde Nov 4, 2025
4c3765c
attempt to fix wikiEntityImportJob
deer-wmde Nov 4, 2025
b0246ad
remove Wiki::getBackendHost()
deer-wmde Nov 4, 2025
c48b168
typo
deer-wmde Nov 4, 2025
3a6fcc4
add function keyword
deer-wmde Nov 4, 2025
e321fa1
add ;
deer-wmde Nov 4, 2025
e16637b
remove ;
deer-wmde Nov 4, 2025
38f3957
fix MediawikiInitTest
deer-wmde Nov 7, 2025
74cfdda
CirrusSearchJob fix resolver access
deer-wmde Nov 7, 2025
be0bb51
wikiEntityImportJob: fix mwHostResolver access in static method
deer-wmde Nov 7, 2025
978410c
refactor class creation
deer-wmde Nov 7, 2025
ba55629
add mock resoler to ElasticSearchIndexInitTest
deer-wmde Nov 7, 2025
811aaee
mock resolver in ForceSearchIndexTest
deer-wmde Nov 7, 2025
eaecfca
mock resolver in QueueSearchIndexBatchesTest
deer-wmde Nov 7, 2025
3276b12
fix PollForMediaWikiJobsJob
deer-wmde Nov 7, 2025
1ca13ce
fix SiteStatsUpdateJobTest
deer-wmde Nov 7, 2025
66eae8f
streamline tests
deer-wmde Nov 7, 2025
4ced0fa
streamline naming
deer-wmde Nov 7, 2025
66634ca
fix PageFetcher
deer-wmde Nov 7, 2025
40b39c2
cleanup
deer-wmde Nov 7, 2025
aa785c8
fix UpdateWikiSiteStatsJob
deer-wmde Nov 7, 2025
9c60d3c
fix WikiEntityImportJob
deer-wmde Nov 7, 2025
13fa7e4
undo refactoring
deer-wmde Nov 7, 2025
eada312
fix PlatformStatsSummaryJob
deer-wmde Nov 7, 2025
b164a23
fix RebuildQueryserviceData
deer-wmde Nov 7, 2025
90cea35
run pint fix
deer-wmde Nov 7, 2025
2f06fea
remove changes from #994
deer-wmde Nov 7, 2025
e26dbe5
linting
deer-wmde Nov 7, 2025
a694288
clean up usages of PLATFORM_MW_BACKEND_HOST in tests
deer-wmde Nov 11, 2025
0e72b99
fix rebase
deer-wmde Nov 11, 2025
e4bf034
fix rebase part 2
deer-wmde Nov 11, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions app/Console/Commands/RebuildQueryserviceData.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use App\Constants\MediawikiNamespace;
use App\Jobs\SpawnQueryserviceUpdaterJob;
use App\QueryserviceNamespace;
use App\Services\MediaWikiHostResolver;
use App\Traits;
use App\Wiki;
use App\WikiSetting;
Expand All @@ -25,11 +26,10 @@ class RebuildQueryserviceData extends Command {

protected string $queueName;

public function handle() {
public function handle(MediaWikiHostResolver $mwHostResolver) {
Comment thread
outdooracorn marked this conversation as resolved.
$this->chunkSize = intval($this->option('chunkSize'));
$this->sparqlUrlFormat = $this->option('sparqlUrlFormat');
$this->queueName = $this->option('queueName');
$this->apiUrl = getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php';

$wikiDomains = $this->option('domain');
$exitCode = 0;
Expand All @@ -42,6 +42,8 @@ public function handle() {
$skippedWikis = 0;
$processedWikis = 0;
foreach ($wikis as $wiki) {
$this->apiUrl = $mwHostResolver->getBackendHostForDomain($wiki->domain) . '/w/api.php'; // used in PageFetcher::fetchPagesInNamespace

try {
$entities = $this->getEntitiesForWiki($wiki);
$sparqlUrl = $this->getSparqlUrl($wiki);
Expand Down
5 changes: 3 additions & 2 deletions app/Jobs/CirrusSearch/CirrusSearchJob.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use App\Http\Curl\HttpRequest;
use App\Jobs\Job;
use App\Services\MediaWikiHostResolver;
use App\Wiki;
use App\WikiSetting;
use Illuminate\Contracts\Queue\ShouldBeUnique;
Expand Down Expand Up @@ -41,7 +42,7 @@ public function wikiId(): int {
/**
* @return void
*/
public function handle(HttpRequest $request) {
public function handle(HttpRequest $request, MediaWikiHostResolver $mwHostResolver) {
$this->wiki = Wiki::whereId($this->wikiId)->with('settings')->with('wikiDb')->first();

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

$request->setOptions(
[
CURLOPT_URL => getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php?action=' . $this->apiModule() . $this->getQueryParams(),
CURLOPT_URL => $mwHostResolver->getBackendHostForDomain($this->wiki->domain) . '/w/api.php?action=' . $this->apiModule() . $this->getQueryParams(),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_TIMEOUT => $this->getRequestTimeout(),
Expand Down
5 changes: 3 additions & 2 deletions app/Jobs/MediawikiInit.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace App\Jobs;

use App\Http\Curl\HttpRequest;
use App\Services\MediaWikiHostResolver;

class MediawikiInit extends Job {
private $wikiDomain;
Expand All @@ -23,14 +24,14 @@ public function __construct($wikiDomain, $username, $email) {
/**
* @return void
*/
public function handle(HttpRequest $request) {
public function handle(HttpRequest $request, MediaWikiHostResolver $mwHostResolver) {
$data = [
'username' => $this->username,
'email' => $this->email,
];

$request->setOptions([
CURLOPT_URL => getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php?action=wbstackInit&format=json',
CURLOPT_URL => $mwHostResolver->getBackendHostForDomain($this->wikiDomain) . '/w/api.php?action=wbstackInit&format=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_TIMEOUT => 60,
Expand Down
6 changes: 4 additions & 2 deletions app/Jobs/MediawikiSandboxLoadData.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

namespace App\Jobs;

use App\Services\MediaWikiHostResolver;

class MediawikiSandboxLoadData extends Job {
private $wikiDomain;

Expand All @@ -18,14 +20,14 @@ public function __construct($wikiDomain, $dataSet) {
/**
* @return void
*/
public function handle() {
public function handle(MediaWikiHostResolver $mwHostResolver) {
$data = [
'dataSet' => $this->dataSet,
];

$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => getenv('PLATFORM_MW_BACKEND_HOST') . '/w/rest.php/wikibase-exampledata/v0/load',
CURLOPT_URL => $mwHostResolver->getBackendHostForDomain($this->wikiDomain) . '/w/rest.php/wikibase-exampledata/v0/load',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_TIMEOUT => 10 * 60, // TODO Long 10 mins (probably shouldn't keep the request open...)
Expand Down
8 changes: 6 additions & 2 deletions app/Jobs/PlatformStatsSummaryJob.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use App\Constants\MediawikiNamespace;
use App\Helper\MWTimestampHelper;
use App\Services\MediaWikiHostResolver;
use App\Traits;
use App\User;
use App\Wiki;
Expand Down Expand Up @@ -39,10 +40,11 @@ class PlatformStatsSummaryJob extends Job {

private $platformSummaryStatsVersion = 'v1';

private MediaWikiHostResolver $mwHostResolver;

public function __construct() {
$this->inactiveThreshold = Config::get('wbstack.platform_summary_inactive_threshold');
$this->creationRateRanges = Config::get('wbstack.platform_summary_creation_rate_ranges');
$this->apiUrl = getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php';
}

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

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

if (!is_null($wiki->deleted_at)) {
$deletedWikis[] = $wiki;
Expand Down Expand Up @@ -164,7 +167,8 @@ public function prepareStats(array $allStats, $wikis): array {
];
}

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

$conn = $manager->connection('mysql');
Expand Down
8 changes: 6 additions & 2 deletions app/Jobs/PollForMediaWikiJobsJob.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,20 @@

namespace App\Jobs;

use App\Services\MediaWikiHostResolver;
use App\Wiki;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;

class PollForMediaWikiJobsJob extends Job implements ShouldBeUnique, ShouldQueue {
private MediaWikiHostResolver $mwHostResolver;

public $timeout = 1800;

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

if ($response->failed()) {
Expand Down
7 changes: 4 additions & 3 deletions app/Jobs/SiteStatsUpdateJob.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace App\Jobs;

use App\Http\Curl\HttpRequest;
use App\Services\MediaWikiHostResolver;
use App\Wiki;
use Illuminate\Bus\Batchable;
use Illuminate\Support\Facades\Log;
Expand All @@ -22,18 +23,18 @@ public function __construct($wiki_id) {
$this->wiki_id = $wiki_id;
}

public function handle(HttpRequest $request): void {
public function handle(HttpRequest $request, MediaWikiHostResolver $mwHostResolver): void {
$timeStart = microtime(true);

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

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

$request->setOptions([
CURLOPT_URL => getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php?action=wbstackSiteStatsUpdate&format=json',
CURLOPT_URL => $mwHostResolver->getBackendHostForDomain($wiki->domain) . '/w/api.php?action=wbstackSiteStatsUpdate&format=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_TIMEOUT => 60 * 5,
Expand Down
17 changes: 11 additions & 6 deletions app/Jobs/UpdateWikiSiteStatsJob.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace App\Jobs;

use App\Services\MediaWikiHostResolver;
use App\Wiki;
use App\WikiSiteStats;
use Carbon\Carbon;
Expand All @@ -17,7 +18,11 @@ class UpdateWikiSiteStatsJob extends Job implements ShouldBeUnique {

public $timeout = 3600;

public function handle(): void {
private MediaWikiHostResolver $mwHostResolver;

public function handle(MediaWikiHostResolver $mwHostResolver): void {
$this->mwHostResolver = $mwHostResolver;

$allWikis = Wiki::all();
foreach ($allWikis as $wiki) {
try {
Expand Down Expand Up @@ -54,7 +59,7 @@ private function updateSiteStats(Wiki $wiki): void {
$response = Http::withHeaders([
'host' => $wiki->getAttribute('domain'),
])->get(
getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php?action=query&meta=siteinfo&siprop=statistics&format=json'
$this->mwHostResolver->getBackendHostForDomain($wiki->domain) . '/w/api.php?action=query&meta=siteinfo&siprop=statistics&format=json'
);

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

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

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

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

$revisionInfo = Http::withHeaders(['host' => $wiki->getAttribute('domain')])->get(
getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php',
$this->mwHostResolver->getBackendHostForDomain($wiki->domain) . '/w/api.php',
[
'action' => 'query',
'format' => 'json',
Expand Down
11 changes: 6 additions & 5 deletions app/Jobs/WikiEntityImportJob.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace App\Jobs;

use App\Services\MediaWikiHostResolver;
use App\Wiki;
use App\WikiEntityImport;
use App\WikiEntityImportStatus;
Expand All @@ -27,20 +28,20 @@ public function __construct(
public int $wikiId,
public string $sourceWikiUrl,
public array $entityIds,
public int $importId,
public int $importId
) {}

private string $targetWikiUrl;

/**
* Execute the job.
*/
public function handle(Client $kubernetesClient): void {
public function handle(Client $kubernetesClient, MediaWikiHostResolver $mwHostResolver): void {
$import = null;
try {
$wiki = Wiki::findOrFail($this->wikiId);
$import = WikiEntityImport::findOrFail($this->importId);
$creds = $this->acquireCredentials($wiki->domain);
$creds = $this->acquireCredentials($wiki->domain, $mwHostResolver);

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

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

private static function acquireCredentials(string $wikiDomain): OAuthCredentials {
private static function acquireCredentials(string $wikiDomain, MediaWikiHostResolver $mwHostResolver): OAuthCredentials {
$response = Http::withHeaders(['host' => $wikiDomain])->asForm()->post(
getenv('PLATFORM_MW_BACKEND_HOST') . '/w/api.php?action=wbstackPlatformOauthGet&format=json',
$mwHostResolver->getBackendHostForDomain($wikiDomain) . '/w/api.php?action=wbstackPlatformOauthGet&format=json',
[
'consumerName' => 'WikiEntityImportJob',
'ownerOnly' => '1',
Expand Down
1 change: 0 additions & 1 deletion phpunit.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="QUEUE_CONNECTION" value="sync"/>
<env name="PLATFORM_MW_BACKEND_HOST" value="mediawiki-139-app-backend.default.svc.cluster.default"/>
<env name="WBSTACK_SUMMARY_CREATION_RATE_RANGES" value="PT24H,P30D"/>
</php>
<source>
Expand Down
Loading
Loading