added new tool type field
This commit is contained in:
64
lib/ProgressLogger/ProgressLogger.php
Normal file
64
lib/ProgressLogger/ProgressLogger.php
Normal file
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
class ProgressLogger {
|
||||
private $totalItems;
|
||||
private $startTime;
|
||||
private $processedCount;
|
||||
private $lastOutputTime;
|
||||
private $outputInterval; // in seconds
|
||||
|
||||
public function __construct($totalItems, $outputInterval = 1) {
|
||||
$this->totalItems = $totalItems;
|
||||
$this->processedCount = 0;
|
||||
$this->startTime = microtime(true);
|
||||
$this->lastOutputTime = 0;
|
||||
$this->outputInterval = $outputInterval;
|
||||
}
|
||||
|
||||
public function incrementAndLog() {
|
||||
$this->processedCount++;
|
||||
$currentTime = microtime(true);
|
||||
|
||||
// Only update the console if enough time has passed or it's the last item
|
||||
if (($currentTime - $this->lastOutputTime > $this->outputInterval) || ($this->processedCount === $this->totalItems)) {
|
||||
$this->logProgress();
|
||||
$this->lastOutputTime = $currentTime;
|
||||
}
|
||||
}
|
||||
|
||||
private function logProgress() {
|
||||
$elapsedTime = microtime(true) - $this->startTime;
|
||||
$itemsPerSecond = ($this->processedCount > 0) ? ($this->processedCount / $elapsedTime) : 0;
|
||||
$remainingItems = $this->totalItems - $this->processedCount;
|
||||
$estimatedTimeRemaining = ($itemsPerSecond > 0) ? ($remainingItems / $itemsPerSecond) : 0;
|
||||
|
||||
$hours = floor($estimatedTimeRemaining / 3600);
|
||||
$minutes = floor(($estimatedTimeRemaining % 3600) / 60);
|
||||
$seconds = floor($estimatedTimeRemaining % 60);
|
||||
|
||||
printf("\rProcessing: %d/%d (%.2f%%) | Elapsed: %s | Remaining: %02d:%02d:%02d",
|
||||
$this->processedCount,
|
||||
$this->totalItems,
|
||||
($this->processedCount / $this->totalItems) * 100,
|
||||
gmdate("H:i:s", $elapsedTime),
|
||||
$hours,
|
||||
$minutes,
|
||||
$seconds
|
||||
);
|
||||
|
||||
// If all items are processed, add a newline
|
||||
if ($this->processedCount === $this->totalItems) {
|
||||
echo "\n";
|
||||
}
|
||||
}
|
||||
|
||||
public function startMessage() {
|
||||
echo "Starting update for {$this->totalItems} items...\n";
|
||||
}
|
||||
|
||||
public function finishMessage($type = 'items') {
|
||||
echo "Finished! Updated {$this->processedCount} $type.\n";
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user