12 # Tweak timeouit og sjekk med :support||:net hva passord vil bli
13 my $location = 'skipet';
15 my $dbh = nms::db_connect();
16 $dbh->{AutoCommit} = 0;
18 my $qswitch = $dbh->prepare(<<"EOF")
23 NATURAL LEFT JOIN switchtypes
25 (locked='f' OR now() - last_updated > '15 minutes'::interval)
27 FOR UPDATE OF switches
29 or die "Couldn't prepare qswitch";
30 my $qlock = $dbh->prepare("UPDATE switches SET locked='t', last_updated=now() WHERE switch=?")
31 or die "Couldn't prepare qlock";
32 my $qunlock = $dbh->prepare("UPDATE switches SET locked='f', last_updated=now() WHERE switch=?")
33 or die "Couldn't prepare qunlock";
34 my $qpoll = $dbh->prepare("INSERT INTO temppoll (time, switch, temp) VALUES (timeofday()::timestamp,?::text::int,?::text::float)")
35 or die "Couldn't prepare qpoll";
38 # Find a switch to grab
40 or die "Couldn't get switch";
41 my $switch = $qswitch->fetchrow_hashref();
43 if (!defined($switch)) {
45 mylog("No available switches in pool, sleeping.");
50 $qlock->execute($switch->{'switch'})
51 or die "Couldn't lock switch";
54 if ($switch->{'locked'}) {
55 mylog("WARNING: Lock timed out on $switch->{'ip'}, breaking lock");
59 if (defined($switch->{'overdue'})) {
60 $msg = sprintf "Polling temp on %s (%s), %s overdue.",
61 $switch->{'ip'}, $switch->{'sysname'}, $switch->{'overdue'};
63 $msg = sprintf "Polling temp on %s (%s), never polled before.",
64 $switch->{'ip'}, $switch->{'sysname'};
68 my $ip = $switch->{'ip'};
69 my $start = [Time::HiRes::gettimeofday];
71 my $conn = nms::switch_connect($ip);
72 if (!defined($conn)) {
73 print "Could not connect to switch ".$switch->{'switch'}."\n";
75 my @data = nms::switch_exec('sys monitor status', $conn);
76 my @fields = split(/\s+/, $data[2]);
77 # The temp fields are 6, 7, 8
78 my $avgtemp = ($fields[6] + $fields[7] + $fields[8]) / 3;
79 print $avgtemp." avgtemp\n";
80 $qpoll->execute($switch->{'switch'},
81 $avgtemp) or die "Could not exec qpoll";
83 my $elapsed = Time::HiRes::tv_interval($start);
84 $msg = sprintf "Polled $switch->{'ip'} in %5.3f seconds.", $elapsed;
87 $qunlock->execute($switch->{'switch'})
88 or die "Couldn't unlock switch";
95 my $time = POSIX::ctime(time);
97 printf STDERR "[%s] %s\n", $time, $msg;