package models; import java.util.Date; import com.mongodb.BasicDBObject; import play.modules.mongodb.jackson.MongoDB; import net.vz.mongodb.jackson.DBQuery; import net.vz.mongodb.jackson.Id; import net.vz.mongodb.jackson.JacksonDBCollection; import net.vz.mongodb.jackson.MongoCollection; import net.vz.mongodb.jackson.ObjectId; import net.vz.mongodb.jackson.WriteResult; import nl.bitwalker.useragentutils.UserAgent; @MongoCollection(name = "track_session") public class TrackSession { public static JacksonDBCollection<TrackSession.Model, String> coll = MongoDB.getCollection("track_session", TrackSession.Model.class, String.class); public static class Model { @ObjectId @Id public String _id; public Date startedAt; public Date firstActionAt; public Date lastActionAt; public String userAgent; public String ip; public String country; public String language; public String host; //Extracted for possible analytical functions public String browser; public String os; public String mainLanguage; @ObjectId public String userId; } public static WriteResult<TrackSession.Model, String> save(TrackSession.Model ob) { WriteResult<TrackSession.Model, String> tmp = coll.save(ob); coll.ensureIndex( new BasicDBObject("userId", 1) ); return tmp; } public static net.vz.mongodb.jackson.DBCursor<RecordedLocation.Model> getLocations( Model ob ) { return RecordedLocation.coll.find( DBQuery.is("sessionId", new org.bson.types.ObjectId( ob._id )) ).sort( new BasicDBObject("lastActionAt", -1) ); } public static int getLocationsCount( Model ob ) { return RecordedLocation.coll.find(DBQuery.is("sessionId", new org.bson.types.ObjectId( ob._id ) )).size(); } //wrong way of doing it, silly me ... @Deprecated public static Long getDurationSeconds(Model ob) { return ( ( ob.lastActionAt.getTime() - ( ob.firstActionAt == null ? ob.startedAt.getTime() : ob.firstActionAt.getTime() ) ) / 1000 ); } @Deprecated public static String getDuration(Model ob) { Long seconds = getDurationSeconds(ob); Long min = seconds / 60; Long leftSeconds = seconds % 60 ; return min+":"+leftSeconds; } public static String getBrowser(Model ob) { UserAgent userAgent = UserAgent.parseUserAgentString( ob.userAgent ); return userAgent.getBrowser().getName(); } public static String getLanguage(Model ob) { String[] languages = ob.language.split(","); if( languages.length > 1 ) return languages[0]; return ob.language; } public static String getOS(Model ob) { UserAgent userAgent = UserAgent.parseUserAgentString( ob.userAgent ); return userAgent.getOperatingSystem().getName(); } }