feat(logging): add frequency filters for scheduled logs command to support hourly, daily, weekly, and monthly job views
This commit is contained in:
@@ -16,7 +16,12 @@ class ViewScheduledLogs extends Command
|
|||||||
{--backup-name= : Filter by backup name (partial match)}
|
{--backup-name= : Filter by backup name (partial match)}
|
||||||
{--backup-id= : Filter by backup ID}
|
{--backup-id= : Filter by backup ID}
|
||||||
{--errors : View error logs only}
|
{--errors : View error logs only}
|
||||||
{--all : View both normal and error logs}';
|
{--all : View both normal and error logs}
|
||||||
|
{--hourly : Filter hourly jobs}
|
||||||
|
{--daily : Filter daily jobs}
|
||||||
|
{--weekly : Filter weekly jobs}
|
||||||
|
{--monthly : Filter monthly jobs}
|
||||||
|
{--frequency= : Filter by specific cron expression}';
|
||||||
|
|
||||||
protected $description = 'View scheduled backups and tasks logs with optional filtering';
|
protected $description = 'View scheduled backups and tasks logs with optional filtering';
|
||||||
|
|
||||||
@@ -175,9 +180,58 @@ class ViewScheduledLogs extends Command
|
|||||||
$filters[] = '"backup_id":'.preg_quote($backupId, '/');
|
$filters[] = '"backup_id":'.preg_quote($backupId, '/');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Frequency filters
|
||||||
|
if ($this->option('hourly')) {
|
||||||
|
$filters[] = $this->getFrequencyPattern('hourly');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->option('daily')) {
|
||||||
|
$filters[] = $this->getFrequencyPattern('daily');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->option('weekly')) {
|
||||||
|
$filters[] = $this->getFrequencyPattern('weekly');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->option('monthly')) {
|
||||||
|
$filters[] = $this->getFrequencyPattern('monthly');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($frequency = $this->option('frequency')) {
|
||||||
|
$filters[] = '"frequency":"'.preg_quote($frequency, '/').'"';
|
||||||
|
}
|
||||||
|
|
||||||
return empty($filters) ? null : implode('|', $filters);
|
return empty($filters) ? null : implode('|', $filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getFrequencyPattern(string $type): string
|
||||||
|
{
|
||||||
|
$patterns = [
|
||||||
|
'hourly' => [
|
||||||
|
'0 \* \* \* \*', // 0 * * * *
|
||||||
|
'@hourly', // @hourly
|
||||||
|
],
|
||||||
|
'daily' => [
|
||||||
|
'0 0 \* \* \*', // 0 0 * * *
|
||||||
|
'@daily', // @daily
|
||||||
|
'@midnight', // @midnight
|
||||||
|
],
|
||||||
|
'weekly' => [
|
||||||
|
'0 0 \* \* [0-6]', // 0 0 * * 0-6 (any day of week)
|
||||||
|
'@weekly', // @weekly
|
||||||
|
],
|
||||||
|
'monthly' => [
|
||||||
|
'0 0 1 \* \*', // 0 0 1 * * (first of month)
|
||||||
|
'@monthly', // @monthly
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$typePatterns = $patterns[$type] ?? [];
|
||||||
|
|
||||||
|
// For grep, we need to match the frequency field in JSON
|
||||||
|
return '"frequency":"('.implode('|', $typePatterns).')"';
|
||||||
|
}
|
||||||
|
|
||||||
private function getFilterDescription(): string
|
private function getFilterDescription(): string
|
||||||
{
|
{
|
||||||
$descriptions = [];
|
$descriptions = [];
|
||||||
@@ -198,6 +252,27 @@ class ViewScheduledLogs extends Command
|
|||||||
$descriptions[] = "backup ID: {$backupId}";
|
$descriptions[] = "backup ID: {$backupId}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Frequency filters
|
||||||
|
if ($this->option('hourly')) {
|
||||||
|
$descriptions[] = 'hourly jobs';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->option('daily')) {
|
||||||
|
$descriptions[] = 'daily jobs';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->option('weekly')) {
|
||||||
|
$descriptions[] = 'weekly jobs';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->option('monthly')) {
|
||||||
|
$descriptions[] = 'monthly jobs';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($frequency = $this->option('frequency')) {
|
||||||
|
$descriptions[] = "frequency: {$frequency}";
|
||||||
|
}
|
||||||
|
|
||||||
return empty($descriptions) ? '' : ' (filtered by '.implode(', ', $descriptions).')';
|
return empty($descriptions) ? '' : ' (filtered by '.implode(', ', $descriptions).')';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user