shoes - 将返回的array 转换为适当的值

  显示原文与译文双语对照的内容
0 0

我得到了下面的代码 Fragment,我正尝试将它的作为整数和字符串的array 返回

 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 Screengrab

但是如果正常运行 ruby 脚本并将它的输出,它将正确显示,并正确计算响应。 我知道我缺少一些明显的东西但是看不到它是什么。 我试图将 array 转换为另一个 array,但这似乎没有什么意义。

时间:原作者:4个回答

0 0

1 )

@values = Array(@values)

有点奇怪。 所有 array 构造函数都是创建 @values.的副本 唯一的原因是,如果 @values 包含对另一个变量引用的array 引用,那么不希望它的他变量能够更改 @values. 。 但是为什么你第一次把 array 分配给 @values? 时不做一份拷贝呢

2 ) to_s方法不返回字符串。

原作者:
0 0

这是用鞋子的好方法。

看起来鞋子正在给你 paras array_of_integers_and_strings.to_s

完整的代码将非常有用。

原作者:
0 0

通过从'红色鞋子'切换到 green shoes解决了这个问题'

没有它的他更改需要,但是这里是我当前的代码( 当作为控制台应用程序运行时成功。 但不像鞋应用一样- )

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
原作者:
...