atheeq
January 18, 2010, 3:06pm
1
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:)
atheeq
January 18, 2010, 3:38pm
2
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 P. [email protected]
atheeq
January 18, 2010, 4:50pm
3
Miroslaw N. 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 ?
2010/1/18 Atheeq P. [email protected]
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:)
atheeq
January 18, 2010, 6:40pm
4
2010/1/18 Atheeq P. [email protected]
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 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
atheeq
January 18, 2010, 8:12pm
5
Miroslaw N. wrote:
2010/1/18 Atheeq P. [email protected]
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 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:)
atheeq
January 20, 2010, 6:54pm
6
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?