forked from keybase/client
-
Notifications
You must be signed in to change notification settings - Fork 0
/
kcache_measured.go
63 lines (56 loc) · 1.92 KB
/
kcache_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
// 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 libkbfs
import (
"github.com/keybase/client/go/kbfs/kbfscrypto"
"github.com/keybase/client/go/kbfs/kbfsmd"
"github.com/keybase/client/go/kbfs/tlf"
metrics "github.com/rcrowley/go-metrics"
)
// KeyCacheMeasured delegates to another KeyCache instance but
// also keeps track of stats.
type KeyCacheMeasured struct {
delegate KeyCache
getTimer metrics.Timer
putTimer metrics.Timer
hitCountMeter metrics.Meter
}
var _ KeyCache = KeyCacheMeasured{}
// NewKeyCacheMeasured creates and returns a new KeyCacheMeasured
// instance with the given delegate and registry.
func NewKeyCacheMeasured(delegate KeyCache, r metrics.Registry) KeyCacheMeasured {
getTimer := metrics.GetOrRegisterTimer("KeyCache.GetTLFCryptKey", r)
putTimer := metrics.GetOrRegisterTimer("KeyCache.PutTLFCryptKey", r)
// TODO: Implement RatioGauge (
// http://metrics.dropwizard.io/3.1.0/manual/core/#ratio-gauges
// ) so we can actually display a hit ratio.
hitCountMeter := metrics.GetOrRegisterMeter("KeyCache.HitCount", r)
return KeyCacheMeasured{
delegate: delegate,
getTimer: getTimer,
putTimer: putTimer,
hitCountMeter: hitCountMeter,
}
}
// GetTLFCryptKey implements the KeyCache interface for
// KeyCacheMeasured.
func (b KeyCacheMeasured) GetTLFCryptKey(
tlfID tlf.ID, keyGen kbfsmd.KeyGen) (key kbfscrypto.TLFCryptKey, err error) {
b.getTimer.Time(func() {
key, err = b.delegate.GetTLFCryptKey(tlfID, keyGen)
})
if err == nil {
b.hitCountMeter.Mark(1)
}
return key, err
}
// PutTLFCryptKey implements the KeyCache interface for
// KeyCacheMeasured.
func (b KeyCacheMeasured) PutTLFCryptKey(
tlfID tlf.ID, keyGen kbfsmd.KeyGen, key kbfscrypto.TLFCryptKey) (err error) {
b.putTimer.Time(func() {
err = b.delegate.PutTLFCryptKey(tlfID, keyGen, key)
})
return err
}