Skip to content

Task/di logger #196

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Jan 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 32 additions & 39 deletions src/SplitIO/Component/Common/Di.php
Original file line number Diff line number Diff line change
@@ -1,29 +1,25 @@
<?php
namespace SplitIO\Component\Common;

use Psr\Log\LoggerInterface;
use SplitIO\Component\Cache\Pool;
use SplitIO\Component\Log\Logger;

/**
* Class Di
* @package SplitIO\Common
*/
class Di
{
const KEY_LOG = 'SPLIT-LOGGER';
private \SplitIO\Component\Log\Logger $logger;

const KEY_FACTORY_TRACKER = 'FACTORY-TRACKER';
private int $factoryTracker = 0;

private string $ipAddress = "";

/**
* @var Singleton The reference to *Singleton* instance of this class
*/
private static $instance;

/**
* @var array
*/
private $container = array();

/**
* Returns the *Singleton* instance of this class.
*
Expand Down Expand Up @@ -67,57 +63,54 @@ public function __wakeup()
}

/**
* @param $key
* @param $instance
* @return int
*/
private function setKey($key, $instance)
public static function trackFactory()
{
$this->container[$key] = $instance;
self::getInstance()->factoryTracker += 1;
return self::getInstance()->factoryTracker;
}

/**
* @param $key
* @return mixed
* @param \SplitIO\Component\Log\Logger $logger
*/
private function getKey($key)
public static function setLogger(Logger $logger)
{
return (isset($this->container[$key])) ? $this->container[$key] : null;
}

/**
* Set an object instance with its key
* @param $key
* @param $instance
*/
public static function set($key, $instance)
{
self::getInstance()->setKey($key, $instance);
if (!isset(self::getInstance()->logger)) {
self::getInstance()->logger = $logger;
return;
}
self::getInstance()->logger->debug("logger was set before, ignoring new instance provided");
}

/**
* Given a key returns the object instance associated with this.
* @param $key
* @return mixed
* @return \SplitIO\Component\Log\Logger
*/
public static function get($key)
public static function getLogger()
{
return self::getInstance()->getKey($key);
if (!isset(self::getInstance()->logger)) {
throw new Exception("logger was not set yet");
}
return self::getInstance()->logger;
}


/**
* @param LoggerInterface $logger
* @param string $ip
*/
public static function setLogger($logger)
public static function setIPAddress(string $ip)
{
self::set(self::KEY_LOG, $logger);
if (empty(self::getInstance()->ipAddress)) {
self::getInstance()->ipAddress = $ip;
return;
}
self::getInstance()->getLogger()->debug("IPAddress was set before, ignoring new instance provided");
}

/**
* @return null|\Psr\Log\LoggerInterface
* @return string
*/
public static function getLogger()
public static function getIPAddress()
{
return self::get(self::KEY_LOG);
return self::getInstance()->ipAddress;
}
}
10 changes: 0 additions & 10 deletions src/SplitIO/Component/Common/ServiceProvider.php

This file was deleted.

1 change: 0 additions & 1 deletion src/SplitIO/Grammar/Condition/Matcher/ContainsString.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<?php
namespace SplitIO\Grammar\Condition\Matcher;

use SplitIO\Split as SplitApp;
use SplitIO\Grammar\Condition\Matcher;

class ContainsString extends AbstractMatcher
Expand Down
1 change: 0 additions & 1 deletion src/SplitIO/Grammar/Condition/Matcher/EndsWith.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<?php
namespace SplitIO\Grammar\Condition\Matcher;

use SplitIO\Split as SplitApp;
use SplitIO\Grammar\Condition\Matcher;

class EndsWith extends AbstractMatcher
Expand Down
1 change: 0 additions & 1 deletion src/SplitIO/Grammar/Condition/Matcher/EqualToBoolean.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<?php
namespace SplitIO\Grammar\Condition\Matcher;

use SplitIO\Split as SplitApp;
use SplitIO\Grammar\Condition\Matcher;

class EqualToBoolean extends AbstractMatcher
Expand Down
1 change: 0 additions & 1 deletion src/SplitIO/Grammar/Condition/Matcher/Regex.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<?php
namespace SplitIO\Grammar\Condition\Matcher;

use SplitIO\Split as SplitApp;
use SplitIO\Grammar\Condition\Matcher;

class Regex extends AbstractMatcher
Expand Down
1 change: 0 additions & 1 deletion src/SplitIO/Grammar/Condition/Matcher/StartsWith.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<?php
namespace SplitIO\Grammar\Condition\Matcher;

use SplitIO\Split as SplitApp;
use SplitIO\Grammar\Condition\Matcher;

class StartsWith extends AbstractMatcher
Expand Down
1 change: 0 additions & 1 deletion src/SplitIO/Grammar/Condition/Matcher/Whitelist.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<?php
namespace SplitIO\Grammar\Condition\Matcher;

use SplitIO\Split as SplitApp;
use SplitIO\Grammar\Condition\Matcher;

class Whitelist extends AbstractMatcher
Expand Down
40 changes: 11 additions & 29 deletions src/SplitIO/Sdk.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,15 @@ public static function factory($apiKey = 'localhost', array $options = array())
//Adding API Key into args array.
$options['apiKey'] = $apiKey;

if (self::instanceExists()) {
return null;
}
//Tracking Factory Instantiation
self::registerInstance();

if ($apiKey == 'localhost') {
//Register Logger
self::registerLogger((isset($options['log'])) ? $options['log'] : array());
//Register Logger
self::registerLogger((isset($options['log'])) ? $options['log'] : array());

if ($apiKey == 'localhost') {
return new LocalhostSplitFactory($options);
} else {
//Register Logger
self::registerLogger((isset($options['log'])) ? $options['log'] : array());

//Register Cache
$cache = self::configureCache((isset($options['cache'])) ? $options['cache'] : array());

Expand All @@ -62,7 +57,7 @@ public static function factory($apiKey = 'localhost', array $options = array())
private static function registerLogger(array $options)
{
$logger = LoggerFactory::setupLogger($options);
ServiceProvider::registerLogger($logger);
Di::setLogger($logger);
}

private static function configureCache(array $options)
Expand Down Expand Up @@ -93,31 +88,18 @@ private static function configureCache(array $options)

private static function setIP($ip)
{
\SplitIO\Component\Common\Di::set('ipAddress', $ip);
}

/**
* Check factory instance
*/
private static function instanceExists()
{
$value = Di::get(Di::KEY_FACTORY_TRACKER);
/* TODO MULTIPLE ALLOW
if (is_null($value) || !$value) {
return false;
}
Di::getLogger()->critical("Factory Instantiation: creating multiple factories is not possible. "
. "You have already created a factory.");
return true;
*/
return false;
\SplitIO\Component\Common\Di::setIPAddress($ip);
}

/**
* Register factory instance
*/
private static function registerInstance()
{
Di::set(Di::KEY_FACTORY_TRACKER, true);
if (Di::trackFactory() > 1) {
Di::getLogger()->warning("Factory Instantiation: You already have an instance of the Split factory. "
. "Make sure you definitely want this additional instance. We recommend keeping only one instance of "
. "the factory at all times (Singleton pattern) and reusing it throughout your application.");
}
}
}
3 changes: 1 addition & 2 deletions src/SplitIO/functions.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<?php
namespace SplitIO;

use SplitIO\Split as SplitApp;
use SplitIO\Grammar\Condition\Partition\TreatmentEnum;

function version()
Expand Down Expand Up @@ -72,7 +71,7 @@ function parseSplitsFile($fileContent)

function getHostIpAddress()
{
$diIpAddress = \SplitIO\Component\Common\Di::get('ipAddress');
$diIpAddress = \SplitIO\Component\Common\Di::getIPAddress();
if (!is_null($diIpAddress) && is_string($diIpAddress) && trim($diIpAddress)) {
return $diIpAddress;
} elseif (isset($_SERVER['SERVER_ADDR']) && is_string($_SERVER['SERVER_ADDR'])
Expand Down
4 changes: 2 additions & 2 deletions tests/Suite/Adapter/RedisAdapterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
use SplitIO\Component\Cache\Storage\Exception\AdapterException;
use \Predis\Response\ServerException;
use \Predis\ClientException;
use SplitIO\Component\Common\Di;
use SplitIO\Test\Suite\Redis\ReflectiveTools;

class RedisAdapterTest extends \PHPUnit\Framework\TestCase
{
Expand All @@ -20,7 +20,7 @@ private function getMockedLogger()
'alert', 'notice', 'write', 'log'))
->getMock();

Di::set(Di::KEY_LOG, $logger);
ReflectiveTools::overrideLogger($logger);

return $logger;
}
Expand Down
2 changes: 0 additions & 2 deletions tests/Suite/Attributes/SdkAttributesTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ class SdkAttributesTest extends \PHPUnit\Framework\TestCase
{
public function testClient()
{
Di::set(Di::KEY_FACTORY_TRACKER, false);

//Testing version string
$this->assertTrue(is_string(\SplitIO\version()));

Expand Down
2 changes: 1 addition & 1 deletion tests/Suite/Component/TrafficTypeTests.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ private function getMockedLogger()
'alert', 'notice', 'write', 'log'))
->getMock();

Di::set(Di::KEY_LOG, $logger);
Di::setLogger($logger);

return $logger;
}
Expand Down
1 change: 0 additions & 1 deletion tests/Suite/DynamicConfigurations/EvaluatorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
use SplitIO\Test\Suite\Redis\ReflectiveTools;
use SplitIO\Component\Cache\SplitCache;
use SplitIO\Component\Cache\SegmentCache;
use SplitIO\Split as SplitApp;
use SplitIO\Grammar\Split;
use SplitIO\Sdk\Evaluator;

Expand Down
1 change: 0 additions & 1 deletion tests/Suite/DynamicConfigurations/SplitTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
use SplitIO\Component\Common\Di;
use SplitIO\Test\Suite\Redis\ReflectiveTools;
use SplitIO\Component\Cache\SplitCache;
use SplitIO\Split as SplitApp;
use SplitIO\Grammar\Split;

class SplitTest extends \PHPUnit\Framework\TestCase
Expand Down
3 changes: 0 additions & 3 deletions tests/Suite/Engine/HashTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
use SplitIO\Engine\Hash\HashAlgorithmEnum;
use SplitIO\Grammar\Split;
use SplitIO\Test\Suite\Redis\ReflectiveTools;
use SplitIO\Split as SplitApp;
use SplitIO\Component\Common\Di;

use SplitIO\Test\Utils;
Expand Down Expand Up @@ -80,8 +79,6 @@ public function testMurmur3HashFunction()

public function testAlgoField()
{
Di::set(Di::KEY_FACTORY_TRACKER, false);

$parameters = array('scheme' => 'redis', 'host' => REDIS_HOST, 'port' => REDIS_PORT, 'timeout' => 881);
$options = array('prefix' => TEST_PREFIX);

Expand Down
2 changes: 1 addition & 1 deletion tests/Suite/Engine/SplitterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class SplitterTest extends \PHPUnit\Framework\TestCase
public function testDiLog()
{
$logger = LoggerFactory::setupLogger(array('adapter' => 'stdout', 'level' => 'error'));
ServiceProvider::registerLogger($logger);
Di::setLogger($logger);

$this->assertTrue(true);
}
Expand Down
18 changes: 7 additions & 11 deletions tests/Suite/InputValidation/FactoryTrackerTest.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?php
namespace SplitIO\Test\Suite\InputValidation;

use SplitIO\Component\Common\Di;
use SplitIO\Test\Suite\Redis\ReflectiveTools;

class FactoryTrackerTest extends \PHPUnit\Framework\TestCase
{
Expand Down Expand Up @@ -31,29 +31,25 @@ private function getMockedLogger()
'alert', 'notice', 'write', 'log'))
->getMock();

Di::set(Di::KEY_LOG, $logger);
ReflectiveTools::overrideLogger($logger);

return $logger;
}

public function testMultipleClientInstantiation()
{
// @TODO FIX WHEN WE ALLOW MULTIPLE
/*
Di::set(Di::KEY_FACTORY_TRACKER, false);
$splitFactory = $this->getFactoryClient();
$this->assertNotNull($splitFactory->client());

$logger = $this->getMockedLogger();

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

$splitFactory2 = $this->getFactoryClient();
$this->assertEquals(null, $splitFactory2);
*/
$this->assertEquals(true, true);
$this->assertNotNull($splitFactory2->client());
}
}
Loading