SNMP in rails

Hello,

Can any one please help me in converting this php code into ruby on
rails?

$oid = '1.3.6.1.4.1.318.1.1.12.3.3.1.1.4';
$row['address'] = xx.xx.xx.xx //contains an IP address.
$row['snmp_community_str'] = 6xrt3bY //stores the community string
$row['reset_port'] = 66 //stores a port number
where '3' is immediate reboot

  snmpset($row['address'],$row['snmp_community_str'],$oid.".".$row['reset_port'],'i','3');
   .......
   .......
   .......

I have no idea of what 'i' is..

and

$status=snmpget($row['address'],$row['snmp_community_str'],$oid.".".$row['reset_port']);

Any help will be appreciated.. thnx in advance:)

···

--
Posted via http://www.ruby-forum.com/.

Hello,
You should use: net/snmp library for ruby and get and set methods of SNMP
Manager.
http://snmplib.rubyforge.org/
I'm guessing that the first snmpset command is used to reset port status (i
is iterator - you can have
many ports to reset - just a guess).
The second command snmpget is used to read port reset status.
Could you provide more source code ?

···

2010/1/18 Atheeq Pasha <atheeq@carmatec.com>

Hello,

Can any one please help me in converting this php code into ruby on
rails?

$oid = '1.3.6.1.4.1.318.1.1.12.3.3.1.1.4';
$row['address'] = xx.xx.xx.xx //contains an IP address.
$row['snmp_community_str'] = 6xrt3bY //stores the community string
$row['reset_port'] = 66 //stores a port number
where '3' is immediate reboot

snmpset($row['address'],$row['snmp_community_str'],$oid.".".$row['reset_port'],'i','3');
  .......
  .......
  .......

I have no idea of what 'i' is..

and

$status=snmpget($row['address'],$row['snmp_community_str'],$oid.".".$row['reset_port']);

Any help will be appreciated.. thnx in advance:)
--
Posted via http://www.ruby-forum.com/\.

--
trednu@gmail.com

Miroslaw Niegowski wrote:

Hello,
You should use: net/snmp library for ruby and get and set methods of
SNMP
Manager.
http://snmplib.rubyforge.org/
I'm guessing that the first snmpset command is used to reset port status
(i
is iterator - you can have
many ports to reset - just a guess).
The second command snmpget is used to read port reset status.
Could you provide more source code ?

Thank you very much..
I am using snmp library of ruby but need to pass the snmpset php
function's parameter to the SNMP Manager set and get functions.

Here is a part of the php code

global $pdb;
  $oid = '1.3.6.1.4.1.318.1.1.12.3.3.1.1.4';
  $toret = false;
  if($pdb->connected) {
    $query = "SELECT snmp_community_str, address, reset_port FROM
remote_reboot WHERE device_id=$device_id";
    if($result = $pdb->query($query)) {
      if($pdb->num_rows($result)) {
        $row = $pdb->get_row($result);
snmpset($row['address']$row['snmp_community_str'],$oid.".".$row['reset_port'],'i','3');
        $count = 0;
        while($count < 20 && $toret == false) {
          $status =
snmpget($row['address'],$row['snmp_community_str'],$oid.".".$row['reset_port']);
      if($status == 'INTEGER: 2' || $status == 'INTEGER: 3') {
            sleep(1);
            $count++;
          } else if($status == 'INTEGER: 1') {
            $toret = true;
          } else {
            $_SESSION['reboot_error'] = 'The server could not be
rebooted because a proper reboot command could not be issued.';
            $count = 20;
          }
        }
        if($count == 10) {
          $_SESSION['reboot_error'] = 'Timed out waiting for reboot
confirmation.';
        }
      } else {
        $_SESSION['reboot_error'] = "Unable to locate APC for this
server";
      }
      $pdb->free_result($result);
    } else {
      $_SESSION['reboot_error'] = "Unable to locate APC for this
server";
    }
  }
  return $toret;

Thanks in advance:)

···

2010/1/18 Atheeq Pasha <atheeq@carmatec.com>

--
Posted via http://www.ruby-forum.com/\.

Wrong guess :slight_smile: From php documentation of snmpset/get:

The "type" parameter must be one of the following, depending on the type of
variable to set on the SNMP host:

i INTEGER
u unsigned INTEGER
t TIMETICKS
a IPADDRESS
o OBJID
s STRING
x HEX STRING
d DECIMAL STRING
n NULLOBJ
b BITS

So I think that the following code should work in ruby:

require 'snmp'
  include SNMP
  manager = Manager.new(:Host => host)
  varbind = VarBind.new(oid.to_s + "." + row["reset_port"] , Integer.new(3))
  manager.set(varbind)

# And get:
..
response = manager.get(oid.to_s + "." + row["reset_port"])

response.each_varbind do |vb|
          puts "#{vb.name.to_s} #{vb.value.to_s} #{vb.value.asn1_type}"
      end

manager.close

···

2010/1/18 Atheeq Pasha <atheeq@carmatec.com>

snmpset($row['address']$row['snmp_community_str'],$oid.".".$row['reset_port'],'i','3');

snmpget($row['address'],$row['snmp_community_str'],$oid.".".$row['reset_port']);

Heh,

Miroslaw Niegowski wrote:

snmpset($row['address']$row['snmp_community_str'],$oid.".".$row['reset_port'],'i','3');

snmpget($row['address'],$row['snmp_community_str'],$oid.".".$row['reset_port']);

Heh,

Wrong guess :slight_smile: From php documentation of snmpset/get:

The "type" parameter must be one of the following, depending on the type
of
variable to set on the SNMP host:

i INTEGER
u unsigned INTEGER
t TIMETICKS
a IPADDRESS
o OBJID
s STRING
x HEX STRING
d DECIMAL STRING
n NULLOBJ
b BITS

So I think that the following code should work in ruby:

require 'snmp'
  include SNMP
  manager = Manager.new(:Host => host)
  varbind = VarBind.new(oid.to_s + "." + row["reset_port"] ,
Integer.new(3))
  manager.set(varbind)

# And get:
..
response = manager.get(oid.to_s + "." + row["reset_port"])

response.each_varbind do |vb|
          puts "#{vb.name.to_s} #{vb.value.to_s}
#{vb.value.asn1_type}"
      end

manager.close

Thanks a lot.

Almost got it working but got an error

   TypeError: can't convert Fixnum into String

at this line

   varbind = VarBind.new(oid.to_s + "." + result.reset_port ,
Integer.new(3))

I fixed it by converting reset_port to string i.e.,
result.reset_port.to_s

but it again gave an error

    NoMethodError: undefined method `new' for Integer:Class

for the modified line

varbind = VarBind.new(oid.to_s + "." + result.reset_port.to_s ,
Integer.new(3))

Thanks in advance:)

···

2010/1/18 Atheeq Pasha <atheeq@carmatec.com>

--
Posted via http://www.ruby-forum.com/\.

Thanks a lot.

Almost got it working but got an error

   TypeError: can't convert Fixnum into String

at this line

   varbind = VarBind.new(oid.to_s + "." + result.reset_port ,
Integer.new(3))

I fixed it by converting reset_port to string i.e.,
result.reset_port.to_s

but it again gave an error

    NoMethodError: undefined method `new' for Integer:Class

for the modified line

varbind = VarBind.new(oid.to_s + "." + result.reset_port.to_s ,
Integer.new(3))

Thanks in advance:)

I got that working, but what settings do i have to configure on the host
or install because it says SNMP::RequestTimeout xx.xx.xx.xx not
responding
what might be the problem?

···

--
Posted via http://www.ruby-forum.com/\.