Class: ApacheLogVisualizer
- Inherits:
-
Object
- Object
- ApacheLogVisualizer
- Defined in:
- lib/ip-world-map/apache_log_visualizer.rb
Class Method Summary collapse
Instance Method Summary collapse
- #generate_animation ⇒ Object
- #generate_image ⇒ Object
-
#initialize(log_files) ⇒ ApacheLogVisualizer
constructor
A new instance of ApacheLogVisualizer.
- #render_frames_as_video ⇒ Object
- #save_image(image, frame_number = 0) ⇒ Object
- #visualize ⇒ Object
Constructor Details
#initialize(log_files) ⇒ ApacheLogVisualizer
Returns a new instance of ApacheLogVisualizer.
4 5 6 |
# File 'lib/ip-world-map/apache_log_visualizer.rb', line 4 def initialize log_files @log_files = log_files end |
Class Method Details
.detect_time_format(times) ⇒ Object
8 9 10 11 12 13 14 15 |
# File 'lib/ip-world-map/apache_log_visualizer.rb', line 8 def self.detect_time_format times some_samples = times.sort[0..99] smallest_period = some_samples.each_cons(2).collect{ |time1, time2| (time1 - time2).abs }.min || 1 return '%b %d %Y %H:%M' if smallest_period < 3600 # scale: minutes return '%b %d %Y %H:00' if smallest_period < 86400 # scale: hours return '%b %d %Y' # scale: days end |
Instance Method Details
#generate_animation ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/ip-world-map/apache_log_visualizer.rb', line 27 def generate_animation analyzer = ApacheLogAnalyzer.new(@log_files) details = analyzer.analyze grouped_details = analyzer.group_by_time(details, $visualization_config.group_seconds) animation = Magick::ImageList.new visualization = Visualization.new time_format = $visualization_config.time_format || ApacheLogVisualizer.detect_time_format(grouped_details.keys) frame_number = 0 puts "\nGenerating frames:" if $visualization_config.verbose grouped_details.sort.each do |time, details| frame_number += 1 visualization.new_frame positions = details.collect{ |data| data[:coordinates] }.select{ |coords| coords.any? } p [time, details.size, positions.size] if $visualization_config.verbose image = visualization.draw_positions(positions) InformationDrawer.new.draw_info(image, visualization, time.strftime(time_format)) save_image image, frame_number end render_frames_as_video end |
#generate_image ⇒ Object
17 18 19 20 21 22 23 24 25 |
# File 'lib/ip-world-map/apache_log_visualizer.rb', line 17 def generate_image analyzer = ApacheLogAnalyzer.new(@log_files) details = analyzer.analyze positions = details.collect{ |data| data[:coordinates] }.select{ |coords| coords.any? } visualization = Visualization.new image = visualization.draw_positions(positions) save_image image end |
#render_frames_as_video ⇒ Object
60 61 62 63 64 65 |
# File 'lib/ip-world-map/apache_log_visualizer.rb', line 60 def render_frames_as_video puts "\nGenerating video:" if $visualization_config.verbose output = `ffmpeg -r #{$visualization_config.frames_per_second} -qscale 1 -y -i animation.%09d.bmp animation.#{$visualization_config.output_format} 2>&1` puts output if $visualization_config.verbose raise 'could not create the animation' unless $?.exitstatus == 0 end |
#save_image(image, frame_number = 0) ⇒ Object
52 53 54 55 56 57 58 |
# File 'lib/ip-world-map/apache_log_visualizer.rb', line 52 def save_image image, frame_number = 0 if $visualization_config.animate image.write "animation.#{'%09d' % frame_number}.bmp" else image.write "snapshot.#{$visualization_config.output_format}" end end |
#visualize ⇒ Object
67 68 69 70 71 72 73 |
# File 'lib/ip-world-map/apache_log_visualizer.rb', line 67 def visualize if $visualization_config.animate generate_animation else generate_image end end |