Skip to content

Commit

Permalink
clean up and fix util functions
Browse files Browse the repository at this point in the history
  • Loading branch information
lauraschlimmer committed Nov 19, 2014
1 parent cf27a1d commit dc82a85
Show file tree
Hide file tree
Showing 5 changed files with 125 additions and 34 deletions.
1 change: 0 additions & 1 deletion fnordmetric-webui/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ build:
fnordmetric-webui-embedpopup.js \
fnordmetric-webui-autocomplete.js \
fnordmetric-webui-datepicker.js \
fnordmetric-webui-unittests.js \
codemirror.js \
codemirror-sql.js \
) > fnordmetric-webui.js
Expand Down
1 change: 0 additions & 1 deletion fnordmetric-webui/fnordmetric-webui-layout.js
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,6 @@ FnordMetric.WebUI = function() {
};

function openUrl(raw_url, push_state) {
FnordMetric.UnitTests();
var url = FnordMetric.util.parseQueryString(raw_url);
var query_params = url["query_params"];

Expand Down
32 changes: 19 additions & 13 deletions fnordmetric-webui/fnordmetric-webui-metricpreviewwidget.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,16 @@ FnordMetric.util.MetricPreviewWidget = function(viewport, query_params) {

/* checks if required url params are misssing and adds those if so */
function addRequiredURLParamsForView(value) {
if (value == "count" || value == "sum" || value == "mean") {

var time_step = query_params.t_step;
if (time_step == undefined) {
time_step = defaults.t_step;
updateURLParams("t_step", time_step);
if (value == "count" ||
value == "sum" ||
value == "mean" ||
value == "min" ||
value == "max") {

var time_window = query_params.t_window;
if (time_window == undefined) {
time_window = defaults.t_window;
updateURLParams("t_window", time_window);
}
}
var group_by = query_params.by;
Expand Down Expand Up @@ -456,10 +460,10 @@ FnordMetric.util.MetricPreviewWidget = function(viewport, query_params) {

prev_timespan.addEventListener('click', function(e) {
e.preventDefault();
var end = end_time;
end_time = start_time;
var diff = end - start_time;
start_time = start_time - diff;
var end = query_params.end_time;
end_time = query_params.start_time;
var diff = end - query_params.start_time;
start_time = query_params.start_time - diff;
updateURLParams("end_time", end_time);
updateURLParams("start_time", start_time);
updateDateTimeElems(
Expand All @@ -469,11 +473,13 @@ FnordMetric.util.MetricPreviewWidget = function(viewport, query_params) {

next_timespan.addEventListener('click', function(e) {
e.preventDefault();
var start = start_time;
var end = parseInt(end_time ,10) + (end_time - start);
var start = query_params.start_time;
var end =
parseInt(query_params.end_time ,10) +
(query_params.end_time - start);

if (end <= now) {
start_time = end_time;
start_time = query_params.end_time;
end_time = end;
updateURLParams("start_time", start_time);
updateURLParams("end_time", end_time);
Expand Down
67 changes: 66 additions & 1 deletion fnordmetric-webui/fnordmetric-webui-unittests.js
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,71 @@ FnordMetric.UnitTests = function() {

}();

console.log(results.total + " tests, "+ results.bad + " failed.");
var testGenerateSQLQueryFromParams = function() {
function test(params, expected) {
var result = FnordMetric.util.generateSQLQueryFromParams(params);
result = result.replace(/(\n\r|\n|\r|\s)/gm, "");
if (result != expected) {
results.bad++;
console.log("Testing generateSQLQueryFromParams expected "
+ expected + ", but was " + result);
}
}
// test XDOMAIN and WHERE clause
test(
{innerView : "metric",
innerViewValue : "status_codes",
view : "value",
by : "host",
columns : "host",
end_time : "1416263880000",
start_time : "1416260280000"},
"DRAWLINECHARTXDOMAINFROM_TIMESTAMP(1416260280),FROM_TIMESTAMP(1416263880)" +
"AXISBOTTOMAXISLEFTLEGENDTOPRIGHTINSIDE;SELECTtimeASx,valueASy,hostASseriesFROM`status_codes`" +
"WHEREtime>FROM_TIMESTAMP(1416260280)ANDtime<FROM_TIMESTAMP(1416263880);");

// test rollup without columns
test(
{innerViewValue : "status_codes",
view : "rollup_mean"},
"DRAWBARCHARTAXISBOTTOMAXISLEFTLEGENDTOPRIGHTINSIDE;SELECT'total'ASX,mean(value)ASYFROM`status_codes`;");

// test rollup with one column
test(
{innerViewValue : "status_codes",
view : "rollup_count",
columns : "host"},
"DRAWBARCHARTAXISBOTTOMAXISLEFTLEGENDTOPRIGHTINSIDE;SELECT`host`ASX,count(value)ASYFROM`status_codes`;");

// test rollup with multiple columns
test(
{innerViewValue : "status_codes",
view : "rollup_sum",
columns : "host,server"},
"DRAWBARCHARTAXISBOTTOMAXISLEFTLEGENDTOPRIGHTINSIDE;SELECT`host`ASX,sum(value)ASYFROM`status_codes`;");

// test GROUP OVER timewindow with window and step
test(
{innerViewValue : "status_codes",
view : "max",
by : "host",
t_step : "20000",
t_window : "5000"},
"DRAWLINECHARTAXISBOTTOMAXISLEFTLEGENDTOPRIGHTINSIDE;SELECTtimeASx,max(value)ASY,hostASseriesFROM`status_codes`GROUPOVERTIMEWINDOW(time,5,20)BYhost;");

// test GROUP OVER TIMEWINDO with window only and without BY stm
test(
{innerViewValue : "status_codes",
view : "min",
t_window : "5000"},
"DRAWLINECHARTAXISBOTTOMAXISLEFTLEGENDTOPRIGHTINSIDE;SELECTtimeASx,min(value)ASYFROM`status_codes`GROUPOVERTIMEWINDOW(time,5,5);");


}();
if (results.bad == 0) {
console.log("Yeah, all " + results.total + " tests passed :-) ");
} else {
console.log(results.bad + " tests of " + results.totak + " failed.");
}

}
58 changes: 40 additions & 18 deletions fnordmetric-webui/fnordmetric-webui-util.js
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,10 @@ FnordMetric.util.parseMilliTS = function(ts) {
}

FnordMetric.util.humanCountRows = function(tables) {
if (tables == undefined) {
return "0 rows";
}

var num = 0;
tables.map(function(table) {
num += table.rows.length;
Expand Down Expand Up @@ -366,7 +370,7 @@ FnordMetric.util.htmlEscape = function(str) {
}


/* returns all words that includes filter */
/* returns all words that include filter */
FnordMetric.util.filterStringArray = function(strings, filter, limit) {
//FIXME ?
var data = [];
Expand Down Expand Up @@ -402,13 +406,16 @@ FnordMetric.util.milliSecondsToTimeString = function(seconds) {
}


/* in singleMetricView */
/**
* builds a ChartSQL query from url params
* @param params format as returned in parseQueryString
*/
FnordMetric.util.generateSQLQueryFromParams = function(params) {
//FIX html escape
var table_ref = params.innerViewValue
var view = params.view;
/* column for rollups */
var columns = params.columns.split(",");
var columns = params.columns;
var start_time = Math.round(params.start_time / 1000);
var end_time = Math.round(params.end_time / 1000);
var t_step = params.t_step;
Expand All @@ -417,26 +424,36 @@ FnordMetric.util.generateSQLQueryFromParams = function(params) {

var query;
var draw_stm =
"DRAW LINECHART\n XDOMAIN\n FROM_TIMESTAMP(" +
start_time + "),\n FROM_TIMESTAMP(" + end_time + ")"
+ "\n AXIS BOTTOM\n AXIS LEFT;\n\n";
"DRAW LINECHART\n ";
var select_expr = "SELECT\n time AS x,\n ";
var from_expr = "\n FROM\n";
var where_expr = "";
var group_expr = "";
var hasAggregation = false;

/* complement draw_stm */
if (!isNaN(start_time) && !isNaN(end_time)) {
draw_stm +=
"XDOMAIN\n FROM_TIMESTAMP(" + start_time +
"),\n FROM_TIMESTAMP(" + end_time + ")";
}

/* complete select_expr */
if (view == "value") {
select_expr += "value as y ";
select_expr += "value AS y ";
} else if (view == "rollup_sum" || view == "rollup_count" || view == "rollup_mean") {
draw_stm = "DRAW BARCHART\n AXIS BOTTOM\n AXIS LEFT;";
/* adapt draw stm */
draw_stm = "DRAW BARCHART\n ";
var func = (view.split("_"))[1];

/* if the metric hasn't any labels total is selected */
var column = (columns[0].length > 0)?
("`" + columns[0] + "`") : "'total'";
var column;
if (columns != undefined && (columns.split(","))[0].length > 0) {
columns = columns.split(",")
column = "`" + columns[0] + "`";
} else {
/* fallback if the metric hasn't any labels */
column = "'total'";
}

select_expr =
" SELECT " + column + " AS X, " + func + "(value) AS Y";
Expand All @@ -452,11 +469,17 @@ FnordMetric.util.generateSQLQueryFromParams = function(params) {
select_expr += ", " + series + " AS series";
}

/* complete draw stm */
draw_stm +=
"\n AXIS BOTTOM\n AXIS LEFT\n" +
" LEGEND TOP RIGHT INSIDE;\n\n";


/* complete from_expr */
from_expr += " `" + table_ref + "`\n";

/*complete where_expr */
if (start_time != undefined && end_time != undefined) {
if (!isNaN(start_time) && !isNaN(end_time)) {
where_expr =
" WHERE\n time > FROM_TIMESTAMP(" + start_time + ")\n" +
" AND time < FROM_TIMESTAMP(" + end_time + ")";
Expand All @@ -468,14 +491,14 @@ FnordMetric.util.generateSQLQueryFromParams = function(params) {
group_expr = " GROUP ";
var hasGroupStm = false;

if (t_step != undefined) {
if (t_window != undefined) {
hasGroupStm = true;

group_expr +=
"OVER TIMEWINDOW(time, " + Math.round(t_step / 1000) + ",";
"OVER TIMEWINDOW(time, " + Math.round(t_window / 1000) + ",";

group_expr += (t_window != undefined)?
Math.round(t_window / 1000) : Math.round(t_step / 1000);
group_expr += (t_step != undefined)?
Math.round(t_step / 1000) : Math.round(t_window / 1000);

group_expr+= ")";

Expand All @@ -494,7 +517,7 @@ FnordMetric.util.generateSQLQueryFromParams = function(params) {
}


query =
query =
draw_stm + select_expr + from_expr +
where_expr + group_expr + ";";

Expand Down Expand Up @@ -553,7 +576,6 @@ FnordMetric.util.validatedTimeInput = function (time_input, type) {
e.preventDefault();
}
} else if (input.length == 1) {
console.log(input);
if (input < 2 || (input == 2 && n < 4)) {
input = input * 10 + n;
time_input.value += n;
Expand Down

0 comments on commit dc82a85

Please sign in to comment.