private ExperimentEntity(Experiment experiment) { name = experiment.getName(); seed = experiment.getSeed(); description = experiment.getDescription(); active = experiment.isActive(); created = experiment.getCreated(); modified = experiment.getModified(); activated = experiment.getActivated(); deactivated = experiment.getDeactivated(); filter = experiment.getFilter().toString(); hashAttributes = Lists.newArrayList(experiment.getHashAttributes()); treatments = Lists.newArrayList(Collections2.transform(experiment.getTreatments(), TREATMENT_MAPPER)); allocations = Lists.transform(experiment.getAllocations(), ALLOCATION_MAPPER); overrides = Lists.transform(experiment.getOverrides(),TREATMENT_OVERRIDE_MAPPER); }
.setDescription("my new experiment") .addTreatment("control", "the default") .addTreatment("pie", "show them pie") .setFilter(FilterExpression.of("identified")) .allocate("control", 25) .allocate("pie", 25) .activate() .save(); .setDescription("my experiment to see if people like pie") .save(); println("name: %s", experiment.getName()); println("description: %s", experiment.getDescription()); println("active: %s", experiment.isActive()); println(); .addOverride("qa_pie", "pie", "user_name=qa") .save(); .addTreatment("cake", "show them cake") .allocate("cake", 25) .save(); for (final Allocation allocation : experiment.getAllocations()) { println( "treatment: %s, offset: %d, size: %d", println("number of treatments: %d", experiment.getTreatments().size());
experiment.setSeed(request.getSeed().or(0)); experiment.setDescription(request.getDescription().orNull()); experiment.setFilter(FilterExpression.of(request.getFilter().orNull())); experiment.setHashAttributes(request.getHashAttributes().orNull()); for (final Treatment treatment : experiment.getTreatments()) { missingTreatments.add(treatment.getName()); for (final TreatmentDto treatment : request.getTreatments().get()) { missingTreatments.remove(treatment.getName()); final Treatment existingTreatment = experiment.getTreatment(treatment.getName()); experiment.addTreatment(treatment.getName(), treatment.getDescription()); experiment.removeTreatment(missingTreatment); experiment.deallocateAll(); experiment.allocate(allocation.getTreatment(), allocation.getSize()); experiment.clearOverrides(); experiment.addOverride( override.getName(), override.getTreatment(),
chain = chain.compare(lhs.getName(), rhs.getName()); break; chain = chain.compare(lhs.getDescription(), rhs.getDescription()); break; chain = chain.compare(lhs.isActive(), rhs.isActive()); break; chain = chain.compare(lhs.getCreated(), rhs.getCreated()); break; chain = chain.compare(lhs.getModified(), rhs.getModified()); break; chain = chain.compare(lhs.getActivated(), rhs.getActivated()); break; chain = chain.compare(lhs.getDeactivated(), rhs.getDeactivated()); break;
experiments .create(request.getName()) .setDescription(request.getDescription()); experiment.setFilter(FilterExpression.of(request.getFilter())); experiment.setHashAttributes(request.getHashAttributes()); experiment.setSeed(request.getSeed()); experiment.addTreatment(treatment.getName(), treatment.getDescription()); experiment.allocate(allocation.getTreatment(), allocation.getSize()); experiment.addOverride(override.getName(), override.getTreatment(), override.getFilter()); experiment.activate(); } else { experiment.deactivate(); experiment.save();
.addTreatment("control") .allocate("control", 100) .setFilter(FilterExpression.of("test")) .save(); .addTreatment("control") .allocate("control", 100) .setFilter(FilterExpression.of("test")) .save(); .activate() .save(); "wrong experiment", "foo", experiments.getActiveTreatments(identity).keySet().iterator().next().getName() ); .activate() .save(); .setFilter(FilterExpression.of("bar")) .save();
experiments .create("foo") .addTreatment("control") .setHashAttributes() .allocate("control", 100) .save(); .activate() .save(); .setFilter(FilterExpression.of("test")) .save(); .setFilter(FilterExpression.of("bar")) .save();
private Experiment(Experiment toCopy) { this.owner = toCopy.owner; this.name = toCopy.name; this.treatments = Maps.newConcurrentMap(); for (final Treatment treatment : toCopy.getTreatments()) { this.treatments.put(treatment.getName(), new Treatment(treatment.getName(), treatment.getDescription())); } final List<Allocation> allocations = Lists.newArrayList(); for (final Allocation allocation : toCopy.getAllocations()) { final Treatment treatment = this.treatments.get(allocation.getTreatment().getName()); allocations.add(new Allocation(treatment, allocation.getOffset(), allocation.getSize())); } this.allocations = new Allocations(allocations); this.overrides = Maps.newConcurrentMap(); for (final TreatmentOverride override : toCopy.getOverrides()) { final Treatment treatment = this.treatments.get(override.getTreatment().getName()); final TreatmentOverride newOverride = new TreatmentOverride(override.getName(), override.getFilter(), treatment); overrides.put(override.getName(), newOverride); } this.seed = toCopy.seed; this.description = toCopy.description; this.filter = toCopy.filter; this.hashAttributes = Sets.newLinkedHashSet(toCopy.getHashAttributes()); this.active = toCopy.active; this.created = toCopy.created; this.modified = toCopy.modified; this.activated = toCopy.activated; this.deactivated = toCopy.deactivated; }
final Experiment obj1 = experiments .create("foo") .addTreatment("control") .allocate("control", Allocations.NUM_BINS) .activate() .save();
if (filterMatches( filter.getFilter(), experiment.getName(), experiment.getDescription())) { result.add(Experiment.copyOf(experiment));
@Override public void update(Experiment experiment) { cachedExperiments.put(experiment.getName(), experiment); }
@POST public void updateAllocations(@PathParam("experimentName") String experimentName, @Valid List<AllocationRequest> requests) { final Experiment experiment = ensureExists(experiments.get(experimentName)); for (AllocationRequest request : requests) { if (request instanceof AllocationRequest.Deallocate) { experiment.deallocate(request.getTreatment(), request.getSize()); } else if (request instanceof AllocationRequest.Reallocate) { final AllocationRequest.Reallocate reallocation = (AllocationRequest.Reallocate) request; experiment.reallocate(reallocation.getTreatment(), reallocation.getTarget(), reallocation.getSize()); } else { experiment.allocate(request.getTreatment(), request.getSize()); } } experiment.save(); }
private Treatment getTreatmentWithOverrides(Experiment experiment, Identity identity, AttributesMap attributes) { for (TreatmentOverride override : experiment.getOverrides()) { if (override.getFilter().evaluate(attributes)) { return override.getTreatment(); } } return experiment.getTreatment(identity, attributes); }
@Test public void testGetActiveExperiments() { experiments .create("foo") .save(); assertFalse("should have no active experiments", experiments.getActiveExperiments().iterator().hasNext()); experiments .get("foo") .activate() .save(); assertTrue("should have an active experiment", experiments.getActiveExperiments().iterator().hasNext()); }
@PUT public Response addTreatment(@PathParam("experimentName") String experimentName, @Valid TreatmentDto treatmentDto) { ensureExists(experiments.get(experimentName)) .addTreatment(treatmentDto.getName(), treatmentDto.getDescription()) .save(); return created(); }
@Override public boolean apply(@Nullable Entry<String, Experiment> input) { return input != null && input.getValue().isActive(); } }
@GET public Iterable<AllocationDto> getAllocations(@PathParam("experimentName") String experimentName) { return mapper.toDto( ensureExists(experiments.get(experimentName)).getAllocations(), AllocationDto.class ); }
@GET public Iterable<TreatmentDto> getTreatments(@PathParam("experimentName") String experimentName) { return mapper.toDto( ensureExists(experiments.get(experimentName)).getTreatments(), TreatmentDto.class ); }