/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.db.client.model.uimodels;
import com.emc.storageos.db.client.model.Cf;
import com.emc.storageos.db.client.model.ModelObject;
import com.emc.storageos.db.client.model.Name;
import com.emc.storageos.model.valid.EnumType;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
import java.util.Date;
/**
* General log message.
*
* @author jonnymiller
*/
@Cf("ExecutionLog")
public class ExecutionLog extends ModelObject {
public static final String DATE = "date";
public static final String LEVEL = "level";
public static final String MESSAGE = "message";
public static final String STACK_TRACE = "stackTrace";
public static final String PHASE = "phase";
private Date date;
private String level;
private String message;
private String stackTrace;
private String phase;
@Name(DATE)
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
setChanged(DATE);
}
@Name(MESSAGE)
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
setChanged(MESSAGE);
}
@Name(STACK_TRACE)
public String getStackTrace() {
return stackTrace;
}
public void setStackTrace(String stackTrace) {
this.stackTrace = stackTrace;
setChanged(STACK_TRACE);
}
public void addStackTrace(Throwable cause) {
setStackTrace(ExceptionUtils.getFullStackTrace(cause));
}
@EnumType(LogLevel.class)
@Name(LEVEL)
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
setChanged(LEVEL);
}
@EnumType(ExecutionPhase.class)
@Name(PHASE)
public String getPhase() {
return phase;
}
public void setPhase(String phase) {
this.phase = phase;
setChanged(PHASE);
}
public String toString() {
if (StringUtils.isBlank(stackTrace)) {
return String.format("%s - %s - %s", date, level, message);
}
else {
return String.format("%s - %s - %s%n%s", date, level, message, stackTrace);
}
}
@Override
public Object[] auditParameters() {
return new Object[] { getLabel(), getId() };
}
public static enum LogLevel {
DEBUG, INFO, WARN, ERROR
}
}