summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArne Juul <arnej@yahoo-inc.com>2019-03-22 09:42:20 +0000
committerArne Juul <arnej@yahoo-inc.com>2019-03-22 09:53:17 +0000
commitabc99963fd90d526ee08e86cf5e1e26283e2871e (patch)
treeab20dc74b7f3b49d08458895fd5c5cdde4aede75
parenta05b9e83ee198a2dda97806eb388ab515b7094c1 (diff)
add "sum" output for gauge metrics
-rw-r--r--container-core/src/main/java/com/yahoo/container/jdisc/state/StateHandler.java1
-rw-r--r--container-core/src/test/java/com/yahoo/container/jdisc/state/StateHandlerTest.java3
-rwxr-xr-xcppunit-parallelize.py21
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/VisitorParameters.java1
-rw-r--r--metrics/src/tests/valuemetrictest.cpp3
-rw-r--r--metrics/src/vespa/metrics/jsonwriter.cpp1
-rw-r--r--staging_vespalib/src/tests/metrics/simple_metrics_test.cpp9
-rw-r--r--staging_vespalib/src/vespa/vespalib/metrics/json_formatter.cpp1
-rw-r--r--staging_vespalib/src/vespa/vespalib/metrics/snapshots.h3
9 files changed, 29 insertions, 14 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/state/StateHandler.java b/container-core/src/main/java/com/yahoo/container/jdisc/state/StateHandler.java
index 0d858b66055..f1eb03d88a9 100644
--- a/container-core/src/main/java/com/yahoo/container/jdisc/state/StateHandler.java
+++ b/container-core/src/main/java/com/yahoo/container/jdisc/state/StateHandler.java
@@ -235,6 +235,7 @@ public class StateHandler extends AbstractRequestHandler {
GaugeMetric gauge = (GaugeMetric) tuple.val;
JSONObjectWithLegibleException valueFields = new JSONObjectWithLegibleException();
valueFields.put("average", gauge.getAverage())
+ .put("sum", gauge.getSum())
.put("count", gauge.getCount())
.put("last", gauge.getLast())
.put("max", gauge.getMax())
diff --git a/container-core/src/test/java/com/yahoo/container/jdisc/state/StateHandlerTest.java b/container-core/src/test/java/com/yahoo/container/jdisc/state/StateHandlerTest.java
index b3a19e77391..d53b189f932 100644
--- a/container-core/src/test/java/com/yahoo/container/jdisc/state/StateHandlerTest.java
+++ b/container-core/src/test/java/com/yahoo/container/jdisc/state/StateHandlerTest.java
@@ -162,7 +162,8 @@ public class StateHandlerTest extends StateHandlerTestBase {
" \"last\": 5,\n" +
" \"max\": 5,\n" +
" \"min\": 2,\n" +
- " \"rate\": 0.013333333333333334\n" +
+ " \"rate\": 0.013333333333333334,\n" +
+ " \"sum\": 14\n" +
" }\n" +
" }\n" +
" ]\n" +
diff --git a/cppunit-parallelize.py b/cppunit-parallelize.py
index b18a171078e..03dbb3abf17 100755
--- a/cppunit-parallelize.py
+++ b/cppunit-parallelize.py
@@ -20,14 +20,14 @@ def parse_arguments():
return args
def take(lst, n):
- return [ lst.pop() for i in xrange(n) ]
+ return [ lst.pop() for i in range(n) ]
def chunkify(lst, chunks):
lst = copy.copy(lst)
- chunk_size = len(lst) / chunks
+ chunk_size = int(len(lst) / chunks)
chunk_surplus = len(lst) % chunks
- result = [ take(lst, chunk_size) for i in xrange(chunks) ]
+ result = [ take(lst, chunk_size) for i in range(chunks) ]
if chunk_surplus:
result.append(lst)
@@ -45,7 +45,8 @@ def error_if_file_not_found(function):
@error_if_file_not_found
def get_test_suites(testrunner):
- return subprocess.check_output((testrunner, "--list")).strip().split("\n")
+ out = subprocess.check_output((testrunner, "--list"))
+ return out.decode('utf-8').strip().split("\n")
class Process:
def __init__(self, cmd, group):
@@ -83,26 +84,26 @@ test_suites = get_test_suites(args.testrunner)
test_suite_groups = chunkify(test_suites, args.chunks)
processes = build_processes(test_suite_groups)
-print "Running %d test suites in %d parallel chunks with ~%d tests each" % (len(test_suites), len(test_suite_groups), len(test_suite_groups[0]))
+print("Running %d test suites in %d parallel chunks with ~%d tests each" % (len(test_suites), len(test_suite_groups), len(test_suite_groups[0])))
processes_left = len(processes)
while True:
try:
for proc in processes:
return_code = proc.handle.poll()
- proc.output += proc.handle.stdout.read()
+ proc.output += proc.handle.stdout.read().decode('utf-8')
if return_code == 0:
proc.finished = True
processes_left -= 1
if processes_left > 0:
- print "%d test suite(s) left" % processes_left
+ print("%d test suite(s) left" % processes_left)
else:
- print "All test suites ran successfully"
+ print("All test suites ran successfully")
sys.exit(0)
elif return_code is not None:
- print "Error: one of '%s' test suites failed:" % ", ".join(proc.group)
- print >>sys.stderr, proc.output
+ print("Error: one of '%s' test suites failed:" % ", ".join(proc.group))
+ sys.stderr.write(proc.output)
sys.exit(return_code)
time.sleep(0.01)
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/VisitorParameters.java b/documentapi/src/main/java/com/yahoo/documentapi/VisitorParameters.java
index 64854373e05..82e7a87e95b 100644
--- a/documentapi/src/main/java/com/yahoo/documentapi/VisitorParameters.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/VisitorParameters.java
@@ -140,6 +140,7 @@ public class VisitorParameters extends Parameters {
public boolean getVisitRemoves() { return visitRemoves; }
+ @Deprecated // TODO: Remove on Vespa 8
public boolean getVisitHeadersOnly() { return false; }
/** @return The field set to use. */
diff --git a/metrics/src/tests/valuemetrictest.cpp b/metrics/src/tests/valuemetrictest.cpp
index da730b7c8a9..5aa00e5ba0a 100644
--- a/metrics/src/tests/valuemetrictest.cpp
+++ b/metrics/src/tests/valuemetrictest.cpp
@@ -232,6 +232,7 @@ void ValueMetricTest::testJson() {
" \"values\":\n"
" {\n"
" \"average\":0.0,\n"
+ " \"sum\":0.0,\n"
" \"count\":0,\n"
" \"min\":0.0,\n"
" \"max\":0.0,\n"
@@ -251,6 +252,7 @@ void ValueMetricTest::testJson() {
" \"values\":\n"
" {\n"
" \"average\":100.0,\n"
+ " \"sum\":100.0,\n"
" \"count\":1,\n"
" \"min\":100.0,\n"
" \"max\":100.0,\n"
@@ -269,6 +271,7 @@ void ValueMetricTest::testJson() {
" \"values\":\n"
" {\n"
" \"average\":300.0,\n"
+ " \"sum\":600.0,\n"
" \"count\":2,\n"
" \"min\":100.0,\n"
" \"max\":500.0,\n"
diff --git a/metrics/src/vespa/metrics/jsonwriter.cpp b/metrics/src/vespa/metrics/jsonwriter.cpp
index d890d725c8a..9b8232dd42f 100644
--- a/metrics/src/vespa/metrics/jsonwriter.cpp
+++ b/metrics/src/vespa/metrics/jsonwriter.cpp
@@ -132,6 +132,7 @@ JsonWriter::visitValueMetric(const AbstractValueMetric& m, bool)
_stream << (values->getDoubleValue("total")
/ values->getDoubleValue("count"));
}
+ _stream << "sum" << values->getDoubleValue("total");
_stream << "count";
values->output("count", _stream);
if (_period > 0) {
diff --git a/staging_vespalib/src/tests/metrics/simple_metrics_test.cpp b/staging_vespalib/src/tests/metrics/simple_metrics_test.cpp
index 03ed9dc2cf7..f9f0d5e49dd 100644
--- a/staging_vespalib/src/tests/metrics/simple_metrics_test.cpp
+++ b/staging_vespalib/src/tests/metrics/simple_metrics_test.cpp
@@ -84,6 +84,9 @@ fprintf(stderr, "bad json a:\n>>>%s\n<<<\n", a.c_str());
fprintf(stderr, "bad json b\n");
return false;
}
+ if (!(slimeA == slimeB)) {
+fprintf(stderr, "compares unequal:\n[A]\n%s\n[B]\n%s\n", a.c_str(), b.c_str());
+ }
return slimeA == slimeB;
}
@@ -99,15 +102,15 @@ void check_json(const vespalib::string &actual)
" values: { count: 4, rate: 1.14286 }"
" }, {"
" name: 'bar',"
- " values: { count: 4, rate: 1.14286, average: 42, min: 41, max: 43, last: 42 }"
+ " values: { count: 4, rate: 1.14286, average: 42, sum: 168, min: 41, max: 43, last: 42 }"
" }, {"
" name: 'bar',"
" dimensions: { chain: 'vespa', documenttype: 'blogpost', thread: '1' },"
- " values: { count: 1, rate: 0.285714, average: 14, min: 14, max: 14, last: 14 }"
+ " values: { count: 1, rate: 0.285714, average: 14, sum: 14, min: 14, max: 14, last: 14 }"
" }, {"
" name: 'bar',"
" dimensions: { chain: 'vespa', documenttype: 'blogpost', thread: '2' },"
- " values: { count: 1, rate: 0.285714, average: 11, min: 11, max: 11, last: 11 }"
+ " values: { count: 1, rate: 0.285714, average: 11, sum: 11, min: 11, max: 11, last: 11 }"
" } ]"
"}";
EXPECT_TRUE(compare_json(expect, actual));
diff --git a/staging_vespalib/src/vespa/vespalib/metrics/json_formatter.cpp b/staging_vespalib/src/vespa/vespalib/metrics/json_formatter.cpp
index 280211bd780..11c4a9d34b2 100644
--- a/staging_vespalib/src/vespa/vespalib/metrics/json_formatter.cpp
+++ b/staging_vespalib/src/vespa/vespalib/metrics/json_formatter.cpp
@@ -52,6 +52,7 @@ JsonFormatter::handle(const GaugeSnapshot &snapshot, vespalib::slime::Cursor &ta
handle(snapshot.point(), target);
Cursor& inner = target.setObject("values");
inner.setDouble("average", snapshot.averageValue());
+ inner.setDouble("sum", snapshot.sumValue());
inner.setDouble("min", snapshot.minValue());
inner.setDouble("max", snapshot.maxValue());
inner.setDouble("last", snapshot.lastValue());
diff --git a/staging_vespalib/src/vespa/vespalib/metrics/snapshots.h b/staging_vespalib/src/vespa/vespalib/metrics/snapshots.h
index 0e9915cfb6d..ee5fc942e65 100644
--- a/staging_vespalib/src/vespa/vespalib/metrics/snapshots.h
+++ b/staging_vespalib/src/vespa/vespalib/metrics/snapshots.h
@@ -48,6 +48,7 @@ private:
const PointSnapshot &_point;
const size_t _observedCount;
const double _averageValue;
+ const double _sumValue;
const double _minValue;
const double _maxValue;
const double _lastValue;
@@ -57,6 +58,7 @@ public:
_point(p),
_observedCount(c.observedCount),
_averageValue(c.sumValue / (c.observedCount > 0 ? c.observedCount : 1)),
+ _sumValue(c.sumValue),
_minValue(c.minValue),
_maxValue(c.maxValue),
_lastValue(c.lastValue)
@@ -66,6 +68,7 @@ public:
const PointSnapshot &point() const { return _point; }
size_t observedCount() const { return _observedCount; }
double averageValue() const { return _averageValue; }
+ double sumValue() const { return _sumValue; }
double minValue() const { return _minValue; }
double maxValue() const { return _maxValue; }
double lastValue() const { return _lastValue; }