42 lines
1.2 KiB
PHP
42 lines
1.2 KiB
PHP
#!/usr/bin/env php
|
|
<?php
|
|
declare(strict_types=1);
|
|
|
|
// src/cli/disk_usage_scan.php
|
|
//
|
|
// Build or refresh the disk usage snapshot used by the Admin "Storage / Disk Usage" view.
|
|
|
|
require __DIR__ . '/../../config/config.php';
|
|
require __DIR__ . '/../../src/models/DiskUsageModel.php';
|
|
|
|
$start = microtime(true);
|
|
|
|
try {
|
|
$snapshot = DiskUsageModel::buildSnapshot();
|
|
$elapsed = microtime(true) - $start;
|
|
|
|
$bytes = (int)($snapshot['root_bytes'] ?? 0);
|
|
$files = (int)($snapshot['root_files'] ?? 0);
|
|
|
|
$human = function (int $b): string {
|
|
if ($b <= 0) return '0 B';
|
|
$units = ['B','KB','MB','GB','TB','PB'];
|
|
$i = (int)floor(log($b, 1024));
|
|
$i = max(0, min($i, count($units) - 1));
|
|
$val = $b / pow(1024, $i);
|
|
return sprintf('%.2f %s', $val, $units[$i]);
|
|
};
|
|
|
|
$msg = sprintf(
|
|
"Disk usage snapshot written to %s\nScanned %d files, total %s in %.2f seconds.\n",
|
|
DiskUsageModel::snapshotPath(),
|
|
$files,
|
|
$human($bytes),
|
|
$elapsed
|
|
);
|
|
fwrite(STDOUT, $msg);
|
|
exit(0);
|
|
} catch (Throwable $e) {
|
|
fwrite(STDERR, "Error building disk usage snapshot: " . $e->getMessage() . "\n");
|
|
exit(1);
|
|
} |