Skip to content

Commit e9c5bf8

Browse files
committed
Add search hit/miss metrics
1 parent a936fb5 commit e9c5bf8

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

src/IndexReader.zig

+7
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const std = @import("std");
22

33
const Self = @This();
44

5+
const metrics = @import("metrics.zig");
56
const Deadline = @import("utils/Deadline.zig");
67
const SearchResults = @import("common.zig").SearchResults;
78
const SharedPtr = @import("utils/shared_ptr.zig").SharedPtr;
@@ -38,6 +39,12 @@ pub fn search(self: *Self, hashes: []const u32, allocator: std.mem.Allocator, de
3839

3940
results.sort();
4041

42+
if (results.count() == 0) {
43+
metrics.searchMiss();
44+
} else {
45+
metrics.searchHit();
46+
}
47+
4148
return results;
4249
}
4350

src/metrics.zig

+12
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ var metrics = m.initializeNoop(Metrics);
66
const WithIndex = struct { index: []const u8 };
77

88
const Metrics = struct {
9+
search_hits: m.Counter(u64),
10+
search_misses: m.Counter(u64),
911
searches: m.Counter(u64),
1012
updates: m.Counter(u64),
1113
checkpoints: m.Counter(u64),
@@ -18,6 +20,14 @@ pub fn search() void {
1820
metrics.searches.incr();
1921
}
2022

23+
pub fn searchHit() void {
24+
metrics.search_hits.incr();
25+
}
26+
27+
pub fn searchMiss() void {
28+
metrics.search_misses.incr();
29+
}
30+
2131
pub fn update(count: usize) void {
2232
metrics.updates.incrBy(@intCast(count));
2333
}
@@ -40,6 +50,8 @@ pub fn docs(index_name: []const u8, value: u32) void {
4050

4151
pub fn initializeMetrics(allocator: std.mem.Allocator, comptime opts: m.RegistryOpts) !void {
4252
metrics = .{
53+
.search_hits = m.Counter(u64).init("search_hits_total", .{}, opts),
54+
.search_misses = m.Counter(u64).init("search_misses_total", .{}, opts),
4355
.searches = m.Counter(u64).init("searches_total", .{}, opts),
4456
.updates = m.Counter(u64).init("updates_total", .{}, opts),
4557
.checkpoints = m.Counter(u64).init("checkpoints_total", .{}, opts),

tests/test_misc.py

+2
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,5 @@ def test_metrics(client):
1212
req = client.get('/_metrics')
1313
assert req.status_code == 200, req.content
1414
assert 'aindex_searches_total' in req.text
15+
assert 'aindex_search_hits_total' in req.text
16+
assert 'aindex_search_misses_total' in req.text

0 commit comments

Comments
 (0)