SendReceiveCheck::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 9
c 0
b 0
f 0
ccs 5
cts 5
cp 1
rs 9.6666
cc 1
eloc 7
nc 1
nop 3
crap 1
1
<?php
2
3
namespace TonicHealthCheck\Check\Email;
4
5
use Exception;
6
use Psr\Log\LoggerInterface;
7
use TonicHealthCheck\Check\CheckInterface;
8
use TonicHealthCheck\Check\Email\Receive\EmailReceiveCheck;
9
use TonicHealthCheck\Check\Email\Send\EmailSendCheck;
10
use TonicHealthCheck\Check\ResultInterface;
11
12
/**
13
 * Class SendReceiveCheck.
14
 */
15
class SendReceiveCheck extends AbstractEmailCheck
16
{
17
    const EMAIL_SEND_CHECK_MSG = '%s:Email send check %s';
18
    const EMAIL_RECEIVE_CHECK_MSG = '%s:Email receive check %s';
19
    const CHECK_OK = 'OK';
20
    const CHECK_FAIL = 'FAIL';
21
    const ERROR_MSG = 'Error:%s';
22
23
    /**
24
     * @var LoggerInterface
25
     */
26
    private $healthCheckerLogger;
27
28
    /**
29
     * @var EmailSendCheck
30
     */
31
    private $emailSendCheck;
32
33
    /**
34
     * @var EmailReceiveCheck
35
     */
36
    private $emailReceiveCheck;
37
38
    /**
39
     * Init Dependency.
40
     *
41
     * @param LoggerInterface   $healthCheckerLogger
42
     * @param EmailSendCheck    $emailSendCheck
43
     * @param EmailReceiveCheck $emailReceiveCheck
44
     */
45 4
    public function __construct(
46
        LoggerInterface $healthCheckerLogger,
47
        EmailSendCheck $emailSendCheck,
48
        EmailReceiveCheck $emailReceiveCheck
49
    ) {
50 4
        $this->setHealthCheckerLogger($healthCheckerLogger);
51 4
        $this->setEmailSendCheck($emailSendCheck);
52 4
        $this->setEmailReceiveCheck($emailReceiveCheck);
53 4
    }
54
55
    /**
56
     * Check email send&receive.
57
     *
58
     * @return ResultInterface
59
     *
60
     * @throws Exception
61
     */
62 3
    public function performCheck()
63
    {
64 3
        $this->emailCheck($this->getEmailSendCheck(), self::EMAIL_SEND_CHECK_MSG);
65 2
        $this->emailCheck($this->getEmailReceiveCheck(), self::EMAIL_RECEIVE_CHECK_MSG);
66 1
    }
67
68
    /**
69
     * Return a label describing this test instance.
70
     *
71
     * @return string
72
     */
73 2
    public function getLabel()
74 2
    {
75 1
        return $this->getEmailSendCheck()->getIndent().' <-> '.$this->getEmailReceiveCheck()->getIndent();
76
    }
77
78
    /**
79
     * @return LoggerInterface
80
     */
81 3
    protected function getHealthCheckerLogger()
82
    {
83 3
        return $this->healthCheckerLogger;
84
    }
85
86
    /**
87
     * @return EmailReceiveCheck
88
     */
89 3
    protected function getEmailReceiveCheck()
90
    {
91 3
        return $this->emailReceiveCheck;
92
    }
93
94
    /**
95
     * @return EmailSendCheck
96
     */
97 4
    protected function getEmailSendCheck()
98
    {
99 4
        return $this->emailSendCheck;
100
    }
101
102
    /**
103
     * @param LoggerInterface $healthCheckerLogger
104
     */
105 4
    protected function setHealthCheckerLogger(LoggerInterface $healthCheckerLogger)
106
    {
107 4
        $this->healthCheckerLogger = $healthCheckerLogger;
108 4
    }
109
110
    /**
111
     * @param EmailReceiveCheck $emailReceiveCheck
112
     */
113 4
    protected function setEmailReceiveCheck(EmailReceiveCheck $emailReceiveCheck)
114
    {
115 4
        $this->emailReceiveCheck = $emailReceiveCheck;
116 4
    }
117
118
    /**
119
     * @param EmailSendCheck $emailSendCheck
120
     */
121 4
    protected function setEmailSendCheck(EmailSendCheck $emailSendCheck)
122
    {
123 4
        $this->emailSendCheck = $emailSendCheck;
124 4
    }
125
126
    /**
127
     * @param CheckInterface $emailCheck
128
     * @param string           $checkMsg
129
     *
130
     * @throws Exception
131
     */
132 3
    private function emailCheck(CheckInterface $emailCheck, $checkMsg)
133
    {
134
        try {
135 3
            $emailCheck->performCheck();
136 2
            $this->logSuccessCheck($checkMsg, $emailCheck->getIndent(), self::CHECK_OK);
137 3
        } catch (Exception $exception) {
138 2
            $this->logFailCheck($checkMsg, $emailCheck->getIndent(), $exception->getMessage(), self::CHECK_FAIL);
139 2
            throw $exception;
140
        }
141 2
    }
142
143
    /**
144
     * @param string $checkStatus
145
     * @param string $checkIndent
146
     *
147
     * @return array
148
     */
149 3
    private function getCheckTags($checkStatus, $checkIndent)
150
    {
151
        return [
152 3
            'check_status' => $checkStatus,
153 3
            'check_indent' => $checkIndent,
154 3
        ];
155
    }
156
157
    /**
158
     * @param string $checkMsg
159
     * @param string $checkIndent
160
     * @param string $checkStatus
161
     */
162 2
    private function logSuccessCheck($checkMsg, $checkIndent, $checkStatus = self::CHECK_OK)
163
    {
164 2
        $msg = sprintf(
165 2
            $checkMsg,
166 2
            $checkIndent,
167
            $checkStatus
168 2
        );
169
170 2
        $this->getHealthCheckerLogger()->info(
171 2
            $msg,
172 2
            $this->getCheckTags($checkStatus, $checkIndent)
173 2
        );
174 2
    }
175
176
    /**
177
     * @param string $checkMsg
178
     * @param string $checkIndent
179
     * @param string $errorMsg
180
     * @param string $checkStatus
181
     */
182 2
    private function logFailCheck($checkMsg, $checkIndent, $errorMsg, $checkStatus = self::CHECK_FAIL)
183
    {
184 2
        $msg = sprintf(
185 2
            $checkMsg,
186 2
            $checkIndent,
187
            $checkStatus
188 2
        );
189
190 2
        $msg .= ' '.sprintf(self::ERROR_MSG, $errorMsg);
191
192 2
        $this->getHealthCheckerLogger()->emergency(
193 2
            $msg,
194 2
            $this->getCheckTags($checkStatus, $checkIndent)
195 2
        );
196 2
    }
197
}
198