My agentic slop goes here. Not intended for anyone else!
at main 3.0 kB view raw
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))