marketing-analytics/predicting/ml-data-windowing-pipeline/model/Session.java (64 lines of code) (raw):

// Copyright 2019 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package com.google.corp.gtech.ads.datacatalyst.components.mldatawindowingpipeline.model; import java.util.ArrayList; import org.apache.beam.sdk.coders.AvroCoder; import org.apache.beam.sdk.coders.DefaultCoder; import org.joda.time.Instant; /** * A Session is a collection of Facts for a userId that all occur at in one continuous time period. */ @DefaultCoder(AvroCoder.class) public class Session { // Unique ID for this Session private String id; // Unique ID of the User. private String userId; // Start time of the Session. private Instant visitStartTime; // Time of the last hit in the Session. private Instant lastHitTime; // Collection of facts that occur during the Session. private final ArrayList<Fact> facts; public Session() { id = null; userId = null; visitStartTime = null; lastHitTime = null; facts = new ArrayList<>(); } public String getId() { return id; } public String getUserId() { return userId; } public Instant getVisitStartTime() { return visitStartTime; } public Instant getLastHitTime() { return lastHitTime; } public ArrayList<Fact> getFacts() { return facts; } // Returns true if any Fact has a positive label and false otherwise. public boolean hasPositiveLabel() { for (Fact fact : facts) { if (fact.getHasPositiveLabel() != null && fact.getHasPositiveLabel()) { return true; } } return false; } public void setId(String id) { this.id = id; } public void setUserId(String userId) { this.userId = userId; } public void setVisitStartTime(Instant visitStartTime) { this.visitStartTime = visitStartTime; } public void setLastHitTime(Instant lastHitTime) { this.lastHitTime = lastHitTime; } public void addFact(Fact fact) { facts.add(fact); if (lastHitTime == null || fact.getTime().isAfter(lastHitTime)) { lastHitTime = fact.getTime(); } } // Creates and adds a new Fact with the given name, value and label for this Session's userId and // visitStartTime. public void addFact(String name, String value, boolean label) { addFact(new Fact(id, userId, visitStartTime, name, value, label)); } }