My agentic slop goes here. Not intended for anyone else!
1(** Cache statistics *)
2
3type t = {
4 total_size : int64;
5 entry_count : int;
6 expired_count : int;
7 pinned_count : int;
8 stale_count : int;
9 temporary_count : int;
10}
11
12let empty = {
13 total_size = 0L;
14 entry_count = 0;
15 expired_count = 0;
16 pinned_count = 0;
17 stale_count = 0;
18 temporary_count = 0;
19}
20
21let create ~total_size ~entry_count ~expired_count ~pinned_count ~stale_count ~temporary_count =
22 { total_size; entry_count; expired_count; pinned_count; stale_count; temporary_count }
23
24let of_entries entries =
25 List.fold_left (fun acc entry ->
26 let open Entry in
27 { total_size = Int64.add acc.total_size (size entry);
28 entry_count = acc.entry_count + 1;
29 expired_count = acc.expired_count + (if is_expired entry then 1 else 0);
30 pinned_count = acc.pinned_count + (if is_pinned entry then 1 else 0);
31 stale_count = acc.stale_count + (if is_stale entry then 1 else 0);
32 temporary_count = acc.temporary_count + (if is_temporary entry then 1 else 0);
33 }
34 ) empty entries
35
36let total_size t = t.total_size
37let entry_count t = t.entry_count
38let expired_count t = t.expired_count
39let pinned_count t = t.pinned_count
40let stale_count t = t.stale_count
41let temporary_count t = t.temporary_count
42
43let pp fmt t =
44 Format.fprintf fmt
45 "Stats{entries=%d, size=%Ld, expired=%d, pinned=%d, stale=%d, temporary=%d}"
46 t.entry_count
47 t.total_size
48 t.expired_count
49 t.pinned_count
50 t.stale_count
51 t.temporary_count