Passed
Push — master ( 320ea9...0503e7 )
by Dmitry
03:58
created

SendReceiveCheck::logSuccessCheck()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 13
rs 9.4285
cc 1
eloc 8
nc 1
nop 3
1
<?php
2
3
namespace TonicHealthCheck\Check\Email;
4
5
use Psr\Log\LoggerInterface;
6
use TonicHealthCheck\Check\CheckInterface as HCCheckInterface;
7
use TonicHealthCheck\Check\CheckResult;
8
use TonicHealthCheck\Check\Email\Receive\EmailReceiveCheck;
9
use TonicHealthCheck\Check\Email\Send\EmailSendCheck;
10
use ZendDiagnostics\Check\CheckInterface;
11
use ZendDiagnostics\Result\Failure;
12
use ZendDiagnostics\Result\ResultInterface;
13
use ZendDiagnostics\Result\Success;
14
15
/**
16
 * Class SendReceiveCheck
17
 */
18
class SendReceiveCheck implements CheckInterface
19
{
20
    const EMAIL_SEND_CHECK_MSG = '%s:Email send check %s';
21
    const EMAIL_RECEIVE_CHECK_MSG = '%s:Email receive check %s';
22
    const CHECK_OK = 'OK';
23
    const CHECK_FAIL = 'FAIL';
24
    const ERROR_MSG = 'Error:%s';
25
26
    /**
27
     * @var LoggerInterface
28
     */
29
    private $healthCheckerLogger;
30
31
    /**
32
     * @var EmailSendCheck
33
     */
34
    private $emailSendCheck;
35
36
    /**
37
     * @var EmailReceiveCheck
38
     */
39
    private $emailReceiveCheck;
40
41
    /**
42
     * Init Dependency
43
     * @param LoggerInterface   $healthCheckerLogger
44
     * @param EmailSendCheck    $emailSendCheck
45
     * @param EmailReceiveCheck $emailReceiveCheck
46
     */
47
    public function __construct(
48
        LoggerInterface $healthCheckerLogger,
49
        EmailSendCheck $emailSendCheck,
50
        EmailReceiveCheck $emailReceiveCheck
51
    ) {
52
        $this->setHealthCheckerLogger($healthCheckerLogger);
53
        $this->setEmailSendCheck($emailSendCheck);
54
        $this->setEmailReceiveCheck($emailReceiveCheck);
55
    }
56
57
    /**
58
     * Check email send&receive
59
     *
60
     * @return ResultInterface
61
     */
62
    public function check()
63
    {
64
        $resultSend = $this->emailCheck($this->getEmailSendCheck(), self::EMAIL_SEND_CHECK_MSG);
65
        $resultReceive = $this->emailCheck($this->getEmailReceiveCheck(), self::EMAIL_RECEIVE_CHECK_MSG);
66
67
        if (! $resultSend->isOk()) {
68
            $result = new Failure($resultSend->getError());
69
        } elseif (! $resultReceive->isOk()) {
70
            $result = new Failure($resultReceive->getError());
71
        } else {
72
            $result = new Success();
73
        }
74
75
        return $result;
76
    }
77
78
    /**
79
     * Return a label describing this test instance.
80
     *
81
     * @return string
82
     */
83
    public function getLabel()
84
    {
85
        return 'email.check';
86
    }
87
88
    /**
89
     * @return LoggerInterface
90
     */
91
    protected function getHealthCheckerLogger()
92
    {
93
        return $this->healthCheckerLogger;
94
    }
95
96
    /**
97
     * @return EmailReceiveCheck
98
     */
99
    protected function getEmailReceiveCheck()
100
    {
101
        return $this->emailReceiveCheck;
102
    }
103
104
    /**
105
     * @return EmailSendCheck
106
     */
107
    protected function getEmailSendCheck()
108
    {
109
        return $this->emailSendCheck;
110
    }
111
112
    /**
113
     * @param LoggerInterface $healthCheckerLogger
114
     */
115
    protected function setHealthCheckerLogger(LoggerInterface $healthCheckerLogger)
116
    {
117
        $this->healthCheckerLogger = $healthCheckerLogger;
118
    }
119
120
    /**
121
     * @param EmailReceiveCheck $emailReceiveCheck
122
     */
123
    protected function setEmailReceiveCheck(EmailReceiveCheck $emailReceiveCheck)
124
    {
125
        $this->emailReceiveCheck = $emailReceiveCheck;
126
    }
127
128
    /**
129
     * @param EmailSendCheck $emailSendCheck
130
     */
131
    protected function setEmailSendCheck(EmailSendCheck $emailSendCheck)
132
    {
133
        $this->emailSendCheck = $emailSendCheck;
134
    }
135
136
    /**
137
     * @param HCCheckInterface $emailCheck
138
     * @param string         $checkMsg
139
     *
140
     * @return CheckResult
141
     */
142
    private function emailCheck(HCCheckInterface $emailCheck, $checkMsg)
143
    {
144
        $receiveCheckResult = $emailCheck->performCheck();
145
        $checkIndent = $emailCheck->getIndent();
0 ignored issues
show
Bug introduced by
Are you sure the assignment to $checkIndent is correct as $emailCheck->getIndent() (which targets TonicHealthCheck\Check\CheckInterface::getIndent()) seems to always return null.

This check looks for function or method calls that always return null and whose return value is assigned to a variable.

class A
{
    function getObject()
    {
        return null;
    }

}

$a = new A();
$object = $a->getObject();

The method getObject() can return nothing but null, so it makes no sense to assign that value to a variable.

The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes.

Loading history...
146
        if ($receiveCheckResult->isOk()) {
147
            $this->logSuccessCheck($checkMsg, $checkIndent, self::CHECK_OK);
148
        } else {
149
            $this->logFailCheck($checkMsg, $checkIndent, $receiveCheckResult->getError()->getMessage(), self::CHECK_FAIL);
150
        }
151
152
        return $receiveCheckResult;
153
    }
154
155
    /**
156
     * @param string $checkStatus
157
     * @param string $checkIndent
158
     *
159
     * @return array
160
     */
161
    private function getCheckTags($checkStatus, $checkIndent)
162
    {
163
        return [
164
            'check_status' => $checkStatus,
165
            'check_indent' => $checkIndent,
166
        ];
167
    }
168
169
    /**
170
     * @param string $checkMsg
171
     * @param string $checkIndent
172
     * @param string $checkStatus
173
     */
174
    private function logSuccessCheck($checkMsg, $checkIndent, $checkStatus = self::CHECK_OK)
175
    {
176
        $msg = sprintf(
177
            $checkMsg,
178
            $checkIndent,
179
            $checkStatus
180
        );
181
182
        $this->getHealthCheckerLogger()->info(
183
            $msg,
184
            $this->getCheckTags($checkStatus, $checkIndent)
185
        );
186
    }
187
188
    /**
189
     * @param string $checkMsg
190
     * @param string $checkIndent
191
     * @param string $errorMsg
192
     * @param string $checkStatus
193
     */
194
    private function logFailCheck($checkMsg, $checkIndent, $errorMsg, $checkStatus = self::CHECK_FAIL)
195
    {
196
        $msg = sprintf(
197
            $checkMsg,
198
            $checkIndent,
199
            $checkStatus
200
        );
201
202
        $msg .= ' '.sprintf(self::ERROR_MSG, $errorMsg);
203
204
        $this->getHealthCheckerLogger()->emergency(
205
            $msg,
206
            $this->getCheckTags($checkStatus, $checkIndent)
207
        );
208
    }
209
}
210