Skip to content

Commit 7969aa0

Browse files
authored
Merge pull request #137 from splitio/feature/doNotSendIP
Feature/do not send ip
2 parents 2b50267 + 8ab97d9 commit 7969aa0

File tree

10 files changed

+79
-40
lines changed

10 files changed

+79
-40
lines changed

CHANGES.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
6.2.3 (Oct XX, 2019)
2+
- Added flag `IPAddressesEnabled` into options to enable/disable sending MachineName and MachineIP when data is posted in headers.
3+
14
6.2.2 (Sep 18, 2019)
25
- Fetch multiple splits at once on getTreatments/getTreatmentsWithConfig
36
- Removed MatcherClient (DependencyMatcher now uses Evaluator directly)

src/SplitIO/Component/Cache/ImpressionCache.php

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,19 @@
33

44
use SplitIO\Component\Common\Di;
55
use SplitIO\Component\Cache\KeyFactory;
6+
use SplitIO\Sdk\QueueMetadataMessage;
67

78
class ImpressionCache
89
{
910
const IMPRESSIONS_QUEUE_KEY = "SPLITIO.impressions";
1011
const IMPRESSION_KEY_DEFAULT_TTL = 3600;
1112

12-
public function logImpressions($impressions, $metadata)
13+
public function logImpressions($impressions, QueueMetadataMessage $metadata)
1314
{
1415
$toStore = array_map(
1516
function ($imp) use ($metadata) {
1617
return json_encode(array(
17-
"m" => array(
18-
"s" => $metadata['sdkVersion'],
19-
"i" => $metadata['machineIp'],
20-
"n" => $metadata['machineName'],
21-
),
18+
'm' => $metadata->toArray(),
2219
"i" => array(
2320
"k" => $imp->getId(),
2421
"b" => $imp->getBucketingKey(),

src/SplitIO/Sdk/Client.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use SplitIO\Component\Cache\MetricsCache;
88
use SplitIO\Sdk\Events\EventDTO;
99
use SplitIO\Sdk\Events\EventQueueMessage;
10-
use SplitIO\Sdk\Events\EventQueueMetadataMessage;
10+
use SplitIO\Sdk\QueueMetadataMessage;
1111
use SplitIO\Sdk\Impressions\Impression;
1212
use SplitIO\TreatmentImpression;
1313
use SplitIO\Sdk\Impressions\ImpressionLabel;
@@ -38,6 +38,9 @@ public function __construct($options = array())
3838
if (isset($options['impressionListener'])) {
3939
$this->impressionListener = new \SplitIO\Sdk\ImpressionListenerWrapper($options['impressionListener']);
4040
}
41+
$this->queueMetadata = new QueueMetadataMessage(
42+
isset($options['IPAddressesEnabled']) ? $options['IPAddressesEnabled'] : true
43+
);
4144
}
4245

4346
/**
@@ -305,7 +308,7 @@ private function doInputValidationForTreatments($key, $featureNames, array $attr
305308
private function registerData($impressions, $attributes, $metricName, $latency = null)
306309
{
307310
try {
308-
TreatmentImpression::log($impressions);
311+
TreatmentImpression::log($impressions, $this->queueMetadata);
309312
if (isset($this->impressionListener)) {
310313
$this->impressionListener->sendDataToClient($impressions, $attributes);
311314
}
@@ -541,8 +544,7 @@ public function track($key, $trafficType, $eventType, $value = null, $properties
541544

542545
try {
543546
$eventDTO = new EventDTO($key, $trafficType, $eventType, $value, $properties);
544-
$eventMessageMetadata = new EventQueueMetadataMessage();
545-
$eventQueueMessage = new EventQueueMessage($eventMessageMetadata, $eventDTO);
547+
$eventQueueMessage = new EventQueueMessage($this->queueMetadata, $eventDTO);
546548
return EventsCache::addEvent($eventQueueMessage);
547549
} catch (\Exception $exception) {
548550
// @codeCoverageIgnoreStart

src/SplitIO/Sdk/Events/EventQueueMessage.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<?php
22
namespace SplitIO\Sdk\Events;
33

4+
use SplitIO\Sdk\QueueMetadataMessage;
5+
46
class EventQueueMessage
57
{
68
/**
@@ -18,15 +20,15 @@ class EventQueueMessage
1820
* @param $metadata
1921
* @param $event
2022
*/
21-
public function __construct(EventQueueMetadataMessage $metadata, EventDTO $event)
23+
public function __construct(QueueMetadataMessage $metadata, EventDTO $event)
2224
{
2325
$this->metadata = $metadata;
2426
$this->event = $event;
2527
}
2628

2729

2830
/**
29-
* @return EventQueueMetadataMessage
31+
* @return QueueMetadataMessage
3032
*/
3133
public function getMetadata()
3234
{
@@ -36,7 +38,7 @@ public function getMetadata()
3638
/**
3739
* @param mixed $metadata
3840
*/
39-
public function setMetadata(EventQueueMetadataMessage $metadata)
41+
public function setMetadata(QueueMetadataMessage $metadata)
4042
{
4143
$this->metadata = $metadata;
4244
}

src/SplitIO/Sdk/Events/EventQueueMetadataMessage.php renamed to src/SplitIO/Sdk/QueueMetadataMessage.php

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
2-
namespace SplitIO\Sdk\Events;
2+
namespace SplitIO\Sdk;
33

4-
class EventQueueMetadataMessage
4+
class QueueMetadataMessage
55
{
66
private $sdkVersion;
77

@@ -10,16 +10,23 @@ class EventQueueMetadataMessage
1010
private $machineName;
1111

1212
/**
13-
* EventQueueMetadataMessage constructor.
13+
* QueueMetadataMessage constructor.
1414
*/
15-
public function __construct()
15+
public function __construct($IPAddressesEnabled = true)
1616
{
1717
$this->sdkVersion = 'php-' . \SplitIO\version();
18-
$this->machineIP = \SplitIO\getHostIpAddress();
19-
$this->machineName = 'unknown';
18+
$this->machineIP = 'NA';
19+
$this->machineName = 'NA';
20+
if ($IPAddressesEnabled) {
21+
$this->machineIP = \SplitIO\getHostIpAddress();
22+
if ($this->machineIP != 'unknown') {
23+
$this->machineName = 'ip-' . str_replace('.', '-', $this->machineIP);
24+
} else {
25+
$this->machineName = 'unknown';
26+
}
27+
}
2028
}
2129

22-
2330
/**
2431
* @return mixed
2532
*/

src/SplitIO/TreatmentImpression.php

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,26 @@
44
use SplitIO\Component\Cache\ImpressionCache;
55
use SplitIO\Sdk\Impressions\Impression;
66
use SplitIO\Component\Common\Di;
7+
use SplitIO\Sdk\QueueMetadataMessage;
78

89
class TreatmentImpression
910
{
1011
/**
1112
* @param \SplitIO\Sdk\Impressions\Impression $impressions
1213
* @return bool
1314
*/
14-
public static function log($impressions)
15+
public static function log($impressions, QueueMetadataMessage $metadata)
1516
{
1617
try {
1718
Di::getLogger()->debug($impressions);
1819
if (is_null($impressions) || (is_array($impressions) && 0 == count($impressions))) {
19-
return;
20+
return null;
2021
}
2122
$impressionCache = new ImpressionCache();
2223
$toStore = (is_array($impressions)) ? $impressions : array($impressions);
2324
return $impressionCache->logImpressions(
2425
$toStore,
25-
array(
26-
'sdkVersion' => 'php-' . \SplitIO\version(),
27-
'machineIp' => \SplitIO\getHostIpAddress(),
28-
'machineName' => null, // TODO
29-
)
26+
$metadata
3027
);
3128
} catch (\Exception $e) {
3229
Di::getLogger()->warning('Unable to write impression back to redis.');

src/SplitIO/Version.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33

44
class Version
55
{
6-
const CURRENT = '6.2.2';
6+
const CURRENT = '6.2.3-rc1';
77
}

tests/Suite/Sdk/ImpressionsTest.php

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use SplitIO\Sdk\Impressions\Impression;
77
use SplitIO\Test\Suite\Redis\ReflectiveTools;
88
use SplitIO\Component\Cache\ImpressionCache;
9+
use SplitIO\Sdk\QueueMetadataMessage;
910

1011
class ImpressionsTest extends \PHPUnit_Framework_TestCase
1112
{
@@ -26,6 +27,7 @@ public function testImpressionsAreAdded()
2627
$redisClient = ReflectiveTools::clientFromCachePool(Di::getCache());
2728

2829
$redisClient->del(ImpressionCache::IMPRESSIONS_QUEUE_KEY);
30+
$queueMetadata = new QueueMetadataMessage();
2931

3032
TreatmentImpression::log(new Impression(
3133
'someMatchingKey',
@@ -35,7 +37,7 @@ public function testImpressionsAreAdded()
3537
123456,
3638
321654,
3739
'someBucketingKey'
38-
));
40+
), $queueMetadata);
3941

4042
// Assert that the TTL is within a 10-second range (between it was set and retrieved).
4143
$ttl = $redisClient->ttl(ImpressionCache::IMPRESSIONS_QUEUE_KEY);
@@ -47,6 +49,7 @@ public function testImpressionsAreAdded()
4749

4850
$this->assertEquals($decoded['m']['s'], 'php-'.\Splitio\version());
4951
$this->assertEquals($decoded['m']['i'], 'unknown');
52+
$this->assertEquals($decoded['m']['n'], 'unknown');
5053
$this->assertEquals($decoded['i']['k'], 'someMatchingKey');
5154
$this->assertEquals($decoded['i']['b'], 'someBucketingKey');
5255
$this->assertEquals($decoded['i']['f'], 'someFeature');
@@ -64,14 +67,16 @@ public function testExpirationOnlyOccursOnce()
6467

6568
$sdkConfig = array(
6669
'log' => array('adapter' => 'stdout'),
67-
'cache' => array('adapter' => 'predis', 'parameters' => $parameters, 'options' => $options)
70+
'cache' => array('adapter' => 'predis', 'parameters' => $parameters, 'options' => $options),
71+
'IPAddressEnabled' => false
6872
);
6973

7074
//Initializing the SDK instance.
7175
\SplitIO\Sdk::factory('asdqwe123456', $sdkConfig);
7276

7377
$redisClient = ReflectiveTools::clientFromCachePool(Di::getCache());
7478
$redisClient->del(ImpressionCache::IMPRESSIONS_QUEUE_KEY);
79+
$queueMetadata = new QueueMetadataMessage(false);
7580

7681
TreatmentImpression::log(new Impression(
7782
'someMatchingKey',
@@ -81,7 +86,7 @@ public function testExpirationOnlyOccursOnce()
8186
123456,
8287
321654,
8388
'someBucketingKey'
84-
));
89+
), $queueMetadata);
8590

8691
sleep(3);
8792

@@ -93,11 +98,25 @@ public function testExpirationOnlyOccursOnce()
9398
123456,
9499
321654,
95100
'someBucketingKey'
96-
));
101+
), $queueMetadata);
97102

98103
$ttl = $redisClient->ttl(ImpressionCache::IMPRESSIONS_QUEUE_KEY);
99104
// $ttl should be lower than or equalt the default impressions TTL minus 3 seconds,
100105
// since it should have not been resetted with the last imrpession logged.
101106
$this->assertLessThanOrEqual(ImpressionCache::IMPRESSION_KEY_DEFAULT_TTL - 3, $ttl);
107+
108+
$imp = $redisClient->rpop(ImpressionCache::IMPRESSIONS_QUEUE_KEY);
109+
$decoded = json_decode($imp, true);
110+
111+
$this->assertEquals($decoded['m']['s'], 'php-'.\Splitio\version());
112+
$this->assertEquals($decoded['m']['i'], 'NA');
113+
$this->assertEquals($decoded['m']['n'], 'NA');
114+
$this->assertEquals($decoded['i']['k'], 'someMatchingKey');
115+
$this->assertEquals($decoded['i']['b'], 'someBucketingKey');
116+
$this->assertEquals($decoded['i']['f'], 'someFeature');
117+
$this->assertEquals($decoded['i']['t'], 'on');
118+
$this->assertEquals($decoded['i']['r'], 'label1');
119+
$this->assertEquals($decoded['i']['m'], 123456);
120+
$this->assertEquals($decoded['i']['c'], 321654);
102121
}
103122
}

tests/Suite/Sdk/SdkClientTest.php

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -209,13 +209,22 @@ public function testLocalClientYAML()
209209
);
210210
}
211211

212-
private function validateLastImpression($redisClient, $feature, $key, $treatment)
213-
{
212+
private function validateLastImpression(
213+
$redisClient,
214+
$feature,
215+
$key,
216+
$treatment,
217+
$machineName = 'unknown',
218+
$machineIP = 'unknown'
219+
) {
214220
$raw = $redisClient->rpop(ImpressionCache::IMPRESSIONS_QUEUE_KEY);
215221
$parsed = json_decode($raw, true);
222+
echo "parsed " . json_encode($parsed) . "\n";
216223
$this->assertEquals($parsed['i']['f'], $feature);
217224
$this->assertEquals($parsed['i']['k'], $key);
218225
$this->assertEquals($parsed['i']['t'], $treatment);
226+
$this->assertEquals($parsed['m']['i'], $machineIP);
227+
$this->assertEquals($parsed['m']['n'], $machineName);
219228
}
220229

221230
public function testClient()
@@ -544,7 +553,8 @@ public function testGetTreatmentsWithDistinctFeatures()
544553

545554
$sdkConfig = array(
546555
'log' => array('adapter' => 'stdout'),
547-
'cache' => array('adapter' => 'predis', 'parameters' => $parameters, 'options' => $options)
556+
'cache' => array('adapter' => 'predis', 'parameters' => $parameters, 'options' => $options),
557+
'IPAddressesEnabled' => false
548558
);
549559

550560
//Initializing the SDK instance.
@@ -565,7 +575,7 @@ public function testGetTreatmentsWithDistinctFeatures()
565575

566576
//Check impressions generated
567577
$redisClient = ReflectiveTools::clientFromCachePool(Di::getCache());
568-
$this->validateLastImpression($redisClient, 'sample_feature', 'user1', 'on');
578+
$this->validateLastImpression($redisClient, 'sample_feature', 'user1', 'on', 'NA', 'NA');
569579
}
570580

571581
public function testGetTreatmentsWithRepeteadedFeatures()
@@ -580,7 +590,8 @@ public function testGetTreatmentsWithRepeteadedFeatures()
580590

581591
$sdkConfig = array(
582592
'log' => array('adapter' => 'stdout'),
583-
'cache' => array('adapter' => 'predis', 'parameters' => $parameters, 'options' => $options)
593+
'cache' => array('adapter' => 'predis', 'parameters' => $parameters, 'options' => $options),
594+
'ipAddress' => '1.2.3.4'
584595
);
585596

586597
//Initializing the SDK instance.
@@ -602,12 +613,13 @@ public function testGetTreatmentsWithRepeteadedFeatures()
602613

603614
// Check impressions
604615
$redisClient = ReflectiveTools::clientFromCachePool(Di::getCache());
605-
$this->validateLastImpression($redisClient, 'sample_feature', 'user1', 'on');
616+
$this->validateLastImpression($redisClient, 'sample_feature', 'user1', 'on', 'ip-1-2-3-4', '1.2.3.4');
606617
}
607618

608619
public function testGetTreatmentsWithRepeteadedAndNullFeatures()
609620
{
610621
Di::set(Di::KEY_FACTORY_TRACKER, false);
622+
Di::set('ipAddress', null); // unset ipaddress from previous test
611623

612624
//Testing version string
613625
$this->assertTrue(is_string(\SplitIO\version()));
@@ -680,5 +692,4 @@ public function testGetTreatmentsFetchesSplitsInOneCall()
680692
$client = new Client();
681693
$client->getTreatments('key1', array('split1', 'split2', 'split3'));
682694
}
683-
684695
}

tests/Suite/Sdk/SdkReadOnlyTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use SplitIO\TreatmentImpression;
1010
use SplitIO\Grammar\Condition\Partition\TreatmentEnum;
1111
use SplitIO\Sdk\Impressions\Impression;
12+
use SplitIO\Sdk\QueueMetadataMessage;
1213

1314
class SdkReadOnlyTest extends \PHPUnit_Framework_TestCase
1415
{
@@ -126,6 +127,6 @@ public function testException()
126127
'something'
127128
);
128129

129-
TreatmentImpression::log($impression);
130+
TreatmentImpression::log($impression, new QueueMetadataMessage());
130131
}
131132
}

0 commit comments

Comments
 (0)