/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.vipr.client.system;
import java.io.InputStream;
import java.util.Collection;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import com.emc.vipr.client.impl.DateUtils;
import com.emc.vipr.client.util.ItemProcessor;
import com.emc.vipr.model.sys.logging.LogMessage;
public class LogsSearchBuilder {
private final Logs logs;
private Set<String> nodeIds;
private Set<String> nodeNames;
private Set<String> logNames;
private Integer severity;
private String start;
private String end;
private String regex;
private Integer maxCount;
public LogsSearchBuilder(Logs logs) {
this.logs = logs;
}
public LogsSearchBuilder nodeIds(String... values) {
nodeIds = new LinkedHashSet<String>();
for (String value : values) {
nodeIds.add(value);
}
return this;
}
public LogsSearchBuilder nodeIds(Collection<String> values) {
nodeIds = new LinkedHashSet<String>();
if (values != null) {
nodeIds.addAll(values);
}
return this;
}
public LogsSearchBuilder nodeNames(String... values) {
nodeNames = new LinkedHashSet<String>();
for (String value : values) {
nodeNames.add(value);
}
return this;
}
public LogsSearchBuilder nodeNames(Collection<String> values) {
nodeNames = new LinkedHashSet<String>();
if (values != null) {
nodeNames.addAll(values);
}
return this;
}
public LogsSearchBuilder logNames(String... values) {
logNames = new LinkedHashSet<String>();
for (String value : values) {
logNames.add(value);
}
return this;
}
public LogsSearchBuilder logNames(Collection<String> values) {
logNames = new LinkedHashSet<String>();
if (values != null) {
logNames.addAll(values);
}
return this;
}
private String formatDate(Date date) {
return date != null ? DateUtils.formatUTC(date, Logs.DATE_FORMAT) : null;
}
public LogsSearchBuilder startTime(Date startTime) {
return startTime(formatDate(startTime));
}
public LogsSearchBuilder startTime(String startTime) {
this.start = startTime;
return this;
}
public LogsSearchBuilder endTime(Date endTime) {
return endTime(formatDate(endTime));
}
public LogsSearchBuilder endTime(String endTime) {
this.end = endTime;
return this;
}
public LogsSearchBuilder regex(String regex) {
this.regex = regex;
return this;
}
public LogsSearchBuilder severity(int severity) {
this.severity = severity;
return this;
}
public LogsSearchBuilder severityFatal() {
return severity(Logs.LOG_LEVEL_FATAL);
}
public LogsSearchBuilder severityError() {
return severity(Logs.LOG_LEVEL_ERROR);
}
public LogsSearchBuilder severityWarn() {
return severity(Logs.LOG_LEVEL_WARN);
}
public LogsSearchBuilder severityInfo() {
return severity(Logs.LOG_LEVEL_INFO);
}
public LogsSearchBuilder severityDebug() {
return severity(Logs.LOG_LEVEL_DEBUG);
}
public LogsSearchBuilder severityTrace() {
return severity(Logs.LOG_LEVEL_TRACE);
}
public LogsSearchBuilder maxCount(int maxCount) {
this.maxCount = maxCount;
return this;
}
public List<LogMessage> run() {
return logs.get(nodeIds, nodeNames, logNames, severity, start, end, regex, maxCount);
}
public InputStream stream() {
return logs.getAsStream(nodeIds, nodeNames, logNames, severity, start, end, regex, maxCount);
}
public InputStream text() {
return logs.getAsText(nodeIds, nodeNames, logNames, severity, start, end, regex, maxCount);
}
public void items(ItemProcessor<LogMessage> processor) {
logs.getAsItems(processor, nodeIds, nodeNames, logNames, severity, start, end, regex, maxCount);
}
}