diff --git a/app/Metrics/App/WikiMetrics.php b/app/Metrics/App/WikiMetrics.php index 8dc6661e..63aa2700 100644 --- a/app/Metrics/App/WikiMetrics.php +++ b/app/Metrics/App/WikiMetrics.php @@ -35,6 +35,7 @@ public function saveMetrics(Wiki $wiki): void { $monthlyActions = $this->getNumberOfActions(self::INTERVAL_MONTHLY); $quarterlyActions = $this->getNumberOfActions(self::INTERVAL_QUARTERLY); $numberOfEntities = $this->getNumberOfEntities(); + $totalNumberOfUsers = $this->getTotalUserCount(); $monthlyNumberOfUsersPerActivityType = $this->getNumberOfUsersPerActivityType(); $dailyMetrics = new WikiDailyMetrics([ @@ -54,6 +55,7 @@ public function saveMetrics(Wiki $wiki): void { 'entity_schema_count' => $numberOfEntities['640'], 'monthly_casual_users' => $monthlyNumberOfUsersPerActivityType[0], 'monthly_active_users' => $monthlyNumberOfUsersPerActivityType[1], + 'wiki_user_count' => $totalNumberOfUsers, ]); // compare current record to old record and only save if there is a change @@ -210,4 +212,16 @@ private function getNumberOfEntities(): array { return $result; } + + private function getTotalUserCount() { + $wikiDb = $this->wiki->wikiDb; + $tableUser = $wikiDb->name . '.' . $wikiDb->prefix . '_user'; + $query = "SELECT COUNT(*) AS total_users FROM $tableUser"; + $manager = app()->db; + $manager->purge('mw'); + $conn = $manager->connection('mw'); + $pdo = $conn->getPdo(); + $result = $pdo->query($query)->fetchAll(PDO::FETCH_ASSOC); + return $result['total_users']; + } } diff --git a/app/WikiDailyMetrics.php b/app/WikiDailyMetrics.php index e75ec45a..be7548a7 100644 --- a/app/WikiDailyMetrics.php +++ b/app/WikiDailyMetrics.php @@ -33,6 +33,7 @@ class WikiDailyMetrics extends Model { 'entity_schema_count', 'monthly_casual_users', 'monthly_active_users', + 'wiki_user_count', ]; @@ -51,6 +52,7 @@ class WikiDailyMetrics extends Model { 'entity_schema_count', 'monthly_casual_users', 'monthly_active_users', + 'wiki_user_count', ]; public function areMetricsEqual(WikiDailyMetrics $wikiDailyMetrics): bool { diff --git a/database/migrations/2025_10_16_055552_add_total_user_count.php b/database/migrations/2025_10_16_055552_add_total_user_count.php new file mode 100755 index 00000000..75c294c7 --- /dev/null +++ b/database/migrations/2025_10_16_055552_add_total_user_count.php @@ -0,0 +1,28 @@ +integer('total_user_count')->nullable()->default(null); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('wiki_daily_metrics', function (Blueprint $table) { + $table->dropColumn('total_user_count'); + }); + } +}; diff --git a/tests/Jobs/UpdateWikiDailyMetricJobTest.php b/tests/Jobs/UpdateWikiDailyMetricJobTest.php index bdbbb484..d566385e 100644 --- a/tests/Jobs/UpdateWikiDailyMetricJobTest.php +++ b/tests/Jobs/UpdateWikiDailyMetricJobTest.php @@ -57,6 +57,7 @@ public function testRunJobForAllWikisIncludingDeletedWikis() { 'property_count' => 0, 'lexeme_count' => 0, 'entity_schema_count' => 0, + 'wiki_user_count' => 0, ]); $this->assertDatabaseHas('wiki_daily_metrics', [ @@ -70,6 +71,7 @@ public function testRunJobForAllWikisIncludingDeletedWikis() { 'property_count' => 0, 'lexeme_count' => 0, 'entity_schema_count' => 0, + 'wiki_user_count' => 0, ]); } }