blob: 5d226cd7ae287eafbf5d2cd9a03690debb81ee09 [file] [log] [blame]
package autotest.tko;
import autotest.common.ui.NotifyManager;
import autotest.common.ui.TabView;
import com.google.gwt.json.client.JSONNumber;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONString;
import com.google.gwt.user.client.ui.TextBox;
import java.util.Map;
public class MachineQualHistogramFrontend extends DynamicGraphingFrontend {
private static final String DEFAULT_INTERVAL = "10";
private FilterSelector globalFilters =
new FilterSelector(DBColumnSelector.TEST_VIEW);
private FilterSelector testFilters =
new FilterSelector(DBColumnSelector.TEST_VIEW);
private TextBox interval = new TextBox();
public MachineQualHistogramFrontend(final TabView parent) {
super(parent, new MachineQualHistogram(), "qual");
interval.setText(DEFAULT_INTERVAL);
addControl("Preconfigured:", preconfig);
addControl("Global filters:", globalFilters);
addControl("Test set filters:", testFilters);
addControl("Interval:", interval);
commonInitialization();
}
@Override
protected void addAdditionalEmbeddingParams(JSONObject params) {
params.put("graph_type", new JSONString("qual"));
params.put("params", buildParams());
}
private JSONString buildQuery() {
String gFilterString = globalFilters.getFilterString();
String tFilterString = testFilters.getFilterString();
boolean hasGFilter = !gFilterString.equals("");
boolean hasTFilter = !tFilterString.equals("");
StringBuilder sql = new StringBuilder();
sql.append("SELECT hostname, COUNT(DISTINCT ");
if (hasTFilter) {
sql.append("IF(");
sql.append(tFilterString);
sql.append(", test_idx, NULL)");
} else {
sql.append("test_idx");
}
sql.append(") 'total', COUNT(DISTINCT IF(");
if (hasTFilter) {
sql.append(TkoUtils.wrapWithParens(tFilterString));
sql.append(" AND ");
}
sql.append("status = 'GOOD', test_idx, NULL)) 'good' FROM tko_test_view_outer_joins");
if (hasGFilter) {
sql.append(" WHERE ");
sql.append(gFilterString);
}
sql.append(" GROUP BY hostname");
return new JSONString(sql.toString());
}
private JSONString buildFilterString() {
StringBuilder filterString = new StringBuilder();
String gFilterString = globalFilters.getFilterString();
String tFilterString = testFilters.getFilterString();
boolean hasGFilter = !gFilterString.equals("");
boolean hasTFilter = !tFilterString.equals("");
if (hasGFilter) {
filterString.append(TkoUtils.wrapWithParens(gFilterString));
if (hasTFilter) {
filterString.append(" AND ");
}
}
if (hasTFilter) {
filterString.append(TkoUtils.wrapWithParens(tFilterString));
}
return new JSONString(filterString.toString());
}
@Override
protected JSONObject buildParams() {
if (interval.getText().equals("")) {
NotifyManager.getInstance().showError("You must enter an interval");
return null;
}
int intervalValue;
try {
intervalValue = Integer.parseInt(interval.getText());
} catch (NumberFormatException e) {
NotifyManager.getInstance().showError("Interval must be an integer");
return null;
}
JSONObject params = new JSONObject();
params.put("query", buildQuery());
params.put("filter_string", buildFilterString());
params.put("interval", new JSONNumber(intervalValue));
return params;
}
@Override
public String getFrontendId() {
return "machine_qual_histogram";
}
@Override
public void addToHistory(Map<String, String> args) {
globalFilters.addToHistory(args, "globalFilter");
testFilters.addToHistory(args, "testFilter");
args.put("interval", interval.getText());
}
@Override
public void handleHistoryArguments(Map<String, String> args) {
setVisible(false);
globalFilters.reset();
testFilters.reset();
globalFilters.handleHistoryArguments(args, "globalFilter");
testFilters.handleHistoryArguments(args, "testFilter");
interval.setText(args.get("interval"));
setVisible(true);
}
}