ProcessorCounter   A
last analyzed

Complexity

Total Complexity 15

Size/Duplication

Total Lines 98
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Test Coverage

Coverage 35.29%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 15
c 1
b 0
f 1
lcom 1
cbo 0
dl 0
loc 98
ccs 12
cts 34
cp 0.3529
rs 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __toString() 0 4 1
A getCpuCount() 0 16 4
A hasProcInfo() 0 4 1
A isWindows() 0 4 1
A getSysctlCount() 0 13 3
A getProcCount() 0 8 2
A getWinCount() 0 12 3
1
<?php
2
/**
3
 * File ProcessorCounter.php
4
 *
5
 * @author Edward Pfremmer <[email protected]>
6
 */
7
namespace Epfremme\ProcessQueue\System;
8
9
/**
10
 * Class ProcessorCounter
11
 *
12
 * @package Epfremme\ProcessQueue\Process
13
 */
14
class ProcessorCounter
15
{
16
    const DEFAULT_CPU_COUNT = 4;
17
18
    /**
19
     * @var int
20
     */
21
    private $cpuCount;
22
23
    /**
24
     * @return string
25
     */
26 1
    public function __toString()
27
    {
28 1
        return (string) $this->getCpuCount();
29
    }
30
31
    /**
32
     * @return int
33
     */
34 17
    public function getCpuCount()
35
    {
36 17
        if ($this->cpuCount) {
37
            return $this->cpuCount;
38
        }
39
40 17
        if ($this->hasProcInfo()) {
41 17
            return $this->getProcCount();
42
        }
43
44
        if ($this->isWindows()) {
45
            return $this->getWinCount();
46
        }
47
48
        return $this->getSysctlCount();
49
    }
50
51
    /**
52
     * @return bool
53
     */
54 17
    private function hasProcInfo()
55
    {
56 17
        return is_file('/proc/cpuinfo');
57
    }
58
59
    /**
60
     * @return bool
61
     */
62
    private function isWindows()
63
    {
64
        return 'WIN' == strtoupper(substr(PHP_OS, 0, 3));
65
    }
66
67
    /**
68
     * @return int
69
     */
70
    private function getSysctlCount()
71
    {
72
        $process = @popen('sysctl -a', 'rb');
73
74
        if (false !== $process) {
75
            $output = stream_get_contents($process);
76
77
            preg_match('/hw.ncpu: (\d+)/', $output, $matches);
78
            pclose($process);
79
        }
80
81
        return !empty($matches) ? intval($matches[1][0]) : self::DEFAULT_CPU_COUNT;
82
    }
83
84
    /**
85
     * @return int
86
     */
87 17
    private function getProcCount()
88
    {
89 17
        $cpuinfo = file_get_contents('/proc/cpuinfo');
90
91 17
        preg_match_all('/^processor/m', $cpuinfo, $matches);
92
93 17
        return !empty($matches[0]) ? count($matches[0]) : self::DEFAULT_CPU_COUNT;
94
    }
95
96
    /**
97
     * @return int
98
     */
99
    private function getWinCount()
100
    {
101
        $process = @popen('wmic cpu get NumberOfCores', 'rb');
102
103
        if (false !== $process) {
104
            fgets($process);
105
            $count = intval(fgets($process));
106
            pclose($process);
107
        }
108
109
        return !empty($count) ? $count : self::DEFAULT_CPU_COUNT;
110
    }
111
}
112