/
vault_service_tmp.go
143 lines (121 loc) · 2.89 KB
/
vault_service_tmp.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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package vault
import (
"fmt"
"github.com/bf2fc6cc711aee1a0c2a/kas-fleet-manager/internal/connector/internal/metrics"
"sync"
)
var _ VaultService = &TmpVaultService{}
var NotFound = fmt.Errorf("not found")
type tmpSecret struct {
name string
value string
owningResource string
}
type TmpVaultService struct {
mu sync.Mutex
secrets map[string]tmpSecret
deleteCounter int64
insertCounter int64
updateCounter int64
getCounter int64
missCounter int64
}
type Counters struct {
Deletes int64
Inserts int64
Updates int64
Gets int64
Misses int64
}
func NewTmpVaultService() (*TmpVaultService, error) {
return &TmpVaultService{
secrets: map[string]tmpSecret{},
}, nil
}
func (k *TmpVaultService) Kind() string {
return KindTmp
}
func (k *TmpVaultService) ResetCounters() {
k.mu.Lock()
defer k.mu.Unlock()
k.deleteCounter = 0
k.insertCounter = 0
k.updateCounter = 0
k.getCounter = 0
k.missCounter = 0
}
func (k *TmpVaultService) Counters() Counters {
k.mu.Lock()
defer k.mu.Unlock()
return Counters{
Deletes: k.deleteCounter,
Inserts: k.insertCounter,
Updates: k.updateCounter,
Gets: k.getCounter,
Misses: k.missCounter,
}
}
func (k *TmpVaultService) SetSecretString(name string, value string, owningResource string) error {
k.mu.Lock()
defer k.mu.Unlock()
metrics.IncreaseVaultServiceTotalCount("set")
if _, found := k.secrets[name]; found {
k.updateCounter += 1
} else {
k.insertCounter += 1
}
k.secrets[name] = tmpSecret{
name: name,
value: value,
owningResource: owningResource,
}
metrics.IncreaseVaultServiceSuccessCount("set")
return nil
}
func (k *TmpVaultService) GetSecretString(name string) (string, error) {
k.mu.Lock()
defer k.mu.Unlock()
metrics.IncreaseVaultServiceTotalCount("get")
entry, found := k.secrets[name]
if found {
metrics.IncreaseVaultServiceSuccessCount("get")
k.getCounter += 1
return entry.value, nil
} else {
metrics.IncreaseVaultServiceErrorsCount("get")
k.missCounter += 1
return "", NotFound
}
}
func (k *TmpVaultService) DeleteSecretString(name string) error {
k.mu.Lock()
defer k.mu.Unlock()
metrics.IncreaseVaultServiceTotalCount("delete")
if _, ok := k.secrets[name]; ok {
metrics.IncreaseVaultServiceSuccessCount("delete")
k.deleteCounter += 1
} else {
metrics.IncreaseVaultServiceErrorsCount("delete")
return NotFound
}
delete(k.secrets, name)
return nil
}
func (k *TmpVaultService) ForEachSecret(f func(name string, owningResource string) bool) error {
// Copy the secrets to an array...
k.mu.Lock()
secrets := []tmpSecret{}
for _, s := range k.secrets {
metrics.IncreaseVaultServiceTotalCount("get")
secrets = append(secrets, s)
}
k.mu.Unlock()
l := len(secrets)
for i := 0; i < l; i++ {
metrics.IncreaseVaultServiceSuccessCount("get")
if !f(secrets[i].name, secrets[i].owningResource) {
return nil
}
}
return nil
}