Passed
Branch monitor-2.5.x (8b654c)
by Tim
01:31
created

Memcache::__construct()   A

Complexity

Conditions 4
Paths 8

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 5
nc 8
nop 1
dl 0
loc 9
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace SimpleSAML\Modules\Monitor\TestSuite\Store;
4
5
use \SimpleSAML\Modules\Monitor\TestConfiguration as TestConfiguration;
6
use \SimpleSAML\Modules\Monitor\TestCase as TestCase;
7
use \SimpleSAML\Modules\Monitor\TestData as TestData;
8
use \SimpleSAML\Modules\Monitor\TestResult as TestResult;
9
use \SimpleSAML\Modules\Monitor\State as State;
10
11
final class Memcache extends \SimpleSAML\Modules\Monitor\TestSuiteFactory
12
{
13
    /**
14
     * var string|null
15
     */
16
    private $class = null;
17
18
    /**
19
     * @param TestConfiguration $configuration
20
     */
21
    public function __construct($configuration)
22
    {
23
        $class = class_exists('Memcache') ? 'Memcache' : (class_exists('Memcached') ? 'Memcached' : null);
24
        if ($class !== null) {
25
            $this->class = $class;
26
            $this->setCategory('Memcache sessions');
27
        }
28
29
        parent::__construct($configuration);
30
    }
31
32
    /**
33
     * @return void
34
     */
35
    public function invokeTest()
36
    {
37
        $testResult = new TestResult('Memcache', 'Overall health');
38
39
        if ($this->class === null) {
40
            $testResult->setState(State::FATAL);
41
            $testResult->setMessage('Missing PHP module');
42
            $this->addTestResult($testResult);
43
        } else {
44
            // Check Memcache-servers
45
46
            $stats = \SimpleSAML_Memcache::getRawStats();
47
            $i = 1;
48
            foreach ($stats as $key => $serverGroup) {
49
                $results = array();
50
                foreach ($serverGroup as $host => $serverStats) {
51
                    $input = array(
52
                        'serverStats' => $serverStats,
53
                        'host' => $host
54
                    );
55
                    $testData = new TestData($input);
56
                    $serverTest = new TestCase\Store\Memcache\Server($testData);
57
                    $results[] = $serverTest->getTestResult();
58
                }
59
60
61
                $input = array(
62
                    'results' => $results,
63
                    'group' => $i
64
                );
65
                $testData = new TestData($input);
66
                $groupTest = new TestCase\Store\Memcache\ServerGroup($testData);
67
                $groupTestResult = $groupTest->getTestResult();
68
                $this->addTestResult($groupTestResult);
69
70
                // Add individual server results
71
                $this->addTestResults($results);
72
73
                $i++;
74
            }
75
76
            $state = $this->calculateState();
77
78
            $testResult->setState($state);
79
        }
80
        $this->setTestResult($testResult);
81
    }
82
}
83