diff --git a/.env.example b/.env.example index 937baa664..ffb261134 100644 --- a/.env.example +++ b/.env.example @@ -3,6 +3,7 @@ APP_DEBUG=false APP_KEY=SomeRandomString3232RandomString APP_THEME=default APP_TIMEZONE=UTC +APP_CLEAR_TASKLOG=720 DB_HOST=localhost DB_PORT=3306 diff --git a/CHANGELOG.md b/CHANGELOG.md index c261d2fd3..43c34cb07 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ This project follows [Semantic Versioning](http://semver.org) guidelines. * Setup scripts (user, mail, env) now support argument flags for use in containers and other non-terminal environments. * New API endpoints for individual users to control their servers with at `/api/me/*`. * Typeahead support for owner email when adding a new server. +* Scheduled command to clear out task log every month (configurable timespan). ### Changed * Creating a user, server, or node now returns `HTTP/1.1 200` and a JSON element with the user/server/node's ID. @@ -21,6 +22,7 @@ This project follows [Semantic Versioning](http://semver.org) guidelines. ### Fixed * Server overview listing the location short-code as the name of the node. +* Server task manager only sending commands every 5 minutes at the quickest. ## v0.5.0-pre.2 (Bodacious Boreopterus) diff --git a/app/Console/Commands/ClearTasks.php b/app/Console/Commands/ClearTasks.php new file mode 100644 index 000000000..4f2181ca0 --- /dev/null +++ b/app/Console/Commands/ClearTasks.php @@ -0,0 +1,83 @@ + + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +namespace Pterodactyl\Console\Commands; + +use DB; +use Carbon; +use Pterodactyl\Models; +use Illuminate\Console\Command; +use Illuminate\Foundation\Bus\DispatchesJobs; + +use Pterodactyl\Jobs\SendScheduledTask; + +class ClearTasks extends Command +{ + + use DispatchesJobs; + + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'pterodactyl:tasks:clearlog'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'Clears old log entires (> 2 months) from the last log.'; + + /** + * Create a new command instance. + * + * @return void + */ + public function __construct() + { + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + $entries = Models\TaskLog::where('run_time', '<=', Carbon::now()->subHours(env('APP_CLEAR_TASKLOG', 720))->toAtomString())->get(); + + $this->info(sprintf('Preparing to delete %d old task log entries.', count($entries))); + $bar = $this->output->createProgressBar(count($entries)); + + foreach ($entries as &$entry) { + $entry->delete(); + $bar->advance(); + } + + $bar->finish(); + $this->info("\nFinished deleting old logs."); + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 9875763b4..c8276b447 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -18,6 +18,7 @@ class Kernel extends ConsoleKernel \Pterodactyl\Console\Commands\ShowVersion::class, \Pterodactyl\Console\Commands\UpdateEnvironment::class, \Pterodactyl\Console\Commands\RunTasks::class, + \Pterodactyl\Console\Commands\ClearTasks::class, \Pterodactyl\Console\Commands\ClearServices::class, \Pterodactyl\Console\Commands\UpdateEmailSettings::class, ]; @@ -30,6 +31,7 @@ class Kernel extends ConsoleKernel */ protected function schedule(Schedule $schedule) { - $schedule->command('pterodactyl:tasks')->everyFiveMinutes()->withoutOverlapping(); + $schedule->command('pterodactyl:tasks')->everyMinute()->withoutOverlapping(); + $schedule->command('pterodactyl:tasks:clearlog')->twiceDaily(3, 15); } }