class Makit::TaskInfo
def self.infer_task_name
def self.infer_task_name #Rake.application.current_scope.join(":") rescue "unknown" end
def self.slowest_task_name
def self.slowest_task_name if @completed_tasks.empty? return "unknown" end @completed_tasks.max_by { |task_name, task_info| task_info[:duration] }[0] end
def self.track(task_name)
end
# generate code
Makit::TaskInfo.track(:generate) do
usage:
block-yielding initializer
def self.track(task_name) task = new(task_name) Makit::SHOW.task(task_name) yield(task) ensure task.report_and_store_time_taken if task end
def self.track_inferred
Block-yielding initializer with inferred task name
def self.track_inferred task_name = infer_task_name Makit::SHOW.task(task_name) track(task_name) { |task| yield(task) } end
def initialize(task_name)
def initialize(task_name) @task_name = task_name @artifacts_dir = File.join("artifacts", task_name.to_s.gsub(":", "_")) @start_time = Time.now #at_exit { report_and_store_time_taken } end
def report_and_store_time_taken
def report_and_store_time_taken @end_time = Time.now duration = @end_time - @start_time # leverate the Makit::Humanize.get_humanized_duration method humanized_duration = Makit::Humanize.get_humanized_duration(duration) puts " #{@task_name} completed in #{humanized_duration}".colorize(:grey) #puts "[TaskGuard] Task '#{@task_name}' completed in #{duration}." # Add to class-level storage self.class.completed_tasks[@task_name] = { start_time: @start_time, end_time: @end_time, duration: duration, } end