@Override public String toString() { return "Event={\"timestamp\":\"" + (timestamp != null ? timestamp : emptyString) + "\"" + ",\"type\":\"" + (type != null ? type.toString() : emptyString) + "\"" + ",\"name\":\"" + (name != null ? name.toString() : emptyString) + "\"" + ",\"context\":\"" + (context != null ? context.toString() : emptyString) + "\"" + ",\"payload\":\"" + (payload != null ? payload.toString() : emptyString) + "\"" + ",\"value\":\"" + (value != null ? value : emptyString) + "\"}"; }
/** * Convert Assignment object of single-assignment to the response MAP expected by the end user. * <p> * Single-assignment response map can contain: * - assignment * - payload * - status * - cache * - context * * @param assignment * @return response map */ protected Map<String, Object> toSingleAssignmentResponseMap(final Assignment assignment) { Map<String, Object> response = newHashMap(); // Only include `assignment` property if there is a definitive assignment, either to a bucket or not if (assignment.getStatus().isDefinitiveAssignment()) { response.put("assignment", nonNull(assignment.getBucketLabel()) ? assignment.getBucketLabel().toString() : null); if (nonNull(assignment.getBucketLabel())) { response.put("payload", assignment.getPayload()); } } response.put("status", assignment.getStatus()); response.put("cache", assignment.getStatus().isDefinitiveAssignment()); if (assignment.getContext() != null) { response.put("context", assignment.getContext().toString()); } return response; }
assignment.getExperimentID().toString(): null); eventJson.put("context", assignment != null && assignment.getContext() != null ? assignment.getContext().toString(): null); eventJson.put("epochTimestamp", event != null && event.getTimestamp() != null ? event.getTimestamp().getTime(): null);
if (LOGGER.isDebugEnabled()) LOGGER.debug("Sent prioritiesAccessor.asyncGetPriorities({})", appName); userAssignmentsFuture = experimentUserIndexAccessor.asyncSelectBy(userID.toString(), appName.toString(), context.toString()); if (LOGGER.isDebugEnabled()) LOGGER.debug("Sent experimentUserIndexAccessor.asyncSelectBy({}, {}, {})", userID, appName, context);
@Override @Timed public Assignment getAssignment(User.ID userID, Application.Name appName, Experiment.ID experimentID, Context context) { ListenableFuture<Result<ExperimentUserByUserIdContextAppNameExperimentId>> resultFuture = experimentUserIndexAccessor.asyncSelectBy(userID.toString(), appName.toString(), experimentID.getRawID(), context.toString()); Result<ExperimentUserByUserIdContextAppNameExperimentId> assignmentResult = UninterruptibleUtil.getUninterruptibly(resultFuture); Stream<ExperimentUserByUserIdContextAppNameExperimentId> assignmentResultStream = StreamSupport.stream(Spliterators.spliteratorUnknownSize(assignmentResult.iterator(), Spliterator.ORDERED), false); final Stream<Assignment.Builder> assignmentBuilderStream = assignmentResultStream.map(t -> { Assignment.Builder builder = Assignment.newInstance(Experiment.ID.valueOf(t.getExperimentId())) .withUserID(User.ID.valueOf(t.getUserId())) .withContext(Context.valueOf(t.getContext())); if (nonNull(t.getBucket()) && !t.getBucket().trim().isEmpty()) { builder.withBucketLabel(Bucket.Label.valueOf(t.getBucket())); } return builder; }); Optional<Assignment> assignmentOptional = getAssignmentFromStream(experimentID, userID, context, assignmentBuilderStream); return assignmentOptional.isPresent() ? assignmentOptional.get() : null; }
/** * Make entries in experiment_user_index table * * @param assignments */ private void indexExperimentsToUser(List<Pair<Experiment, Assignment>> assignments) { try { Session session = driver.getSession(); final BatchStatement batchStatement = new BatchStatement(BatchStatement.Type.UNLOGGED); assignments.forEach(pair -> { Assignment assignment = pair.getRight(); LOGGER.debug("assignment={}", assignment); BoundStatement bs; if (isNull(assignment.getBucketLabel())) { bs = experimentUserIndexAccessor.insertBoundStatement(assignment.getUserID().toString(), assignment.getContext().toString(), assignment.getApplicationName().toString(), assignment.getExperimentID().getRawID()); } else { bs = experimentUserIndexAccessor.insertBoundStatement(assignment.getUserID().toString(), assignment.getContext().toString(), assignment.getApplicationName().toString(), assignment.getExperimentID().getRawID(), assignment.getBucketLabel().toString()); } batchStatement.add(bs); }); session.execute(batchStatement); LOGGER.debug("Finished experiment_user_index"); } catch (Exception e) { LOGGER.error("Error occurred while adding data in to experiment_user_index", e); } }