Completed
Push — master ( 85eeeb...ad7cd2 )
by claudio
07:12
created

OptimiseCommand   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 88
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 42.42%

Importance

Changes 2
Bugs 1 Features 0
Metric Value
wmc 10
c 2
b 1
f 0
lcom 1
cbo 5
dl 0
loc 88
ccs 14
cts 33
cp 0.4242
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A syncAll() 0 14 4
A makeBackground() 0 6 2
A handle() 0 11 2
A makeForeground() 0 6 1
1
<?php
2
3
namespace plunner\Console\Commands\Optimise;
4
5
use Illuminate\Console\Command;
6
use Illuminate\Console\Scheduling\Schedule;
7
use plunner\Company;
8
9
/**
10
 * Class OptimiseCommand
11
 * @package plunner\Console\Commands\Optimise
12
 * @author Claudio Cardinale <[email protected]>
13
 * @copyright 2015 Claudio Cardinale
14
 * @version 1.0.0
15
 */
16
class OptimiseCommand extends Command
17
{
18
    const BACKGROUND_MOD_MEX = 'background mode';
19
    const BACKGROUND_COMPLETED_MEX = 'All background tasks started';
20
    /**
21
     * The name and signature of the console command.
22
     *
23
     * @var string
24
     */
25
    protected $signature = 'optimise:meetings {companyId?}  {--background}';
26
27
    /**
28
     * The console command description.
29
     *
30
     * @var string
31
     */
32
    protected $description = 'Optimise meetings';
33
34
    /**
35
     * @var Schedule laravel schedule object needed to perform command in background
36
     */
37
    private $schedule;
38
39
    /**
40
     * Create a new command instance.
41
     * @param Schedule $schedule
42
     *
43
     */
44 12
    public function __construct(Schedule $schedule)
45
    {
46 12
        parent::__construct();
47 12
        $this->schedule = $schedule;
48 12
    }
49
50
    /**
51
     * Execute the console command.
52
     *
53
     * @return mixed
54
     */
55 3
    public function handle()
56
    {
57
        //
58
        //TODO insert a timeout
59
        //TODO try...catch with destruct
60 3
        $companyId = $this->argument('companyId');
61 3
        if (is_numeric($companyId))
62 3
            $this->makeForeground(Company::findOrFail($companyId));
63
        else
64
            $this->syncAll();
65 3
    }
66
67
    /**
68
     * optimise company foreground
69
     * @param Company $company
70
     */
71 3
    private function makeForeground(Company $company)
72
    {
73 3
        $this->info('Optimisation company ' . $company->id . ' started');
74 3
        (new Optimise($company, $this->schedule, $this->laravel))->optimise()->save();
75 3
        $this->info('Optimisation ' . $company->id . ' completed');
76 3
    }
77
78
    private function syncAll()
79
    {
80
        $calendars = Caldav::all();
81
        if ($this->option('background')) {
82
            \Log::debug(self::BACKGROUND_MOD_MEX);
83
            $this->info(self::BACKGROUND_MOD_MEX);
84
            foreach ($calendars as $calendar)
85
                $this->makeBackground($calendar);
86
            \Log::debug(self::BACKGROUND_COMPLETED_MEX);
87
            $this->info(self::BACKGROUND_COMPLETED_MEX);
88
        } else
89
            foreach ($calendars as $calendar)
90
                $this->makeForeground($calendar);
91
    }
92
93
    /**
94
     * optimise company via exec command
95
     * @param Company $company
96
     */
97
    private function makeBackground(Company $company)
98
    {
99
        $event = $this->schedule->command('optimise:meetings ' . $company->id)->withoutOverlapping();
100
        if ($event->isDue($this->laravel))
101
            $event->run($this->laravel);
102
    }
103
}
104