Monitor
The Log class implements a filter for segmented execution traces. The trace messages are filtered based on their segment name and the nesting level of the segments. The class is a Singleton, so there is only one instance in the program.
This function may only be called when Log#startProgressMeter has been called before. It updates the progress indicator to the next symbol to visualize ongoing activity.
# File lib/taskjuggler/Log.rb, line 142 def Log.activity return if @@silent indicator = %( - \\ | / ) @@progress = (@@progress.to_i + 1) % indicator.length $stdout.print("#{@@progressMeter} [#{indicator[@@progress]}]\r") end
This function is used to open a new segment. segment is the name of the segment and message is a description of it.
# File lib/taskjuggler/Log.rb, line 59 def Log.enter(segment, message) return if @@level == 0 @@stack << segment Log.msg { ">> [#{segment}] #{message}" } end
This function is used to close an open segment. To make this mechanism a bit more robust, it will search the stack of open segments for a segment with that name and will close all nested segments as well.
# File lib/taskjuggler/Log.rb, line 69 def Log.exit(segment, message = nil) return if @@level == 0 Log.msg { "<< [#{segment}] #{message}" } if message if @@stack.include?(segment) loop do m = @@stack.pop break if m == segment end end end
Set the maximum nesting level that should be shown. Segments with a nesting level greater than l will be silently dropped.
# File lib/taskjuggler/Log.rb, line 35 def Log.level=(l) @@level = l end
Use this function to show a log message within the currently active segment. The message is the result of the passed block. The block will only be evaluated if the message will actually be shown.
# File lib/taskjuggler/Log.rb, line 84 def Log.msg(&block) return if @@level == 0 offset = 0 unless @@segments.empty? showMessage = false @@stack.each do |segment| # If a segment list is used to filter the output, we look for the # first listed segments on the stack. This and all nested segments # will be shown. if @@segments.include?(segment) offset = @@stack.index(segment) showMessage = true break end end return unless showMessage end if @@stack.length - offset < @@level $stderr.puts ' ' * (@@stack.length - offset) + yield(block) end end
This function may only be called when Log#startProgressMeter has been called before. It updates the progress bar to the given percent completion value. The value should be between 0.0 and 1.0.
# File lib/taskjuggler/Log.rb, line 153 def Log.progress(percent) return if @@silent percent = 0.0 if percent < 0.0 percent = 1.0 if percent > 1.0 @@progress = percent length = 16 full = (length * percent).to_i bar = '=' * full + ' ' * (length - full) label = (percent * 100.0).to_i.to_s + '%' bar[length / 2 - label.length / 2, label.length] = label $stdout.print("#{@@progressMeter} [" + Term::ANSIColor.green("#{bar}") + "]\r") end
The trace output can be limited to a list of segments. Messages not in these segments will be ignored. Messages from segments that are nested into the shown segments will be shown for the next @@level nested segments.
# File lib/taskjuggler/Log.rb, line 43 def Log.segments=(s) @@segments = s end
Return the @@silent value.
# File lib/taskjuggler/Log.rb, line 53 def Log.silent @@silent end
if s is true, progress information will not be shown.
# File lib/taskjuggler/Log.rb, line 48 def Log.silent=(s) @@silent = s end
The progress meter can be a textual progress bar or some animated character sequence that informs the user about ongoing activities. Call this function to start the progress meter display or to change the info text. The the meter is active the text cursor is always returned to the start of the same line. Consequent output will overwrite the last meter text.
# File lib/taskjuggler/Log.rb, line 120 def Log.startProgressMeter(text) return if @@silent maxlen = 60 text = text.ljust(maxlen) text = text[0..maxlen - 1] if text.length_utf8 > maxlen @@progressMeter = text $stdout.print("#{@@progressMeter} ...\r") end
Print out a status message unless we are in silent mode.
# File lib/taskjuggler/Log.rb, line 108 def Log.status(message) return if @@silent $stdout.puts message end
This sets the progress meter status to "done" and puts the cursor into the next line again.
# File lib/taskjuggler/Log.rb, line 132 def Log.stopProgressMeter return if @@silent $stdout.print("#{@@progressMeter} [ " + Term::ANSIColor.green("Done") + " ]\n") end
Generated with the Darkfish Rdoc Generator 2.