launchdarkly / node-server-sdk

LaunchDarkly Server-side SDK for Node
Other
79 stars 65 forks source link

Calls to `track` not populating an experiment with data #271

Closed alexdmiller closed 1 year ago

alexdmiller commented 1 year ago

Describe the bug

I created a feature flag, a metric, and an experiment which uses that feature flag and metric. I am not able to consistently log metrics to my experiment using client.track(...) when there is a time delay between evaluating the feature flag and tracking the metric.

To reproduce

The following code fails to populate the experiment with data.

import * as LaunchDarkly from 'launchdarkly-node-server-sdk';

const LD_KEY = '...';
const DELAY = 30000; // 30 seconds

(async () => {
  const context: LaunchDarkly.LDContext = {
    kind: 'user',
    key: `user-key-alex`,
    firstName: 'Alex',
    lastName: 'Miller',
    email: 'alexmiller@gmail.com',
  };
  const client = LaunchDarkly.init(LD_KEY, { stream: false });
  await client.waitForInitialization();
  await client.variation('myFeature', context, false);

  // Pause between evaluating feature flag and tracking metric
  await new Promise(resolve => setTimeout(resolve, DELAY));

  client.track('myMetric', context, null, 10);
  await client.flush();
  client.close();
})();

However, if I change DELAY to DELAY = 10000 (10 seconds), then the experiment is populated with data.

Expected behavior

I would not expect a time delay between evaluating a feature flag and tracking a metric to have an impact on whether the data shows up in the experiment.

SDK version

launchdarkly-node-server-sdk@7.0.0

Language version, developer tools

Node v14.19.3

OS/platform

MacOS

alexdmiller commented 1 year ago

Looks like I was missing an await in front of the call to flush().