Add command to remove project activities after one year

This commit is contained in:
Frédéric Guillot
2017-12-01 11:54:02 -08:00
parent 0573c92d09
commit 0153cb33de
11 changed files with 45 additions and 32 deletions

View File

@@ -18,6 +18,7 @@ use Symfony\Component\Console\Command\Command;
* @property \Kanboard\Export\TransitionExport $transitionExport
* @property \Kanboard\Model\NotificationModel $notificationModel
* @property \Kanboard\Model\ProjectModel $projectModel
* @property \Kanboard\Model\ProjectActivityModel $projectActivityModel
* @property \Kanboard\Model\ProjectPermissionModel $projectPermissionModel
* @property \Kanboard\Model\ProjectDailyColumnStatsModel $projectDailyColumnStatsModel
* @property \Kanboard\Model\ProjectDailyStatsModel $projectDailyStatsModel

View File

@@ -0,0 +1,21 @@
<?php
namespace Kanboard\Console;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class ProjectActivityArchiveCommand extends BaseCommand
{
protected function configure()
{
$this
->setName('projects:archive-activities')
->setDescription('Remove project activities after one year');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->projectActivityModel->cleanup(strtotime('-1 year'));
}
}

View File

@@ -33,17 +33,14 @@ class ProjectActivityModel extends Base
*/
public function createEvent($project_id, $task_id, $creator_id, $event_name, array $data)
{
$values = array(
return $this->db->table(self::TABLE)->insert(array(
'project_id' => $project_id,
'task_id' => $task_id,
'creator_id' => $creator_id,
'event_name' => $event_name,
'date_creation' => time(),
'data' => json_encode($data),
);
$this->cleanup(PROJECT_ACTIVITIES_MAX_EVENTS - 1);
return $this->db->table(self::TABLE)->insert($values);
));
}
/**
@@ -73,15 +70,10 @@ class ProjectActivityModel extends Base
* Remove old event entries to avoid large table
*
* @access public
* @param integer $max Maximum number of items to keep in the table
* @param integer $ts Timestamp
*/
public function cleanup($max)
public function cleanup($ts)
{
$total = $this->db->table(self::TABLE)->count();
if ($total > $max) {
$ids = $this->db->table(self::TABLE)->asc('id')->limit($total - $max)->findAllByColumn('id');
$this->db->table(self::TABLE)->in('id', $ids)->remove();
}
$this->db->table(self::TABLE)->lt('date_creation', $ts)->remove();
}
}

View File

@@ -11,6 +11,7 @@ use Kanboard\Console\LocaleSyncCommand;
use Kanboard\Console\PluginInstallCommand;
use Kanboard\Console\PluginUninstallCommand;
use Kanboard\Console\PluginUpgradeCommand;
use Kanboard\Console\ProjectActivityArchiveCommand;
use Kanboard\Console\ProjectArchiveCommand;
use Kanboard\Console\ProjectDailyColumnStatsExportCommand;
use Kanboard\Console\ProjectDailyStatsCalculationCommand;
@@ -48,6 +49,7 @@ class CommandProvider implements ServiceProviderInterface
$application->add(new SubtaskExportCommand($container));
$application->add(new TaskExportCommand($container));
$application->add(new ProjectArchiveCommand($container));
$application->add(new ProjectActivityArchiveCommand($container));
$application->add(new ProjectDailyStatsCalculationCommand($container));
$application->add(new ProjectDailyColumnStatsExportCommand($container));
$application->add(new TransitionExportCommand($container));

View File

@@ -148,7 +148,5 @@ defined('HTTP_VERIFY_SSL_CERTIFICATE') or define('HTTP_VERIFY_SSL_CERTIFICATE',
defined('TOTP_ISSUER') or define('TOTP_ISSUER', 'Kanboard');
defined('PROJECT_ACTIVITIES_MAX_EVENTS') or define('PROJECT_ACTIVITIES_MAX_EVENTS', 10000);
// Comma separated list of fields to not synchronize when using external authentication providers
defined('EXTERNAL_AUTH_EXCLUDE_FIELDS') or define('EXTERNAL_AUTH_EXCLUDE_FIELDS', 'username');