Completed
Push — master ( 9a3a3c...24148b )
by Michael
14s
created

getDbMonitorLoggingService()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 7
ccs 0
cts 4
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 2
1
<?php
2
/**
3
 * Joomla! Statistics Server
4
 *
5
 * @copyright  Copyright (C) 2013 - 2017 Open Source Matters, Inc. All rights reserved.
6
 * @license    http://www.gnu.org/licenses/gpl-2.0.txt GNU General Public License Version 2 or Later
7
 */
8
9
namespace Joomla\StatsServer\Providers;
10
11
use Joomla\Database\DatabaseDriver;
12
use Joomla\Database\Monitor\LoggingMonitor;
13
use Joomla\DI\Container;
14
use Joomla\DI\ServiceProviderInterface;
15
use Joomla\StatsServer\Database\Migrations;
16
17
/**
18
 * Database service provider
19
 */
20
class DatabaseServiceProvider implements ServiceProviderInterface
21
{
22
	/**
23
	 * Registers the service provider with a DI container.
24
	 *
25
	 * @param   Container  $container  The DI container.
26
	 *
27
	 * @return  void
28
	 */
29 11
	public function register(Container $container): void
30
	{
31 11
		$container->extend(DatabaseDriver::class, [$this, 'extendDatabaseDriverService']);
32
33 11
		$container->alias('db.monitor.logging', LoggingMonitor::class)
34 11
			->share(LoggingMonitor::class, [$this, 'getDbMonitorLoggingService']);
35
36 11
		$container->alias('db.migrations', Migrations::class)
37 11
			->share(Migrations::class, [$this, 'getDbMigrationsService']);
38 11
	}
39
40
	/**
41
	 * Extends the database driver service
42
	 *
43
	 * @param   DatabaseDriver  $db         The database driver to extend.
44
	 * @param   Container       $container  The DI container.
45
	 *
46
	 * @return  DatabaseDriver
47
	 */
48
	public function extendDatabaseDriverService(DatabaseDriver $db, Container $container): DatabaseDriver
49
	{
50
		$db->setMonitor($container->get(LoggingMonitor::class));
51
52
		return $db;
53
	}
54
55
	/**
56
	 * Get the `db.migrations` service
57
	 *
58
	 * @param   Container  $container  The DI container.
59
	 *
60
	 * @return  Migrations
61
	 */
62
	public function getDbMigrationsService(Container $container): Migrations
63
	{
64
		return new Migrations(
65
			$container->get(DatabaseDriver::class),
66
			$container->get('filesystem.migrations')
67
		);
68
	}
69
70
	/**
71
	 * Get the `db.monitor.logging` service
72
	 *
73
	 * @param   Container  $container  The DI container.
74
	 *
75
	 * @return  LoggingMonitor
76
	 */
77
	public function getDbMonitorLoggingService(Container $container): LoggingMonitor
78
	{
79
		$monitor = new LoggingMonitor;
80
		$monitor->setLogger($container->get('monolog.logger.database'));
81
82
		return $monitor;
83
	}
84
}
85