1 // Copyright 2017, OpenCensus Authors
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
7 // http://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
20 exportersMu sync.RWMutex // guards exporters
21 exporters = make(map[Exporter]struct{})
24 // Exporter exports the collected records as view data.
26 // The ExportView method should return quickly; if an
27 // Exporter takes a significant amount of time to
28 // process a Data, that work should be done on another goroutine.
30 // It is safe to assume that ExportView will not be called concurrently from
31 // multiple goroutines.
33 // The Data should not be modified.
34 type Exporter interface {
35 ExportView(viewData *Data)
38 // RegisterExporter registers an exporter.
39 // Collected data will be reported via all the
40 // registered exporters. Once you no longer
41 // want data to be exported, invoke UnregisterExporter
42 // with the previously registered exporter.
44 // Binaries can register exporters, libraries shouldn't register exporters.
45 func RegisterExporter(e Exporter) {
47 defer exportersMu.Unlock()
49 exporters[e] = struct{}{}
52 // UnregisterExporter unregisters an exporter.
53 func UnregisterExporter(e Exporter) {
55 defer exportersMu.Unlock()