File Coverage

blib/lib/Net/SolarWinds/Helper.pm
Criterion Covered Total %
statement 57 66 86.3
branch n/a
condition n/a
subroutine 19 22 86.3
pod 3 3 100.0
total 79 91 86.8


line stmt bran cond sub pod time code
1             package Net::SolarWinds::Helper;
2              
3 2     2   15 use strict;
  2         4  
  2         50  
4 2     2   10 use warnings;
  2         5  
  2         276  
5              
6             =head1 NAME
7              
8             Net::SolarWinds::Helper - Common OO Methods
9              
10             =head1 SYNOPSIS
11              
12             use base qw(Net::SolarWinds::Helper);
13              
14             =head1 DESCRIPTION
15              
16             This class provides common OO methods used to for Solarwinds development. These methods are all stand alone.
17              
18             =over 4
19              
20             =item * my $reverse_hex=$self->ip_to_reverse_hex($ip);
21              
22             Converts an IP into hex with the octets swapped to reverse order.
23              
24             =cut
25              
26             sub ip_to_reverse_hex {
27              
28 0     0 1   my ($self,$ip)=@_;
29              
30 0           my $hex=unpack("H8",reverse(pack("C4",split(/\./,$ip))));
31              
32 0           return $hex;
33             }
34              
35             =item * my $gui_ip=$self->ip_to_gui($ip);
36              
37             Converts a quad notation ip to the gui display version SolarWinds uses..
38              
39             =cut
40              
41             sub ip_to_gui {
42 0     0 1   my ($self,$ip)=@_;
43              
44 0           my $hex=$self->ip_to_reverse_hex($ip);
45              
46 0           $hex .="-0000-0000-0000-000000000000";
47              
48 0           return $hex;
49             }
50              
51             =item * my $swis=$self->nodeUri($node_id);
52              
53             Returns the node Uri based on the $node_id
54              
55             =cut
56              
57             sub nodeUri {
58 0     0 1   my ($self,$nodeId)=@_;
59 0           return "swis://localhost/Orion/Orion.Nodes/NodeID=$nodeId";
60             }
61              
62             =back
63              
64             =head1 Query Drivers
65              
66             Many of the internals use site spesific SWQL statements, they are defined as constants in this class. Since some of these queries are Solarwinds install spesific it may be required to overload some of these queries.
67              
68             =head2 Query Drivers For: Net::SolarWinds::REST
69              
70             =over 4
71              
72             =item * my $sql=$self->SWQL_getInterfacesOnNode;
73              
74             =cut
75              
76 2     2   14 use constant SWQL_getInterfacesOnNode=>'SELECT Caption, InterfaceID, DisplayName, FullName, ifname, interfacetype as ifType,Uri FROM Orion.NPM.Interfaces where NodeID=%s';
  2         4  
  2         154  
77              
78             =item * my $sql=$self->SWQL_getNodesByDisplayName;
79              
80             =cut
81              
82 2         95 use constant SWQL_getNodesByDisplayName=>q{SELECT
83             NodeID,
84             IPAddress,
85             IPAddressGUID,
86             Caption,
87             DynamicIP,
88             EngineID,
89             Status,
90             UnManaged,
91             Allow64BitCounters,
92             ObjectSubType,
93             SysObjectID,
94             MachineType,
95             VendorIcon,
96             SNMPVersion,
97             Community,
98             RediscoveryInterval,
99             PollInterval,
100             StatCollection,
101             Uri,
102             DisplayName
103 2     2   11 FROM Orion.Nodes where DisplayName='%s' OR Caption='%s'};
  2         4  
104              
105             =item * my $sql=$self->SWQL_getNodesByID;
106              
107             =cut
108              
109 2         90 use constant SWQL_getNodesByID=>q{SELECT
110             NodeID,
111             IPAddress,
112             IPAddressGUID,
113             Caption,
114             DynamicIP,
115             EngineID,
116             Status,
117             UnManaged,
118             Allow64BitCounters,
119             ObjectSubType,
120             SysObjectID,
121             MachineType,
122             VendorIcon,
123             SNMPVersion,
124             Community,
125             RediscoveryInterval,
126             PollInterval,
127             StatCollection,
128             Uri
129 2     2   11 FROM Orion.Nodes where NodeId='%s'};
  2         4  
130              
131             =item * my $sql=$self->SWQL_getApplicationTemplate;
132              
133             =cut
134              
135 2     2   10 use constant SWQL_getApplicationTemplate=>q{SELECT ApplicationTemplateID, Created, CustomApplicationType, Description, DisplayName, HasImportedView, InstanceType, IsMockTemplate, LastModified, Name, Uri, ViewID, ViewXml FROM Orion.APM.ApplicationTemplate where %s};
  2         4  
  2         82  
136              
137             =item * my $sql=$self->SWQL_getTemplatesOnNode;
138              
139             =cut
140              
141 2     2   10 use constant SWQL_getTemplatesOnNode=>q{SELECT ApplicationID, ApplicationTemplateID, Description, DetailsUrl, DisplayName, HasCredentials, ID, InstanceType, Name, NodeID, Uri FROM Orion.APM.Application where nodeid=%s};
  2         920  
  2         98  
142              
143             =item * my $sql=$self->SWQL_getNodesByIp;
144              
145             =cut
146              
147 2         83 use constant SWQL_getNodesByIp=>q{SELECT
148             n.NodeID,
149             n.IPAddress,
150             n.IPAddressGUID,
151             n.Caption,
152             n.DynamicIP,
153             n.EngineID,
154             n.Status,
155             n.UnManaged,
156             n.Allow64BitCounters,
157             n.ObjectSubType,
158             n.SysObjectID,
159             n.MachineType,
160             n.VendorIcon,
161             n.SNMPVersion,
162             n.Community,
163             n.RediscoveryInterval,
164             n.PollInterval,
165             n.StatCollection,
166             n.Uri,
167             n.DisplayName
168             FROM
169             Orion.NodeIPAddresses i
170             inner join Orion.Nodes n on n.ObjectSubType='SNMP' and i.NodeID=n.NodeID
171             where
172 2     2   11 i.IPAddress='%s'};
  2         3  
173              
174             =item * my $sql=$self->SWQL_bulk_ip_lookup
175              
176             =cut
177              
178 2         72 use constant SWQL_bulk_ip_lookup=>q{SELECT
179             n.NodeID,
180             n.IPAddress,
181             n.IPAddressGUID,
182             n.Caption,
183             n.DynamicIP,
184             n.EngineID,
185             n.Status,
186             n.UnManaged,
187             n.Allow64BitCounters,
188             n.ObjectSubType,
189             n.SysObjectID,
190             n.MachineType,
191             n.VendorIcon,
192             n.SNMPVersion,
193             n.Community,
194             n.RediscoveryInterval,
195             n.PollInterval,
196             n.StatCollection,
197             n.Uri,
198             n.DisplayName,
199             i.IPAddress as LookupIP
200             FROM
201             Orion.NodeIPAddresses i
202             inner join Orion.Nodes n on n.ObjectSubType='SNMP' and i.NodeID=n.NodeID
203             where
204 2     2   10 i.IPAddress in('%s')};
  2         4  
205              
206             =item * my $sql=$self->SWQL_getVolumeTypeMap;
207              
208             =cut
209              
210 2     2   10 use constant SWQL_getVolumeTypeMap=>q{SELECT distinct VolumeType, VolumeTypeIcon, VolumeTypeID FROM Orion.Volumes};
  2         4  
  2         77  
211              
212             =item * my $sql=$self->SWQL_getEngines;
213              
214             =cut
215              
216 2     2   9 use constant SWQL_getEngines=>q{SELECT AvgCPUUtil, BusinessLayerPort, CompanyName, CustomerID, Description, DisplayName, Elements, EngineID, EngineVersion, EvalDaysLeft, Evaluation, FailOverActive, FIPSModeEnabled, InstanceType, InterfacePollInterval, Interfaces, InterfaceStatPollInterval, IP, KeepAlive, LicensedElements, LicenseKey, MaxPollsPerSecond, MaxStatPollsPerSecond, MemoryUtil, MinutesSinceFailOverActive, MinutesSinceKeepAlive, MinutesSinceRestart, MinutesSinceStartTime, MinutesSinceSysLogKeepAlive, MinutesSinceTrapsKeepAlive, NodePollInterval, Nodes, NodeStatPollInterval, PackageName, Pollers, PollingCompletion, PrimaryServers, Restart, SerialNumber, ServerName, ServerType, ServicePack, StartTime, StatPollInterval, SysLogKeepAlive, TrapsKeepAlive, Uri, VolumePollInterval, Volumes, VolumeStatPollInterval, WindowsVersion FROM Orion.Engines};
  2         4  
  2         73  
217              
218             =item * my $sql=$self->SWQL_getNodeUri;
219              
220             =cut
221              
222 2     2   10 use constant SWQL_getNodeUri=>'Select Uri from Orion.Nodes where NodeId=%s';
  2         3  
  2         76  
223              
224             =item * my $sql=$self->SWQL_getEngine;
225              
226             =cut
227              
228 2     2   10 use constant SWQL_getEngine=>q{SELECT AvgCPUUtil, BusinessLayerPort, CompanyName, CustomerID, Description, DisplayName, Elements, EngineID, EngineVersion, EvalDaysLeft, Evaluation, FailOverActive, FIPSModeEnabled, InstanceType, InterfacePollInterval, Interfaces, InterfaceStatPollInterval, IP, KeepAlive, LicensedElements, LicenseKey, MaxPollsPerSecond, MaxStatPollsPerSecond, MemoryUtil, MinutesSinceFailOverActive, MinutesSinceKeepAlive, MinutesSinceRestart, MinutesSinceStartTime, MinutesSinceSysLogKeepAlive, MinutesSinceTrapsKeepAlive, NodePollInterval, Nodes, NodeStatPollInterval, PackageName, Pollers, PollingCompletion, PrimaryServers, Restart, SerialNumber, ServerName, ServerType, ServicePack, StartTime, StatPollInterval, SysLogKeepAlive, TrapsKeepAlive, Uri, VolumePollInterval, Volumes, VolumeStatPollInterval, WindowsVersion FROM Orion.Engines where ServerName='%s' or DisplayName='%s'};
  2         4  
  2         74  
229              
230             =item * my $sql=$self->SWQL_getVolumeMap;
231              
232             =cut
233              
234 2         74 use constant SWQL_getVolumeMap=>q{SELECT
235             VolumeIndex,
236             Caption,
237             VolumeDescription,
238             Status,
239             Type ,
240             Icon ,
241             VolumeSpaceAvailable,
242             VolumeSize,
243             VolumePercentUsed,
244             VolumeSpaceUsed,
245             VolumeTypeID,
246             PollInterval,
247             StatCollection,
248             RediscoveryInterval,
249             VolumeID,
250             Uri,
251             NodeID
252              
253 2     2   10 FROM Orion.Volumes where NodeID=%s};
  2         3  
254              
255             =item * my $sql=$self->SWQL_GetAlertSettings;
256              
257             =cut
258              
259 2         68 use constant SWQL_GetAlertSettings=>'SELECT NodeID, EntityType, InstanceId, MetricId, MetricName, InstanceCaption, ThresholdType, Timestamp, MinDateTime, MaxDateTime, CurrentValue, WarningThreshold, CriticalThreshold, CapacityThreshold, Aavg, Bavg, Apeak, Bpeak, DaysToWarningAvg, DaysToCriticalAvg, DaysToCapacityAvg, DaysToWarningPeak, DaysToCriticalPeak, DaysToCapacityPeak, InstanceUri, DetailsUrl, DisplayName, Description, InstanceType, Uri, InstanceSiteId
260             FROM Orion.ForecastCapacity
261 2     2   10 where nodeid=%s';
  2         3  
262              
263              
264              
265             =item * my $sql=$self->SWQL_GetNodePollers;
266              
267             =cut
268              
269 2     2   22 use constant SWQL_GetNodePollers=>q{SELECT Description, DisplayName, Enabled, InstanceType, NetObject, NetObjectID, NetObjectType, PollerID, PollerType, Uri FROM Orion.Pollers where NetObjectID=%s and NetObjectType='%s'};
  2         5  
  2         81  
270              
271             =back
272              
273             =head2 Query Drivers For: Net::SolarWinds::REST::Batch
274              
275             =over 4
276              
277             =item * my $sql=$self->SWQL_getPollerInterfaceMap;
278              
279             =item * my $sql=$self->SWQL_GetNodeInterfacePollers;
280              
281             =item * my $sql=$self->SWQL_get_poller_map;
282              
283             =cut
284              
285 2         86 use constant SWQL_getPollerInterfaceMap=>q{select
286             p.PollerType,
287             i.interfacetype as ifType,
288             count(i.interfaceid) as totalinterfaces
289             FROM
290             Orion.NPM.Interfaces as i
291             inner join Orion.Pollers as p on i.InterfaceID=p.NetObjectID and p.NetObjectType='I'
292             where
293             i.NodeID=%s
294 2     2   10 group by p.PollerType,i.interfacetype};
  2         5  
295              
296              
297 2         68 use constant SWQL_GetNodeInterfacePollers=>q{select
298             p.PollerType,
299             i.interfacetype as ifType,
300             i.InterfaceName as ifName,
301             i.InterfaceID,
302             i.Uri as InterfaceUri,
303             p.Uri as PollerUri
304             FROM
305             Orion.NPM.Interfaces as i
306             left join Orion.Pollers as p on i.InterfaceID=p.NetObjectID and p.NetObjectType='I'
307             where
308             i.NodeID=%s
309 2     2   10 order by i.InterfaceID};
  2         4  
310              
311              
312 2     2   10 use constant SWQL_get_poller_map=>q{SELECT Description, DisplayName, Enabled, InstanceType, NetObject, NetObjectID, NetObjectType, PollerID, PollerType, Uri FROM Orion.Pollers where NetObjectID=%s and NetObjectType='%s'};
  2         15  
  2         91  
313              
314             =back
315              
316             =head1 Author
317              
318             Michael Shipper
319              
320             =cut
321              
322             1;
323              
324             __END__