From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

NAME

Net::SolarWinds::REST::Batch - SolarWinds Batch Process class

SYNOPSIS

use strict;
my $self=new Net::SolarWinds::REST::Batch;
my $result=$self->get_node('kstlldrmap04');
die $result unless $result;
print Dumper($result->get_data);

DESCRIPTION

A wrapper class for Net::SolarWinds::REST, that provides high level batch like interfaces that tie a lot of the smaller functions togeather.

Extends Net::SolarWinds::REST

All of the base funtions provided by Net::SolarWinds::REST are included in this module, for better or worse!

OO Methods

This section covers the OO Methods of the class.

  • my $result=$self->manage_node($struct,$allow_failure);

    $allow_failure is optional, if not defined it is set to true. The flag allows for the falure of anything other than the node itself not being created.

    A fairly complex interface used to build out a node for management.

    Example of the data of $struct:

    {
    # list of snmp pollers for the node
    # see also: add_pollers
    "node_pollers" => [
    "N.AssetInventory.Snmp.Generic",
    "N.Cpu.SNMP.HrProcessorLoad",
    "N.Details.SNMP.Generic",
    "N.Memory.SNMP.NetSnmpReal",
    "N.ResponseTime.ICMP.Native",
    "N.ResponseTime.SNMP.Native",
    "N.Status.ICMP.Native",
    "N.Status.SNMP.Native",
    "N.Topology_Layer3.SNMP.ipNetToMedia",
    "N.Uptime.SNMP.Generic"
    ],
    # see also: add_volumes
    "volumes" => ["/home/apm","/tmp","/var"],
    # The Network Interfaces to monitor
    # see also: manage_interfaces
    "interfaces"=>["eth0","eth1","eth2"],
    "custom_properties"=>{
    "dcinstance" => "production",
    "administrator" => "EMS/NMS",
    },
    # denote if this node needs to be replaced as it is created
    # see also, build_node
    "replace" => false,
    # The disk volumes to monitor
    # Argumetns required to build a node
    # see also, build_node
    "node" => {
    "EngineID" => 18,
    "Status" => 1,
    "IPAddress" => "192.168.101.38",
    "RediscoveryInterval" => 30,
    "Community" => "public",
    "DisplayName" => "kstlldrmap04",
    "MachineType" => "net-snmp - Linux",
    "UnManaged" => false,
    "PollInterval" => 46,
    "StatCollection" => 10,
    "SysObjectID" => "1.3.6.1.4.1.8072.3.2.10",
    "SNMPVersion" => 2,
    "DynamicIP" => false,
    "Caption" => "kstlldrmap04",
    "ObjectSubType" => "SNMP",
    "VendorIcon" => "8072.gif ",
    "Allow64BitCounters" => true
    },
    # Note: This requires the APM module in Solarwinds
    # denote objects used to create templates
    # see also: add_templates
    "templates" => [
    "SDS - Application details-U/L - Warning",
    "SDS - DMS Adaptor Daemon Monitor - Critical",
    "SDS - Drum - Warning",
    "AWS Mail Alert Daemon",
    "CPM Ghosting"
    ]
    }
  • my $result=$self->get_node($thing);

    $thing can contain any one of the following: NodeID, IpAddress, Caption.

    This method returns a Net::SolarWinds::Result object.

    When true it contains the first node found that matched what was passed in as $thing.

    When false it contains why it failed.

  • my $result=$self->set_managed($thing,0|1);

    This is really just a wrapper for $self->get_node followed by $self->UpdateNodeProps($node_id,UnManaged=>0|1);

    Returns a Net::SolarWinds::Result object

  • my $result=$self->get_management_config($thing);

    Programatic way build a refrence template for: manage_node

    Returns a Net::SolarWinds::Result object If true, it contains a data structure requried to build out the node refred to as $thing. If false, it contains why it failed.

  • my $result=$self->get_poller_map($id,$type);

    Used to get a uniqe hash of all pollers assigned to this object.

    $id can be: NodeID $type=N VolumeID $type=V InterfaceID $type=I

    Returns a Net::SolarWinds::Result object.

  • my $result=$self->getPollerInterfaceMap($nodeid)

    Returns a Net::SolarWinds::Result object, when true it contains a hash mapping ifType to PollerType

  • my $result=$self->GetNodeInterfacePollers($nodeid)

    When true it returns a Net::SolarWinds::Result object that contains the interface poller and id info.

  • my $result=$self->add_pollers($id,$t,@pollers);

    Adds a list of pollers of type to given id.

    $id can be: NodeID $type=N VolumeID $type=V InterfaceID $type=I

    @polers contains a list of snmp pollers.

    Example:

    "N.Details.SNMP.Generic",
    "N.ResponseTime.ICMP.Native",
    "N.ResponseTime.SNMP.Native",
    "N.Status.ICMP.Native",
    "N.Status.SNMP.Native",
    "N.Uptime.SNMP.Generic"

    Returns a Net::SolarWinds::Result Object.

  • my $result=$self->add_volumes($node_id,@vols);

    $node_id is the NodeID of the device

    @vols can contain a mix of [either list of objects or volume names.

    Object Example:

    {
    "pollers" => [
    "V.Details.SNMP.Generic",
    "V.Statistics.SNMP.Generic",
    "V.Status.SNMP.Generic"
    ],
    "type" => "Network Disk",
    "path" => "/home/apm"
    },

    String Example:

    '/var'

    When using the string example, the default pollers are added.

  • my $result=$self->add_templates($node_id,@templates);

    Add a list of templates to the device for monitoring.

    $$node_id is the NodeID of the node

    @templates Example list:

    "SDS - Application details-U/L - Warning",
    "SDS - DMS Adaptor Daemon Monitor - Critical",
    "SDS - Drum - Warning",
    "AWS Mail Alert Daemon",
    "CPM Ghosting"
  • my $result=$self->manage_interfaces($node_id,@interfaces);

    $node_id is the "NodeID" of the machine to work with

    @interfaces contains a list of Object hashes or interface names.

    Object Example: In the object example all details, such as the pooler and custom properties are set manually.

    {
    "pollers" : [
    "I.Rediscovery.SNMP.IfTable",
    "I.StatisticsErrors32.SNMP.IfTable",
    "I.StatisticsTraffic.SNMP.Universal",
    "I.Status.SNMP.IfTable"
    ],
    "ifname" : "eth1",
    "custom_props" : {
    "alert_rx_percent_utilization" : 90,
    "alarmerrorrate" : 0,
    "alert_tx_percent_utilization" : 90
    }
    }

    Interface name example: In the interface name example just the name of the interface is passed.

    'eth0'

    Odds are you will just want to use a list of human readable interface names:

    "eth0","eth1","eth2"

    Notes:

    Gives up at the first error, and may not complete the process of adding things. Odds are this code will need to be made more forgiving.

  • my $result=$self->create_or_update_node($ip,%args);

    Wrapper for $self->build_node with $DeleteIfExists set to false

  • my $result=$self->replace_node($ip,%args);

    Wrapper for $self->build_node with $DeleteIfExists set to true

  • my $result=$self->build_node($ip,$DeleteIfExists,%args);

    Used to create a node if it does not exist.

    Variabels: $ip The ipv4 address of the box

    $DeleteIfExists
    if this value is set to true and this node exists all ready
    it will be deleted and re-created!
    %args
    The node properties
    See also: Net::SolarWinds::REST::UpdateNodeProps
  • my $result=$self->build_unmanaged($ip,$DeleteIfExists,%args);

    Wrapper for build_node, flips the node to UnManaged=>1 once it has been created or if it all ready exists.

  • my $result=$self->GetAlertSettingsMap($thing);

    When true, returns a data structure that represents alerting thresholds and custom properties for the node, and its interfaces, templates, and volumes. when fals: returns why it failed

    $thing can be a nodeid, hostname or ipaddress.

  • my $result=$self->bulk_ip_lookup(@ip_list)

    Returns a SolarWinds::Result Object.

    When true it contains the search results of all the ips that were looked up

AUTHOR

Michael Shipper