apscanner 1.0.0 → 1.1.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1b54660d1fd088dc9ce7842f06a72cae042836b9
4
- data.tar.gz: f9e183125d770824637dc9b74e27ef10a679e4d1
3
+ metadata.gz: b33cb59b6b8ec81b5980993dc67d4ea78cf7994e
4
+ data.tar.gz: d18e543c5ac23b6a7dc39ebcde258695e6344ebf
5
5
  SHA512:
6
- metadata.gz: 37b30665d129ed274792bfa9bb5c2f88efb01b26f01107b1b1d4fc058b8a9cb3098981954ea792e820fc340580b64876b813b71f15f3030fa7979d3f4ea903ff
7
- data.tar.gz: 641a7a0c9c01b652347045d4cc78bc0a18b9e03e4abb074b72c8b6b1453dce141343ecd8f7bd02740aac54d113f3a46cf6aae45126be0c6b39f899daeae4ea29
6
+ metadata.gz: fc2bc9d0510fe82bdae6aabf99f780a5d695910150da244d9af474a5cfd309b959bc5a43ef618869b12482a610d6104f834854978a0c37ad474e517001914254
7
+ data.tar.gz: f28722c4d72b17c434d497597632aa34f2f97142748c4c526139d82e99e7a805b520425bd68c996bff0e82405b67876852fc821d0011e72f8b060cce9d818ddf
data/lib/apscanner.rb CHANGED
@@ -1,12 +1,14 @@
1
1
  require 'apscanner/loggable'
2
2
  require 'apscanner/scanner'
3
3
  require 'apscanner/entities/snmp_manager'
4
+ require 'apscanner/entities/snmp_parser'
4
5
  require 'apscanner/entities/sensor'
5
6
  require 'apscanner/entities/access_point'
6
7
 
7
8
  require 'snmp4em'
8
9
  require 'json'
9
10
  require 'logger'
11
+ require 'pry'
10
12
 
11
13
  module Apscanner
12
14
  extend Loggable
@@ -6,8 +6,9 @@ module Apscanner
6
6
  mac: '1.3.6.1.4.1.9.9.513.1.1.1.1.2'
7
7
  },
8
8
  meraki: {
9
- name: '1.3.6.1.4.1.29671.1.1.4.1.1',
10
- mac: '1.3.6.1.4.1.29671.1.1.4.1.2'
9
+ system: '1.3.6.1.4.1.29671.1.1.4.1',
10
+ mac: '1.3.6.1.4.1.29671.1.1.4.1.1',
11
+ name: '1.3.6.1.4.1.29671.1.1.4.1.2'
11
12
  }
12
13
  }.freeze
13
14
 
@@ -17,12 +18,16 @@ module Apscanner
17
18
 
18
19
  def run
19
20
  response = request_by_type
20
- return [] if response.empty?
21
- parse(response, SNMP_OID[@sensor.type])
21
+ return [] if empty?(response)
22
+ SnmpParser.new(response, @sensor.type).run
22
23
  end
23
24
 
24
25
  private
25
26
 
27
+ def empty?(response)
28
+ response.empty? || response.values.uniq == [{}]
29
+ end
30
+
26
31
  def manager
27
32
  SNMP4EM::Manager.new(
28
33
  host: @sensor.ip_address,
@@ -33,11 +38,16 @@ module Apscanner
33
38
  )
34
39
  end
35
40
 
41
+ def oids(type)
42
+ oids = SNMP_OID[type].values
43
+ type == :wlc ? oids : [oids.first]
44
+ end
45
+
36
46
  def discover
37
47
  response = {}
38
- SNMP_OID.each do |type, oids|
39
- response = request(oids.values)
40
- unless response.empty?
48
+ SNMP_OID.keys.each do |type|
49
+ response = request(oids(type))
50
+ unless empty?(response)
41
51
  @sensor.type = type
42
52
  break
43
53
  end
@@ -47,7 +57,7 @@ module Apscanner
47
57
 
48
58
  def request_by_type
49
59
  if SNMP_OID.keys.include?(@sensor.type)
50
- request(SNMP_OID[@sensor.type].values)
60
+ request(oids(@sensor.type))
51
61
  else
52
62
  discover
53
63
  end
@@ -69,22 +79,6 @@ module Apscanner
69
79
  end
70
80
  end
71
81
  response
72
- end
73
-
74
- def parse(response, oids)
75
- access_points = []
76
- response[oids[:mac]].each do |oid, value|
77
- ap_oid = oid.gsub("#{oids[:mac]}.", '')
78
- access_points << AccessPoint.new(
79
- name: response[oids[:name]][oids[:name] + '.' + ap_oid],
80
- mac_address: parse_mac(value)
81
- )
82
- end
83
- access_points
84
- end
85
-
86
- def parse_mac(mac)
87
- mac.unpack('H2H2H2H2H2H2').join(':').upcase
88
- end
82
+ end
89
83
  end
90
84
  end
@@ -1,7 +1,46 @@
1
1
  module Apscanner
2
2
  class SnmpParser
3
- def initialize(sensor)
4
- @sensor = sensor
3
+ def initialize(response, type)
4
+ @response = response
5
+ @type = type
6
+ @oids = SnmpManager::SNMP_OID[type]
7
+ end
8
+
9
+ def run
10
+ send("parse_#{@type}")
11
+ end
12
+
13
+ private
14
+
15
+ def parse_wlc
16
+ parse
17
+ end
18
+
19
+ def parse_meraki
20
+ parsed_response = {
21
+ @oids[:mac] => @response[@oids[:system]].select do |k, _|
22
+ k.include?("#{@oids[:mac]}.")
23
+ end,
24
+ @oids[:name] => @response[@oids[:system]].select do |k, _|
25
+ k.include?("#{@oids[:name]}.")
26
+ end
27
+ }
28
+ @response = parsed_response
29
+ parse
30
+ end
31
+
32
+ def parse
33
+ @response[@oids[:mac]].map do |oid, value|
34
+ ap_oid = oid.gsub("#{@oids[:mac]}.", '')
35
+ AccessPoint.new(
36
+ name: @response[@oids[:name]][@oids[:name] + '.' + ap_oid],
37
+ mac_address: parse_mac(value)
38
+ )
39
+ end
40
+ end
41
+
42
+ def parse_mac(mac)
43
+ mac.unpack('H2H2H2H2H2H2').join(':').upcase
5
44
  end
6
45
  end
7
46
  end
@@ -1,3 +1,3 @@
1
1
  module Apscanner
2
- VERSION = '1.0.0'.freeze
2
+ VERSION = '1.1.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apscanner
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julio J Garcia Perez
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-03-07 00:00:00.000000000 Z
11
+ date: 2016-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: snmp4em
43
57
  requirement: !ruby/object:Gem::Requirement