newrelic_f5_plugin 1.0.10 → 1.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGES CHANGED
@@ -1,3 +1,17 @@
1
+ * 1.0.12
2
+ - Added Virtual Servers and Pools statistics:
3
+ - Inbound Packets per second
4
+ - Outbound Packets per second
5
+
6
+ * 1.0.11
7
+ - Add Client SSL profile statistics:
8
+ - Current connections
9
+ - Session Cache entries
10
+ - Session Cache hits/sec
11
+ - Session Cache lookups/sec
12
+ - Session Cache invalidations/sec
13
+ - Better logic for skipping metrics that do not exist
14
+
1
15
  * 1.0.10
2
16
  - Add iRule statistics:
3
17
  - Executions per second
@@ -1,5 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'newrelic_f5_plugin/util'
3
+ require 'newrelic_f5_plugin/client_ssl'
3
4
  require 'newrelic_f5_plugin/device'
4
5
  require 'newrelic_f5_plugin/nodes'
5
6
  require 'newrelic_f5_plugin/pools'
@@ -4,7 +4,7 @@ require 'newrelic_plugin'
4
4
  require 'snmp'
5
5
 
6
6
  module NewRelic::F5Plugin
7
- VERSION = '1.0.10'
7
+ VERSION = '1.0.12'
8
8
 
9
9
  # Register and run the agent
10
10
  def self.run
@@ -127,7 +127,7 @@ module NewRelic::F5Plugin
127
127
  NewRelic::PlatformLogger.debug("Collecting Virtual Server stats")
128
128
  vs = NewRelic::F5Plugin::Virtuals.new snmp
129
129
 
130
- if vs.get_names
130
+ unless vs.get_names.empty?
131
131
  virtual_requests = vs.get_requests
132
132
  virtual_requests.each_key { |m| report_counter_metric m, "req/sec", virtual_requests[m] } unless virtual_requests.nil?
133
133
 
@@ -137,6 +137,12 @@ module NewRelic::F5Plugin
137
137
  virtual_conns_total = vs.get_conns_total
138
138
  virtual_conns_total.each_key { |m| report_counter_metric m, "conn/sec", virtual_conns_total[m] } unless virtual_conns_total.nil?
139
139
 
140
+ virtual_packets_in = vs.get_packets_in
141
+ virtual_packets_in.each_key { |m| report_counter_metric m, "packets/sec", virtual_packets_in[m] } unless virtual_packets_in.nil?
142
+
143
+ virtual_packets_out = vs.get_packets_out
144
+ virtual_packets_out.each_key { |m| report_counter_metric m, "packets/sec", virtual_packets_out[m] } unless virtual_packets_out.nil?
145
+
140
146
  virtual_throughput_in = vs.get_throughput_in
141
147
  virtual_throughput_in.each_key { |m| report_counter_metric m, "bits/sec", virtual_throughput_in[m] } unless virtual_throughput_in.nil?
142
148
 
@@ -153,7 +159,7 @@ module NewRelic::F5Plugin
153
159
  NewRelic::PlatformLogger.debug("Collecting Pool stats")
154
160
  pool = NewRelic::F5Plugin::Pools.new snmp
155
161
 
156
- if pool.get_names
162
+ unless pool.get_names.empty?
157
163
  pool_requests = pool.get_requests
158
164
  pool_requests.each_key { |m| report_counter_metric m, "req/sec", pool_requests[m] } unless pool_requests.nil?
159
165
 
@@ -163,6 +169,12 @@ module NewRelic::F5Plugin
163
169
  pool_conns_total = pool.get_conns_total
164
170
  pool_conns_total.each_key { |m| report_counter_metric m, "conn/sec", pool_conns_total[m] } unless pool_conns_total.nil?
165
171
 
172
+ pool_packets_in = pool.get_packets_in
173
+ pool_packets_in.each_key { |m| report_counter_metric m, "packets/sec", pool_packets_in[m] } unless pool_packets_in.nil?
174
+
175
+ pool_packets_out = pool.get_packets_out
176
+ pool_packets_out.each_key { |m| report_counter_metric m, "packets/sec", pool_packets_out[m] } unless pool_packets_out.nil?
177
+
166
178
  pool_throughput_in = pool.get_throughput_in
167
179
  pool_throughput_in.each_key { |m| report_counter_metric m, "bits/sec", pool_throughput_in[m] } unless pool_throughput_in.nil?
168
180
 
@@ -177,7 +189,7 @@ module NewRelic::F5Plugin
177
189
  NewRelic::PlatformLogger.debug("Collecting iRule stats")
178
190
  rule = NewRelic::F5Plugin::Rules.new snmp
179
191
 
180
- if rule.get_names
192
+ unless rule.get_names.empty?
181
193
  rule_execs = rule.get_executions
182
194
  rule_execs.each_key { |m| report_counter_metric m, "execs/sec", rule_execs[m] } unless rule_execs.nil?
183
195
 
@@ -198,7 +210,7 @@ module NewRelic::F5Plugin
198
210
  NewRelic::PlatformLogger.debug("Collecting SNAT Pool stats")
199
211
  snatpool = NewRelic::F5Plugin::SnatPools.new snmp
200
212
 
201
- if snatpool.get_names
213
+ unless snatpool.get_names.empty?
202
214
  snatpool_conns_max = snatpool.get_conns_max
203
215
  snatpool_conns_max.each_key { |m| report_metric m, "conns", snatpool_conns_max[m] } unless snatpool_conns_max.nil?
204
216
 
@@ -222,6 +234,49 @@ module NewRelic::F5Plugin
222
234
  end
223
235
 
224
236
 
237
+ #
238
+ # Collect Client SSL Profile statistics
239
+ #
240
+ NewRelic::PlatformLogger.debug("Collecting Client SSL Profile stats")
241
+ clientssl = NewRelic::F5Plugin::ClientSsl.new snmp
242
+
243
+ unless clientssl.get_names.empty?
244
+ clientssl_conns_current = clientssl.get_conns_current
245
+ clientssl_conns_current.each_key { |m| report_metric m, "conns", clientssl_conns_current[m] } unless clientssl_conns_current.nil?
246
+
247
+ clientssl_session_cache_current = clientssl.get_session_cache_current
248
+ clientssl_session_cache_current.each_key { |m| report_metric m, "entries", clientssl_session_cache_current[m] } unless clientssl_session_cache_current.nil?
249
+
250
+ clientssl_session_cache_hits = clientssl.get_session_cache_hits
251
+ clientssl_session_cache_hits.each_key { |m| report_counter_metric m, "hits/sec", clientssl_session_cache_hits[m] } unless clientssl_session_cache_hits.nil?
252
+
253
+ clientssl_session_cache_lookups = clientssl.get_session_cache_lookups
254
+ clientssl_session_cache_lookups.each_key { |m| report_counter_metric m, "lookups/sec", clientssl_session_cache_lookups[m] } unless clientssl_session_cache_lookups.nil?
255
+
256
+ NewRelic::PlatformLogger.debug("Calculating Client SSL Profile hit ratios")
257
+ clientssl_hit_ratio = { }
258
+ clientssl_session_cache_hits.each_key do |h|
259
+ key = h.gsub(/^Client SSL Profiles\/Session Cache Hits\//, '')
260
+ l = "Client SSL Profiles/Session Cache Lookups/#{key}"
261
+ p = "Client SSL Profiles/Session Cache Hit Ratio/#{key}"
262
+ unless clientssl_session_cache_lookups[l].nil?
263
+ if clientssl_session_cache_lookups[l].to_f > 0
264
+ clientssl_hit_ratio[p] = (clientssl_session_cache_hits[h].to_f / clientssl_session_cache_lookups[l].to_f) * 100
265
+ else
266
+ clientssl_hit_ratio[p] = 0.0
267
+ end
268
+ end
269
+ end
270
+ clientssl_hit_ratio.each_key { |m| report_metric m, "%", clientssl_hit_ratio[m] } unless clientssl_hit_ratio.empty?
271
+
272
+ clientssl_session_cache_overflows = clientssl.get_session_cache_overflows
273
+ clientssl_session_cache_overflows.each_key { |m| report_counter_metric m, "overflows/sec", clientssl_session_cache_overflows[m] } unless clientssl_session_cache_overflows.nil?
274
+
275
+ clientssl_session_cache_invalidations = clientssl.get_session_cache_invalidations
276
+ clientssl_session_cache_invalidations.each_key { |m| report_counter_metric m, "invld/sec", clientssl_session_cache_invalidations[m] } unless clientssl_session_cache_invalidations.nil?
277
+ end
278
+
279
+
225
280
  #
226
281
  # Cleanup snmp connection
227
282
  #
@@ -0,0 +1,219 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'newrelic_plugin'
4
+ require 'snmp'
5
+
6
+ #LtmClientSslStatEntry
7
+ # ltmClientSslStatName LongDisplayString,
8
+ # ltmClientSslStatCurConns CounterBasedGauge64,
9
+ # ltmClientSslStatMaxConns Counter64,
10
+ # ltmClientSslStatCurNativeConns CounterBasedGauge64,
11
+ # ltmClientSslStatMaxNativeConns Counter64,
12
+ # ltmClientSslStatTotNativeConns Counter64,
13
+ # ltmClientSslStatCurCompatConns CounterBasedGauge64,
14
+ # ltmClientSslStatMaxCompatConns Counter64,
15
+ # ltmClientSslStatTotCompatConns Counter64,
16
+ # ltmClientSslStatEncryptedBytesIn Counter64,
17
+ # ltmClientSslStatEncryptedBytesOut Counter64,
18
+ # ltmClientSslStatDecryptedBytesIn Counter64,
19
+ # ltmClientSslStatDecryptedBytesOut Counter64,
20
+ # ltmClientSslStatRecordsIn Counter64,
21
+ # ltmClientSslStatRecordsOut Counter64,
22
+ # ltmClientSslStatFullyHwAcceleratedConns Counter64,
23
+ # ltmClientSslStatPartiallyHwAcceleratedConns Counter64,
24
+ # ltmClientSslStatNonHwAcceleratedConns Counter64,
25
+ # ltmClientSslStatPrematureDisconnects Counter64,
26
+ # ltmClientSslStatMidstreamRenegotiations Counter64,
27
+ # ltmClientSslStatSessCacheCurEntries CounterBasedGauge64,
28
+ # ltmClientSslStatSessCacheHits Counter64,
29
+ # ltmClientSslStatSessCacheLookups Counter64,
30
+ # ltmClientSslStatSessCacheOverflows Counter64,
31
+ # ltmClientSslStatSessCacheInvalidations Counter64,
32
+ # ltmClientSslStatPeercertValid Counter64,
33
+ # ltmClientSslStatPeercertInvalid Counter64,
34
+ # ltmClientSslStatPeercertNone Counter64,
35
+ # ltmClientSslStatHandshakeFailures Counter64,
36
+ # ltmClientSslStatBadRecords Counter64,
37
+ # ltmClientSslStatFatalAlerts Counter64,
38
+ # ltmClientSslStatSslv2 Counter64,
39
+ # ltmClientSslStatSslv3 Counter64,
40
+ # ltmClientSslStatTlsv1 Counter64,
41
+ # ltmClientSslStatAdhKeyxchg Counter64,
42
+ # ltmClientSslStatDhDssKeyxchg Counter64,
43
+ # ltmClientSslStatDhRsaKeyxchg Counter64,
44
+ # ltmClientSslStatDssKeyxchg Counter64,
45
+ # ltmClientSslStatEdhDssKeyxchg Counter64,
46
+ # ltmClientSslStatRsaKeyxchg Counter64,
47
+ # ltmClientSslStatNullBulk Counter64,
48
+ # ltmClientSslStatAesBulk Counter64,
49
+ # ltmClientSslStatDesBulk Counter64,
50
+ # ltmClientSslStatIdeaBulk Counter64,
51
+ # ltmClientSslStatRc2Bulk Counter64,
52
+ # ltmClientSslStatRc4Bulk Counter64,
53
+ # ltmClientSslStatNullDigest Counter64,
54
+ # ltmClientSslStatMd5Digest Counter64,
55
+ # ltmClientSslStatShaDigest Counter64,
56
+ # ltmClientSslStatNotssl Counter64,
57
+ # ltmClientSslStatEdhRsaKeyxchg Counter64,
58
+ # ltmClientSslStatSecureHandshakes Counter64,
59
+ # ltmClientSslStatInsecureHandshakeAccepts Counter64,
60
+ # ltmClientSslStatInsecureHandshakeRejects Counter64,
61
+ # ltmClientSslStatInsecureRenegotiationRejects Counter64,
62
+ # ltmClientSslStatSniRejects Counter64,
63
+ # ltmClientSslStatTlsv11 Counter64,
64
+ # ltmClientSslStatTlsv12 Counter64,
65
+ # ltmClientSslStatDtlsv1 Counter64
66
+
67
+ module NewRelic
68
+ module F5Plugin
69
+
70
+ class ClientSsl
71
+ attr_accessor :names, :snmp_manager
72
+
73
+ OID_LTM_CLIENT_SSL = "1.3.6.1.4.1.3375.2.2.6.2"
74
+ OID_LTM_CLIENT_SSL_PROFILE_STAT = "#{OID_LTM_CLIENT_SSL}.2"
75
+ OID_LTM_CLIENT_SSL_STAT_ENTRY = "#{OID_LTM_CLIENT_SSL_PROFILE_STAT}.3.1"
76
+ OID_LTM_CLIENT_SSL_STAT_NAME = "#{OID_LTM_CLIENT_SSL_STAT_ENTRY}.1"
77
+ OID_LTM_CLIENT_SSL_STAT_CUR_CONNS = "#{OID_LTM_CLIENT_SSL_STAT_ENTRY}.2"
78
+ OID_LTM_CLIENT_SSL_STAT_MAX_CONNS = "#{OID_LTM_CLIENT_SSL_STAT_ENTRY}.3"
79
+ OID_LTM_CLIENT_SSL_STAT_CUR_NATIVE_CONNS = "#{OID_LTM_CLIENT_SSL_STAT_ENTRY}.4"
80
+ OID_LTM_CLIENT_SSL_STAT_MAX_NATIVE_CONNS = "#{OID_LTM_CLIENT_SSL_STAT_ENTRY}.5"
81
+
82
+ OID_LTM_CLIENT_SSL_STAT_FULLY_HW_ACCELERATED_CONNS = "#{OID_LTM_CLIENT_SSL_STAT_ENTRY}.16"
83
+ OID_LTM_CLIENT_SSL_STAT_PARTIALLY_HW_ACCELERATED_CONNS = "#{OID_LTM_CLIENT_SSL_STAT_ENTRY}.17"
84
+ OID_LTM_CLIENT_SSL_STAT_NON_HW_ACCELERATED_CONNS = "#{OID_LTM_CLIENT_SSL_STAT_ENTRY}.18"
85
+
86
+ OID_LTM_CLIENT_SSL_STAT_SESS_CACHE_CUR_ENTRIES = "#{OID_LTM_CLIENT_SSL_STAT_ENTRY}.21"
87
+ OID_LTM_CLIENT_SSL_STAT_SESS_CACHE_HITS = "#{OID_LTM_CLIENT_SSL_STAT_ENTRY}.22"
88
+ OID_LTM_CLIENT_SSL_STAT_SESS_CACHE_LOOKUPS = "#{OID_LTM_CLIENT_SSL_STAT_ENTRY}.23"
89
+ OID_LTM_CLIENT_SSL_STAT_SESS_CACHE_OVERFLOWS = "#{OID_LTM_CLIENT_SSL_STAT_ENTRY}.24"
90
+ OID_LTM_CLIENT_SSL_STAT_SESS_CACHE_INVALIDATIONS = "#{OID_LTM_CLIENT_SSL_STAT_ENTRY}.25"
91
+
92
+
93
+
94
+ #
95
+ # Init
96
+ #
97
+ def initialize(snmp = nil)
98
+ @names = [ ]
99
+
100
+ if snmp
101
+ @snmp_manager = snmp
102
+ else
103
+ @snmp_manager = nil
104
+ end
105
+ end
106
+
107
+
108
+
109
+ #
110
+ # Get the list of iRule names
111
+ #
112
+ def get_names(snmp = nil)
113
+ snmp = snmp_manager unless snmp
114
+
115
+ if snmp
116
+ @names.clear
117
+
118
+ begin
119
+ snmp.walk([OID_LTM_CLIENT_SSL_STAT_NAME]) do |row|
120
+ row.each do |vb|
121
+ @names.push(vb.value)
122
+ end
123
+ end
124
+ rescue Exception => e
125
+ NewRelic::PlatformLogger.error("Unable to gather Client SSL Profile names with error: #{e}")
126
+ end
127
+
128
+ NewRelic::PlatformLogger.debug("Client SSL Profiles: Found #{@names.size}")
129
+ return @names
130
+ end
131
+ end
132
+
133
+
134
+
135
+ #
136
+ # Gather current connection count
137
+ #
138
+ def get_conns_current(snmp = nil)
139
+ snmp = snmp_manager unless snmp
140
+
141
+ get_names(snmp) if @names.empty?
142
+ res = gather_snmp_metrics_by_name("Client SSL Profiles/Current Connections", @names, OID_LTM_CLIENT_SSL_STAT_CUR_CONNS, snmp)
143
+ NewRelic::PlatformLogger.debug("Client SSL Profiles: Got #{res.size}/#{@names.size} Current Connection metrics")
144
+ return res
145
+ end
146
+
147
+
148
+
149
+ #
150
+ # Gather current cache entries
151
+ #
152
+ def get_session_cache_current(snmp = nil)
153
+ snmp = snmp_manager unless snmp
154
+
155
+ get_names(snmp) if @names.empty?
156
+ res = gather_snmp_metrics_by_name("Client SSL Profiles/Current Cache Entries", @names, OID_LTM_CLIENT_SSL_STAT_SESS_CACHE_CUR_ENTRIES, snmp)
157
+ NewRelic::PlatformLogger.debug("Client SSL Profiles: Got #{res.size}/#{@names.size} Current Session Cache metrics")
158
+ return res
159
+ end
160
+
161
+
162
+
163
+ #
164
+ # Gather session cache hits
165
+ #
166
+ def get_session_cache_hits(snmp = nil)
167
+ snmp = snmp_manager unless snmp
168
+
169
+ get_names(snmp) if @names.empty?
170
+ res = gather_snmp_metrics_by_name("Client SSL Profiles/Session Cache Hits", @names, OID_LTM_CLIENT_SSL_STAT_SESS_CACHE_HITS, snmp)
171
+ NewRelic::PlatformLogger.debug("Client SSL Profiles: Got #{res.size}/#{@names.size} Session Cache Hit metrics")
172
+ return res
173
+ end
174
+
175
+
176
+
177
+ #
178
+ # Gather session cache lookups
179
+ #
180
+ def get_session_cache_lookups(snmp = nil)
181
+ snmp = snmp_manager unless snmp
182
+
183
+ get_names(snmp) if @names.empty?
184
+ res = gather_snmp_metrics_by_name("Client SSL Profiles/Session Cache Lookups", @names, OID_LTM_CLIENT_SSL_STAT_SESS_CACHE_LOOKUPS, snmp)
185
+ NewRelic::PlatformLogger.debug("Client SSL Profiles: Got #{res.size}/#{@names.size} Session Cache Lookup metrics")
186
+ return res
187
+ end
188
+
189
+
190
+
191
+ #
192
+ # Gather session cache overflows
193
+ #
194
+ def get_session_cache_overflows(snmp = nil)
195
+ snmp = snmp_manager unless snmp
196
+
197
+ get_names(snmp) if @names.empty?
198
+ res = gather_snmp_metrics_by_name("Client SSL Profiles/Session Cache Overflows", @names, OID_LTM_CLIENT_SSL_STAT_SESS_CACHE_OVERFLOWS, snmp)
199
+ NewRelic::PlatformLogger.debug("Client SSL Profiles: Got #{res.size}/#{@names.size} Session Cache Overflow metrics")
200
+ return res
201
+ end
202
+
203
+
204
+
205
+ #
206
+ # Gather session cache invalidations
207
+ #
208
+ def get_session_cache_invalidations(snmp = nil)
209
+ snmp = snmp_manager unless snmp
210
+
211
+ get_names(snmp) if @names.empty?
212
+ res = gather_snmp_metrics_by_name("Client SSL Profiles/Session Cache Invalidations", @names, OID_LTM_CLIENT_SSL_STAT_SESS_CACHE_INVALIDATIONS, snmp)
213
+ NewRelic::PlatformLogger.debug("Client SSL Profiles: Got #{res.size}/#{@names.size} Session Cache Invalidation metrics")
214
+ return res
215
+ end
216
+ end
217
+ end
218
+ end
219
+
@@ -46,7 +46,9 @@ module NewRelic
46
46
  OID_LTM_POOL_STAT = "#{OID_LTM_POOLS}.2"
47
47
  OID_LTM_POOL_ENTRY = "#{OID_LTM_POOL_STAT}.3.1"
48
48
  OID_LTM_POOL_STAT_NAME = "#{OID_LTM_POOL_ENTRY}.1"
49
+ OID_LTM_POOL_STAT_SERVER_PKTS_IN = "#{OID_LTM_POOL_ENTRY}.2"
49
50
  OID_LTM_POOL_STAT_SERVER_BYTES_IN = "#{OID_LTM_POOL_ENTRY}.3"
51
+ OID_LTM_POOL_STAT_SERVER_PKTS_OUT = "#{OID_LTM_POOL_ENTRY}.4"
50
52
  OID_LTM_POOL_STAT_SERVER_BYTES_OUT = "#{OID_LTM_POOL_ENTRY}.5"
51
53
  OID_LTM_POOL_STAT_SERVER_TOT_CONNS = "#{OID_LTM_POOL_ENTRY}.7"
52
54
  OID_LTM_POOL_STAT_SERVER_CUR_CONNS = "#{OID_LTM_POOL_ENTRY}.8"
@@ -137,6 +139,36 @@ module NewRelic
137
139
 
138
140
 
139
141
 
142
+ #
143
+ # Gather Packets Inbound
144
+ #
145
+ def get_packets_in(snmp = nil)
146
+ snmp = snmp_manager unless snmp
147
+
148
+ get_names(snmp) if @pool_names.empty?
149
+ res = gather_snmp_metrics_by_name("Pools/Packets/In", @pool_names, OID_LTM_POOL_STAT_SERVER_PKTS_IN, snmp)
150
+ res = res.each_key { |n| res[n] *= 8 }
151
+ NewRelic::PlatformLogger.debug("Pools: Got #{res.size}/#{@pool_names.size} Inbound Packet metrics")
152
+ return res
153
+ end
154
+
155
+
156
+
157
+ #
158
+ # Gather Packets Outbound
159
+ #
160
+ def get_packets_out(snmp = nil)
161
+ snmp = snmp_manager unless snmp
162
+
163
+ get_names(snmp) if @pool_names.empty?
164
+ res = gather_snmp_metrics_by_name("Pools/Packets/Out", @pool_names, OID_LTM_POOL_STAT_SERVER_PKTS_OUT, snmp)
165
+ res = res.each_key { |n| res[n] *= 8 }
166
+ NewRelic::PlatformLogger.debug("Pools: Got #{res.size}/#{@pool_names.size} Outbound Packet metrics")
167
+ return res
168
+ end
169
+
170
+
171
+
140
172
  #
141
173
  # Gather Throughput Inbound (returns in bits)
142
174
  #
@@ -153,7 +185,7 @@ module NewRelic
153
185
 
154
186
 
155
187
  #
156
- # Gather Throughput Inbound (returns in bits)
188
+ # Gather Throughput Outbound (returns in bits)
157
189
  #
158
190
  def get_throughput_out(snmp = nil)
159
191
  snmp = snmp_manager unless snmp
@@ -122,7 +122,7 @@ module NewRelic
122
122
 
123
123
  get_names(snmp) if @rule_names.empty?
124
124
  res = gather_snmp_metrics_by_name("Rules/Time", @rule_names, OID_LTM_RULE_STAT_AVG_CYCLES, snmp)
125
- NewRelic::PlatformLogger.debug("Rules: Got #{res.size}/#{@rule_names.size} Abort metrics")
125
+ NewRelic::PlatformLogger.debug("Rules: Got #{res.size}/#{@rule_names.size} Average Cycle metrics")
126
126
  return res
127
127
  end
128
128
 
@@ -49,7 +49,9 @@ module NewRelic
49
49
  OID_LTM_VIRTUAL_SERV_STAT = "#{OID_LTM_VIRTUAL_SERVERS}.2"
50
50
  OID_LTM_VIRTUAL_SERV_ENTRY = "#{OID_LTM_VIRTUAL_SERV_STAT}.3.1"
51
51
  OID_LTM_VIRTUAL_SERV_STAT_NAME = "#{OID_LTM_VIRTUAL_SERV_ENTRY}.1"
52
+ OID_LTM_VIRTUAL_SERV_STAT_CLIENT_PKTS_IN = "#{OID_LTM_VIRTUAL_SERV_ENTRY}.6"
52
53
  OID_LTM_VIRTUAL_SERV_STAT_CLIENT_BYTES_IN = "#{OID_LTM_VIRTUAL_SERV_ENTRY}.7"
54
+ OID_LTM_VIRTUAL_SERV_STAT_CLIENT_PKTS_OUT = "#{OID_LTM_VIRTUAL_SERV_ENTRY}.8"
53
55
  OID_LTM_VIRTUAL_SERV_STAT_CLIENT_BYTES_OUT = "#{OID_LTM_VIRTUAL_SERV_ENTRY}.9"
54
56
  OID_LTM_VIRTUAL_SERV_STAT_CLIENT_TOT_CONNS = "#{OID_LTM_VIRTUAL_SERV_ENTRY}.11"
55
57
  OID_LTM_VIRTUAL_SERV_STAT_CLIENT_CUR_CONNS = "#{OID_LTM_VIRTUAL_SERV_ENTRY}.12"
@@ -141,6 +143,36 @@ module NewRelic
141
143
 
142
144
 
143
145
 
146
+ #
147
+ # Gather VS Packets Inbound
148
+ #
149
+ def get_packets_in (snmp = nil)
150
+ snmp = snmp_manager unless snmp
151
+
152
+ get_names(snmp) if @vs_names.empty?
153
+ res = gather_snmp_metrics_by_name("Virtual Servers/Packets/In", @vs_names, OID_LTM_VIRTUAL_SERV_STAT_CLIENT_PKTS_IN, snmp)
154
+ res = res.each_key { |n| res[n] *= 8 }
155
+ NewRelic::PlatformLogger.debug("Virtual Servers: Got #{res.size}/#{@vs_names.size} Inbound Packet metrics")
156
+ return res
157
+ end
158
+
159
+
160
+
161
+ #
162
+ # Gather VS Packets Outbound
163
+ #
164
+ def get_packets_out(snmp = nil)
165
+ snmp = snmp_manager unless snmp
166
+
167
+ get_names(snmp) if @vs_names.empty?
168
+ res = gather_snmp_metrics_by_name("Virtual Servers/Packets/Out", @vs_names, OID_LTM_VIRTUAL_SERV_STAT_CLIENT_PKTS_OUT, snmp)
169
+ res = res.each_key { |n| res[n] *= 8 }
170
+ NewRelic::PlatformLogger.debug("Virtual Servers: Got #{res.size}/#{@vs_names.size} Outbound Packet metrics")
171
+ return res
172
+ end
173
+
174
+
175
+
144
176
  #
145
177
  # Gather VS Throughput Inbound (returns in bits)
146
178
  #
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
13
13
  ## If your rubyforge_project name is different, then edit it and comment out
14
14
  ## the sub! line in the Rakefile
15
15
  s.name = 'newrelic_f5_plugin'
16
- s.version = '1.0.10'
17
- s.date = '2014-02-03'
16
+ s.version = '1.0.12'
17
+ s.date = '2014-02-19'
18
18
  s.rubyforge_project = 'newrelic_f5_plugin'
19
19
 
20
20
  ## Make sure your summary is short. The description may be as long
@@ -75,6 +75,7 @@ to find out how to install and run the plugin agent.
75
75
  config/newrelic_plugin.yml
76
76
  lib/newrelic_f5_plugin.rb
77
77
  lib/newrelic_f5_plugin/agent.rb
78
+ lib/newrelic_f5_plugin/client_ssl.rb
78
79
  lib/newrelic_f5_plugin/device.rb
79
80
  lib/newrelic_f5_plugin/nodes.rb
80
81
  lib/newrelic_f5_plugin/pools.rb
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: newrelic_f5_plugin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.10
4
+ version: 1.0.12
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-03 00:00:00.000000000 Z
12
+ date: 2014-02-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: newrelic_plugin
@@ -66,6 +66,7 @@ files:
66
66
  - config/newrelic_plugin.yml
67
67
  - lib/newrelic_f5_plugin.rb
68
68
  - lib/newrelic_f5_plugin/agent.rb
69
+ - lib/newrelic_f5_plugin/client_ssl.rb
69
70
  - lib/newrelic_f5_plugin/device.rb
70
71
  - lib/newrelic_f5_plugin/nodes.rb
71
72
  - lib/newrelic_f5_plugin/pools.rb
@@ -94,6 +95,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
94
95
  - - ! '>='
95
96
  - !ruby/object:Gem::Version
96
97
  version: '0'
98
+ segments:
99
+ - 0
100
+ hash: -1376077939883300417
97
101
  required_rubygems_version: !ruby/object:Gem::Requirement
98
102
  none: false
99
103
  requirements: