My agentic slop goes here. Not intended for anyone else!
1(** Logging module for Toru *)
2
3(** Log sources for different parts of the system *)
4let registry_src = Logs.Src.create "toru.registry" ~doc:"Registry operations"
5let cache_src = Logs.Src.create "toru.cache" ~doc:"Cache operations"
6let downloader_src = Logs.Src.create "toru.downloader" ~doc:"Download operations"
7let hash_src = Logs.Src.create "toru.hash" ~doc:"Hash operations"
8let main_src = Logs.Src.create "toru.main" ~doc:"Main Toru operations"
9let cli_src = Logs.Src.create "toru.cli" ~doc:"CLI operations"
10
11(** Logging functions for each component *)
12module Registry = struct
13 let debug msgf = Logs.debug ~src:registry_src msgf
14 let info msgf = Logs.info ~src:registry_src msgf
15 let warn msgf = Logs.warn ~src:registry_src msgf
16 let err msgf = Logs.err ~src:registry_src msgf
17end
18
19module Cache = struct
20 let debug msgf = Logs.debug ~src:cache_src msgf
21 let info msgf = Logs.info ~src:cache_src msgf
22 let warn msgf = Logs.warn ~src:cache_src msgf
23 let err msgf = Logs.err ~src:cache_src msgf
24end
25
26module Downloader = struct
27 let debug msgf = Logs.debug ~src:downloader_src msgf
28 let info msgf = Logs.info ~src:downloader_src msgf
29 let warn msgf = Logs.warn ~src:downloader_src msgf
30 let err msgf = Logs.err ~src:downloader_src msgf
31end
32
33module Hash = struct
34 let debug msgf = Logs.debug ~src:hash_src msgf
35 let info msgf = Logs.info ~src:hash_src msgf
36 let warn msgf = Logs.warn ~src:hash_src msgf
37 let err msgf = Logs.err ~src:hash_src msgf
38end
39
40module Main = struct
41 let debug msgf = Logs.debug ~src:main_src msgf
42 let info msgf = Logs.info ~src:main_src msgf
43 let warn msgf = Logs.warn ~src:main_src msgf
44 let err msgf = Logs.err ~src:main_src msgf
45end
46
47module Cli = struct
48 let debug msgf = Logs.debug ~src:cli_src msgf
49 let info msgf = Logs.info ~src:cli_src msgf
50 let warn msgf = Logs.warn ~src:cli_src msgf
51 let err msgf = Logs.err ~src:cli_src msgf
52end
53
54(** Setup logging based on verbosity level *)
55let setup_logging verbose_level =
56 let level = match verbose_level with
57 | 0 -> Some Logs.Warning (* Only warnings and errors *)
58 | 1 -> Some Logs.Info (* Info, warnings, and errors *)
59 | _ -> Some Logs.Debug (* Everything including debug *)
60 in
61 Logs.set_level level;
62 (* Use a simple format for CLI tools *)
63 Logs.set_reporter (Logs_fmt.reporter ())
64
65(** Measure and log execution time *)
66let time_operation ~src ~operation_name f =
67 let start_time = Unix.gettimeofday () in
68 Logs.debug ~src (fun m -> m "Starting %s" operation_name);
69 let result = f () in
70 let end_time = Unix.gettimeofday () in
71 let duration = end_time -. start_time in
72 Logs.info ~src (fun m -> m "Completed %s in %.3fs" operation_name duration);
73 result
74
75(** Log progress for long operations *)
76let log_progress ~src ~total ~current ~item_name =
77 if current mod 100 = 0 || current = total then
78 Logs.info ~src (fun m -> m "Progress: %d/%d %s processed (%.1f%%)"
79 current total item_name (100. *. float current /. float total))