IetfFormat   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 84
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 45
c 3
b 0
f 0
dl 0
loc 84
rs 10
wmc 12

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 8 3
A getOutput() 0 17 4
A handle() 0 45 5
1
<?php
2
3
namespace Leankoala\HealthFoundation\Result\Format\Ietf;
4
5
use Leankoala\HealthFoundation\Check\Check;
6
use Leankoala\HealthFoundation\Check\MetricAwareResult;
7
use Leankoala\HealthFoundation\Check\Result;
8
use Leankoala\HealthFoundation\Result\Format\Format;
9
use Leankoala\HealthFoundation\RunResult;
10
11
class IetfFormat implements Format
12
{
13
    const DEFAULT_OUTPUT_PASS = 'The health check was passed.';
14
    const DEFAULT_OUTPUT_WARN = 'Warning.';
15
    const DEFAULT_OUTPUT_FAIL = 'The health check failed.';
16
17
    private $passMessage = self::DEFAULT_OUTPUT_PASS;
18
    private $failMessage = self::DEFAULT_OUTPUT_FAIL;
19
20
    public function __construct($passMessage = null, $failMessage = null)
21
    {
22
        if ($passMessage) {
23
            $this->passMessage = $passMessage;
24
        }
25
26
        if ($failMessage) {
27
            $this->failMessage = $failMessage;
28
        }
29
    }
30
31
    public function handle(RunResult $runResult, $echoValue = true)
32
    {
33
        header('Content-Type: application/json');
34
35
        $output = $this->getOutput($runResult, $this->passMessage, $this->failMessage);
36
37
        $details = [];
38
39
        foreach ($runResult->getResults() as $resultArray) {
40
            /** @var Result $result */
41
            $result = $resultArray['result'];
42
43
            /** @var Check $check */
44
            $check = $resultArray['check'];
45
46
47
            if (is_string($resultArray['identifier'])) {
48
                $identifier = $resultArray['identifier'];
49
            } else {
50
                $identifier = $check->getIdentifier();
51
            }
52
53
            $details[$identifier] = [
54
                'status' => $result->getStatus(),
55
                'output' => $result->getMessage()
56
            ];
57
58
            $description = $resultArray['description'];
59
            if ($description) {
60
                $details[$identifier]['description'] = $description;
61
            }
62
63
            if ($result instanceof MetricAwareResult) {
64
                $details[$identifier]["observedValue"] = $result->getMetricValue();
65
                $details[$identifier]["observedUnit"] = $result->getMetricUnit();
66
            }
67
        }
68
69
        $resultArray = [
70
            'status' => $runResult->getStatus(),
71
            'output' => $output,
72
            'details' => $details
73
        ];
74
75
        echo json_encode($resultArray, JSON_PRETTY_PRINT);
76
    }
77
78
    private function getOutput(RunResult $runResult, $passMessage = null, $failMessage = null)
79
    {
80
        if ($runResult->getStatus() == Result::STATUS_PASS) {
81
            if (is_null($passMessage)) {
82
                $output = self::DEFAULT_OUTPUT_PASS;
83
            } else {
84
                $output = $passMessage;
85
            }
86
        } else {
87
            if (is_null($failMessage)) {
88
                $output = self::DEFAULT_OUTPUT_FAIL;
89
            } else {
90
                $output = $failMessage;
91
            }
92
        }
93
94
        return $output;
95
    }
96
}
97