summaryrefslogtreecommitdiff
path: root/vendor/go.opencensus.io/stats/view
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/go.opencensus.io/stats/view')
-rw-r--r--vendor/go.opencensus.io/stats/view/aggregation.go6
-rw-r--r--vendor/go.opencensus.io/stats/view/collector.go9
-rw-r--r--vendor/go.opencensus.io/stats/view/doc.go2
-rw-r--r--vendor/go.opencensus.io/stats/view/worker.go27
4 files changed, 35 insertions, 9 deletions
diff --git a/vendor/go.opencensus.io/stats/view/aggregation.go b/vendor/go.opencensus.io/stats/view/aggregation.go
index 748bd568c..61f72d20d 100644
--- a/vendor/go.opencensus.io/stats/view/aggregation.go
+++ b/vendor/go.opencensus.io/stats/view/aggregation.go
@@ -90,9 +90,9 @@ func Sum() *Aggregation {
//
// If len(bounds) >= 2 then the boundaries for bucket index i are:
//
-// [-infinity, bounds[i]) for i = 0
-// [bounds[i-1], bounds[i]) for 0 < i < length
-// [bounds[i-1], +infinity) for i = length
+// [-infinity, bounds[i]) for i = 0
+// [bounds[i-1], bounds[i]) for 0 < i < length
+// [bounds[i-1], +infinity) for i = length
//
// If len(bounds) is 0 then there is no histogram associated with the
// distribution. There will be a single bucket with boundaries
diff --git a/vendor/go.opencensus.io/stats/view/collector.go b/vendor/go.opencensus.io/stats/view/collector.go
index ac22c93a2..bcd6e08c7 100644
--- a/vendor/go.opencensus.io/stats/view/collector.go
+++ b/vendor/go.opencensus.io/stats/view/collector.go
@@ -59,8 +59,15 @@ func (c *collector) clearRows() {
// encodeWithKeys encodes the map by using values
// only associated with the keys provided.
func encodeWithKeys(m *tag.Map, keys []tag.Key) []byte {
+ // Compute the buffer length we will need ahead of time to avoid resizing later
+ reqLen := 0
+ for _, k := range keys {
+ s, _ := m.Value(k)
+ // We will store each key + its length
+ reqLen += len(s) + 1
+ }
vb := &tagencoding.Values{
- Buffer: make([]byte, len(keys)),
+ Buffer: make([]byte, reqLen),
}
for _, k := range keys {
v, _ := m.Value(k)
diff --git a/vendor/go.opencensus.io/stats/view/doc.go b/vendor/go.opencensus.io/stats/view/doc.go
index 7bbedfe1f..60bf0e392 100644
--- a/vendor/go.opencensus.io/stats/view/doc.go
+++ b/vendor/go.opencensus.io/stats/view/doc.go
@@ -34,7 +34,7 @@
// Libraries can define views but it is recommended that in most cases registering
// views be left up to applications.
//
-// Exporting
+// # Exporting
//
// Collected and aggregated data can be exported to a metric collection
// backend by registering its exporter.
diff --git a/vendor/go.opencensus.io/stats/view/worker.go b/vendor/go.opencensus.io/stats/view/worker.go
index 6e8d18b7f..6a79cd8a3 100644
--- a/vendor/go.opencensus.io/stats/view/worker.go
+++ b/vendor/go.opencensus.io/stats/view/worker.go
@@ -33,6 +33,7 @@ func init() {
defaultWorker = NewMeter().(*worker)
go defaultWorker.start()
internal.DefaultRecorder = record
+ internal.MeasurementRecorder = recordMeasurement
}
type measureRef struct {
@@ -199,11 +200,21 @@ func record(tags *tag.Map, ms interface{}, attachments map[string]interface{}) {
defaultWorker.Record(tags, ms, attachments)
}
+func recordMeasurement(tags *tag.Map, ms []stats.Measurement, attachments map[string]interface{}) {
+ defaultWorker.recordMeasurement(tags, ms, attachments)
+}
+
// Record records a set of measurements ms associated with the given tags and attachments.
func (w *worker) Record(tags *tag.Map, ms interface{}, attachments map[string]interface{}) {
+ w.recordMeasurement(tags, ms.([]stats.Measurement), attachments)
+}
+
+// recordMeasurement records a set of measurements ms associated with the given tags and attachments.
+// This is the same as Record but without an interface{} type to avoid allocations
+func (w *worker) recordMeasurement(tags *tag.Map, ms []stats.Measurement, attachments map[string]interface{}) {
req := &recordReq{
tm: tags,
- ms: ms.([]stats.Measurement),
+ ms: ms,
attachments: attachments,
t: time.Now(),
}
@@ -221,6 +232,11 @@ func SetReportingPeriod(d time.Duration) {
defaultWorker.SetReportingPeriod(d)
}
+// Stop stops the default worker.
+func Stop() {
+ defaultWorker.Stop()
+}
+
// SetReportingPeriod sets the interval between reporting aggregated views in
// the program. If duration is less than or equal to zero, it enables the
// default behavior.
@@ -281,7 +297,7 @@ func (w *worker) start() {
case <-w.quit:
w.timer.Stop()
close(w.c)
- w.done <- true
+ close(w.done)
return
}
}
@@ -290,8 +306,11 @@ func (w *worker) start() {
func (w *worker) Stop() {
prodMgr := metricproducer.GlobalManager()
prodMgr.DeleteProducer(w)
-
- w.quit <- true
+ select {
+ case <-w.quit:
+ default:
+ close(w.quit)
+ }
<-w.done
}