apscanner 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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