public Builder(Experiment.ID experimentID, Experiment.Label label, boolean allowNewAssignment) { instance = new PageExperiment(); instance.id = experimentID; instance.label = label; instance.allowNewAssignment = allowNewAssignment; }
/** * {@inheritDoc} */ @Override public List<Assignment> doPageAssignments(Application.Name applicationName, Page.Name pageName, User.ID userID, Context context, boolean createAssignment, boolean ignoreSamplingPercent, HttpHeaders headers, SegmentationProfile segmentationProfile,boolean forceProfileCheck) { //Get the experiments (id & allowNewAssignment only) associated to the given application and page. List<PageExperiment> pageExperimentList = getExperiments(applicationName, pageName); //Prepare allowAssignments map Map<Experiment.ID, Boolean> allowAssignments = new HashMap<>(pageExperimentList.size()); for (PageExperiment pageExperiment : pageExperimentList) { allowAssignments.put(pageExperiment.getId(), pageExperiment.getAllowNewAssignment()); } //Prepare experiment batch ExperimentBatch experimentBatch = createExperimentBatch(segmentationProfile, null); //Call the common doAssignment() method to either retrieve existing and/or create new assignments. boolean updateDownstreamSystems = true; //Do update down stream systems while getting existing assignment List<Assignment> assignments = doAssignments(userID, applicationName, context, createAssignment, ignoreSamplingPercent, headers, experimentBatch, pageName, allowAssignments, updateDownstreamSystems,forceProfileCheck); return assignments; }
/** * {@inheritDoc} */ @Override public ExperimentList getPageExperiments(Application.Name applicationName, Page.Name pageName) { ExperimentList result = new ExperimentList(); if (applicationName == null || applicationName.toString().isEmpty() || pageName == null || pageName.toString().isEmpty()) { return result; } else { List<PageExperiment> pageExperiments = pagesRepository.getExperiments(applicationName, pageName); List<Experiment.ID> expIDList = new ArrayList<>(); if (!pageExperiments.isEmpty()) { for (PageExperiment pageExperiment : pageExperiments) { Experiment.ID experimentID = pageExperiment.getId(); expIDList.add(experimentID); } } result = cassandraRepository.getExperiments(expIDList); } return result; }
@Override public List<PageExperiment> getExperiments(Application.Name applicationName, Page.Name pageName) { Stream<PageExperimentByAppNamePage> resultList = Stream.empty(); try { Result<PageExperimentByAppNamePage> result = pageExperimentIndexAccessor.selectBy(applicationName.toString(), pageName.toString()); resultList = StreamSupport.stream( Spliterators.spliteratorUnknownSize(result.iterator(), Spliterator.ORDERED), false); } catch (ReadTimeoutException | UnavailableException | NoHostAvailableException e) { throw new RepositoryException(new StringBuilder("Could not retrieve the experiments for applicationName:\"").append(applicationName).append("\", page:\"").append(pageName).append("\"").toString(), e); } //TODO: make the experiment label part of the pageExperimentIndex to save a query per page return resultList .map(t -> { Optional<com.intuit.wasabi.repository.cassandra.pojo.Experiment> experiment = Optional.ofNullable(experimentAccessor.selectBy(t.getExperimentId()).one()); PageExperiment.Builder builder = new PageExperiment.Builder( Experiment.ID.valueOf(t.getExperimentId()), null, t.isAssign() ); if (experiment.isPresent()) { builder.setLabel(Experiment.Label.valueOf(experiment.get().getLabel())); } return builder.build(); } ).filter(t -> t.getLabel() != null) .collect(Collectors.toList()); }
public Builder(Experiment.ID experimentID, Experiment.Label label, boolean allowNewAssignment) { instance = new PageExperiment(); instance.id = experimentID; instance.label = label; instance.allowNewAssignment = allowNewAssignment; }