forked from keybase/client
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkey_bundle_cache_measured.go
96 lines (87 loc) · 3.96 KB
/
key_bundle_cache_measured.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
// Copyright 2016 Keybase Inc. All rights reserved.
// Use of this source code is governed by a BSD
// license that can be found in the LICENSE file.
package libkey
import (
"github.com/keybase/client/go/kbfs/kbfsmd"
metrics "github.com/rcrowley/go-metrics"
)
// KeyBundleCacheMeasured delegates to another KeyBundleCache instance but
// also keeps track of stats.
type KeyBundleCacheMeasured struct {
delegate kbfsmd.KeyBundleCache
getReaderBundleTimer metrics.Timer
getWriterBundleTimer metrics.Timer
putReaderBundleTimer metrics.Timer
putWriterBundleTimer metrics.Timer
hitReaderBundleCountMeter metrics.Meter
hitWriterBundleCountMeter metrics.Meter
attemptReaderBundleCountMeter metrics.Meter
attemptWriterBundleCountMeter metrics.Meter
}
var _ kbfsmd.KeyBundleCache = KeyBundleCacheMeasured{}
// NewKeyBundleCacheMeasured creates and returns a new KeyBundleCacheMeasured
// instance with the given delegate and registry.
func NewKeyBundleCacheMeasured(delegate kbfsmd.KeyBundleCache, r metrics.Registry) KeyBundleCacheMeasured {
getReaderBundleTimer := metrics.GetOrRegisterTimer("KeyBundleCache.GetTLFReaderKeyBundle", r)
putReaderBundleTimer := metrics.GetOrRegisterTimer("KeyBundleCache.PutTLFReaderKeyBundle", r)
getWriterBundleTimer := metrics.GetOrRegisterTimer("KeyBundleCache.GetTLFWriterKeyBundle", r)
putWriterBundleTimer := metrics.GetOrRegisterTimer("KeyBundleCache.PutTLFWriterKeyBundle", r)
hitReaderBundleCountMeter := metrics.GetOrRegisterMeter("KeyBundleCache.TLFReaderKeyBundleHitCount", r)
hitWriterBundleCountMeter := metrics.GetOrRegisterMeter("KeyBundleCache.TLFWriterKeyBundleHitCount", r)
attemptReaderBundleCountMeter := metrics.GetOrRegisterMeter("KeyBundleCache.TLFReaderKeyBundleAttemptCount", r)
attemptWriterBundleCountMeter := metrics.GetOrRegisterMeter("KeyBundleCache.TLFWriterKeyBundleAttemptCount", r)
return KeyBundleCacheMeasured{
delegate: delegate,
getReaderBundleTimer: getReaderBundleTimer,
getWriterBundleTimer: getWriterBundleTimer,
putReaderBundleTimer: putReaderBundleTimer,
putWriterBundleTimer: putWriterBundleTimer,
hitReaderBundleCountMeter: hitReaderBundleCountMeter,
hitWriterBundleCountMeter: hitWriterBundleCountMeter,
attemptReaderBundleCountMeter: attemptReaderBundleCountMeter,
attemptWriterBundleCountMeter: attemptWriterBundleCountMeter,
}
}
// GetTLFReaderKeyBundle implements the KeyBundleCache interface for
// KeyBundleCacheMeasured.
func (b KeyBundleCacheMeasured) GetTLFReaderKeyBundle(
bundleID kbfsmd.TLFReaderKeyBundleID) (rkb *kbfsmd.TLFReaderKeyBundleV3, err error) {
b.attemptReaderBundleCountMeter.Mark(1)
b.getReaderBundleTimer.Time(func() {
rkb, err = b.delegate.GetTLFReaderKeyBundle(bundleID)
})
if err == nil && rkb != nil {
b.hitReaderBundleCountMeter.Mark(1)
}
return rkb, err
}
// GetTLFWriterKeyBundle implements the KeyBundleCache interface for
// KeyBundleCacheMeasured.
func (b KeyBundleCacheMeasured) GetTLFWriterKeyBundle(
bundleID kbfsmd.TLFWriterKeyBundleID) (wkb *kbfsmd.TLFWriterKeyBundleV3, err error) {
b.attemptWriterBundleCountMeter.Mark(1)
b.getWriterBundleTimer.Time(func() {
wkb, err = b.delegate.GetTLFWriterKeyBundle(bundleID)
})
if err == nil && wkb != nil {
b.hitWriterBundleCountMeter.Mark(1)
}
return wkb, err
}
// PutTLFReaderKeyBundle implements the KeyBundleCache interface for
// KeyBundleCacheMeasured.
func (b KeyBundleCacheMeasured) PutTLFReaderKeyBundle(
bundleID kbfsmd.TLFReaderKeyBundleID, rkb kbfsmd.TLFReaderKeyBundleV3) {
b.putReaderBundleTimer.Time(func() {
b.delegate.PutTLFReaderKeyBundle(bundleID, rkb)
})
}
// PutTLFWriterKeyBundle implements the KeyBundleCache interface for
// KeyBundleCacheMeasured.
func (b KeyBundleCacheMeasured) PutTLFWriterKeyBundle(
bundleID kbfsmd.TLFWriterKeyBundleID, wkb kbfsmd.TLFWriterKeyBundleV3) {
b.putWriterBundleTimer.Time(func() {
b.delegate.PutTLFWriterKeyBundle(bundleID, wkb)
})
}