@@ -130,8 +130,17 @@ let metrics =
130
130
| `Drop -> " drops"
131
131
| `Insert -> " insertions"
132
132
in
133
- let src = Dns. counter_metrics ~f " dns-cache" in
134
- (fun r -> Metrics. add src (fun x -> x) (fun d -> d r))
133
+ let incr, get = create_counter ~f in
134
+ let data (cache , thing ) =
135
+ incr thing;
136
+ Metrics.Data. v
137
+ (Metrics. uint " size" (LRU. size cache) ::
138
+ Metrics. uint " weight" (LRU. weight cache) ::
139
+ Metrics. uint " capacity" (LRU. capacity cache) ::
140
+ get () )
141
+ in
142
+ let src = Metrics.Src. v ~tags: Metrics.Tags. [] ~data " dns-cache" in
143
+ (fun cache r -> Metrics. add src (fun x -> x) (fun d -> d (cache, r)))
135
144
136
145
let empty = LRU. empty
137
146
@@ -196,13 +205,13 @@ let update_ttl typ entry ~created ~now =
196
205
if updated_ttl < 0l then Error `Cache_drop else Ok (with_ttl typ updated_ttl entry)
197
206
198
207
let get cache ts name query_type =
199
- metrics `Lookup ;
208
+ metrics cache `Lookup ;
200
209
match snd (find cache name query_type) with
201
- | Error e -> metrics `Miss ; cache, Error e
210
+ | Error e -> metrics cache `Miss ; cache, Error e
202
211
| Ok ((created , rank ), entry ) ->
203
212
match update_ttl query_type entry ~created ~now: ts with
204
- | Ok entry' -> metrics `Hit ; LRU. promote name cache, Ok (entry', rank)
205
- | Error e -> metrics `Drop ; cache, Error e
213
+ | Ok entry' -> metrics cache `Hit ; LRU. promote name cache, Ok (entry', rank)
214
+ | Error e -> metrics cache `Drop ; cache, Error e
206
215
207
216
let find_any cache name =
208
217
match LRU. find name cache with
@@ -211,9 +220,9 @@ let find_any cache name =
211
220
| Some Rr_map rrs -> Ok (`Entries rrs)
212
221
213
222
let get_any cache ts name =
214
- metrics `Lookup ;
223
+ metrics cache `Lookup ;
215
224
match find_any cache name with
216
- | Error e -> metrics `Miss ; cache, Error e
225
+ | Error e -> metrics cache `Miss ; cache, Error e
217
226
| Ok r ->
218
227
let ttl created curr =
219
228
let ttl = compute_updated_ttl ~created ~now: ts curr in
@@ -223,9 +232,9 @@ let get_any cache ts name =
223
232
match r with
224
233
| `No_domain ((created , rank ), name , soa ) ->
225
234
begin match ttl created soa.Soa. minimum with
226
- | Error _ as e -> metrics `Drop ; e
235
+ | Error _ as e -> metrics cache `Drop ; e
227
236
| Ok minimum ->
228
- metrics `Hit ;
237
+ metrics cache `Hit ;
229
238
Ok (`No_domain (name, { soa with Soa. minimum }), rank)
230
239
end
231
240
| `Entries rrs ->
@@ -242,20 +251,20 @@ let get_any cache ts name =
242
251
| _ -> acc, r) rrs (Rr_map. empty, Additional )
243
252
in
244
253
match Rr_map. is_empty rrs with
245
- | true -> metrics `Drop ; Error `Cache_drop
246
- | false -> metrics `Hit ; Ok (`Entries rrs, r)
254
+ | true -> metrics cache `Drop ; Error `Cache_drop
255
+ | false -> metrics cache `Hit ; Ok (`Entries rrs, r)
247
256
248
257
let get_or_cname : type a . t -> int64 -> [`raw ] Domain_name. t -> a Rr_map. key ->
249
258
t * ([ a entry | `Alias of int32 * [`raw ] Domain_name. t ] * rank ,
250
259
[ `Cache_drop | `Cache_miss ]) result =
251
260
fun cache ts name query_type ->
252
- metrics `Lookup ;
261
+ metrics cache `Lookup ;
253
262
let map_result : _ -> t * ([ a entry | `Alias of int32 * [`raw] Domain_name.t] * rank, [ `Cache_drop | `Cache_miss ]) result = function
254
- | Error e -> metrics `Miss ; cache, Error e
263
+ | Error e -> metrics cache `Miss ; cache, Error e
255
264
| Ok ((created , rank ), entry ) ->
256
265
match update_ttl query_type entry ~created ~now: ts with
257
- | Ok entry' -> metrics `Hit ; LRU. promote name cache, Ok ((entry', rank) :> [ _ entry | `Alias of int32 * [`raw ] Domain_name. t ] * rank)
258
- | Error e -> metrics `Drop ; cache, Error e
266
+ | Ok entry' -> metrics cache `Hit ; LRU. promote name cache, Ok ((entry', rank) :> [ _ entry | `Alias of int32 * [`raw ] Domain_name. t ] * rank)
267
+ | Error e -> metrics cache `Drop ; cache, Error e
259
268
in
260
269
match find cache name query_type with
261
270
| Some map , r ->
@@ -265,15 +274,15 @@ let get_or_cname : type a . t -> int64 -> [`raw] Domain_name.t -> a Rr_map.key -
265
274
if ttl < 0l then
266
275
map_result r
267
276
else begin
268
- metrics `Hit ;
277
+ metrics cache `Hit ;
269
278
LRU. promote name cache, Ok (`Alias (ttl, name), rank)
270
279
end
271
280
| _ -> map_result r
272
281
end
273
282
| _ , e -> map_result e
274
283
275
284
let get_nsec3 cache ts name =
276
- metrics `Lookup ;
285
+ metrics cache `Lookup ;
277
286
let zone_labels = Domain_name. count_labels name in
278
287
let nsec3_rrs =
279
288
LRU. fold (fun ename entry acc ->
@@ -300,10 +309,10 @@ let get_nsec3 cache ts name =
300
309
in
301
310
match nsec3_rrs with
302
311
| [] ->
303
- metrics `Miss ;
312
+ metrics cache `Miss ;
304
313
cache, Error `Cache_miss
305
314
| xs ->
306
- metrics `Hit ;
315
+ metrics cache `Hit ;
307
316
List. fold_right LRU. promote (List. map (fun (a , _ , _ , _ ) -> a) xs) cache,
308
317
Ok xs
309
318
@@ -347,13 +356,13 @@ let set cache ts name query_type rank entry =
347
356
| map , Error _ ->
348
357
Log. debug (fun m -> m " set: %a nothing found, adding: %a"
349
358
pp_query (name, `K (K query_type)) (pp_entry query_type) entry');
350
- metrics `Insert ; cache' map
359
+ metrics cache `Insert ; cache' map
351
360
| map , Ok ((created , rank' ), entry ) ->
352
361
Log. debug (fun m -> m " set: %a found rank %a insert rank %a: %d"
353
362
pp_query (name, `K (K query_type)) pp_rank rank' pp_rank rank (compare_rank rank' rank));
354
363
match update_ttl query_type entry ~created ~now: ts, compare_rank rank' rank with
355
364
| Ok _ , 1 -> cache
356
- | _ -> metrics `Insert ; cache' map
365
+ | _ -> metrics cache `Insert ; cache' map
357
366
358
367
let remove cache name =
359
368
LRU. remove name cache
0 commit comments