Completed
Push — 4.0 ( a100dc...0fc1f3 )
by Marco
32:48
created

LogManager::getHandler()   B

Complexity

Conditions 4
Paths 4

Size

Total Lines 25
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 6.8476

Importance

Changes 3
Bugs 1 Features 0
Metric Value
c 3
b 1
f 0
dl 0
loc 25
ccs 7
cts 16
cp 0.4375
rs 8.5806
cc 4
eloc 15
nc 4
nop 2
crap 6.8476
1
<?php namespace Comodojo\Dispatcher\Components;
2
3
use \Monolog\Handler\HandlerInterface;
4
use \Monolog\Logger;
5
use \Monolog\Handler\StreamHandler;
6
use \Monolog\Handler\SyslogHandler;
7
use \Monolog\Handler\ErrorLogHandler;
8
use \Monolog\Handler\NullHandler;
9
use \Comodojo\Dispatcher\Components\Configuration;
10
11
/**
12
 * @package     Comodojo Dispatcher
13
 * @author      Marco Giovinazzi <[email protected]>
14
 * @author      Marco Castiello <[email protected]>
15
 * @license     GPL-3.0+
16
 *
17
 * LICENSE:
18
 *
19
 * This program is free software: you can redistribute it and/or modify
20
 * it under the terms of the GNU Affero General Public License as
21
 * published by the Free Software Foundation, either version 3 of the
22
 * License, or (at your option) any later version.
23
 *
24
 * This program is distributed in the hope that it will be useful,
25
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
26
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27
 * GNU Affero General Public License for more details.
28
 *
29
 * You should have received a copy of the GNU Affero General Public License
30
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
31
 */
32
33
34
class LogManager {
35
36
    public $configuration;
37
38
    private static $levels = array(
39
        'INFO' => Logger::INFO,
40
        'NOTICE' => Logger::NOTICE,
41
        'WARNING' => Logger::WARNING,
42
        'ERROR' => Logger::ERROR,
43
        'CRITICAL' => Logger::CRITICAL,
44
        'ALERT' => Logger::ALERT,
45
        'EMERGENCY' => Logger::EMERGENCY,
46
        'DEBUG' => Logger::DEBUG
47
    );
48
49 2
    public function __construct(Configuration $configuration) {
50
51 2
        $this->configuration = $configuration;
52
53 2
    }
54
55 2
    public function init() {
56
57 2
        $log = $this->configuration->get('log');
58
59 2
        $name = empty($log['name']) ? 'dispatcher' : $log['name'];
60
61 2
        $logger = new Logger($name);
62
63
        if (
64 2
            empty($log) ||
65 2
            ( isset($log['enabled']) && $log['enabled'] === false ) ||
66 2
            empty($log['providers'])
67 2
        ) {
68
69
            $logger->pushHandler( new NullHandler( self::getLevel() ) );
70
71
        } else {
72
73 2
            foreach ($log['providers'] as $provider => $parameters) {
74
75 2
                $handler = $this->getHandler($provider, $parameters);
76
77 2
                if ( $handler instanceof HandlerInterface ) $logger->pushHandler($handler);
78
79 2
            }
80
81
        }
82
83 2
        return $logger;
84
85
    }
86
87
    /**
88
     * Create the logger
89
     *
90
     * @param Configuration $configuration
91
     *
92
     * @return Logger
93
     */
94 2
    public static function create(Configuration $configuration) {
95
96 2
        $log = new LogManager($configuration);
97
98 2
        return $log->init();
99
100
    }
101
102 2
    protected function getHandler($provider, $parameters) {
103
104 2
        switch ( $parameters['type'] ) {
105
106 2
            case 'StreamHandler':
107 2
                $handler = $this->getStreamHandler($provider, $parameters);
108 2
                break;
109
110
            case 'SyslogHandler':
111
                $handler = $this->getSyslogHandler($provider, $parameters);
112
                break;
113
114
            case 'ErrorLogHandler':
115
                $handler = $this->getErrorLogHandler($provider, $parameters);
116
                break;
117
118
            default:
119
                $handler = null;
120
                break;
121
122 2
        }
123
124 2
        return $handler;
125
126
    }
127
128 2
    protected function getStreamHandler($name, $parameters) {
0 ignored issues
show
Unused Code introduced by
The parameter $name is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
129
130 2
        $stream = $this->configuration->get('base-path').'/'.(empty($parameters['stream']) ? 'dispatcher.log' : $parameters['stream']);
131
132 2
        $level = self::getLevel( empty($parameters['level']) ? null : $parameters['level'] );
133
134 2
        $bubble = self::getBubble( empty($parameters['bubble']) ? true : $parameters['bubble'] );
135
136 2
        $filePermission = self::getFilePermission( empty($parameters['filePermission']) ? null : $parameters['filePermission'] );
137
138 2
        $useLocking = self::getLocking( empty($parameters['useLocking']) ? false : $parameters['useLocking'] );
139
140 2
        return new StreamHandler($stream, $level, $bubble, $filePermission, $useLocking);
141
142
    }
143
144
    protected function getSyslogHandler($name, $parameters) {
0 ignored issues
show
Unused Code introduced by
The parameter $name is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
145
146
        if ( empty($parameters['ident']) ) return null;
147
148
        $facility = empty($parameters['facility']) ? LOG_USER : $parameters['facility'];
149
150
        $level = self::getLevel( empty($parameters['level']) ? null : $parameters['level'] );
151
152
        $bubble = self::getBubble( empty($parameters['bubble']) ? true : $parameters['bubble'] );
153
154
        $logopts = empty($parameters['logopts']) ? LOG_PID : $parameters['logopts'];
155
156
        return new SyslogHandler($parameters['ident'], $facility, $level, $bubble, $logopts);
157
158
    }
159
160
    protected function getErrorLogHandler($name, $parameters) {
0 ignored issues
show
Unused Code introduced by
The parameter $name is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
161
162
        $messageType = empty($parameters['messageType']) ? ErrorLogHandler::OPERATING_SYSTEM : $parameters['messageType'];
163
164
        $level = self::getLevel( empty($parameters['level']) ? null : $parameters['level'] );
165
166
        $bubble = self::getBubble( empty($parameters['bubble']) ? true : $parameters['bubble'] );
167
168
        $expandNewlines = self::getExpandNewlines( empty($parameters['expandNewlines']) ? false : $parameters['expandNewlines'] );
169
170
        return new ErrorLogHandler($messageType, $level, $bubble, $expandNewlines);
171
172
    }
173
174
    /**
175
     * Map provided log level to level code
176
     *
177
     * @param   string    $level
178
     *
179
     * @return  integer
180
     */
181 2
    protected static function getLevel($level = null) {
182
183 2
        $level = strtoupper($level);
184
185 2
        if ( array_key_exists($level, self::$levels) ) return self::$levels[$level];
186
187
        return self::$levels['DEBUG'];
188
189
    }
190
191 2
    protected static function getBubble($bubble) {
192
193 2
        return filter_var($bubble, FILTER_VALIDATE_BOOLEAN, array(
194
            'options' => array(
195
                'default' => true
196 2
            )
197 2
        ));
198
199
    }
200
201 2
    protected static function getFilePermission($filepermission = null) {
202
203 2
        if ( is_null($filepermission) ) return null;
204
205
        return filter_var($filepermission, FILTER_VALIDATE_INT, array(
206
            'options' => array(
207
                'default' => 0644
208
            ),
209
            'flags' => FILTER_FLAG_ALLOW_OCTAL
210
        ));
211
212
    }
213
214 2
    protected static function getLocking($uselocking) {
215
216 2
        return filter_var($uselocking, FILTER_VALIDATE_BOOLEAN, array(
217
            'options' => array(
218
                'default' => false
219 2
            )
220 2
        ));
221
222
    }
223
224
    protected static function getExpandNewlines($expandNewlines) {
225
226
        return filter_var($expandNewlines, FILTER_VALIDATE_BOOLEAN, array(
227
            'options' => array(
228
                'default' => false
229
            )
230
        ));
231
232
    }
233
234
}
235