Completed
Push — issue/92 ( ebb8c8...de325a )
by Tomas Norre
09:56
created

Process::setRow()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 4
ccs 3
cts 3
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
namespace AOE\Crawler\Domain\Model;
3
4
/***************************************************************
5
 *  Copyright notice
6
 *
7
 *  (c) 2017 AOE GmbH <[email protected]>
8
 *
9
 *  All rights reserved
10
 *
11
 *  This script is part of the TYPO3 project. The TYPO3 project is
12
 *  free software; you can redistribute it and/or modify
13
 *  it under the terms of the GNU General Public License as published by
14
 *  the Free Software Foundation; either version 3 of the License, or
15
 *  (at your option) any later version.
16
 *
17
 *  The GNU General Public License can be found at
18
 *  http://www.gnu.org/copyleft/gpl.html.
19
 *
20
 *  This script is distributed in the hope that it will be useful,
21
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
22
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23
 *  GNU General Public License for more details.
24
 *
25
 *  This copyright notice MUST APPEAR in all copies of the script!
26
 ***************************************************************/
27
28
use AOE\Crawler\Domain\Repository\QueueRepository;
29
use TYPO3\CMS\Core\Utility\GeneralUtility;
30
use TYPO3\CMS\Extbase\Object\ObjectManager;
31
32
/**
33
 * Class Process
34
 *
35
 * @package AOE\Crawler\Domain\Model
36
 */
37
class Process
38
{
39
    const STATE_RUNNING = 'running';
40
    const STATE_CANCELLED = 'cancelled';
41
    const STATE_COMPLETED = 'completed';
42
43
    /**
44
     * @var array
45
     */
46
    protected $row;
47
48
    /**
49
     * @var QueueRepository
50
     */
51
    protected $queueRepository;
52
53
    /**
54
     * @param array $row
55
     */
56 16
    public function __construct($row = [])
57
    {
58 16
        $this->row = $row;
59 16
        $objectManager = GeneralUtility::makeInstance(ObjectManager::class);
60 16
        $this->queueRepository = $objectManager->get(QueueRepository::class);
61 16
    }
62
63
    /**
64
     * Returns the activity state for this process
65
     *
66
     * @param void
67
     * @return boolean
68
     */
69 1
    public function getActive()
70
    {
71 1
        return $this->row['active'];
72
    }
73
74
    /**
75
     * Returns the identifier for the process
76
     *
77
     * @return string
78
     */
79 16
    public function getProcess_id()
80
    {
81 16
        return $this->row['process_id'];
82
    }
83
84
    /**
85
     * Returns the timestamp of the exectime for the first relevant queue item.
86
     * This can be used to determine the runtime
87
     *
88
     * @return int
89
     */
90 1
    public function getTimeForFirstItem()
91
    {
92 1
        $entry = $this->queueRepository->findYoungestEntryForProcess($this);
93 1
        return $entry->getExecutionTime();
94
    }
95
96
    /**
97
     * Returns the timestamp of the exectime for the last relevant queue item.
98
     * This can be used to determine the runtime
99
     *
100
     * @return int
101
     */
102 1
    public function getTimeForLastItem()
103
    {
104 1
        $entry = $this->queueRepository->findOldestEntryForProcess($this);
105 1
        return $entry->getExecutionTime();
106
    }
107
108
    /**
109
     * Returns the difference between first and last processed item
110
     *
111
     * @return int
112
     */
113 5
    public function getRuntime()
114
    {
115 5
        return $this->getTimeForLastItem() - $this->getTimeForFirstItem();
116
    }
117
118
    /**
119
     * Returns the ttl of the process
120
     *
121
     * @return int
122
     */
123 1
    public function getTTL()
124
    {
125 1
        return $this->row['ttl'];
126
    }
127
128
    /**
129
     * Counts the number of items which need to be processed
130
     *
131
     * @return int
132
     * @codeCoverageIgnore
133
     */
134
    public function countItemsProcessed()
135
    {
136
        return $this->queueRepository->countExecutedItemsByProcess($this);
137
    }
138
139
    /**
140
     * Counts the number of items which still need to be processed
141
     *
142
     * @return int
143
     * @codeCoverageIgnore
144
     */
145
    public function countItemsToProcess()
146
    {
147
        return $this->queueRepository->countNonExecutedItemsByProcess($this);
148
    }
149
150
    /**
151
     * Returns the Progress of a crawling process as a percentage value
152
     *
153
     * @return float
154
     */
155 5
    public function getProgress()
156
    {
157 5
        $all = $this->countItemsAssigned();
158 5
        if ($all <= 0) {
159 2
            return 0;
160
        }
161
162 3
        $res = round((100 / $all) * $this->countItemsProcessed());
163
164 3
        if ($res > 100.0) {
165 1
            return 100.0;
166
        }
167 2
        return $res;
168
    }
169
170
    /**
171
     * Returns the number of assigned entries
172
     *
173
     * @return int
174
     */
175 1
    public function countItemsAssigned()
176
    {
177 1
        return $this->row['assigned_items_count'];
178
    }
179
180
    /**
181
     * Return the processes current state
182
     *
183
     * @return string
184
     */
185 4
    public function getState()
186
    {
187 4
        if ($this->getActive() && $this->getProgress() < 100) {
188 1
            $stage = self::STATE_RUNNING;
189 3
        } elseif (!$this->getActive() && $this->getProgress() < 100) {
190 1
            $stage = self::STATE_CANCELLED;
191
        } else {
192 2
            $stage = self::STATE_COMPLETED;
193
        }
194 4
        return $stage;
195
    }
196
197
    /**
198
     * Returns the properties of the object as array
199
     *
200
     * @return array
201
     */
202 1
    public function getRow()
203
    {
204 1
        return $this->row;
205
    }
206
207
    /**
208
     * @param array $row
209
     *
210
     * @return void
211
     */
212 20
    public function setRow(array $row)
213
    {
214 20
        $this->row = $row;
215 20
    }
216
}
217