snmp-open 0.5.0 → 0.6.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
- SHA1:
3
- metadata.gz: 67cb5790febed285507e8f2872aa8dbb3f025a02
4
- data.tar.gz: d1504724d8f8572a03624bca255d10757636d40f
2
+ SHA256:
3
+ metadata.gz: 1362f32d8e43b509be4884b392c43689b9cba48c2e2d6f63c4912e645ba6fcc9
4
+ data.tar.gz: d751cce9e00204ae0b0d131120338ce3b7beaf1bbfb2e71f114c60f8c9bfdfa8
5
5
  SHA512:
6
- metadata.gz: fff2fcd5e4c3a42d921112c4d0f36e96914b037aee168c73b2981796375597e82e7564352030cd0860043c40f24e61a7e44cd8fe3ae7b7f481b7c60e4d973631
7
- data.tar.gz: 240aebb9fd9938b76a1d0bc37e56c77d70eb8cd5958a73f952b1766df793c8baabf43a437b0a0207c0c391ea5648018c7948c9ad92572f6b2cabb5555fb67492
6
+ metadata.gz: 51603c2ee2b8d5077be2dcc8f26b74ad174d09a31fe6b6879343d98b33bba5f30f6246cf2ac3999f3a3aa46fda3b5cf7f849310016de5725cbdd0574741af99c
7
+ data.tar.gz: 2670576c9373c22e74e5bc7a118317ffdefb33d685ef654236e1ec5f369f9ac772d619ff7cfba3e8532ba52a5fc3b0d52bc67439cbeb96d84a08d6cc36f40819
@@ -0,0 +1,24 @@
1
+ name: Ruby
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ test:
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ os: [ubuntu-latest, macos-latest]
15
+ ruby: [2.4, 2.5, 2.6, 2.7, jruby, truffleruby]
16
+ runs-on: ${{ matrix.os }}
17
+ steps:
18
+ - uses: actions/checkout@v2
19
+ - uses: ruby/setup-ruby@v1
20
+ with:
21
+ ruby-version: ${{ matrix.ruby }}
22
+ bundler-cache: true
23
+ - name: Run tests
24
+ run: bundle exec rake
@@ -0,0 +1,2 @@
1
+ Style/CommentedKeyword:
2
+ Enabled: false
@@ -30,8 +30,7 @@ module SNMP
30
30
  else
31
31
  Open3.capture3(cli(cmd, oid, options))
32
32
  end
33
- raise CommandTimeoutError, err.chomp if err =~ /^timeout/i
34
- raise CommandError, err.chomp unless err.empty?
33
+ raise_capture_errors(err)
35
34
  out
36
35
  end
37
36
 
@@ -42,6 +41,7 @@ module SNMP
42
41
  [
43
42
  command,
44
43
  *options.map { |k, v| "#{k}#{v}" },
44
+ *oid_options(id),
45
45
  *@host_options.map { |k, v| "#{k}#{v}" },
46
46
  *@command_options.fetch(command, {}).map { |k, v| "#{k}#{v}" },
47
47
  *id
@@ -50,6 +50,19 @@ module SNMP
50
50
 
51
51
  private
52
52
 
53
+ def raise_capture_errors(err)
54
+ case err
55
+ when /^Cannot find module \(([^)]+)\)/
56
+ raise UnknownMIBError, "Unknown MIB: #{Regexp.last_match(1)}"
57
+ when /^(\S+): Unknown Object Identifier$/
58
+ raise UnknownOIDError, "Unknown OID: #{Regexp.last_match(1)}"
59
+ when /^timeout/i
60
+ raise CommandTimeoutError, err.chomp
61
+ when /./
62
+ raise CommandError, err.chomp
63
+ end
64
+ end
65
+
53
66
  def merge_options(options = {})
54
67
  options.each_pair.with_object({}) do |(key, value), opts|
55
68
  if Options::MAP.key?(key)
@@ -63,6 +76,15 @@ module SNMP
63
76
  end
64
77
  end
65
78
 
79
+ # if the request OID is all-numeric, force numeric OID in the output
80
+ def oid_options(id)
81
+ if id =~ /[^0-9.]/
82
+ []
83
+ else
84
+ ['-On']
85
+ end
86
+ end
87
+
66
88
  def normalize_command(command)
67
89
  case command
68
90
  when Symbol then "snmp#{command}"
@@ -100,5 +122,7 @@ module SNMP
100
122
 
101
123
  class CommandError < RuntimeError; end
102
124
  class CommandTimeoutError < CommandError; end
125
+ class UnknownMIBError < CommandError; end
126
+ class UnknownOIDError < CommandError; end
103
127
  end # class Open
104
128
  end # module SNMP
@@ -24,12 +24,10 @@ module SNMP
24
24
  host: nil
25
25
  }.freeze
26
26
 
27
- # On some systems, SNMP command outputs will include symbolic OID names,
28
- # symbolic values, and/or value units. The parser doesn't support these,
29
- # so disable them.
27
+ # On some systems, SNMP command outputs will include symbolic values
28
+ # and/or value units. The parser doesn't support these, so disable them.
30
29
  REQUIRED_BY_PARSER = {
31
30
  '-Oe' => nil,
32
- '-On' => nil,
33
31
  '-OU' => nil
34
32
  }.freeze
35
33
 
@@ -14,6 +14,7 @@ module SNMP
14
14
  # convert SNMP command output into arrays
15
15
  class Parser
16
16
  include SNMP::Open::Parser::Constants
17
+ OID_RE = Regexp.union(/\S+-MIB::\S+/, /[0-9\.]+/)
17
18
 
18
19
  def initialize(oids)
19
20
  @oids = oids
@@ -21,12 +22,8 @@ module SNMP
21
22
 
22
23
  def parse(texts)
23
24
  columns = texts.map do |text|
24
- tokenized =
25
- text
26
- .gsub(/^([0-9\.]+) = (Opaque|STRING): ((?!")[^\n]*)\n/,
27
- %(\\1 = \\2: "\\3"\n))
28
- .gsub(Static::ANY_MESSAGE, Static::QUOTED_MESSAGES)
29
- .shellsplit
25
+ clean = clean_input_text(text)
26
+ tokenized = clean.shellsplit
30
27
  parse_tokens(tokenized)
31
28
  end
32
29
 
@@ -47,6 +44,16 @@ module SNMP
47
44
  end
48
45
  end
49
46
 
47
+ def clean_input_text(text)
48
+ text
49
+ .gsub(/\r\n|\n\r|\r/, "\n")
50
+ .gsub(/^(#{OID_RE})\s*=\s*(Opaque|STRING):\s*\n/,
51
+ %(\\1 = \\2: ""\n))
52
+ .gsub(/^(#{OID_RE}) = (Opaque|STRING): ((?!")[^\n]*)\n/,
53
+ %(\\1 = \\2: "\\3"\n))
54
+ .gsub(Static::ANY_MESSAGE, Static::QUOTED_MESSAGES)
55
+ end
56
+
50
57
  def index_using_first_oid(value)
51
58
  base = @oids.first
52
59
 
@@ -69,12 +76,12 @@ module SNMP
69
76
 
70
77
  objects
71
78
  rescue StopIteration
72
- return objects
79
+ objects
73
80
  end
74
81
 
75
82
  def parse_next_object(tokens)
76
83
  oid = tokens.next.sub(/\A\./, '')
77
- raise "Parse error at #{oid}" unless oid =~ /\A[0-9.]+\z/
84
+ raise "Parse error at #{oid}" unless oid =~ OID_RE
78
85
  equals = tokens.next
79
86
  raise "Parse error after #{oid}" unless equals == '='
80
87
  type, value = parse_type(tokens)
@@ -1,5 +1,5 @@
1
1
  module SNMP
2
2
  class Open
3
- VERSION = '0.5.0'.freeze
3
+ VERSION = '0.6.0'.freeze
4
4
  end
5
5
  end
@@ -1,4 +1,4 @@
1
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
  require 'snmp/open/version'
4
4
 
@@ -18,8 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_development_dependency 'bundler', '~> 1.11'
22
- spec.add_development_dependency 'rake', '~> 10.0'
21
+ spec.add_development_dependency 'bundler', '~> 2.2'
22
+ spec.add_development_dependency 'rake', '~> 13.0'
23
23
  spec.add_development_dependency 'rspec', '~> 3.0'
24
24
  spec.add_development_dependency 'snmp'
25
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snmp-open
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Miller
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-14 00:00:00.000000000 Z
11
+ date: 2020-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.11'
19
+ version: '2.2'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.11'
26
+ version: '2.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '13.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '13.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -66,16 +66,17 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- description:
69
+ description:
70
70
  email:
71
71
  - bmiller@rackspace.com
72
72
  executables: []
73
73
  extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
+ - ".github/workflows/ruby.yml"
76
77
  - ".gitignore"
77
78
  - ".rspec"
78
- - ".travis.yml"
79
+ - ".rubocop.yml"
79
80
  - CODE_OF_CONDUCT.md
80
81
  - Gemfile
81
82
  - Guardfile
@@ -98,7 +99,7 @@ files:
98
99
  homepage: https://github.com/bjmllr/snmp-open
99
100
  licenses: []
100
101
  metadata: {}
101
- post_install_message:
102
+ post_install_message:
102
103
  rdoc_options: []
103
104
  require_paths:
104
105
  - lib
@@ -113,9 +114,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
114
  - !ruby/object:Gem::Version
114
115
  version: '0'
115
116
  requirements: []
116
- rubyforge_project:
117
- rubygems_version: 2.5.2.2
118
- signing_key:
117
+ rubygems_version: 3.1.2
118
+ signing_key:
119
119
  specification_version: 4
120
120
  summary: Wrapper for command-line SNMP utilities
121
121
  test_files: []
@@ -1,7 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.4.1
5
- - 2.3.4
6
- - 2.2.7
7
- before_install: gem install bundler -v 1.13.6