Code refactoring for bpa operator
[icn.git] / cmd / bpa-operator / vendor / go.opencensus.io / stats / view / export.go
1 // Copyright 2017, OpenCensus Authors
2 //
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
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
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.
14
15 package view
16
17 import "sync"
18
19 var (
20         exportersMu sync.RWMutex // guards exporters
21         exporters   = make(map[Exporter]struct{})
22 )
23
24 // Exporter exports the collected records as view data.
25 //
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.
29 //
30 // It is safe to assume that ExportView will not be called concurrently from
31 // multiple goroutines.
32 //
33 // The Data should not be modified.
34 type Exporter interface {
35         ExportView(viewData *Data)
36 }
37
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.
43 //
44 // Binaries can register exporters, libraries shouldn't register exporters.
45 func RegisterExporter(e Exporter) {
46         exportersMu.Lock()
47         defer exportersMu.Unlock()
48
49         exporters[e] = struct{}{}
50 }
51
52 // UnregisterExporter unregisters an exporter.
53 func UnregisterExporter(e Exporter) {
54         exportersMu.Lock()
55         defer exportersMu.Unlock()
56
57         delete(exporters, e)
58 }