Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 24
TransferToColdBase
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 24
 handle
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 24
1<?php
2
3namespace Qmp\Laravel\Deduplication\Console\Commands;
4
5use Exception;
6use MongoDB\BSON\UTCDateTime;
7use MongoDB\Driver\WriteConcern;
8use Qmp\Laravel\CommandsLaravel\Middleware\Library\Monitoring\CreateParentProcess;
9use Qmp\Laravel\CommandsLaravel\Middleware\Library\Monitoring\UpdateParentProcess;
10use Qmp\Laravel\Deduplication\Models\SessionData;
11use Qmp\Laravel\ToolsLaravel\Traits\Timer;
12
13class TransferToColdBase extends \Commando
14{
15    use Timer;
16
17    const DAYS_TO_KEEP = 90;
18
19    /**
20     * The name and signature of the console command.
21     *
22     * @var string
23     */
24    protected $signature = 'dedup:cold-base';
25
26    /**
27     * The console command description.
28     *
29     * @var string
30     */
31    protected $description = 'Transfer old data to cold collection';
32
33
34    /**
35     * The command middlewares
36     *
37     * @var array
38     */
39    protected $middleware = [
40        CreateParentProcess::class,
41        UpdateParentProcess::class
42    ];
43
44    /**
45     * Execute the console command.
46     *
47     * @return mixed
48     */
49    public function handle(): void
50    {
51
52        $data = $this->middlewareData(UpdateParentProcess::class)
53            ->transfert(CreateParentProcess::class, ['id']);
54
55        try {
56            $this->startTimer('total');
57
58            $dateToTransfer = new \DateTime();
59            $dateToTransfer->modify('-' . self::DAYS_TO_KEEP . ' days');
60
61            $wc = new WriteConcern(0);
62            $utc =  new UTCDateTime($dateToTransfer);
63
64            SessionData::pipeline()
65                ->match('updated_at', ['$lt' => $utc])
66                ->merge([
67                    'into' => 'session_data_cold',
68                    'on' => '_id'
69                ])
70                ->aggregate([
71                    'allowDiskUse' => true,
72                    "writeConcern" => $wc
73                ]);
74
75            $old = SessionData::where(['updated_at' => ['$lt' => $utc]]);
76            $deleted = 0;
77
78            if($old->count()) {
79                $deleted = $old->delete(["writeConcern" =>  $wc]);
80            }
81
82            $data->log = [];
83            $data->log['archived'] = $deleted;
84            $data->log['duration'] = $this->getTimer('total');
85        } catch (Exception $e) {
86            $data->error = $this->reportException($e);
87        }
88    }
89}