package ai.h2o.automl;
import water.DKV;
import water.Key;
import water.Keyed;
import water.util.TwoDimTable;
import static water.Key.make;
public class UserFeedback extends Keyed<UserFeedback> {
transient public AutoML autoML; // don't serialize
public UserFeedbackEvent[] feedbackEvents; // wish we had IcedArrayList(). . .
public UserFeedback(AutoML autoML) {
this._key = make(idForRun(autoML._key));
this.autoML = autoML;
UserFeedback old = DKV.getGet(this._key);
if (null == old) {
feedbackEvents = new UserFeedbackEvent[0];
DKV.put(this);
}
}
private UserFeedback() {
}
public static String idForRun(Key<AutoML> runKey) { return "AutoML_Feedback_" + runKey.toString(); }
/** Add a Debug UserFeedbackEvent and log. */
public void debug(UserFeedbackEvent.Stage stage, String message) {
addEvent(new UserFeedbackEvent(autoML, UserFeedbackEvent.Level.Debug, stage, message));
}
/** Add a Info UserFeedbackEvent and log. */
public void info(UserFeedbackEvent.Stage stage, String message) {
addEvent(new UserFeedbackEvent(autoML, UserFeedbackEvent.Level.Info, stage, message));
}
/** Add a Warn UserFeedbackEvent and log. */
public void warn(UserFeedbackEvent.Stage stage, String message) {
addEvent(new UserFeedbackEvent(autoML, UserFeedbackEvent.Level.Warn, stage, message));
}
/** Add a UserFeedbackEvent, but don't log. */
public void addEvent(UserFeedbackEvent.Level level, UserFeedbackEvent.Stage stage, String message) {
addEvent(new UserFeedbackEvent(autoML, level, stage, message));
}
/** Add a UserFeedbackEvent, but don't log. */
public void addEvent(UserFeedbackEvent event) {
UserFeedbackEvent[] oldEvents = feedbackEvents;
feedbackEvents = new UserFeedbackEvent[feedbackEvents.length + 1];
System.arraycopy(oldEvents, 0, feedbackEvents, 0, oldEvents.length);
feedbackEvents[oldEvents.length] = event;
EckoClient.addEvent(event);
} // addEvent
/**
* Delete everything in the DKV that this points to. We currently need to be able to call this after deleteWithChildren().
*/
public void delete() {
feedbackEvents = new UserFeedbackEvent[0];
remove();
}
public TwoDimTable toTwoDimTable() {
return toTwoDimTable("User Feedback");
}
public TwoDimTable toTwoDimTable(String tableHeader) {
TwoDimTable table = UserFeedbackEvent.makeTwoDimTable(tableHeader, feedbackEvents.length);
for (int i = 0; i < feedbackEvents.length; i++)
feedbackEvents[i].addTwoDimTableRow(table, i);
return table;
}
public String toString(String tableHeader) {
return this.toTwoDimTable(tableHeader).toString();
}
@Override
public String toString() {
return this.toTwoDimTable().toString();
}
}