<div dir="ltr">Greetings,<div><br></div><div>I have been attempting to debug an issue with a custom probe I've written based off the TelnetIOSPing probe.  The probe returns an array of ping results to the caller, Smokeping::probes::basefork::ping, but the "$result" variable read in the caller equals "interrupted".  I have been unable to get any further with identifying why this is the case.  I'm not an active perl programmer but drawing on some older experience.  I've included what I believe to be the pertinent code and some debug output; the values of the ping @output and  the @times array both before and after the processor which formats the times to values for RRD.  Perhaps it's something obvious and I apologize for that.  Any help pointing me in the right direction would be great.  Thank you<br></div><div><br></div><div>The probe connects to a Mikrotik Router via SSH and retrieves ping stats.  Then it parses the result with the exact same code as from the TelnetIOSPing probe.</div><div><br></div><div><b># /usr/share/perl5/Smokeping/probes/<a href="http://base.pm/" target="_blank">base.pm</a></b><br></div><div><b># The only modification to the <a href="http://base.pm/" target="_blank">base.pm</a> code is the do_debug statements</b></div><div><br></div><div><div><div>    while ($s->handles and $timeleft > 0) {</div><div>      for my $ready ($s->can_read($timeleft)) {</div><div>        $s->remove($ready);</div><div>        my $response = <$ready>;</div><div>        close $ready;</div><div><br></div><div><b>$self->do_debug("Returned from probe");</b></div><div><b><font color="#ff0000">$self->do_debug(Dumper \$response);  <--- Result = 'interrupted'</font></b></div><div><br></div><div>        chomp $response;</div><div>        my @times = split(/ /, $response);</div><div>        my $target = $targetlookup{$ready};</div><div>        my $tree = $target->{tree};</div><div>        $self->{rtts}{$tree} = \@times;</div><div><br></div><div>        $self->do_debug("$target->{addr}: got $response");</div><div>      }</div><div>      $timeleft = $timeout - (time() - $starttime);</div><div>    }</div></div></div><div><br></div><div><b># /usr/share/perl5/Smokeping/probes/MikrotikRouterOSPing.pm</b></div><div>...</div><div>  #</div><div>  # Get ping stats</div><div>  #</div><div><div>  if ( $psource ) {</div><div>    @output = $ssh->capture("ping $dest count=$pings size=$bytes src-address=$psource");</div><div>  } else {</div><div>    @output = $ssh->capture("ping $dest count=$pings size=$bytes");</div><div>  }</div><div>  $ssh->system("quit");</div><div><br></div><div><div># DEBUG - Log raw result</div><div>logit("MikrotikRouterOSPing Raw result from host:");</div><div>logit(@output);</div></div><div><br></div><div>  my @times = ();<br></div><div><div>  while (@output) {</div><div>    my $outputline = shift @output;</div><div>    chomp($outputline);</div><div>    $outputline =~ /(\d)ms/ && push(@times,$1);</div><div>  }<br></div><div><br></div><div><div><font color="#0000ff">logit("MikrotikRouterOSPing \@times[] Pre Preprocessing.");</font></div><div><font color="#0000ff">logit(@times);</font></div></div><div><br></div><div>  @times = map {sprintf "%.10e", $_ / $self->{pingfactor}} sort {$a <=> $b} @times;<br></div><div><br></div><div><font color="#0000ff"># DEBUG - Pings Post processing</font></div><div><font color="#0000ff">logit("MikrotikRouterOSPing Pings Post Preprocessing.  Returning this to caller:");</font></div><div><font color="#0000ff">logit(@times);</font></div><div><font color="#0000ff"><br></font></div><div><font color="#0000ff">my $parent = getcaller();</font></div><div><font color="#0000ff">logit("MikrotikRouterOSPing Returning ping times to $parent");</font></div></div></div><div><br></div><div><div>  return @times;<br></div><div>}</div></div><div><br></div><div><b># Debug Logging results</b><br></div><div><br></div><div><div>MikrotikRouterOSPing Raw result from host:</div><div>-------------------[ DEBUG ]---------------------</div><div><div>$VAR1 = [</div><div>',        '  SEQ HOST                                     SIZE TTL TIME  STATUS           </div><div>',        '    0 8.8.8.8                                56 255 7ms  </div><div>',        '    1 8.8.8.8                                56 255 9ms  </div><div>',        '    2 8.8.8.8                                56 255 5ms  </div><div>',        '    3 8.8.8.8                                56 255 8ms  </div><div>',        '    4 8.8.8.8                                56 255 9ms  </div><div>',        '    5 8.8.8.8                                56 255 9ms  </div><div>',        '    6 8.8.8.8                                56 255 8ms  </div><div>',        '    7 8.8.8.8                                56 255 10ms </div><div>',        '    8 8.8.8.8                                56 255 7ms  </div><div>',        '    9 8.8.8.8                                56 255 9ms  </div><div>',        '   10 8.8.8.8                                56 255 7ms  </div><div>',        '   11 8.8.8.8                                56 255 10ms </div><div>',        '   12 8.8.8.8                                56 255 7ms  </div><div>',        '   13 8.8.8.8                                56 255 9ms  </div><div>',        '   14 8.8.8.8                                56 255 7ms  </div><div>',        '   15 8.8.8.8                                56 255 8ms  </div><div>',        '   16 8.8.8.8                                56 255 8ms  </div><div>',        '   17 8.8.8.8                                56 255 8ms  </div><div>',        '   18 8.8.8.8                                56 255 8ms  </div><div>',        '   19 8.8.8.8                                56 255 9ms  </div><div>',        '    sent=20 received=20 packet-loss=0% min-rtt=5ms avg-rtt=8ms max-rtt=10ms </div><div>'         '</div><div>        ];</div></div><div>MikrotikRouterOSPing @times[] Pre Preprocessing.</div><div>-------------------[ DEBUG ]---------------------</div><div>$VAR1 = [</div><div>          '7',</div><div>          '9',</div><div>          '5',</div><div>          '8',</div><div>          '9',</div><div>          '9',</div><div>          '8',</div><div>          '0',</div><div>          '7',</div><div>          '9',</div><div>          '7',</div><div>          '0',</div><div>          '7',</div><div>          '9',</div><div>          '7',</div><div>          '8',</div><div>          '8',</div><div>          '8',</div><div>          '8',</div><div>          '9',</div><div>          '5'</div><div>        ];</div><div>MikrotikRouterOSPing Pings Post Preprocessing.  Returning this to caller:</div><div>-------------------[ DEBUG ]---------------------</div><div>$VAR1 = [</div><div>          '0.0000000000e+00',</div><div>          '0.0000000000e+00',</div><div>          '5.0000000000e-03',</div><div>          '5.0000000000e-03',</div><div>          '7.0000000000e-03',</div><div>          '7.0000000000e-03',</div><div>          '7.0000000000e-03',</div><div>          '7.0000000000e-03',</div><div>          '7.0000000000e-03',</div><div>          '8.0000000000e-03',</div><div>          '8.0000000000e-03',</div><div>          '8.0000000000e-03',</div><div>          '8.0000000000e-03',</div><div>          '8.0000000000e-03',</div><div>          '8.0000000000e-03',</div><div>          '9.0000000000e-03',</div><div>          '9.0000000000e-03',</div><div>          '9.0000000000e-03',</div><div>          '9.0000000000e-03',</div><div>          '9.0000000000e-03',</div><div>          '9.0000000000e-03'</div><div>        ];</div><div>MikrotikRouterOSPing Returning ping times to Smokeping::probes::basefork::ping</div><div>Thu Aug 30 15:22:50 2018 - MikrotikRouterOSPing: Returned from probe<br></div><div><font color="#ff0000"><b>Thu Aug 30 15:22:50 2018 - MikrotikRouterOSPing: $VAR1 = \'interrupted</b><b>';</b></font></div><div><b><font color="#ff0000">Thu Aug 30 15:22:50 2018 - MikrotikRouterOSPing: <a href="http://8.8.8.8/" target="_blank">8.8.8.8</a>: got interrupted</font></b></div></div></div>