Add Docker stack, Reverb live progress, and duplicate upload detection.
Ship FrankenPHP Compose services with Reverb WebSockets for real-time transcription status, skip re-uploading identical audio via content hash, and format disk usage without requiring intl.
This commit is contained in:
@@ -4,7 +4,6 @@ namespace App\Services;
|
||||
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Number;
|
||||
|
||||
class DiskSpaceService
|
||||
{
|
||||
@@ -26,6 +25,10 @@ class DiskSpaceService
|
||||
{
|
||||
$path ??= Storage::disk('local')->path('');
|
||||
|
||||
if (! is_dir($path)) {
|
||||
@mkdir($path, 0755, true);
|
||||
}
|
||||
|
||||
/** @var array{total_bytes: int, free_bytes: int, used_bytes: int, used_percent: float, free_percent: float, total_human: string, free_human: string, used_human: string}|null */
|
||||
return Cache::remember(
|
||||
'disk-space:'.md5($path),
|
||||
@@ -67,9 +70,28 @@ class DiskSpaceService
|
||||
'used_bytes' => $usedBytes,
|
||||
'used_percent' => $usedPercent,
|
||||
'free_percent' => $freePercent,
|
||||
'total_human' => Number::fileSize($totalBytes, precision: 1),
|
||||
'free_human' => Number::fileSize($freeBytes, precision: 1),
|
||||
'used_human' => Number::fileSize($usedBytes, precision: 1),
|
||||
'total_human' => $this->formatBytes($totalBytes),
|
||||
'free_human' => $this->formatBytes($freeBytes),
|
||||
'used_human' => $this->formatBytes($usedBytes),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Human-readable byte size without requiring the intl extension.
|
||||
*/
|
||||
private function formatBytes(int $bytes): string
|
||||
{
|
||||
$units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
|
||||
$value = (float) max(0, $bytes);
|
||||
$unit = 0;
|
||||
|
||||
while ($value >= 1024 && $unit < count($units) - 1) {
|
||||
$value /= 1024;
|
||||
$unit++;
|
||||
}
|
||||
|
||||
$precision = $unit === 0 ? 0 : 1;
|
||||
|
||||
return number_format($value, $precision).' '.$units[$unit];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user