package com.alvazan.play.logging;
import java.util.Random;
import org.joda.time.LocalDateTime;
import com.alvazan.orm.api.base.NoSqlEntityManager;
import com.alvazan.orm.api.base.Query;
import com.alvazan.orm.api.base.anno.NoSqlEntity;
import com.alvazan.orm.api.base.anno.NoSqlId;
import com.alvazan.orm.api.base.anno.NoSqlIndexed;
import com.alvazan.orm.api.base.anno.NoSqlPartitionByThisField;
import com.alvazan.orm.api.base.anno.NoSqlQuery;
import com.alvazan.orm.api.z8spi.KeyValue;
@NoSqlEntity
@NoSqlQuery(name="findBySession", query="PARTITIONS l(:partId) SELECT l FROM TABLE as l where l.sessionId = :sessionId")
public class LogEvent {
@NoSqlId(usegenerator=false)
private String id;
private String level;
private String serverName;
private int index;
private String threadName;
@NoSqlPartitionByThisField
private String idLastDigits;
private LocalDateTime time;
@NoSqlIndexed
private String sessionId;
private String user;
private String logger;
private String message;
private String stackTrace;
private static Random r = new Random(System.currentTimeMillis());
public String getId() {
return id;
}
private void setId(String id) {
this.id = id;
}
public void setId(String serverName, int index) {
this.id = serverName+index;
this.serverName = serverName;
this.index = index;
}
public int getIndex() {
return index;
}
public String getStackTrace() {
return stackTrace;
}
public void setStackTrace(String stackTrace) {
this.stackTrace = stackTrace;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
public LocalDateTime getTime() {
return time;
}
public void setTime(LocalDateTime time) {
this.time = time;
}
public String getSessionId() {
return sessionId;
}
public void setSessionId(String sessionId, int numDigits) {
this.sessionId = sessionId;
idLastDigits = parse(sessionId, numDigits);
}
private static String parse(String sessionId2, int numDigits) {
if(sessionId2 == null) {
double max = Math.pow(10, numDigits);
return ""+r.nextInt((int) max);
}
return sessionId2.substring(sessionId2.length()-numDigits);
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getLogger() {
return logger;
}
public void setLogger(String logger) {
this.logger = logger;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getIdLastDigits() {
return idLastDigits;
}
public String getServerName() {
return serverName;
}
public String getThreadName() {
return threadName;
}
public void setThreadName(String threadName) {
this.threadName = threadName;
}
public static final Iterable<KeyValue<LogEvent>> findBySession(NoSqlEntityManager mgr, String sessionId, int numDigits) {
String partId = parse(sessionId, numDigits);
Query<LogEvent> query = mgr.createNamedQuery(LogEvent.class, "findBySession");
query.setParameter("partId", partId);
query.setParameter("sessionId", sessionId);
return query.getResultsIter(false);
}
}