Skip to content

Commit

Permalink
tec: Extract statistics in a dedicated CLI command
Browse files Browse the repository at this point in the history
  • Loading branch information
marienfressinaud committed Jan 23, 2024
1 parent f35878e commit 8361c89
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 57 deletions.
9 changes: 3 additions & 6 deletions src/Router.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,8 @@ class Router
{
/**
* Return the application router (doesn't contain CLI routes)
*
* @return \Minz\Router
*/
public static function load()
public static function load(): \Minz\Router
{
$router = new \Minz\Router();

Expand Down Expand Up @@ -209,17 +207,16 @@ public static function load()

/**
* Return the CLI router (containing app routes)
*
* @return \Minz\Router
*/
public static function loadCli()
public static function loadCli(): \Minz\Router
{
$router = self::load();

$router->addRoute('CLI', '/', 'Help#show');
$router->addRoute('CLI', '/help', 'Help#show');

$router->addRoute('CLI', '/system', 'System#show');
$router->addRoute('CLI', '/system/stats', 'System#stats');
$router->addRoute('CLI', '/system/secret', 'System#secret');
$router->addRoute('CLI', '/database/status', 'Database#status');

Expand Down
82 changes: 31 additions & 51 deletions src/cli/System.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace flusio\cli;

use Minz\Request;
use Minz\Response;
use flusio\models;
use flusio\utils;
Expand Down Expand Up @@ -47,28 +48,6 @@ public function show(): Response
/** @var int */
$feeds_links_keep_period = \Minz\Configuration::$application['feeds_links_keep_period'];

$count_users = models\User::count();
$count_users_validated = models\User::countValidated();
$percent_users_validated = intval($count_users_validated * 100 / max(1, $count_users));
$count_users_week = models\User::countSince(\Minz\Time::ago(1, 'week'));
$count_users_month = models\User::countSince(\Minz\Time::ago(1, 'month'));
$count_users_active_month = models\Session::countUsersActiveSince(\Minz\Time::ago(1, 'month'));

$count_links = models\Link::countEstimated();
$count_links_to_fetch = models\Link::countToFetch();

$count_collections = models\Collection::countCollections();
$count_collections_public = models\Collection::countCollectionsPublic();

$count_feeds = models\Collection::countFeeds();
$count_feeds_by_hours = models\Collection::countFeedsByHours();

$count_requests = models\FetchLog::countEstimated();
$count_requests_feeds = models\FetchLog::countByType('feed');
$count_requests_links = models\FetchLog::countByType('link');
$count_requests_images = models\FetchLog::countByType('image');
$count_requests_by_days = models\FetchLog::countByDays();

$info = "{$app_name} v{$app_version}\n";
$info .= "\n";

Expand Down Expand Up @@ -98,38 +77,39 @@ public function show(): Response
} else {
$info .= "disabled\n";
}
$info .= "\n";

$info .= "{$count_users} users\n";
$info .= "{$count_users_month} this month\n";
$info .= "{$count_users_week} this week\n";
$info .= "{$percent_users_validated}% validated\n";
$info .= "{$count_users_active_month} active this month\n";
$info .= "\n";

$info .= "{$count_links} links (estimated)\n";
$info .= "{$count_links_to_fetch} to synchronize\n";
$info .= "\n";

$info .= "{$count_collections} collections\n";
$info .= "{$count_collections_public} public\n";
$info .= "\n";

$info .= "{$count_feeds} feeds\n";
foreach ($count_feeds_by_hours as $hour => $count) {
$info .= "{$count} synchronized at {$hour}h\n";
}
$info .= "\n";
return Response::text(200, $info);
}

$info .= "{$count_requests} HTTP requests (last 3 - 4 days)\n";
$info .= "{$count_requests_feeds} to fetch feeds\n";
$info .= "{$count_requests_links} to fetch links\n";
$info .= "{$count_requests_images} to fetch images\n";
foreach ($count_requests_by_days as $day => $count) {
$info .= "{$count} on {$day}\n";
}
/**
* Show statistics of the system.
*
* @response 200
*/
public function stats(Request $request): Response
{
$count_users = models\User::count();
$count_users_validated = models\User::countValidated();
$percent_users_validated = intval($count_users_validated * 100 / max(1, $count_users));

return Response::text(200, $info);
return Response::ok('cli/system/stats.txt', [
'count_users' => $count_users,
'percent_users_validated' => $percent_users_validated,
'count_users_week' => models\User::countSince(\Minz\Time::ago(1, 'week')),
'count_users_month' => models\User::countSince(\Minz\Time::ago(1, 'month')),
'count_users_active_month' => models\Session::countUsersActiveSince(\Minz\Time::ago(1, 'month')),
'count_links' => models\Link::countEstimated(),
'count_links_to_fetch' => models\Link::countToFetch(),
'count_collections' => models\Collection::countCollections(),
'count_collections_public' => models\Collection::countCollectionsPublic(),
'count_feeds' => models\Collection::countFeeds(),
'count_feeds_by_hours' => models\Collection::countFeedsByHours(),
'count_requests' => models\FetchLog::countEstimated(),
'count_requests_feeds' => models\FetchLog::countByType('feed'),
'count_requests_links' => models\FetchLog::countByType('link'),
'count_requests_images' => models\FetchLog::countByType('image'),
'count_requests_by_days' => models\FetchLog::countByDays(),
]);
}

/**
Expand Down
24 changes: 24 additions & 0 deletions src/views/cli/system/stats.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?= "{$count_users} users\n" ?>
<?= "→ {$count_users_month} this month\n" ?>
<?= "→ {$count_users_week} this week\n" ?>
<?= "→ {$percent_users_validated}% validated\n" ?>
<?= "→ {$count_users_active_month} active this month\n" ?>

<?= "{$count_links} links (estimated)\n" ?>
<?= "→ {$count_links_to_fetch} to synchronize\n" ?>

<?= "{$count_collections} collections\n" ?>
<?= "→ {$count_collections_public} public\n" ?>

<?= "{$count_feeds} feeds\n" ?>
<?php foreach ($count_feeds_by_hours as $hour => $count): ?>
<?= "→ {$count} synchronized at {$hour}h\n" ?>
<?php endforeach; ?>

<?= "{$count_requests} HTTP requests (last 3 - 4 days)\n" ?>
<?= "→ {$count_requests_feeds} to fetch feeds\n" ?>
<?= "→ {$count_requests_links} to fetch links\n" ?>
<?= "→ {$count_requests_images} to fetch images\n" ?>
<?php foreach ($count_requests_by_days as $day => $count): ?>
<?= "→ {$count} on {$day}\n" ?>
<?php endforeach; ?>
7 changes: 7 additions & 0 deletions tests/cli/SystemTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,13 @@ public function testShow(): void
$this->assertResponseCode($response, 200);
}

public function testStats(): void
{
$response = $this->appRun('CLI', '/system/stats');

$this->assertResponseCode($response, 200);
}

public function testSecret(): void
{
$response = $this->appRun('CLI', '/system/secret');
Expand Down

0 comments on commit 8361c89

Please sign in to comment.