Completed
Pull Request — master (#27)
by jean
12:06
created

StatsCalculator::calculForOneStep()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 1
dl 0
loc 16
rs 9.7333
c 0
b 0
f 0
1
<?php
2
3
namespace Darkilliant\ProcessBundle\StatDumper;
4
5
class StatsCalculator
6
{
7
    public function calcul(array $dataCollected): array
8
    {
9
        $calculatedStats = [];
10
11
        foreach ($dataCollected as $class => $stat) {
12
            $calculatedStats[$class] = $this->calculForOneStep($stat);
13
        }
14
15
        return [
16
            'stats' => $calculatedStats,
17
            'total' => $this->calculTotals($calculatedStats),
18
        ];
19
    }
20
21
    private function isEventfull($times)
22
    {
23
        $moved = false;
24
        $last = null;
25
        foreach ($times as $time) {
26
            $time = (int) $time;
27
            if (null !== $last && $last != $time) {
28
                $moved = true;
29
                break;
30
            }
31
            $last = $time;
32
        }
33
34
        return $moved;
35
    }
36
37
    private function calculForOneStep($stat)
38
    {
39
        $calculatedStat = [];
40
        $calculatedStat['global'] = array_sum($stat['time']);
41
42
        $calculatedStat['tendance'] = (!$this->isEventfull($stat['time'])) ? '~~~' : '/\/';
43
        $calculatedStat['global_wait'] = array_sum($stat['wait']);
44
        asort($stat['time'], SORT_NUMERIC);
45
        $calculatedStat['best_times'] = array_slice($stat['time'], 0, 3, true);
46
        arsort($stat['time'], SORT_NUMERIC);
47
        $calculatedStat['bad_times'] = array_slice($stat['time'], 0, 3, true);
48
        $calculatedStat['potential_rate'] = '??';
49
        $calculatedStat['position'] = $stat['position'];
50
        $calculatedStat['count_iteration'] = count($stat['time']);
51
52
        return $calculatedStat;
53
    }
54
55
    private function calculTotals($calculatedStats)
56
    {
57
        return [
58
            'global' => array_sum(array_column($calculatedStats, 'global')),
59
            'best_times' => [0, 0, 0],
60
            'bad_times' => [0, 0, 0],
61
            'global_wait' => array_sum(array_column($calculatedStats, 'global_wait')),
62
            'position' => ' ',
63
            'potential_rate' => '??',
64
        ];
65
    }
66
}
67