Skip to content

Commit 3224f38

Browse files
committed
add variation index to feature request events
1 parent 07b9b24 commit 3224f38

File tree

6 files changed

+39
-18
lines changed

6 files changed

+39
-18
lines changed

src/LaunchDarkly/CurlEventPublisher.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ private function createArgs($payload)
6060
$args.= " -H 'Content-Type: application/json'";
6161
$args.= " -H " . escapeshellarg("Authorization: " . $this->_sdkKey);
6262
$args.= " -H 'User-Agent: PHPClient/" . LDClient::VERSION . "'";
63+
$args.= " -H 'X-LaunchDarkly-Event-Schema: " . EventPublisher::CURRENT_SCHEMA_VERSION . "'";
6364
$args.= " -H 'Accept: application/json'";
6465
$args.= " -d " . escapeshellarg($payload);
6566
$args.= " " . escapeshellarg($scheme . $this->_host . ":" . $this->_port . $this->_path . "/bulk");

src/LaunchDarkly/EventPublisher.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
*/
77
interface EventPublisher
88
{
9+
const CURRENT_SCHEMA_VERSION = 2;
10+
911
/**
1012
* @param string $sdkKey The SDK key for your account
1113
* @param mixed[] $options Client configuration settings

src/LaunchDarkly/FeatureFlag.php

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -95,18 +95,18 @@ public function evaluate($user, $featureRequester)
9595
if ($this->isOn()) {
9696
$result = $this->_evaluate($user, $featureRequester, $prereqEvents);
9797
if ($result !== null) {
98-
return new EvalResult($result, $prereqEvents);
98+
return $result;
9999
}
100100
}
101-
$offVariation = $this->getOffVariationValue();
102-
return new EvalResult($offVariation, $prereqEvents);
101+
$offVariationValue = $this->getOffVariationValue();
102+
return new EvalResult($this->_offVariation, $offVariationValue, $prereqEvents);
103103
}
104104

105105
/**
106106
* @param $user LDUser
107107
* @param $featureRequester FeatureRequester
108108
* @param $events
109-
* @return mixed|null
109+
* @return EvalResult|null
110110
*/
111111
private function _evaluate($user, $featureRequester, &$events)
112112
{
@@ -120,21 +120,26 @@ private function _evaluate($user, $featureRequester, &$events)
120120
return null;
121121
} elseif ($prereqFeatureFlag->isOn()) {
122122
$prereqEvalResult = $prereqFeatureFlag->_evaluate($user, $featureRequester, $events);
123-
$variation = $prereqFeatureFlag->getVariation($prereq->getVariation());
124-
if ($prereqEvalResult === null || $variation === null || $prereqEvalResult !== $variation) {
123+
$variation = $prereq->getVariation();
124+
if ($prereqEvalResult === null || $variation === null || $prereqEvalResult->getVariation() !== $variation) {
125125
$prereqOk = false;
126126
}
127127
} else {
128128
$prereqOk = false;
129129
}
130-
array_push($events, Util::newFeatureRequestEvent($prereqFeatureFlag->getKey(), $user, $prereqEvalResult, null, $prereqFeatureFlag->getVersion(), $this->_key));
130+
array_push($events, Util::newFeatureRequestEvent($prereqFeatureFlag->getKey(), $user,
131+
$prereqEvalResult === null ? null : $prereqEvalResult->getVariation(),
132+
$prereqEvalResult === null ? null : $prereqEvalResult->getValue(),
133+
null, $prereqFeatureFlag->getVersion(), $this->_key));
131134
} catch (EvaluationException $e) {
132135
$prereqOk = false;
133136
}
134137
}
135138
}
136139
if ($prereqOk) {
137-
return $this->getVariation($this->evaluateIndex($user, $featureRequester));
140+
$variation = $this->evaluateIndex($user, $featureRequester);
141+
$value = $this->getVariation($variation);
142+
return new EvalResult($variation, $value, $events);
138143
}
139144
return null;
140145
}
@@ -221,6 +226,7 @@ public function isDeleted()
221226

222227
class EvalResult
223228
{
229+
private $_variation = null;
224230
private $_value = null;
225231
/** @var array */
226232
private $_prerequisiteEvents = [];
@@ -230,12 +236,21 @@ class EvalResult
230236
* @param null $value
231237
* @param array $prerequisiteEvents
232238
*/
233-
public function __construct($value, array $prerequisiteEvents)
239+
public function __construct($variation, $value, array $prerequisiteEvents)
234240
{
241+
$this->_variation = $variation;
235242
$this->_value = $value;
236243
$this->_prerequisiteEvents = $prerequisiteEvents;
237244
}
238245

246+
/**
247+
* @return int
248+
*/
249+
public function getVariation()
250+
{
251+
return $this->_variation;
252+
}
253+
239254
/**
240255
* @return null
241256
*/

src/LaunchDarkly/GuzzleEventPublisher.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ public function __construct($sdkKey, array $options = array())
3939
'Content-Type' => 'application/json',
4040
'Authorization' => $this->_sdkKey,
4141
'User-Agent' => 'PHPClient/' . LDClient::VERSION,
42-
'Accept' => 'application/json'
42+
'Accept' => 'application/json',
43+
'X-LaunchDarkly-Event-Schema' => strval(EventPublisher::CURRENT_SCHEMA_VERSION)
4344
],
4445
'timeout' => $options['timeout'],
4546
'connect_timeout' => $options['connect_timeout']

src/LaunchDarkly/LDClient.php

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public function variation($key, $user, $default = false)
149149

150150
try {
151151
if (is_null($user) || is_null($user->getKey())) {
152-
$this->_sendFlagRequestEvent($key, $user, $default, $default);
152+
$this->_sendFlagRequestEvent($key, $user, null, $default, $default);
153153
$this->_logger->warning("Variation called with null user or null user key! Returning default value");
154154
return $default;
155155
}
@@ -164,7 +164,7 @@ public function variation($key, $user, $default = false)
164164
}
165165

166166
if (is_null($flag)) {
167-
$this->_sendFlagRequestEvent($key, $user, $default, $default);
167+
$this->_sendFlagRequestEvent($key, $user, null, $default, $default);
168168
return $default;
169169
}
170170
$evalResult = $flag->evaluate($user, $this->_featureRequester);
@@ -173,15 +173,15 @@ public function variation($key, $user, $default = false)
173173
$this->_eventProcessor->enqueue($e);
174174
}
175175
}
176-
if ($evalResult->getValue() !== null) {
177-
$this->_sendFlagRequestEvent($key, $user, $evalResult->getValue(), $default, $flag->getVersion());
176+
if ($evalResult !== null && $evalResult->getValue() !== null) {
177+
$this->_sendFlagRequestEvent($key, $user, $evalResult->getVariation(), $evalResult->getValue(), $default, $flag->getVersion());
178178
return $evalResult->getValue();
179179
}
180180
} catch (\Exception $e) {
181181
$this->_logger->error("Caught $e");
182182
}
183183
try {
184-
$this->_sendFlagRequestEvent($key, $user, $default, $default);
184+
$this->_sendFlagRequestEvent($key, $user, null, $default, $default);
185185
} catch (\Exception $e) {
186186
$this->_logger->error("Caught $e");
187187
}
@@ -326,17 +326,18 @@ public function flush()
326326
/**
327327
* @param $key string
328328
* @param $user LDUser
329+
* @param $variation int | null
329330
* @param $value mixed
330331
* @param $default
331332
* @param $version int | null
332333
* @param string | null $prereqOf
333334
*/
334-
protected function _sendFlagRequestEvent($key, $user, $value, $default, $version = null, $prereqOf = null)
335+
protected function _sendFlagRequestEvent($key, $user, $variation, $value, $default, $version = null, $prereqOf = null)
335336
{
336337
if ($this->isOffline() || !$this->_send_events) {
337338
return;
338339
}
339-
$this->_eventProcessor->enqueue(Util::newFeatureRequestEvent($key, $user, $value, $default, $version, $prereqOf));
340+
$this->_eventProcessor->enqueue(Util::newFeatureRequestEvent($key, $user, $variation, $value, $default, $version, $prereqOf));
340341
}
341342

342343
protected function _get_default($key, $default)

src/LaunchDarkly/Util.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,11 @@ public static function currentTimeUnixMillis()
3737
* @param null $prereqOf string | null
3838
* @return array
3939
*/
40-
public static function newFeatureRequestEvent($key, $user, $value, $default, $version = null, $prereqOf = null)
40+
public static function newFeatureRequestEvent($key, $user, $variation, $value, $default, $version = null, $prereqOf = null)
4141
{
4242
$event = array();
4343
$event['user'] = $user;
44+
$event['variation'] = $variation;
4445
$event['value'] = $value;
4546
$event['kind'] = "feature";
4647
$event['creationDate'] = Util::currentTimeUnixMillis();

0 commit comments

Comments
 (0)