Skip to content

Commit 8154328

Browse files
authored
Merge pull request #196 from splitio/task/DiLogger
Task/di logger
2 parents c5a8afb + 4daa3be commit 8154328

29 files changed

+155
-144
lines changed

src/SplitIO/Component/Common/Di.php

Lines changed: 32 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,25 @@
11
<?php
22
namespace SplitIO\Component\Common;
33

4-
use Psr\Log\LoggerInterface;
5-
use SplitIO\Component\Cache\Pool;
4+
use SplitIO\Component\Log\Logger;
65

76
/**
87
* Class Di
98
* @package SplitIO\Common
109
*/
1110
class Di
1211
{
13-
const KEY_LOG = 'SPLIT-LOGGER';
12+
private \SplitIO\Component\Log\Logger $logger;
1413

15-
const KEY_FACTORY_TRACKER = 'FACTORY-TRACKER';
14+
private int $factoryTracker = 0;
15+
16+
private string $ipAddress = "";
1617

1718
/**
1819
* @var Singleton The reference to *Singleton* instance of this class
1920
*/
2021
private static $instance;
2122

22-
/**
23-
* @var array
24-
*/
25-
private $container = array();
26-
2723
/**
2824
* Returns the *Singleton* instance of this class.
2925
*
@@ -67,57 +63,54 @@ public function __wakeup()
6763
}
6864

6965
/**
70-
* @param $key
71-
* @param $instance
66+
* @return int
7267
*/
73-
private function setKey($key, $instance)
68+
public static function trackFactory()
7469
{
75-
$this->container[$key] = $instance;
70+
self::getInstance()->factoryTracker += 1;
71+
return self::getInstance()->factoryTracker;
7672
}
7773

7874
/**
79-
* @param $key
80-
* @return mixed
75+
* @param \SplitIO\Component\Log\Logger $logger
8176
*/
82-
private function getKey($key)
77+
public static function setLogger(Logger $logger)
8378
{
84-
return (isset($this->container[$key])) ? $this->container[$key] : null;
85-
}
86-
87-
/**
88-
* Set an object instance with its key
89-
* @param $key
90-
* @param $instance
91-
*/
92-
public static function set($key, $instance)
93-
{
94-
self::getInstance()->setKey($key, $instance);
79+
if (!isset(self::getInstance()->logger)) {
80+
self::getInstance()->logger = $logger;
81+
return;
82+
}
83+
self::getInstance()->logger->debug("logger was set before, ignoring new instance provided");
9584
}
9685

9786
/**
98-
* Given a key returns the object instance associated with this.
99-
* @param $key
100-
* @return mixed
87+
* @return \SplitIO\Component\Log\Logger
10188
*/
102-
public static function get($key)
89+
public static function getLogger()
10390
{
104-
return self::getInstance()->getKey($key);
91+
if (!isset(self::getInstance()->logger)) {
92+
throw new Exception("logger was not set yet");
93+
}
94+
return self::getInstance()->logger;
10595
}
10696

107-
10897
/**
109-
* @param LoggerInterface $logger
98+
* @param string $ip
11099
*/
111-
public static function setLogger($logger)
100+
public static function setIPAddress(string $ip)
112101
{
113-
self::set(self::KEY_LOG, $logger);
102+
if (empty(self::getInstance()->ipAddress)) {
103+
self::getInstance()->ipAddress = $ip;
104+
return;
105+
}
106+
self::getInstance()->getLogger()->debug("IPAddress was set before, ignoring new instance provided");
114107
}
115108

116109
/**
117-
* @return null|\Psr\Log\LoggerInterface
110+
* @return string
118111
*/
119-
public static function getLogger()
112+
public static function getIPAddress()
120113
{
121-
return self::get(self::KEY_LOG);
114+
return self::getInstance()->ipAddress;
122115
}
123116
}

src/SplitIO/Component/Common/ServiceProvider.php

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/SplitIO/Grammar/Condition/Matcher/ContainsString.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<?php
22
namespace SplitIO\Grammar\Condition\Matcher;
33

4-
use SplitIO\Split as SplitApp;
54
use SplitIO\Grammar\Condition\Matcher;
65

76
class ContainsString extends AbstractMatcher

src/SplitIO/Grammar/Condition/Matcher/EndsWith.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<?php
22
namespace SplitIO\Grammar\Condition\Matcher;
33

4-
use SplitIO\Split as SplitApp;
54
use SplitIO\Grammar\Condition\Matcher;
65

76
class EndsWith extends AbstractMatcher

src/SplitIO/Grammar/Condition/Matcher/EqualToBoolean.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<?php
22
namespace SplitIO\Grammar\Condition\Matcher;
33

4-
use SplitIO\Split as SplitApp;
54
use SplitIO\Grammar\Condition\Matcher;
65

76
class EqualToBoolean extends AbstractMatcher

src/SplitIO/Grammar/Condition/Matcher/Regex.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<?php
22
namespace SplitIO\Grammar\Condition\Matcher;
33

4-
use SplitIO\Split as SplitApp;
54
use SplitIO\Grammar\Condition\Matcher;
65

76
class Regex extends AbstractMatcher

src/SplitIO/Grammar/Condition/Matcher/StartsWith.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<?php
22
namespace SplitIO\Grammar\Condition\Matcher;
33

4-
use SplitIO\Split as SplitApp;
54
use SplitIO\Grammar\Condition\Matcher;
65

76
class StartsWith extends AbstractMatcher

src/SplitIO/Grammar/Condition/Matcher/Whitelist.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<?php
22
namespace SplitIO\Grammar\Condition\Matcher;
33

4-
use SplitIO\Split as SplitApp;
54
use SplitIO\Grammar\Condition\Matcher;
65

76
class Whitelist extends AbstractMatcher

src/SplitIO/Sdk.php

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,15 @@ public static function factory($apiKey = 'localhost', array $options = array())
3131
//Adding API Key into args array.
3232
$options['apiKey'] = $apiKey;
3333

34-
if (self::instanceExists()) {
35-
return null;
36-
}
34+
//Tracking Factory Instantiation
3735
self::registerInstance();
3836

39-
if ($apiKey == 'localhost') {
40-
//Register Logger
41-
self::registerLogger((isset($options['log'])) ? $options['log'] : array());
37+
//Register Logger
38+
self::registerLogger((isset($options['log'])) ? $options['log'] : array());
4239

40+
if ($apiKey == 'localhost') {
4341
return new LocalhostSplitFactory($options);
4442
} else {
45-
//Register Logger
46-
self::registerLogger((isset($options['log'])) ? $options['log'] : array());
47-
4843
//Register Cache
4944
$cache = self::configureCache((isset($options['cache'])) ? $options['cache'] : array());
5045

@@ -62,7 +57,7 @@ public static function factory($apiKey = 'localhost', array $options = array())
6257
private static function registerLogger(array $options)
6358
{
6459
$logger = LoggerFactory::setupLogger($options);
65-
ServiceProvider::registerLogger($logger);
60+
Di::setLogger($logger);
6661
}
6762

6863
private static function configureCache(array $options)
@@ -93,31 +88,18 @@ private static function configureCache(array $options)
9388

9489
private static function setIP($ip)
9590
{
96-
\SplitIO\Component\Common\Di::set('ipAddress', $ip);
97-
}
98-
99-
/**
100-
* Check factory instance
101-
*/
102-
private static function instanceExists()
103-
{
104-
$value = Di::get(Di::KEY_FACTORY_TRACKER);
105-
/* TODO MULTIPLE ALLOW
106-
if (is_null($value) || !$value) {
107-
return false;
108-
}
109-
Di::getLogger()->critical("Factory Instantiation: creating multiple factories is not possible. "
110-
. "You have already created a factory.");
111-
return true;
112-
*/
113-
return false;
91+
\SplitIO\Component\Common\Di::setIPAddress($ip);
11492
}
11593

11694
/**
11795
* Register factory instance
11896
*/
11997
private static function registerInstance()
12098
{
121-
Di::set(Di::KEY_FACTORY_TRACKER, true);
99+
if (Di::trackFactory() > 1) {
100+
Di::getLogger()->warning("Factory Instantiation: You already have an instance of the Split factory. "
101+
. "Make sure you definitely want this additional instance. We recommend keeping only one instance of "
102+
. "the factory at all times (Singleton pattern) and reusing it throughout your application.");
103+
}
122104
}
123105
}

src/SplitIO/functions.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<?php
22
namespace SplitIO;
33

4-
use SplitIO\Split as SplitApp;
54
use SplitIO\Grammar\Condition\Partition\TreatmentEnum;
65

76
function version()
@@ -72,7 +71,7 @@ function parseSplitsFile($fileContent)
7271

7372
function getHostIpAddress()
7473
{
75-
$diIpAddress = \SplitIO\Component\Common\Di::get('ipAddress');
74+
$diIpAddress = \SplitIO\Component\Common\Di::getIPAddress();
7675
if (!is_null($diIpAddress) && is_string($diIpAddress) && trim($diIpAddress)) {
7776
return $diIpAddress;
7877
} elseif (isset($_SERVER['SERVER_ADDR']) && is_string($_SERVER['SERVER_ADDR'])

tests/Suite/Adapter/RedisAdapterTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
use SplitIO\Component\Cache\Storage\Exception\AdapterException;
77
use \Predis\Response\ServerException;
88
use \Predis\ClientException;
9-
use SplitIO\Component\Common\Di;
9+
use SplitIO\Test\Suite\Redis\ReflectiveTools;
1010

1111
class RedisAdapterTest extends \PHPUnit\Framework\TestCase
1212
{
@@ -20,7 +20,7 @@ private function getMockedLogger()
2020
'alert', 'notice', 'write', 'log'))
2121
->getMock();
2222

23-
Di::set(Di::KEY_LOG, $logger);
23+
ReflectiveTools::overrideLogger($logger);
2424

2525
return $logger;
2626
}

tests/Suite/Attributes/SdkAttributesTest.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ class SdkAttributesTest extends \PHPUnit\Framework\TestCase
1313
{
1414
public function testClient()
1515
{
16-
Di::set(Di::KEY_FACTORY_TRACKER, false);
17-
1816
//Testing version string
1917
$this->assertTrue(is_string(\SplitIO\version()));
2018

tests/Suite/Component/TrafficTypeTests.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ private function getMockedLogger()
1717
'alert', 'notice', 'write', 'log'))
1818
->getMock();
1919

20-
Di::set(Di::KEY_LOG, $logger);
20+
Di::setLogger($logger);
2121

2222
return $logger;
2323
}

tests/Suite/DynamicConfigurations/EvaluatorTest.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
use SplitIO\Test\Suite\Redis\ReflectiveTools;
55
use SplitIO\Component\Cache\SplitCache;
66
use SplitIO\Component\Cache\SegmentCache;
7-
use SplitIO\Split as SplitApp;
87
use SplitIO\Grammar\Split;
98
use SplitIO\Sdk\Evaluator;
109

tests/Suite/DynamicConfigurations/SplitTest.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
use SplitIO\Component\Common\Di;
55
use SplitIO\Test\Suite\Redis\ReflectiveTools;
66
use SplitIO\Component\Cache\SplitCache;
7-
use SplitIO\Split as SplitApp;
87
use SplitIO\Grammar\Split;
98

109
class SplitTest extends \PHPUnit\Framework\TestCase

tests/Suite/Engine/HashTest.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
use SplitIO\Engine\Hash\HashAlgorithmEnum;
99
use SplitIO\Grammar\Split;
1010
use SplitIO\Test\Suite\Redis\ReflectiveTools;
11-
use SplitIO\Split as SplitApp;
1211
use SplitIO\Component\Common\Di;
1312

1413
use SplitIO\Test\Utils;
@@ -80,8 +79,6 @@ public function testMurmur3HashFunction()
8079

8180
public function testAlgoField()
8281
{
83-
Di::set(Di::KEY_FACTORY_TRACKER, false);
84-
8582
$parameters = array('scheme' => 'redis', 'host' => REDIS_HOST, 'port' => REDIS_PORT, 'timeout' => 881);
8683
$options = array('prefix' => TEST_PREFIX);
8784

tests/Suite/Engine/SplitterTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class SplitterTest extends \PHPUnit\Framework\TestCase
1717
public function testDiLog()
1818
{
1919
$logger = LoggerFactory::setupLogger(array('adapter' => 'stdout', 'level' => 'error'));
20-
ServiceProvider::registerLogger($logger);
20+
Di::setLogger($logger);
2121

2222
$this->assertTrue(true);
2323
}

tests/Suite/InputValidation/FactoryTrackerTest.php

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
22
namespace SplitIO\Test\Suite\InputValidation;
33

4-
use SplitIO\Component\Common\Di;
4+
use SplitIO\Test\Suite\Redis\ReflectiveTools;
55

66
class FactoryTrackerTest extends \PHPUnit\Framework\TestCase
77
{
@@ -31,29 +31,25 @@ private function getMockedLogger()
3131
'alert', 'notice', 'write', 'log'))
3232
->getMock();
3333

34-
Di::set(Di::KEY_LOG, $logger);
34+
ReflectiveTools::overrideLogger($logger);
3535

3636
return $logger;
3737
}
3838

3939
public function testMultipleClientInstantiation()
4040
{
41-
// @TODO FIX WHEN WE ALLOW MULTIPLE
42-
/*
43-
Di::set(Di::KEY_FACTORY_TRACKER, false);
4441
$splitFactory = $this->getFactoryClient();
4542
$this->assertNotNull($splitFactory->client());
4643

4744
$logger = $this->getMockedLogger();
4845

4946
$logger->expects($this->once())
50-
->method('critical')
51-
->with($this->equalTo("Factory Instantiation: creating multiple factories is not possible. "
52-
. "You have already created a factory."));
47+
->method('warning')
48+
->with($this->equalTo("Factory Instantiation: You already have an instance of the Split factory. "
49+
. "Make sure you definitely want this additional instance. We recommend keeping only one instance "
50+
. "of the factory at all times (Singleton pattern) and reusing it throughout your application."));
5351

5452
$splitFactory2 = $this->getFactoryClient();
55-
$this->assertEquals(null, $splitFactory2);
56-
*/
57-
$this->assertEquals(true, true);
53+
$this->assertNotNull($splitFactory2->client());
5854
}
5955
}

0 commit comments

Comments
 (0)