Skip to content

Commit a147d8a

Browse files
committed
track deployment environment
1 parent 84aad35 commit a147d8a

File tree

4 files changed

+37
-14
lines changed

4 files changed

+37
-14
lines changed

airbyte-analytics/src/main/java/io/airbyte/analytics/SegmentTrackingClient.java

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,12 @@
2626

2727
import com.google.common.annotations.VisibleForTesting;
2828
import com.google.common.base.Strings;
29-
import com.google.common.collect.ImmutableMap;
3029
import com.segment.analytics.Analytics;
3130
import com.segment.analytics.messages.AliasMessage;
3231
import com.segment.analytics.messages.IdentifyMessage;
3332
import com.segment.analytics.messages.TrackMessage;
33+
import io.airbyte.config.Configs;
34+
import io.airbyte.config.Configs.WorkerEnvironment;
3435
import java.util.Collections;
3536
import java.util.HashMap;
3637
import java.util.Map;
@@ -46,38 +47,49 @@ public class SegmentTrackingClient implements TrackingClient {
4647
private final Analytics analytics;
4748
private final Supplier<TrackingIdentity> identitySupplier;
4849
private final String airbyteRole;
50+
private final WorkerEnvironment deploymentEnvironment;
4951

5052
@VisibleForTesting
5153
SegmentTrackingClient(final Supplier<TrackingIdentity> identitySupplier,
54+
final Configs.WorkerEnvironment deploymentEnvironment,
5255
final String airbyteRole,
5356
final Analytics analytics) {
5457
this.identitySupplier = identitySupplier;
58+
this.deploymentEnvironment = deploymentEnvironment;
5559
this.analytics = analytics;
5660
this.airbyteRole = airbyteRole;
5761
}
5862

59-
public SegmentTrackingClient(final Supplier<TrackingIdentity> identitySupplier, final String airbyteRole) {
60-
this(identitySupplier, airbyteRole, Analytics.builder(SEGMENT_WRITE_KEY).build());
63+
public SegmentTrackingClient(final Supplier<TrackingIdentity> identitySupplier,
64+
final Configs.WorkerEnvironment deploymentEnvironment,
65+
final String airbyteRole) {
66+
this(identitySupplier, deploymentEnvironment, airbyteRole, Analytics.builder(SEGMENT_WRITE_KEY).build());
6167
}
6268

6369
@Override
6470
public void identify() {
6571
final TrackingIdentity trackingIdentity = identitySupplier.get();
66-
final ImmutableMap.Builder<String, Object> identityMetadataBuilder = ImmutableMap.<String, Object>builder()
67-
.put(AIRBYTE_VERSION_KEY, trackingIdentity.getAirbyteVersion())
68-
.put("anonymized", trackingIdentity.isAnonymousDataCollection())
69-
.put("subscribed_newsletter", trackingIdentity.isNews())
70-
.put("subscribed_security", trackingIdentity.isSecurityUpdates());
72+
final Map<String, Object> identityMetadata = new HashMap<>();
7173

74+
// deployment
75+
identityMetadata.put(AIRBYTE_VERSION_KEY, trackingIdentity.getAirbyteVersion());
76+
identityMetadata.put("deployment_env", deploymentEnvironment);
77+
78+
// workspace (includes info that in the future we would store in an organization)
79+
identityMetadata.put("anonymized", trackingIdentity.isAnonymousDataCollection());
80+
identityMetadata.put("subscribed_newsletter", trackingIdentity.isNews());
81+
identityMetadata.put("subscribed_security", trackingIdentity.isSecurityUpdates());
82+
trackingIdentity.getEmail().ifPresent(email -> identityMetadata.put("email", email));
83+
84+
// other
7285
if (!Strings.isNullOrEmpty(airbyteRole)) {
73-
identityMetadataBuilder.put(AIRBYTE_ROLE, airbyteRole);
86+
identityMetadata.put(AIRBYTE_ROLE, airbyteRole);
7487
}
7588

76-
trackingIdentity.getEmail().ifPresent(email -> identityMetadataBuilder.put("email", email));
77-
7889
analytics.enqueue(IdentifyMessage.builder()
90+
// user id is scoped by workspace. there is no cross-workspace tracking.
7991
.userId(trackingIdentity.getCustomerId().toString())
80-
.traits(identityMetadataBuilder.build()));
92+
.traits(identityMetadata));
8193
}
8294

8395
@Override

airbyte-analytics/src/main/java/io/airbyte/analytics/TrackingClientSingleton.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,15 @@ static void initialize(TrackingClient trackingClient) {
5656
}
5757

5858
public static void initialize(final Configs.TrackingStrategy trackingStrategy,
59+
final Configs.WorkerEnvironment deploymentEnvironment,
5960
final String airbyteRole,
6061
final String airbyteVersion,
6162
final ConfigRepository configRepository) {
62-
initialize(createTrackingClient(trackingStrategy, airbyteRole, () -> getTrackingIdentity(configRepository, airbyteVersion)));
63+
initialize(createTrackingClient(
64+
trackingStrategy,
65+
deploymentEnvironment,
66+
airbyteRole,
67+
() -> getTrackingIdentity(configRepository, airbyteVersion)));
6368
}
6469

6570
// fallback on a logging client with an empty identity.
@@ -93,6 +98,7 @@ static TrackingIdentity getTrackingIdentity(ConfigRepository configRepository, S
9398
* Creates a tracking client that uses the appropriate strategy from an identity supplier.
9499
*
95100
* @param trackingStrategy - what type of tracker we want to use.
101+
* @param deploymentEnvironment - the environment that airbyte is running in.
96102
* @param airbyteRole
97103
* @param trackingIdentitySupplier - how we get the identity of the user. we have a supplier,
98104
* because we if the identity updates over time (which happens during initial setup), we
@@ -101,10 +107,11 @@ static TrackingIdentity getTrackingIdentity(ConfigRepository configRepository, S
101107
*/
102108
@VisibleForTesting
103109
static TrackingClient createTrackingClient(final Configs.TrackingStrategy trackingStrategy,
110+
final Configs.WorkerEnvironment deploymentEnvironment,
104111
final String airbyteRole,
105112
final Supplier<TrackingIdentity> trackingIdentitySupplier) {
106113
return switch (trackingStrategy) {
107-
case SEGMENT -> new SegmentTrackingClient(trackingIdentitySupplier, airbyteRole);
114+
case SEGMENT -> new SegmentTrackingClient(trackingIdentitySupplier, deploymentEnvironment, airbyteRole);
108115
case LOGGING -> new LoggingTrackingClient(trackingIdentitySupplier);
109116
default -> throw new IllegalStateException("unrecognized tracking strategy");
110117
};

airbyte-analytics/src/test/java/io/airbyte/analytics/TrackingClientSingletonTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import static org.mockito.Mockito.when;
3131

3232
import io.airbyte.config.Configs;
33+
import io.airbyte.config.Configs.WorkerEnvironment;
3334
import io.airbyte.config.StandardWorkspace;
3435
import io.airbyte.config.persistence.ConfigNotFoundException;
3536
import io.airbyte.config.persistence.ConfigRepository;
@@ -58,6 +59,7 @@ void testCreateTrackingClientLogging() {
5859
assertTrue(
5960
TrackingClientSingleton.createTrackingClient(
6061
Configs.TrackingStrategy.LOGGING,
62+
WorkerEnvironment.DOCKER,
6163
"role",
6264
TrackingIdentity::empty) instanceof LoggingTrackingClient);
6365
}
@@ -67,6 +69,7 @@ void testCreateTrackingClientSegment() {
6769
assertTrue(
6870
TrackingClientSingleton.createTrackingClient(
6971
Configs.TrackingStrategy.SEGMENT,
72+
WorkerEnvironment.DOCKER,
7073
"role",
7174
TrackingIdentity::empty) instanceof SegmentTrackingClient);
7275
}

airbyte-scheduler/app/src/main/java/io/airbyte/scheduler/app/SchedulerApp.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,7 @@ public static void main(String[] args) throws IOException, InterruptedException
236236

237237
TrackingClientSingleton.initialize(
238238
configs.getTrackingStrategy(),
239+
configs.getWorkerEnvironment(),
239240
configs.getAirbyteRole(),
240241
configs.getAirbyteVersion(),
241242
configRepository);

0 commit comments

Comments
 (0)