snmp_table_viewer 0.0.4

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9db3534a0e0d11c1747bd4f2edbc2d98990fd1ed
4
+ data.tar.gz: f0302013da02ee45a7712a22524029ed73bdf039
5
+ SHA512:
6
+ metadata.gz: 5ba88ae246f5ef4c89703d4760fefb11f20185466e9225b4b18dfcf8d371e43d0d5cf5a690e461e90cbcbc34a433c2fdacd5b834a3b2219b6dcaaf9184eef829
7
+ data.tar.gz: 077a5ec639f89fd10ddb13a7958f8164487229d4a6f3a622732b2e10f41ac6b2d494bc4e241a6a0379663802270aff29e5ece6d36940eb497d026b3be8e8c486
data/.codeclimate.yml ADDED
@@ -0,0 +1,21 @@
1
+ engines:
2
+ duplication:
3
+ enabled: true
4
+ config:
5
+ languages:
6
+ ruby:
7
+ mass_threshold: 20
8
+ fixme:
9
+ enabled: true
10
+ rubocop:
11
+ enabled: true
12
+ ratings:
13
+ paths:
14
+ - app/**/*
15
+ - lib/**/*
16
+ exclude_paths: # customize
17
+ - .bundle/
18
+ - doc/
19
+ - spec/
20
+ - tmp/
21
+
data/.gitignore ADDED
@@ -0,0 +1,27 @@
1
+ # Because this is a gem, ignore Gemfile.lock:
2
+
3
+ Gemfile.lock
4
+
5
+ # And because this is Ruby, ignore the following
6
+ # (source: https://github.com/github/gitignore/blob/master/Ruby.gitignore):
7
+
8
+ todo.txt
9
+ *.gem
10
+ *.rbc
11
+ .bundle
12
+ .config
13
+ coverage
14
+ InstalledFiles
15
+ lib/bundler/man
16
+ pkg
17
+ rdoc
18
+ spec/reports
19
+ test/tmp
20
+ test/version_tmp
21
+ tmp
22
+ gemfiles/*.lock
23
+
24
+ # YARD artifacts
25
+ .yardoc
26
+ _yardoc
27
+ doc/
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format documentation
3
+ --require spec_helper
data/.travis.yml ADDED
@@ -0,0 +1,15 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.3.0
4
+ - 2.3.1
5
+ - 2.4.0
6
+ gemfile:
7
+ - Gemfile
8
+ branches:
9
+ only:
10
+ - master
11
+ - staging
12
+ - /gh(?:\d)+(?:-.+)?/
13
+ - /dev_ver_\d+\.\d+/
14
+ before_install: gem update bundler
15
+ script: rake ci:travis
data/CHANGELOG.md ADDED
@@ -0,0 +1,11 @@
1
+ ## Version 0.0.4
2
+
3
+ * Rename gem to snmp_table_viewer
4
+
5
+ ## Version 0.0.3
6
+
7
+ * Fetcher.fetch is now a class mehtod called from_snmp
8
+
9
+ ## Version 0.0.1
10
+
11
+ * Gemification of a personal utility
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in osm.gemspec
4
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,9 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'rspec', all_on_start: true, all_after_pass: true do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
7
+ watch(%r{^lib/([^/]+)/(.+)\.rb$}) { |m| "spec/#{m[1]}/#{m[2]}_spec.rb" }
8
+ watch('spec/spec_helper.rb') { "spec" }
9
+ end
data/LICENSE.rdoc ADDED
@@ -0,0 +1,39 @@
1
+ ==Copyright
2
+ Copyright (c) 2017, Robert Gauld. All rights reserved.
3
+
4
+
5
+ ==License
6
+ This code can be used under the BSD License (reproduced below).
7
+ Commiters to the project give Robert Gauld the right to redistribute their commits
8
+ under the BSD license. Should the project be re-licensed and the commiter can not be
9
+ contacted either by the email address accompanying their commits or the project's community
10
+ then Robert Gauld shall have the right to re-license their commits on their behalf.
11
+
12
+ For the purposes of this project the community will be taken to include:
13
+
14
+ - GitHub (make sure you can be contacted through the user name making the commit)
15
+ - The Online Scout Manager forum
16
+
17
+
18
+ ===BSD License
19
+ Redistribution and use in source and binary forms, with or without modification,
20
+ are permitted provided that the following conditions are met:
21
+
22
+ - Redistributions of source code must retain the above copyright notice,
23
+ this list of conditions and the following disclaimer.
24
+ - Redistributions in binary form must reproduce the above copyright notice,
25
+ this list of conditions and the following disclaimer in the documentation and/or
26
+ other materials provided with the distribution.
27
+ - Neither the name of the OSM Extender nor the names of its contributors
28
+ may be used to endorse or promote products derived from this software
29
+ without specific prior written permission.
30
+
31
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
32
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
33
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
34
+ SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
35
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
36
+ OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
37
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
38
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
39
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,83 @@
1
+ [![Gem Version](https://badge.fury.io/rb/snmp_table_viewer.svg)](http://badge.fury.io/rb/snmp_table_viewer)
2
+ [![Dependency Status](https://gemnasium.com/robertgauld/snmp_table_viewer.png)](https://gemnasium.com/robertgauld/snmp_table_viewer)
3
+
4
+ Master branch:
5
+ [![Build Status](https://secure.travis-ci.org/robertgauld/snmp_table_viewer.png?branch=master)](http://travis-ci.org/robertgauld/snmp_table_viewer)
6
+ [![Coveralls Status](https://coveralls.io/repos/robertgauld/snmp_table_viewer/badge.svg?branch=master)](https://coveralls.io/r/robertgauld/snmp_table_viewer)
7
+ [![Code Climate](https://codeclimate.com/github/robertgauld/snmp_table_viewer.png?branch=master)](https://codeclimate.com/github/robertgauld/snmp_table_viewer)
8
+
9
+ Staging branch:
10
+ [![Build Status](https://secure.travis-ci.org/robertgauld/snmp_table_viewer.png?branch=staging)](http://travis-ci.org/robertgauld/snmp_table_viewer)
11
+ [![Coveralls Status](https://coveralls.io/repos/robertgauld/snmp_table_viewer/badge.svg?branch=master)](https://coveralls.io/r/robertgauld/snmp_table_viewer)
12
+ [![Code Climate](https://codeclimate.com/github/robertgauld/snmp_table_viewer.png?branch=staging)](https://codeclimate.com/github/robertgauld/snmp_table_viewer)
13
+
14
+
15
+ ## Build State
16
+ This project uses continuous integration to help ensure that a quality product is delivered.
17
+ Travis CI monitors two branches (versions) of the code - Master (which is what gets released)
18
+ and Staging (which is what is currently being developed ready for moving to master).
19
+
20
+
21
+ ## Ruby Versions
22
+ This gem supports the following versions of ruby, it may work on other versions but is not tested against them so don't rely on it.
23
+
24
+ * 2.3.0
25
+ * 2.3.1
26
+ * 2.4.0
27
+
28
+
29
+ ## SNMP Table Viewer
30
+
31
+ Easily view SNMP tables. The data in the table can be easily converted and formatted in a number of ways.
32
+
33
+
34
+ ## Installation
35
+
36
+ Add to your Gemfile and run the `bundle` command to install it.
37
+
38
+ ```ruby
39
+ gem 'snmp_table_viewer', '~> 0.0'
40
+ ```
41
+
42
+
43
+ ## Executable
44
+
45
+ ```
46
+ Usage: snmp-table-viewer [options]
47
+ -h, -?, --help Prints this help.
48
+ --headings HEADINGS Headings to use in the table (e.g. "A, Bc, D").
49
+ --headings-for TYPE Use headings for this table type (ifTable).
50
+ --format FORMAT How to format the output (table|csv|json|raw) (default table).
51
+ --converter CONVERTER A converter to run on the data before formatting (iftable).
52
+
53
+ SNMP common options:
54
+ -v, --version VERSION SNMP version to use (1|2|3|) (default 3).
55
+ --host HOST The host to connect to.
56
+ --port PORT p PORT
57
+ SNMP port to connect to (default 161).
58
+ --base-oid OID The oid at the start of the table. Can by dotted numbers or ifTable
59
+
60
+ SNMP version 1 and 2 options:
61
+ -c, --comunity COMMUNITY SNMP comunity (default "public").
62
+
63
+ SNMP version 3 options:
64
+ -u, --user, --username USER SNMP user.
65
+ -l, --security-level LEVEL Security level to use (no_auth|auth_no_priv|auth_priv).
66
+ -a AUTH_PROTOCOL, Authentication protocol to use (MD5|SHA) (default MD5).
67
+ --auth-protocol
68
+ -A AUTH_PASSWORD, Authentication password to use.
69
+ --auth-password
70
+ -x PRIV_PROTOCOL, Privacy protocol to use (DES|AES) (default DES).
71
+ --priv-protocol
72
+ -X PRIV_PASSWORD, Privacy password to use.
73
+ --priv-password
74
+
75
+ Table formatter options:
76
+ --[no-]transpose-table Transpose the output table (swap rows and columns).
77
+ ```
78
+
79
+ ## Documentation & Versioning
80
+
81
+ Documentation can be found on [rubydoc.info](http://rubydoc.info/github/robertgauld/snmp_table_viewer/master/frames)
82
+
83
+ We follow the [Semantic Versioning](http://semver.org/) concept,
data/Rakefile ADDED
@@ -0,0 +1,16 @@
1
+ require "rake"
2
+ require "rubygems"
3
+ require "bundler/gem_tasks"
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task default: :spec
9
+
10
+
11
+ namespace :ci do
12
+ desc "Run the Travis CI tests"
13
+ task :travis do
14
+ Rake::Task[:spec].invoke
15
+ end
16
+ end
@@ -0,0 +1,150 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+ require_relative File.join('..', 'lib', 'snmp_table_viewer')
5
+
6
+ def parse_command_line
7
+ options = {
8
+ SNMPTableViewer::Formatter::Table => {
9
+ transpose: false,
10
+ },
11
+ snmp: {
12
+ common: {
13
+ version: 'v3',
14
+ host: 'localhost',
15
+ port: 161,
16
+ },
17
+ 'v1' => {
18
+ community: 'public',
19
+ },
20
+ 'v2' => {
21
+ community: 'public',
22
+ },
23
+ 'v3' => {
24
+ auth_protocol: :md5,
25
+ priv_protocol: :des,
26
+ },
27
+ },
28
+ base_oid: '',
29
+ headings: [],
30
+ formatter: SNMPTableViewer::Formatter::Table,
31
+ }
32
+ headings_for = {
33
+ 'ifTable' => ['Index', 'Descr', 'Type', 'Mtu', 'Speed', 'PhysAddress', 'AdminStatus', 'OperStatus', 'LastChange', 'InOctets', 'InUcastPkts', 'InNUcastkts', 'InDiscards', 'InErrors', 'InUnknownPrortos', 'OutOctets', 'OutUcastPkts', 'OutNUcastPkts', 'OutDiscards', 'OutErrors', 'OutQLen', 'Specific'],
34
+ }
35
+ formatters = {
36
+ 'table' => SNMPTableViewer::Formatter::Table,
37
+ 'csv' => SNMPTableViewer::Formatter::CSV,
38
+ 'json' => SNMPTableViewer::Formatter::JSON,
39
+ 'raw' => SNMPTableViewer::Formatter::Raw,
40
+ }
41
+ converters = {
42
+ 'iftable' => SNMPTableViewer::Converter::IfTable,
43
+ }
44
+ base_oids = {
45
+ 'iftable' => '1.3.6.1.2.1.2.2',
46
+ }
47
+ snmp_version = 'v3'
48
+
49
+ parser = OptionParser.new do |opts|
50
+ opts.banner = "Usage: snmp-table-viewer [options]"
51
+
52
+ opts.on('-h', '--help', '-?', 'Prints this help.') do
53
+ puts opts
54
+ exit
55
+ end
56
+
57
+ opts.on('--headings HEADINGS', Array, 'Headings to use in the table (e.g. "A, Bc, D").') do |v|
58
+ options[:headings] += v.map(&:strip)
59
+ end
60
+
61
+ opts.on('--headings-for TYPE', String, "Use headings for this table type (#{headings_for.keys.join('|')}).") do |v|
62
+ options[:headings] += headings_for[v] || []
63
+ end
64
+
65
+ opts.on('--format FORMAT', String, "How to format the output (#{formatters.keys.join('|')}) (default table).") do |v|
66
+ options[:formatter] = formatters[v.downcase]
67
+ end
68
+
69
+ opts.on('--converter CONVERTER', String, "A converter to run on the data before formatting (#{converters.keys.join('|')}).") do |v|
70
+ options[:converter] = converters[v.downcase]
71
+ end
72
+
73
+
74
+ opts.separator "\nSNMP common options:"
75
+
76
+ opts.on('-vVERSION', '--version VERSION', 'SNMP version to use (1|2|3|) (default 3).') do |version|
77
+ snmp_version = "v#{version}"
78
+ options[:snmp][:common][:version] = snmp_version
79
+ end
80
+
81
+ opts.on('--host HOST', 'The host to connect to.') do |v|
82
+ options[:snmp][:common][:host] = v
83
+ end
84
+
85
+ opts.on('p PORT', '--port PORT', Integer, 'SNMP port to connect to (default 161).') do |v|
86
+ options[:snmp][:common][:port] = v
87
+ end
88
+
89
+ opts.on('--base-oid OID', 'The oid at the start of the table. Can by dotted numbers or ifTable') do |v|
90
+ options[:base_oid] = base_oids[v.downcase] || v
91
+ end
92
+
93
+
94
+
95
+ opts.separator "\nSNMP version 1 and 2 options:"
96
+
97
+ opts.on('-c COMMUNITY', '--comunity COMMUNITY', 'SNMP comunity (default "public").') do |community|
98
+ options[:snmp][snmp_version][:community] = community
99
+ end
100
+
101
+
102
+ opts.separator "\nSNMP version 3 options:"
103
+
104
+ opts.on('-u USER', '--user USER', '--username USER', 'SNMP user.') do |user|
105
+ options[:snmp]['v3'][:username] = user
106
+ end
107
+ opts.on('-l LEVEL', '--security-level LEVEL', 'Security level to use (no_auth|auth_no_priv|auth_priv).') do |level|
108
+ options[:snmp]['v3'][:security_level] = level
109
+ end
110
+ opts.on('-a AUTH_PROTOCOL', '--auth-protocol AUTH_PROTOCOL', 'Authentication protocol to use (MD5|SHA) (default MD5).') do |value|
111
+ options[:snmp]['v3'][:auth_protocol] = value.downcase.to_sym
112
+ end
113
+ opts.on('-A AUTH_PASSWORD', '--auth-password AUTH_PASSWORD', 'Authentication password to use.', String) do |value|
114
+ options[:snmp]['v3'][:auth_password] = value
115
+ end
116
+ opts.on('-x PRIV_PROTOCOL', '--priv-protocol PRIV_PROTOCOL', 'Privacy protocol to use (DES|AES) (default DES).') do |value|
117
+ options[:snmp]['v3'][:priv_protocol] = value.downcase.to_sym
118
+ end
119
+ opts.on('-X PRIV_PASSWORD', '--priv-password PRIV_PASSWORD', 'Privacy password to use.', String) do |value|
120
+ options[:snmp]['v3'][:priv_password] = value
121
+ end
122
+
123
+
124
+ opts.separator "\nTable formatter options:"
125
+ opts.on('--[no-]transpose-table', 'Transpose the output table (swap rows and columns).') do |v|
126
+ options[SNMPTableViewer::Formatter::Table][:transpose] = v
127
+ end
128
+
129
+ end # create parser
130
+
131
+ parser.parse!(ARGV)
132
+ options
133
+ end
134
+
135
+
136
+
137
+
138
+ options = parse_command_line
139
+ snmp_options = options[:snmp][:common].clone
140
+ snmp_options.merge!(options[:snmp][snmp_options[:version]])
141
+
142
+ data = SNMPTableViewer::Fetcher.fetch(base_oid: options[:base_oid], **snmp_options)
143
+
144
+ converter = options[:converter]
145
+ data = converter.convert(data) unless converter.nil?
146
+
147
+ formatter = options[:formatter]
148
+ formatter_options = options[formatter] || {}
149
+ formatter = formatter.new(data: data, headings: options[:headings])
150
+ puts formatter.output(**formatter_options)