@POST @Timed @Path("/experiments/{experimentName}/treatment") public TreatmentDto getActiveTreatment(@PathParam("experimentName") String experimentName, @Valid IdentityDto identity) { return mapper.toDto( experiments.getActiveTreatment( experimentName, mapper.fromDto(identity, Identity.class) ), TreatmentDto.class ); }
@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()); }
final Experiments experiments = Experiments.using(provider).build()) { .create("my_experiment") .setDescription("my new experiment") .addTreatment("control", "the default") .get("my_experiment") .setDescription("my experiment to see if people like pie") .save(); final Experiment experiment = experiments.get("my_experiment"); println("name: %s", experiment.getName()); println("description: %s", experiment.getDescription()); println("number of experiments: %d", Iterables.size(experiments.find())); println(); final Treatment activeTreatment = experiments.getActiveTreatment("my_experiment", new User("gene")); println("name: %s, description: %s", activeTreatment.getName(), activeTreatment.getDescription()); println(); for (final Map.Entry<Experiment, Treatment> entry : experiments.getActiveTreatments(new User("qa")).entrySet()) { println( "experiment: %s, treatment: %s, description: %s", experiments.delete("my_experiment"); .create("composite")
@Test public void testExperimentObjectReference() { final Experiment obj1 = experiments .create("foo") .addTreatment("control") .allocate("control", Allocations.NUM_BINS) .save(); final Experiment obj2 = experiments.get("foo"); ); final Experiment obj3 = experiments.find().iterator().next(); ); final Experiment obj4 = experiments.getActiveExperiments().iterator().next(); final Experiment obj5 = experiments.getActiveTreatments(identity).keySet().iterator().next();
@GET @Path("/{experimentName}") public ExperimentDto getExperiment(@PathParam("experimentName") String experimentName) { return mapper.toDto( ensureExists(experiments.get(experimentName)), ExperimentDto.class ); }
@Test public void testFindExperimentFilterRange() { experiments.create("exp1").save(); experiments.create("exp2").save(); experiments.create("exp3").save(); assertTrue("should have experiments", experiments.find().iterator().hasNext()); experiments.find( Filter .criteria() 2, Iterables.size( experiments.find( Filter .criteria() 2, Iterables.size( experiments.find( Filter .criteria() 1, Iterables.size( experiments.find( Filter .criteria()
.create("foo") .addTreatment("control") .allocate("control", 100) .create("bar") .addTreatment("control") .allocate("control", 100) assertTrue("no active experiments", experiments.getActiveTreatments(identity).isEmpty()); .get("foo") .activate() .save(); assertEquals("should have one experiment", 1, experiments.getActiveTreatments(identity).size()); assertEquals( "wrong experiment", "foo", experiments.getActiveTreatments(identity).keySet().iterator().next().getName() ); .get("bar") .activate() .save(); assertEquals("should have two experiments", 2, experiments.getActiveTreatments(identity).size()); .get("bar") .setFilter(FilterExpression.of("bar"))
@Test public void testGetActiveTreatment() { experiments .create("foo") .addTreatment("control") .setHashAttributes() experiments.getActiveTreatment( "foo", new TestIdentity("foo") .get("foo") .activate() .save(); "expected control treatment", "control", experiments.getActiveTreatment("foo", identity).getName() ); .get("foo") .setFilter(FilterExpression.of("test")) .save(); "expected control treatment", "control", experiments.getActiveTreatment("foo", identity).getName() ); .get("foo")
@Override protected Result check() throws Exception { experiments.find(Filter.criteria().limit(1).build()); experiments.getActiveExperiments(); return Result.healthy(); } }
private Experiments buildExperiments() { final Experiments.Builder builder = Experiments.using(provider); if (configuration.getCacheStrategy() != null) { builder.using(configuration.getCacheStrategy().createStrategy()); } return builder.build(); }
/** * Deletes the experiment and all things associated with it */ public void delete() { owner.delete(name); }
@POST @Timed @Path("/treatments") public Map<String, TreatmentDto> getActiveTreatments(@Valid IdentityDto identityDto) { final Map<String, TreatmentDto> treatments = Maps.newHashMap(); final Map<Experiment, Treatment> activeTreatments = experiments.getActiveTreatments( mapper.fromDto(identityDto, Identity.class) ); for (final Map.Entry<Experiment, Treatment> entry : activeTreatments.entrySet()) { treatments.put(entry.getKey().getName(), mapper.toDto(entry.getValue(), TreatmentDto.class)); } return treatments; } }
final Experiment experiment = experiments .create(request.getName()) .setDescription(request.getDescription());
@DELETE @Path("/{experimentName}") public void removeExperiment(@PathParam("experimentName") String experimentName) { ensureExists(experiments.get(experimentName)) .delete(); } }
@Test public void testFindExperimentFilterString() { experiments .create("the foo experiment") .setDescription("the bar description") .save(); "should not have found experiment", experiments .find( Filter .criteria() "should be able to filter by name substring", experiments .find( Filter .criteria() "should be able to filter by description substring", experiments .find( Filter .criteria()
@Before public void setUp() throws Exception { resetStore(); final ExperimentsStoreProvider provider = createProvider(); assertNotNull("provider cannot be null", provider); experiments = Experiments.using(provider).build(); }
@DELETE public void clearAllocations(@PathParam("experimentName") String experimentName) { ensureExists(experiments.get(experimentName)) .deallocateAll() .save(); } }