Skip to content

Commit 1e4cc2c

Browse files
committed
Expose GetMetrics
1 parent c3c6243 commit 1e4cc2c

File tree

2 files changed

+133
-0
lines changed

2 files changed

+133
-0
lines changed

lib.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,11 @@ func (vm *VM) AnalyzeCode(checksum Checksum) (*types.AnalysisReport, error) {
101101
return api.AnalyzeCode(vm.cache, checksum)
102102
}
103103

104+
// GetMetrics some internal metrics for monitoring purposes.
105+
func (vm *VM) GetMetrics() (*types.Metrics, error) {
106+
return api.GetMetrics(vm.cache)
107+
}
108+
104109
// Instantiate will create a new contract based on the given Checksum.
105110
// We can set the initMsg (contract "genesis") here, and it then receives
106111
// an account and address and can be invoked (Execute) many times.

lib_test.go

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,3 +92,131 @@ func TestHappyPath(t *testing.T) {
9292
expectedData := []byte{0xF0, 0x0B, 0xAA}
9393
assert.Equal(t, expectedData, hres.Data)
9494
}
95+
96+
func TestGetMetrics(t *testing.T) {
97+
vm := withVM(t)
98+
99+
// GetMetrics 1
100+
metrics, err := vm.GetMetrics()
101+
require.NoError(t, err)
102+
assert.Equal(t, &types.Metrics{}, metrics)
103+
104+
// Create contract
105+
checksum := createTestContract(t, vm, HACKATOM_TEST_CONTRACT)
106+
107+
// GetMetrics 2
108+
metrics, err = vm.GetMetrics()
109+
require.NoError(t, err)
110+
assert.Equal(t, &types.Metrics{}, metrics)
111+
112+
// Instantiate 1
113+
gasMeter1 := api.NewMockGasMeter(TESTING_GAS_LIMIT)
114+
// instantiate it with this store
115+
store := api.NewLookup(gasMeter1)
116+
goapi := api.NewMockAPI()
117+
balance := types.Coins{types.NewCoin(250, "ATOM")}
118+
querier := api.DefaultQuerier(api.MOCK_CONTRACT_ADDR, balance)
119+
120+
env := api.MockEnv()
121+
info := api.MockInfo("creator", nil)
122+
msg1 := []byte(`{"verifier": "fred", "beneficiary": "bob"}`)
123+
ires, _, err := vm.Instantiate(checksum, env, info, msg1, store, *goapi, querier, gasMeter1, TESTING_GAS_LIMIT)
124+
require.NoError(t, err)
125+
require.Equal(t, 0, len(ires.Messages))
126+
127+
// GetMetrics 3
128+
metrics, err = vm.GetMetrics()
129+
require.NoError(t, err)
130+
assert.Equal(t, &types.Metrics{
131+
HitsFsCache: 1,
132+
ElementsMemoryCache: 1,
133+
SizeMemoryCache: 3428923,
134+
}, metrics)
135+
136+
// Instantiate 2
137+
msg2 := []byte(`{"verifier": "fred", "beneficiary": "susi"}`)
138+
ires, _, err = vm.Instantiate(checksum, env, info, msg2, store, *goapi, querier, gasMeter1, TESTING_GAS_LIMIT)
139+
require.NoError(t, err)
140+
require.Equal(t, 0, len(ires.Messages))
141+
142+
// GetMetrics 4
143+
metrics, err = vm.GetMetrics()
144+
require.NoError(t, err)
145+
assert.Equal(t, &types.Metrics{
146+
HitsMemoryCache: 1,
147+
HitsFsCache: 1,
148+
ElementsMemoryCache: 1,
149+
SizeMemoryCache: 3428923,
150+
}, metrics)
151+
152+
// Pin
153+
err = vm.Pin(checksum)
154+
require.NoError(t, err)
155+
156+
// GetMetrics 5
157+
metrics, err = vm.GetMetrics()
158+
require.NoError(t, err)
159+
assert.Equal(t, &types.Metrics{
160+
HitsMemoryCache: 2,
161+
HitsFsCache: 1,
162+
ElementsPinnedMemoryCache: 1,
163+
ElementsMemoryCache: 1,
164+
SizePinnedMemoryCache: 3428923,
165+
SizeMemoryCache: 3428923,
166+
}, metrics)
167+
168+
// Instantiate 3
169+
msg3 := []byte(`{"verifier": "fred", "beneficiary": "bert"}`)
170+
ires, _, err = vm.Instantiate(checksum, env, info, msg3, store, *goapi, querier, gasMeter1, TESTING_GAS_LIMIT)
171+
require.NoError(t, err)
172+
require.Equal(t, 0, len(ires.Messages))
173+
174+
// GetMetrics 6
175+
metrics, err = vm.GetMetrics()
176+
require.NoError(t, err)
177+
assert.Equal(t, &types.Metrics{
178+
HitsPinnedMemoryCache: 1,
179+
HitsMemoryCache: 2,
180+
HitsFsCache: 1,
181+
ElementsPinnedMemoryCache: 1,
182+
ElementsMemoryCache: 1,
183+
SizePinnedMemoryCache: 3428923,
184+
SizeMemoryCache: 3428923,
185+
}, metrics)
186+
187+
// Unpin
188+
err = vm.Unpin(checksum)
189+
require.NoError(t, err)
190+
191+
// GetMetrics 7
192+
metrics, err = vm.GetMetrics()
193+
require.NoError(t, err)
194+
assert.Equal(t, &types.Metrics{
195+
HitsPinnedMemoryCache: 1,
196+
HitsMemoryCache: 2,
197+
HitsFsCache: 1,
198+
ElementsPinnedMemoryCache: 0,
199+
ElementsMemoryCache: 1,
200+
SizePinnedMemoryCache: 0,
201+
SizeMemoryCache: 3428923,
202+
}, metrics)
203+
204+
// Instantiate 4
205+
msg4 := []byte(`{"verifier": "fred", "beneficiary": "jeff"}`)
206+
ires, _, err = vm.Instantiate(checksum, env, info, msg4, store, *goapi, querier, gasMeter1, TESTING_GAS_LIMIT)
207+
require.NoError(t, err)
208+
require.Equal(t, 0, len(ires.Messages))
209+
210+
// GetMetrics 8
211+
metrics, err = vm.GetMetrics()
212+
require.NoError(t, err)
213+
assert.Equal(t, &types.Metrics{
214+
HitsPinnedMemoryCache: 1,
215+
HitsMemoryCache: 3,
216+
HitsFsCache: 1,
217+
ElementsPinnedMemoryCache: 0,
218+
ElementsMemoryCache: 1,
219+
SizePinnedMemoryCache: 0,
220+
SizeMemoryCache: 3428923,
221+
}, metrics)
222+
}

0 commit comments

Comments
 (0)