summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjasplin <qt-info@nokia.com>2010-05-13 22:02:28 +0200
committerjasplin <qt-info@nokia.com>2010-05-13 22:02:28 +0200
commitc16188624690c8ea777d579c9800883289db0db2 (patch)
treecc9ddcf1de0f2b9fdef03fd9291536548020df5f
parentcdf8aa6a07f2edae8dd43aa809a1b7c584898222 (diff)
Made text input for ASF stats more robust.
-rw-r--r--src/bm/asfstats.cpp4
-rw-r--r--src/bmclient/main.cpp6
-rw-r--r--src/bmweb/global.js52
-rw-r--r--src/bmweb/indexsection.js70
4 files changed, 92 insertions, 40 deletions
diff --git a/src/bm/asfstats.cpp b/src/bm/asfstats.cpp
index 105b424..eb71006 100644
--- a/src/bm/asfstats.cpp
+++ b/src/bm/asfstats.cpp
@@ -127,8 +127,8 @@ Step 2: Sample the stable and smoothed RHs at fromTimestamp and toTimestamp and
void ASFStats::compute(const QList<ResultHistoryInfo *> &rhInfos, StatsInfo *statsInfo)
{
Q_ASSERT((fromTimestamp >= 0) && (fromTimestamp <= toTimestamp));
- Q_ASSERT((diffTolerance >= 0.0) && (diffTolerance <= 100.0));
- Q_ASSERT(stabTolerance >= 2);
+ Q_ASSERT(diffTolerance >= 0.0);
+ Q_ASSERT(stabTolerance >= 1);
Q_ASSERT((sfTolerance >= 0.0) && (sfTolerance <= 100.0));
Q_ASSERT((lfTolerance >= 0.0) && (lfTolerance <= 100.0));
diff --git a/src/bmclient/main.cpp b/src/bmclient/main.cpp
index 8c36a86..087f925 100644
--- a/src/bmclient/main.cpp
+++ b/src/bmclient/main.cpp
@@ -1391,7 +1391,7 @@ BMRequest * Executor::createASFStatsGetValuesRequest(
bool ok;
toTimestamp = values.at(0).toInt(&ok);
if ((!ok) || (toTimestamp < fromTimestamp)) {
- *error = QString("failed to extract 'to' time as an integer < %1").arg(fromTimestamp);
+ *error = QString("failed to extract 'to' time as an integer >= %1").arg(fromTimestamp);
return 0;
}
} else {
@@ -1409,8 +1409,8 @@ BMRequest * Executor::createASFStatsGetValuesRequest(
if (BMMisc::getOption(args, "-stabtol", &values, 1, 0, error)) {
bool ok;
stabTol = values.at(0).toInt(&ok);
- if ((!ok) || (stabTol < 2)) {
- *error = "failed to extract stability tolerance as an integer >= 2";
+ if ((!ok) || (stabTol < 1)) {
+ *error = "failed to extract stability tolerance as an integer >= 1";
return 0;
}
} else {
diff --git a/src/bmweb/global.js b/src/bmweb/global.js
index fea92ad..6f5f739 100644
--- a/src/bmweb/global.js
+++ b/src/bmweb/global.js
@@ -314,25 +314,63 @@ function sharedTimeScale()
return document.getElementById("sharedTimeScale").checked ? 1 : 0;
}
-function getPositiveIntFromText(text, defaultValue)
+function getIntFromText(text, defaultValue)
{
var value = parseInt(text);
- if (isNaN(value) || (value <= 0))
+ if (isNaN(value))
value = defaultValue;
return value;
}
-function getIntFromText(text, defaultValue)
+function getIntFromTextInput(id, defaultValue)
+{
+ return getIntFromText(document.getElementById(id).value, defaultValue);
+}
+
+function getMinIntFromText(text, minValue)
{
var value = parseInt(text);
- if (isNaN(value))
- value = defaultValue;
+ if (isNaN(value) || (value < minValue))
+ value = minValue;
return value;
}
-function getIntFromTextInput(id, defaultValue)
+function getMinIntFromTextInput(id, minValue)
{
- return getIntFromText(document.getElementById(id).value, defaultValue);
+ return getMinIntFromText(document.getElementById(id).value, minValue);
+}
+
+function getMinMaxIntFromText(text, minValue, maxValue)
+{
+ var value = parseInt(text);
+ if (isNaN(value) || (value < minValue))
+ value = minValue;
+ else if (value > maxValue)
+ value = maxValue;
+ return value;
+}
+
+function getMinMaxIntFromTextInput(id, minValue, maxValue)
+{
+ return getMinMaxIntFromText(document.getElementById(id).value, minValue, maxValue);
+}
+
+function getMinMaxRealFromText(text, minValue, maxValue)
+{
+ var value = parseFloat(text);
+ if (isNaN(value) || (value < minValue))
+ value = minValue;
+ else if (value > maxValue)
+ value = maxValue;
+ return value;
+}
+
+function getMinRealFromText(text, minValue)
+{
+ var value = parseFloat(text);
+ if (isNaN(value) || (value < minValue))
+ value = minValue;
+ return value;
}
function maxDetailsHistory()
diff --git a/src/bmweb/indexsection.js b/src/bmweb/indexsection.js
index 1a1f31d..991b1c1 100644
--- a/src/bmweb/indexsection.js
+++ b/src/bmweb/indexsection.js
@@ -59,7 +59,7 @@ function confirmComputeLink() {
: confirm("No filter values have been explicitly set! Compute " + linkDescr + " anyway?");
}
-function updateComputeIndexLink(defaultBaseTime, defaultMedianWinSize)
+function updateComputeIndexLink(maxTimestamp, defaultMedianWinSize)
{
// Initialize URL ...
url = "https://" + location.host + "/cgi-bin/bmclientwrapper";
@@ -70,14 +70,14 @@ function updateComputeIndexLink(defaultBaseTime, defaultMedianWinSize)
// Add base timestamp ...
- baseTime = getIntFromTextInput("ixBaseTime", defaultBaseTime);
+ baseTime = getMinMaxIntFromTextInput("ixBaseTime", -1, maxTimestamp);
document.getElementById("ixBaseTime").value = baseTime;
url += " -basetimestamp " + baseTime;
// Add median window size ...
- medianWinSize = getIntFromTextInput("ixMedianWinSize", defaultMedianWinSize);
+ medianWinSize = getMinIntFromTextInput("ixMedianWinSize", 1);
document.getElementById("ixMedianWinSize").value = medianWinSize;
url += " -medianwinsize " + medianWinSize;
@@ -94,12 +94,13 @@ function updateComputeIndexLink(defaultBaseTime, defaultMedianWinSize)
if (document.getElementById("ixDQStatsEnabled").checked) {
// Add parameters for data quality statistics ...
- stabTol = getPositiveIntFromText(document.getElementById("ixDQStatsStabTol").value, 2);
+ diffTol = getMinRealFromText(document.getElementById("ixDQStatsDiffTol").value, 0);
+ document.getElementById("ixDQStatsDiffTol").value = diffTol;
+
+ stabTol = getMinIntFromText(document.getElementById("ixDQStatsStabTol").value, 2);
document.getElementById("ixDQStatsStabTol").value = stabTol;
- url += " -dataqualitystats"
- + " -dqstatsdifftol " + document.getElementById("ixDQStatsDiffTol").value
- + " -dqstatsstabtol " + stabTol;
+ url += " -dataqualitystats -dqstatsdifftol " + diffTol + " -dqstatsstabtol " + stabTol;
}
@@ -112,7 +113,7 @@ function updateComputeIndexLink(defaultBaseTime, defaultMedianWinSize)
linkDescr = "index";
}
-function updateComputeASFStatsLink(defaultMedianWinSize)
+function updateComputeASFStatsLink(maxTimestamp, defaultMedianWinSize)
{
// Initialize URL ...
url = "https://" + location.host + "/cgi-bin/bmclientwrapper";
@@ -134,37 +135,49 @@ function updateComputeASFStatsLink(defaultMedianWinSize)
url += createFilterOptionsString("-branch", getCheckedFilterValues("ixBranchFilter"));
// Add ASF-specific parameters ...
- url += " -fromtime " + document.getElementById("ixASFStatsFromTime").value
- + " -totime " + document.getElementById("ixASFStatsToTime").value
- + " -difftol " + document.getElementById("ixASFStatsDiffTol").value
- + " -stabtol " + document.getElementById("ixASFStatsStabTol").value
- + " -sftol " + document.getElementById("ixASFStatsSFTol").value
- + " -lftol " + document.getElementById("ixASFStatsLFTol").value
- + " -maxldtol " + document.getElementById("ixASFStatsMaxLDTol").value;
+ fromTime = getMinMaxIntFromText(
+ document.getElementById("ixASFStatsFromTime").value, 0, maxTimestamp);
+ document.getElementById("ixASFStatsFromTime").value = fromTime;
- // Update link ...
- link = document.getElementById("ixComputeASFStatsLink");
- link.setAttribute("href", url);
+ toTime = getMinMaxIntFromText(
+ document.getElementById("ixASFStatsToTime").value, fromTime, maxTimestamp);
+ document.getElementById("ixASFStatsToTime").value = toTime;
- link.setAttribute("target", "_blank"); // prevent page from opening in same window
+ diffTol = getMinRealFromText(document.getElementById("ixASFStatsDiffTol").value, 0);
+ document.getElementById("ixASFStatsDiffTol").value = diffTol;
- linkDescr = "ASF stats";
-}
+ stabTol = getMinIntFromText(document.getElementById("ixASFStatsStabTol").value, 1);
+ document.getElementById("ixASFStatsStabTol").value = stabTol;
-function updateComputeStatsLink(defaultBaseTime, defaultMedianWinSize)
-{
- // Initialize URL ...
- url = "dummy"; // 4 NOW!
+ sfTol = getMinMaxRealFromText(document.getElementById("ixASFStatsSFTol").value, 0, 100);
+ document.getElementById("ixASFStatsSFTol").value = sfTol;
+
+ lfTol = getMinMaxRealFromText(document.getElementById("ixASFStatsLFTol").value, 0, 100);
+ document.getElementById("ixASFStatsLFTol").value = lfTol;
+
+ maxLDTol = getMinRealFromText(document.getElementById("ixASFStatsMaxLDTol").value, 0);
+ document.getElementById("ixASFStatsMaxLDTol").value = maxLDTol;
+
+ url += " -fromtime " + fromTime
+ + " -totime " + toTime
+ + " -difftol " + diffTol
+ + " -stabtol " + stabTol
+ + " -sftol " + sfTol
+ + " -lftol " + lfTol
+ + " -maxldtol " + maxLDTol;
// Update link ...
- link = document.getElementById("ixComputeStatsLink");
+ link = document.getElementById("ixComputeASFStatsLink");
link.setAttribute("href", url);
link.setAttribute("target", "_blank"); // prevent page from opening in same window
+
+ linkDescr = "ASF stats";
}
function IndexSection()
{
+ var maxTimestamp = 2147483647;
var defaultBaseTime = -1; // current time
var defaultMedianWinSize = 8;
@@ -626,7 +639,7 @@ function IndexSection()
link.setAttribute(
"onmouseover",
"updateComputeIndexLink("
- + defaultBaseTime
+ + maxTimestamp
+ ", " + defaultMedianWinSize
+ ")"
);
@@ -693,7 +706,8 @@ function IndexSection()
link.setAttribute(
"onmouseover",
"updateComputeASFStatsLink("
- + defaultMedianWinSize
+ + maxTimestamp
+ + ", " + defaultMedianWinSize
+ ")"
);
link.onclick = confirmComputeLink;