telemetry-snmp 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/README.md +10 -0
- data/lib/telemetry/snmp/api.rb +4 -0
- data/lib/telemetry/snmp/client.rb +5 -3
- data/lib/telemetry/snmp/collector.rb +22 -72
- data/lib/telemetry/snmp/data/migrations/012_add_measurement_prefix.rb +8 -0
- data/lib/telemetry/snmp/data/migrations/013_add_fields_to_devices.rb +9 -0
- data/lib/telemetry/snmp/device_collector.rb +186 -0
- data/lib/telemetry/snmp/publisher.rb +1 -1
- data/lib/telemetry/snmp/version.rb +1 -1
- data/lib/telemetry/snmp.rb +25 -0
- data/telemetry-snmp.gemspec +1 -0
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed97642826f1f7eae99d08d99d6e98a587a1f2427b7fb35c1fe3bf58a1056118
|
4
|
+
data.tar.gz: 5cbf336cb9c75b0e89b578f85a89c2874a6ce4cbaa6662d48edfeb34058ee4a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e1692d91324dfa8eb117c81c78d908dc8018e4ccd7e5682feb6bc45a0dd43c884974db9900fddf54a9e9ae5100d11e41f49c20a0ff70b76bb435fd1447708348
|
7
|
+
data.tar.gz: 3e9d11ad581fb35eba0e068d61f4d18dfbc8ddcce599392a903ac645f35647fa300148ebaaaa7ac0ff23a22c7efba176630c11db654329587648df132f1e29d1
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
# Telemetry::SNMP
|
2
2
|
|
3
|
+
## [0.3.0]
|
4
|
+
* Updating locking mechanism
|
5
|
+
* Allow for parallel collections
|
6
|
+
* Adding measurement prefixes
|
7
|
+
|
8
|
+
## [0.2.2]
|
9
|
+
* Updating logic to use the IP address of the device first and then hostname if ip is null
|
10
|
+
|
11
|
+
## [0.2.1]
|
12
|
+
Updating logic so it updates the last_polled column at the beginning of the loop
|
13
|
+
|
3
14
|
## [0.2.0]
|
4
15
|
* Fixing ENV variables to not use .
|
5
16
|
* Adding new device lock table for future reference
|
data/README.md
CHANGED
@@ -11,6 +11,16 @@ bundle exec exe/snmp_collector
|
|
11
11
|
```
|
12
12
|
|
13
13
|
|
14
|
+
1.3.6.1.2.1.47
|
15
|
+
1.3.6.1.2.1.2.2.1.8 = Interface Up/Down
|
16
|
+
1.3.6.1.2.1.2.2.1.10.1 = Interface in counter
|
17
|
+
1.3.6.1.2.1.2.2.1.14 = Interface In Errors
|
18
|
+
1.3.6.1.2.1.2.2.1.16 = Interface out counters
|
19
|
+
1.3.6.1.2.1.2.2.1.20 = Inteface Out Errors
|
20
|
+
1.3.6.1.2.1.31.1.1.1
|
21
|
+
|
22
|
+
https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA10g000000ClaSCAS
|
23
|
+
|
14
24
|
### Telemetry::Snmp::API
|
15
25
|
The API allows for you to remotely CRUD devices, oids, users, device credentials, etc
|
16
26
|
The Routes are available via a [postman json](https://github.com/Optum/telemetry-snmp/blob/main/telemetry-snmp.json)
|
data/lib/telemetry/snmp/api.rb
CHANGED
@@ -62,6 +62,10 @@ module Telemetry
|
|
62
62
|
Telemetry::Snmp::Collector.loop_devices
|
63
63
|
end
|
64
64
|
|
65
|
+
get '/poll_next_device' do
|
66
|
+
Telemetry::Snmp::Collector.poll_next_device
|
67
|
+
end
|
68
|
+
|
65
69
|
namespace('/users') { register Telemetry::Snmp::Controller::Users }
|
66
70
|
namespace('/devices/creds') { register Telemetry::Snmp::Controller::DeviceCreds }
|
67
71
|
namespace('/devices') { register Telemetry::Snmp::Controller::Devices }
|
@@ -21,10 +21,10 @@ module Telemetry
|
|
21
21
|
def connection(host)
|
22
22
|
return @connections[host.to_sym] if @connections.key? host.to_sym
|
23
23
|
|
24
|
-
dataset = Telemetry::Snmp::Data::Model::Device
|
24
|
+
dataset = Telemetry::Snmp::Data::Model::Device.where(hostname: host).or(ip_address: host).first
|
25
25
|
|
26
26
|
@connections[host.to_sym] = NETSNMP::Client.new(
|
27
|
-
host: dataset.values[:
|
27
|
+
host: dataset.values[:hostname],
|
28
28
|
port: dataset.values[:port],
|
29
29
|
username: dataset.device_cred.values[:username],
|
30
30
|
auth_password: dataset.device_cred.values[:auth_password],
|
@@ -59,7 +59,7 @@ module Telemetry
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def grab_oid_metrics(hostname)
|
62
|
-
device = Telemetry::Snmp::Data::Model::Device
|
62
|
+
device = Telemetry::Snmp::Data::Model::Device.where(hostname: hostname).or(ip_address: hostname).first
|
63
63
|
@lines = []
|
64
64
|
Telemetry::Snmp::Data::Model::OIDWalks.where(:active).each do |row|
|
65
65
|
index = {}
|
@@ -94,6 +94,8 @@ module Telemetry
|
|
94
94
|
|
95
95
|
@lines.push line
|
96
96
|
end
|
97
|
+
rescue StandardError => e
|
98
|
+
Telemetry::Logger.error "#{e.class}: #{hostname}, #{e.message}"
|
97
99
|
end
|
98
100
|
|
99
101
|
@lines
|
@@ -2,16 +2,30 @@ module Telemetry
|
|
2
2
|
module Snmp
|
3
3
|
module Collector
|
4
4
|
class << self
|
5
|
-
def
|
6
|
-
|
5
|
+
def loop_devices
|
6
|
+
count = 0
|
7
|
+
Telemetry::Snmp::Data::Model::Device.where(:active).order(:last_polled).each do |row|
|
8
|
+
break if count >= 10
|
9
|
+
next if row.values[:last_polled].to_i + row.values[:frequency] > Time.now.to_i
|
10
|
+
next if device_locked?(row.values[:id])
|
11
|
+
|
12
|
+
Telemetry::Logger.info "Grabbing metrics for #{row.values[:hostname]}"
|
13
|
+
device = Telemetry::Snmp::DeviceCollector.new(row.values[:hostname])
|
14
|
+
device.async.collect
|
15
|
+
count += 1
|
16
|
+
end
|
7
17
|
end
|
8
18
|
|
9
|
-
def
|
10
|
-
Telemetry::Snmp::Data::Model::Device.where(:active).each do |row|
|
19
|
+
def poll_next_device
|
20
|
+
Telemetry::Snmp::Data::Model::Device.where(:active).order(:last_polled).each do |row|
|
11
21
|
next if row.values[:last_polled].to_i + row.values[:frequency] > Time.now.to_i
|
12
22
|
next if device_locked?(row.values[:id])
|
13
23
|
|
24
|
+
Telemetry::Logger.info "Grabbing metrics for #{row.values[:hostname]}"
|
14
25
|
collect(row.values[:id])
|
26
|
+
break
|
27
|
+
rescue StandardError => e
|
28
|
+
Telemetry::Logger.exception(e, level: 'error')
|
15
29
|
end
|
16
30
|
end
|
17
31
|
|
@@ -19,81 +33,17 @@ module Telemetry
|
|
19
33
|
Telemetry::Snmp::Data::Model::DeviceLock.each do |row|
|
20
34
|
next if row.values[:expires] < Sequel::CURRENT_TIMESTAMP
|
21
35
|
|
36
|
+
Telemetry::Logger.warn "removing lock for #{row.values[:hostname]}"
|
22
37
|
row.delete
|
23
38
|
end
|
24
39
|
end
|
25
40
|
|
26
41
|
def device_locked?(device_id)
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
def lock_device(device_id)
|
31
|
-
return false unless Telemetry::Snmp::Data::Model::DeviceLock[device_id: device_id].nil?
|
32
|
-
|
33
|
-
Telemetry::Snmp::Data::Model::DeviceLock.insert(
|
34
|
-
worker_name: worker_name,
|
35
|
-
device_id: device_id,
|
36
|
-
created: Sequel::CURRENT_TIMESTAMP,
|
37
|
-
expires: Sequel::CURRENT_TIMESTAMP
|
38
|
-
)
|
39
|
-
true
|
40
|
-
end
|
41
|
-
|
42
|
-
# noinspection RubyArgCount
|
43
|
-
def unlock_device(device_id)
|
44
|
-
device = Telemetry::Snmp::Data::Model::DeviceLock[device_id: device_id]
|
45
|
-
return true if device.nil?
|
46
|
-
|
47
|
-
device.delete
|
42
|
+
Telemetry::Snmp::Data::Model::DeviceLock.where(device_id: device_id).count.positive?
|
48
43
|
end
|
49
44
|
|
50
|
-
def
|
51
|
-
|
52
|
-
row = Telemetry::Snmp::Data::Model::Device[device_id]
|
53
|
-
lines = []
|
54
|
-
fields = {}
|
55
|
-
tags = {
|
56
|
-
hostname: row.values[:hostname],
|
57
|
-
ip_address: row.values[:ip_address],
|
58
|
-
env: row.values[:environment],
|
59
|
-
dc: row.values[:datacenter],
|
60
|
-
zone: row.values[:zone],
|
61
|
-
influxdb_node_group: 'snmp',
|
62
|
-
influxdb_database: 'snmp'
|
63
|
-
}
|
64
|
-
|
65
|
-
Telemetry::Snmp::Data::Model::OID.each do |oid_row|
|
66
|
-
break if @quit
|
67
|
-
|
68
|
-
oid_value = Telemetry::Snmp::Client.oid_value(row[:hostname], oid_row.values[:oid])
|
69
|
-
next if oid_value.nil?
|
70
|
-
next unless oid_value.is_a?(Integer) || oid_value.is_a?(Float)
|
71
|
-
|
72
|
-
fields[oid_row.values[:name]] =
|
73
|
-
"#{Telemetry::Snmp::Client.oid_value(row[:hostname], oid_row.values[:oid])}i"
|
74
|
-
rescue StandardError => e
|
75
|
-
Telemetry::Logger.error "#{e.class}: #{e.message}"
|
76
|
-
end
|
77
|
-
|
78
|
-
lines.push Telemetry::Metrics::Parser.to_line_protocol(
|
79
|
-
measurement: 'palo_alto',
|
80
|
-
fields: fields,
|
81
|
-
tags: tags,
|
82
|
-
timestamp: (DateTime.now.strftime('%Q').to_i * 1000 * 1000)
|
83
|
-
)
|
84
|
-
|
85
|
-
walker = Telemetry::Snmp::Client.grab_oid_metrics(row.values[:hostname])
|
86
|
-
Telemetry::Logger.info "Pushing #{walker.count} lines for #{row.values[:hostname]}" unless walker.empty?
|
87
|
-
Telemetry::Snmp::Publisher.push_lines(walker) unless walker.empty?
|
88
|
-
|
89
|
-
row.update(last_polled: Sequel::CURRENT_TIMESTAMP)
|
90
|
-
row.save
|
91
|
-
|
92
|
-
Telemetry::Snmp::Publisher.push_lines(lines) unless lines.empty?
|
93
|
-
unlock_device(device_id)
|
94
|
-
rescue StandardError => e
|
95
|
-
Telemetry::Logger.exception(e, level: 'error')
|
96
|
-
unlock_device(device_id)
|
45
|
+
def device_unlocked?(device_id)
|
46
|
+
!device_locked?(device_id)
|
97
47
|
end
|
98
48
|
end
|
99
49
|
end
|
@@ -0,0 +1,186 @@
|
|
1
|
+
module Telemetry
|
2
|
+
module Snmp
|
3
|
+
class DeviceCollector
|
4
|
+
include Concurrent::Async
|
5
|
+
|
6
|
+
def initialize(host)
|
7
|
+
@device = Telemetry::Snmp::Data::Model::Device.where(hostname: host).or(ip_address: host).first
|
8
|
+
return if @device.nil?
|
9
|
+
|
10
|
+
@id = @device.values[:id]
|
11
|
+
@hostname = @device.values[:hostname]
|
12
|
+
end
|
13
|
+
|
14
|
+
def connection
|
15
|
+
@connection ||= NETSNMP::Client.new(
|
16
|
+
host: @device.values[:hostname],
|
17
|
+
port: @device.values[:port],
|
18
|
+
username: @device.device_cred.values[:username],
|
19
|
+
auth_password: @device.device_cred.values[:auth_password],
|
20
|
+
auth_protocol: @device.device_cred.values[:auth_protocol].to_sym,
|
21
|
+
priv_password: @device.device_cred.values[:priv_password],
|
22
|
+
priv_protocol: @device.device_cred.values[:priv_protocol].to_sym,
|
23
|
+
security_level: @device.device_cred.values[:security_level].to_sym
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
def collect
|
28
|
+
return false unless lock_device
|
29
|
+
|
30
|
+
@collection_start = Time.now
|
31
|
+
|
32
|
+
@device.update(last_polled: Sequel::CURRENT_TIMESTAMP)
|
33
|
+
@device.save
|
34
|
+
@lines = []
|
35
|
+
@fields = {}
|
36
|
+
|
37
|
+
Telemetry::Snmp::Data::Model::OID.where(:active).each do |oid_row|
|
38
|
+
oid_value = oid_value(oid_row.values[:oid])
|
39
|
+
oid_value = oid_value.to_i if oid_value.is_a?(NETSNMP::Timetick)
|
40
|
+
|
41
|
+
if oid_value.nil?
|
42
|
+
Telemetry::Logger.warn "#{@hostname} nil result for #{oid_row.values[:oid]}"
|
43
|
+
next
|
44
|
+
end
|
45
|
+
|
46
|
+
unless oid_value.is_a?(Integer) || oid_value.is_a?(Float)
|
47
|
+
Telemetry::Logger.error "#{@hostname} nil result for #{oid_row.values[:oid]} class: #{oid_value.class}, #{oid_value}" # rubocop:disable Layout/LineLength
|
48
|
+
next
|
49
|
+
end
|
50
|
+
|
51
|
+
@fields[oid_row.values[:name]] = "#{oid_value}i"
|
52
|
+
rescue StandardError => e
|
53
|
+
Telemetry::Logger.error "#{e.class}: #{e.message}"
|
54
|
+
end
|
55
|
+
|
56
|
+
@lines.push Telemetry::Metrics::Parser.to_line_protocol(
|
57
|
+
measurement: 'palo_alto',
|
58
|
+
fields: @fields,
|
59
|
+
tags: tags,
|
60
|
+
timestamp: (DateTime.now.strftime('%Q').to_i * 1000 * 1000)
|
61
|
+
)
|
62
|
+
|
63
|
+
walker = grab_oid_metrics
|
64
|
+
unless walker.empty?
|
65
|
+
Telemetry::Logger.info "Pushing #{walker.count} lines for #{@hostname} in #{((Time.now - @collection_start) * 1000).round}ms" # rubocop:disable Layout/LineLength
|
66
|
+
end
|
67
|
+
Telemetry::Snmp::Publisher.push_lines(walker) unless walker.empty?
|
68
|
+
Telemetry::Snmp::Publisher.push_lines(@lines) unless @lines.empty?
|
69
|
+
unlock_device
|
70
|
+
rescue StandardError => e
|
71
|
+
Telemetry::Logger.exception(e, level: 'error')
|
72
|
+
unlock_device
|
73
|
+
end
|
74
|
+
|
75
|
+
def oid_value(oid)
|
76
|
+
connection.get(oid: oid)
|
77
|
+
rescue StandardError
|
78
|
+
nil
|
79
|
+
end
|
80
|
+
|
81
|
+
def oid_walk(oid)
|
82
|
+
results = []
|
83
|
+
connection.walk(oid: oid).each do |oid_code, value|
|
84
|
+
hash = { oid_code: oid_code, value: value }
|
85
|
+
begin
|
86
|
+
ident = NETSNMP::MIB.identifier(oid_code)
|
87
|
+
|
88
|
+
hash[:identifier] = ident.first
|
89
|
+
rescue StandardError
|
90
|
+
# literally do nothing
|
91
|
+
end
|
92
|
+
results.push hash
|
93
|
+
end
|
94
|
+
|
95
|
+
results
|
96
|
+
end
|
97
|
+
|
98
|
+
def grab_oid_metrics
|
99
|
+
@lines = []
|
100
|
+
Telemetry::Snmp::Data::Model::OIDWalks.where(:active).each do |row|
|
101
|
+
index = {}
|
102
|
+
oid_walk(row.values[:oid_index]).each do |hash|
|
103
|
+
index[hash[:oid_code].delete_prefix("#{row.values[:oid_index]}.")] = hash[:value].gsub(%r{\\/}, '.')
|
104
|
+
end
|
105
|
+
|
106
|
+
timestamp = DateTime.now.strftime('%Q').to_i * 1000 * 1000
|
107
|
+
oid_walk(row.values[:oid_walk]).each do |walk|
|
108
|
+
key = walk[:oid_code].split('.').last
|
109
|
+
next if walk[:value].is_a? String
|
110
|
+
next if walk[:value].nil?
|
111
|
+
|
112
|
+
fields = {}
|
113
|
+
fields[walk[:identifier]] = "#{walk[:value]}i"
|
114
|
+
tags = {
|
115
|
+
hostname: @hostname,
|
116
|
+
interface: index[key],
|
117
|
+
ip_address: @device.values[:ip_address],
|
118
|
+
zone: @device.values[:zone],
|
119
|
+
env: @device.values[:environment],
|
120
|
+
dc: @device.values[:datacenter],
|
121
|
+
influxdb_node_group: 'snmp',
|
122
|
+
influxdb_database: 'snmp'
|
123
|
+
}
|
124
|
+
|
125
|
+
line = Telemetry::Metrics::Parser.to_line_protocol(
|
126
|
+
measurement: "snmp_#{row.values[:measurement_name]}",
|
127
|
+
fields: fields,
|
128
|
+
tags: tags,
|
129
|
+
timestamp: timestamp
|
130
|
+
)
|
131
|
+
|
132
|
+
@lines.push line
|
133
|
+
end
|
134
|
+
rescue StandardError => e
|
135
|
+
Telemetry::Logger.error "#{e.class}: #{@hostname}, #{e.message}"
|
136
|
+
end
|
137
|
+
|
138
|
+
@lines
|
139
|
+
end
|
140
|
+
|
141
|
+
def device_locked?
|
142
|
+
Telemetry::Snmp::Data::Model::DeviceLock.where(device_id: @id).count.positive?
|
143
|
+
end
|
144
|
+
|
145
|
+
def device_unlocked?
|
146
|
+
Telemetry::Snmp::Data::Model::DeviceLock.where(device_id: @id).count.zero?
|
147
|
+
end
|
148
|
+
|
149
|
+
def lock_device
|
150
|
+
Telemetry::Snmp::Data::Model::DeviceLock.insert(
|
151
|
+
worker_name: worker_name,
|
152
|
+
device_id: @id,
|
153
|
+
created: Sequel::CURRENT_TIMESTAMP,
|
154
|
+
expires: Sequel::CURRENT_TIMESTAMP
|
155
|
+
)
|
156
|
+
true
|
157
|
+
end
|
158
|
+
|
159
|
+
def tags
|
160
|
+
tags = {
|
161
|
+
hostname: @device.values[:hostname],
|
162
|
+
ip_address: @device.values[:ip_address],
|
163
|
+
env: @device.values[:environment],
|
164
|
+
dc: @device.values[:datacenter],
|
165
|
+
zone: @device.values[:zone],
|
166
|
+
influxdb_node_group: 'snmp',
|
167
|
+
influxdb_database: 'snmp'
|
168
|
+
}
|
169
|
+
tags.delete_if { |_k, v| v.nil? }
|
170
|
+
|
171
|
+
tags
|
172
|
+
end
|
173
|
+
|
174
|
+
def unlock_device
|
175
|
+
device = Telemetry::Snmp::Data::Model::DeviceLock[device_id: @id]
|
176
|
+
return true if device.nil?
|
177
|
+
|
178
|
+
device.delete
|
179
|
+
end
|
180
|
+
|
181
|
+
def worker_name
|
182
|
+
"#{::Socket.gethostname.tr('.', '_')}.#{::Process.pid}.#{Thread.current.object_id}"
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
data/lib/telemetry/snmp.rb
CHANGED
@@ -7,6 +7,7 @@ require 'telemetry/snmp/data'
|
|
7
7
|
require 'telemetry/snmp/client'
|
8
8
|
require 'telemetry/snmp/publisher'
|
9
9
|
require 'telemetry/snmp/collector'
|
10
|
+
require 'telemetry/snmp/device_collector'
|
10
11
|
|
11
12
|
module Telemetry
|
12
13
|
module Snmp
|
@@ -18,6 +19,30 @@ module Telemetry
|
|
18
19
|
Telemetry::Snmp::Client.load_mibs
|
19
20
|
Telemetry::Snmp::Publisher.start!
|
20
21
|
Telemetry::Logger.info 'Telemetry::Snmp bootstrapped!'
|
22
|
+
start_expire_devices
|
23
|
+
start_collection
|
24
|
+
end
|
25
|
+
|
26
|
+
def start_expire_devices
|
27
|
+
@expire_devices_task = Concurrent::TimerTask.new(execution_interval: 300, timeout_interval: 10) do
|
28
|
+
Telemetry::Snmp::Collector.unlock_expired_devices
|
29
|
+
end
|
30
|
+
@expire_devices_task.execute
|
31
|
+
end
|
32
|
+
|
33
|
+
def stop_expire_devices
|
34
|
+
@expire_devices_task.stop
|
35
|
+
end
|
36
|
+
|
37
|
+
def start_collection
|
38
|
+
@collection_task = Concurrent::TimerTask.new(execution_interval: 10, timeout_interval: 300) do
|
39
|
+
Telemetry::Snmp::Collector.loop_devices
|
40
|
+
end
|
41
|
+
@collection_task.execute
|
42
|
+
end
|
43
|
+
|
44
|
+
def stop_collection
|
45
|
+
@collection_task.stop
|
21
46
|
end
|
22
47
|
end
|
23
48
|
end
|
data/telemetry-snmp.gemspec
CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_dependency 'concurrent-ruby', '>= 1.1.7'
|
28
28
|
spec.add_dependency 'concurrent-ruby-ext', '>= 1.1.7'
|
29
29
|
spec.add_dependency 'connection_pool', '>= 2.2.3'
|
30
|
+
spec.add_dependency 'elastic-apm'
|
30
31
|
spec.add_dependency 'faraday'
|
31
32
|
spec.add_dependency 'faraday_middleware'
|
32
33
|
spec.add_dependency 'faraday-request-timer'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: telemetry-snmp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Esity
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 2.2.3
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: elastic-apm
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: faraday
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -339,6 +353,8 @@ files:
|
|
339
353
|
- lib/telemetry/snmp/data/migrations/009_create_tag_name_column.rb
|
340
354
|
- lib/telemetry/snmp/data/migrations/010_create_user_audit_table.rb
|
341
355
|
- lib/telemetry/snmp/data/migrations/011_device_locks.rb
|
356
|
+
- lib/telemetry/snmp/data/migrations/012_add_measurement_prefix.rb
|
357
|
+
- lib/telemetry/snmp/data/migrations/013_add_fields_to_devices.rb
|
342
358
|
- lib/telemetry/snmp/data/models/device.rb
|
343
359
|
- lib/telemetry/snmp/data/models/device_cred.rb
|
344
360
|
- lib/telemetry/snmp/data/models/device_lock.rb
|
@@ -348,6 +364,7 @@ files:
|
|
348
364
|
- lib/telemetry/snmp/data/models/oid_walk.rb
|
349
365
|
- lib/telemetry/snmp/data/models/user.rb
|
350
366
|
- lib/telemetry/snmp/data/models/user_audit_log.rb
|
367
|
+
- lib/telemetry/snmp/device_collector.rb
|
351
368
|
- lib/telemetry/snmp/mibs/AGENTX-MIB.txt
|
352
369
|
- lib/telemetry/snmp/mibs/AIRPORT-BASESTATION-3-MIB.txt
|
353
370
|
- lib/telemetry/snmp/mibs/BRIDGE-MIB.txt
|