X-Git-Url: http://git.sourceforge.jp/view?p=shogi-server%2Fshogi-server.git;a=blobdiff_plain;f=utils%2Fplayers_graph.rb;h=32a9456c8de1b56ebbfd7acd9f4943fcb8e0015b;hp=0057851b5c8f3b78913fcca562127955e88a2e3e;hb=66e7c4522f3597aef4f23eabedd718734459a1e7;hpb=4a23a155dc322a8247214ed28b43d55c423775ca diff --git a/utils/players_graph.rb b/utils/players_graph.rb index 0057851..32a9456 100755 --- a/utils/players_graph.rb +++ b/utils/players_graph.rb @@ -2,12 +2,14 @@ # This generates graphs of evaluation values from comments in CSA files. # Ruby libraries that are required: # - RubyGems: http://rubyforge.org/projects/rubygems/ -# - rgplot: http://rubyforge.org/projects/rgplot/ +# On Debian, $ sudo install rubygems1.8 +# - gnuplot: http://rubyforge.org/projects/rgplot/ +# On Debian, $ sudo gem install gnuplot # OS librariles that is required: # - Gnuplot: http://www.gnuplot.info/ # On Debian, $ sudo apt-get install gnuplot # -# Copyright (C) 2008 Daigo Moriwaki +# Copyright (C) 2008-2012 Daigo Moriwaki # # Version: $Id$ # @@ -30,9 +32,12 @@ require 'getoptlong' require 'yaml' require 'date' require 'set' +require 'logger' require 'rubygems' require 'gnuplot' +$log = Logger.new(STDERR) +$log.level = Logger::WARN $players = {} class Format @@ -41,11 +46,6 @@ class Format @root = root @size = "1,1" end - - def apply(plot) - plot.terminal @ext - plot.size @size - end end class LargeFormat < Format @@ -54,10 +54,13 @@ class LargeFormat < Format end def apply(plot) - super + plot.terminal @ext + plot.size @size plot.format 'x "%y/%m/%d"' plot.ytics "100" plot.mytics "5" + plot.xlabel "Date" + plot.ylabel "Rate" end end @@ -76,7 +79,6 @@ class SmallPngFormat < Format def initialize(root) super @ext = "png" - @size = "0.4,0.4" end def to_image_file(name) @@ -84,10 +86,10 @@ class SmallPngFormat < Format end def apply(plot) - super - plot.format 'x "%b"' - plot.ytics "200" - plot.mytics "2" + plot.terminal "png size 320,200 crop" + plot.format 'x "%b"' + plot.ytics "200" + plot.mytics "2" end end @@ -106,12 +108,10 @@ def plot(format, name, dates, rates, rdates, rrates) Gnuplot.open do |gp| Gnuplot::Plot.new( gp ) do |plot| format.apply(plot) - plot.title name + plot.title name plot.output format.to_image_file(name) - plot.size "ratio #{1/1.618}" - plot.xlabel "Date" - plot.ylabel "Rate" + #plot.size "ratio #{1/1.618}" plot.xdata "time" plot.timefmt '"%Y-%m-%d"' plot.xrange "[\"%s\":\"%s\"]" % @@ -143,19 +143,36 @@ def load_file(file_name) if /^.*-(\d{8}).yaml$/ =~ file_name date = Date::parse($1) else + $log.error("Invalid file name: %s" % [file_name]) return end db = YAML::load_file(file_name) - return unless db['players'][0] + unless db['players'] && db['players'][0] + $log.error("Invalid file format: %s" % [file_name]) + return + end db['players'][0].each do |name, hash| $players[name] ||= {} $players[name][date] = hash['rate'].to_i end end +def empty_file?(file) + if !FileTest.exists?(file) + $log.error("Could not find the file: %s" % [file]) + return true + end + if FileTest.zero?(file) + $log.error("Empty file: %s" % [file]) + return true + end + + return false +end + if $0 == __FILE__ def usage - puts "Usage: #{$0} [--output-dir dir] ..." + puts "Usage: #{$0} --output-dir dir ..." puts "Options:" puts " --output-dir dir Images will be located in the dir." exit 1 @@ -172,10 +189,16 @@ if $0 == __FILE__ rescue usage end + usage if !$OPT_OUTPUT_DIR || ARGV.size < 2 while file = ARGV.shift + next if empty_file?(file) load_file(file) end + + if !$players || $players.empty? + exit 0 + end formats = [LargePngFormat.new($OPT_OUTPUT_DIR), SmallPngFormat.new($OPT_OUTPUT_DIR),