1

整数と文字列の配列として Shoes に返そうとしている次のコード スニペットがあります。

     Shoes.setup do
  gem 'snmp'
end

class SNMPManager 
  require 'snmp'
  include SNMP
  attr_accessor :hostname, :framerate

  def initialize(params = {})
    @hostname = params.fetch(:hostname, 'localhost')
    @framerate = params.fetch(:framerate, 25)

  end

  def getValues
    Manager.open(:host => @hostname, :mib_modules => ["SNMPv2-MIB"]) do |manager|
      poolArray = []
      ifTable = ObjectId.new("1.3.6.1.4.1.15248.2.5.1.3.1")
      manager.walk(ifTable) do |row|
        poolArray.push(row.inspect)
      end
      groups = poolArray.group_by{ |s| s.split(',').first[/\d+$/] }
      @values = groups.map{ |key, ary| ary.map{ |s| s[/value=(\S+)/, 1] } }

    end
  end

  def to_s
    return @values
  end
end



Shoes.app do
  #@hostname = edit_line
  #man =SNMPManager.new(:host => @hostname)
  man = SNMPManager.new
  man.getValues
  puts 'SNMP Space Monitor'
  man.to_s.each {|v|
    @note = para "#{v[1]} \t(Pool: #{v[0]}) \tCapacity: #{v[3].to_i}  \tFree Protons: #{v[2].to_i} \tPercent Free: %#{(v[3].to_f/v[2].to_f*100).round(2)}"
      }
end

何らかの理由で、Shoes は次のように表示します。 靴のスクリーングラブ

しかし、Ruby スクリプトを普通に実行して puts で出力すると、正しく表示され、応答も正しく計算されます。明らかな何かが欠けていることは知っていますが、それが何であるかはわかりません。配列を別の配列にキャストしようとしていますが、それはすべて面倒なことのようです。

4

3 に答える 3

0

これは靴を使用する素晴らしい方法です。

靴が を含むパラを与えているようですarray_of_integers_and_strings.to_s

完全なコードは非常に役立ちます。

于 2013-07-25T06:48:13.630 に答える
0

「赤い靴」から「緑の靴」に切り替えることで問題を解決しました

他の変更は必要ありませんが、これが私の現在のコードです(コンソールアプリとして実行すると正常にタイムアウトしますが、靴アプリとしてはタイムアウトしません-図に進んでください)

require 'green_shoes'
gem 'snmp'

class SNMPManager
  require 'snmp'
  include SNMP
  attr_accessor :hostname, :framerate

  def initialize(params = {})
    @hostname = params.fetch(:hostname, 'localhost')
    @framerate = params.fetch(:framerate, 25)

  end

  def getValues
    Manager.open(:host => @hostname) do |manager|
      @poolArray = []
      poolsTable = ObjectId.new("1.3.6.1.4.1.15248.2.5.1.3.1")
      manager.walk(poolsTable) do |row|
        @poolArray.push(row.inspect)
      end
      if @poolArray.empty?
        puts "Manager Down"
        @poolArray = [
          '[name=1.3.6.1.4.1.15248.2.5.1.3.1.1.8650, value=8650 (INTEGER)]',
          '[name=1.3.6.1.4.1.15248.2.5.1.3.1.1.8651, value=8651 (INTEGER)]',
          '[name=1.3.6.1.4.1.15248.2.5.1.3.1.2.8650, value=QNewsAK (OCTET STRING)]',
          '[name=1.3.6.1.4.1.15248.2.5.1.3.1.2.8651, value=QSuite4AK (OCTET STRING)]',
          '[name=1.3.6.1.4.1.15248.2.5.1.3.1.3.8650, value=46835255 (INTEGER)]',
          '[name=1.3.6.1.4.1.15248.2.5.1.3.1.3.8651, value=11041721 (INTEGER)]',
          '[name=1.3.6.1.4.1.15248.2.5.1.3.1.4.8650, value=8442357 (INTEGER)]',
          '[name=1.3.6.1.4.1.15248.2.5.1.3.1.4.8651, value=5717570 (INTEGER)]',
          '[name=1.3.6.1.4.1.15248.2.5.1.3.1.5.8650, value=0 (INTEGER)]',
          '[name=1.3.6.1.4.1.15248.2.5.1.3.1.5.8651, value=0 (INTEGER)]',
        ]

      else puts "Manager Up"
      end
      groups = @poolArray.group_by{ |s| s.split(',').first[/\d+$/] }
      @values = groups.map{ |key, ary| ary.map{ |s| s[/value=(\S+)/, 1] } }

    end
  end

  def to_s
    return  @values
  end

  protected

end

Shoes.app(:title=>'SNMP Space Monitor') do
  man = SNMPManager.new
  stack do
  every(300) {
      man.getValues
      man.to_s
      man.to_s.each {|v|
       para "#{v[1]} \t(Pool: #{v[0]}) \tCapacity: #{v[2].to_i}  \tFree Protons: #{v[3].to_i} \tPercent Free: #{(v[3].to_f/v[2].to_f*100).round(2)}%"
      }
    }
      end
end
于 2013-07-29T01:29:10.670 に答える