hrr_rb_netconf 0.2.0 → 0.2.1

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
  SHA256:
3
- metadata.gz: cc382a39772eb64eb2b49d6b2d2361f9f699b015f8905c48cff4ac04b06cb41a
4
- data.tar.gz: 45196289a679e2a4ba86c08f721f01a538d6eeafa4741512bc1f97a3278b8173
3
+ metadata.gz: fd342f37e0e13f7459c4de78725b3ef7ede91625be95a97149ac380e3074d458
4
+ data.tar.gz: d93a52b7e3b511f2724d8fcc8b2021713800f301a68d8cb44fdc196f6cd0a5b3
5
5
  SHA512:
6
- metadata.gz: 80d4339932ed79b121315f6cdcd1ee7b0c88cdc19f4eca8d682d9667fa4c0f4d163c282e6c73d63eb3cb895f8e1a9b2d189e79f4b398b0f7e3267ffe5e48c491
7
- data.tar.gz: 8b9a3ae249db4bd51b93b84804aee99ad7fd64e827ff5146fc6d6ae04258c9173dd32a004b985a0de899ac0909837aef9a4a3b183d3764a92aceef3676e79b9c
6
+ metadata.gz: 499d26b160c49904e7f6b9e6cbde6952e273c3f238bb55f8f48c2fa36620a2e7f32e8bd30677441652713321b494a30bcae86df85b8494a40be2e4a56a7b0b40
7
+ data.tar.gz: 78f35c4f9fb0fee405b7546558997ae20ae037876328792cd3b0bea49afc12c8d8a938371db8fe2a807698cc885ca98e262884b3d6017db1ecd74f5672cb9e14
data/.gitignore CHANGED
@@ -22,7 +22,4 @@ Gemfile.lock
22
22
  .ruby-gemset
23
23
 
24
24
  # additional
25
- .DS_Store
26
- *~
27
- *.swp
28
25
  /yang/
data/README.md CHANGED
@@ -71,25 +71,27 @@ Where, the `datastore` variable is an instance of `HrrRbNetconf::Server::Datasto
71
71
 
72
72
  #### Logging
73
73
 
74
- The library provides logging functionality. To enable logging of the library, initialize `HrrRbNetconf::Logger` class.
74
+ The library provides logging functionality. To enable logging in the library, give a `logger` to `Server.new`.
75
75
 
76
76
  ```ruby
77
- HrrRbNetconf::Logger.initialize logger
77
+ HrrRbNetconf::Server.new datastore, logger: logger
78
78
  ```
79
79
 
80
- Where, the `logger` variable can be an instance of standard Logger class or user-defined logger class. What `HrrRbNetconf::Logger` class requires for `logger` variable is that the `logger` instance responds to `#fatal`, `#error`, `#warn`, `#info` and `#debug`.
81
-
82
- For instance, `logger` variable can be prepared like below.
80
+ Where, the `logger` variable can be an instance of standard Logger class or user-defined logger class. What the library requires for `logger` variable is that the `logger` instance responds to `#fatal`, `#error`, `#warn`, `#info` and `#debug` with the following syntax.
83
81
 
84
82
  ```ruby
85
- logger = Logger.new STDOUT
86
- logger.level = Logger::INFO
83
+ logger.fatal(progname){ message }
84
+ logger.error(progname){ message }
85
+ logger.warn(progname){ message }
86
+ logger.info(progname){ message }
87
+ logger.debug(progname){ message }
87
88
  ```
88
89
 
89
- To disable logging, you can un-initialize `HrrRbNetconf::Logger`.
90
+ For instance, `logger` variable can be prepared like below.
90
91
 
91
92
  ```ruby
92
- HrrRbNetconf::Logger.uninitialize
93
+ logger = Logger.new STDOUT
94
+ logger.level = Logger::INFO
93
95
  ```
94
96
 
95
97
  #### Handling datastore operations
@@ -220,7 +222,7 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/hirura
220
222
 
221
223
  ## Code of Conduct
222
224
 
223
- Everyone interacting in the HrrRbNetconf projects codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/hirura/hrr_rb_netconf/blob/master/CODE_OF_CONDUCT.md).
225
+ Everyone interacting in the HrrRbNetconf project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/hirura/hrr_rb_netconf/blob/master/CODE_OF_CONDUCT.md).
224
226
 
225
227
  ## License
226
228
 
@@ -12,8 +12,16 @@ rescue LoadError
12
12
  end
13
13
 
14
14
 
15
+ class MyLoggerFormatter < ::Logger::Formatter
16
+ def call severity, time, progname, msg
17
+ "%s, [%s#%d.%x] %5s -- %s: %s\n" % [severity[0..0], format_datetime(time), Process.pid, Thread.current.object_id, severity, progname, msg2str(msg)]
18
+ end
19
+ end
20
+
21
+
15
22
  logger = Logger.new STDOUT
16
23
  logger.level = Logger::DEBUG
24
+ logger.formatter = MyLoggerFormatter.new
17
25
 
18
26
  datastore = HrrRbNetconf::Server::Datastore.new('dummy', logger: logger){ |db, session, oper_handler|
19
27
  begin
@@ -20,8 +20,16 @@ rescue LoadError
20
20
  end
21
21
 
22
22
 
23
+ class MyLoggerFormatter < ::Logger::Formatter
24
+ def call severity, time, progname, msg
25
+ "%s, [%s#%d.%x] %5s -- %s: %s\n" % [severity[0..0], format_datetime(time), Process.pid, Thread.current.object_id, severity, progname, msg2str(msg)]
26
+ end
27
+ end
28
+
29
+
23
30
  logger = Logger.new STDOUT
24
31
  logger.level = Logger::DEBUG
32
+ logger.formatter = MyLoggerFormatter.new
25
33
 
26
34
 
27
35
  db = '<root />'
@@ -68,8 +68,16 @@ class SessionOrientedDatabase
68
68
  end
69
69
 
70
70
 
71
+ class MyLoggerFormatter < ::Logger::Formatter
72
+ def call severity, time, progname, msg
73
+ "%s, [%s#%d.%x] %5s -- %s: %s\n" % [severity[0..0], format_datetime(time), Process.pid, Thread.current.object_id, severity, progname, msg2str(msg)]
74
+ end
75
+ end
76
+
77
+
71
78
  logger = Logger.new STDOUT
72
79
  logger.level = Logger::DEBUG
80
+ logger.formatter = MyLoggerFormatter.new
73
81
 
74
82
 
75
83
  db = SessionOrientedDatabase.new
@@ -33,8 +33,16 @@ class SessionlessDatabase
33
33
  end
34
34
 
35
35
 
36
+ class MyLoggerFormatter < ::Logger::Formatter
37
+ def call severity, time, progname, msg
38
+ "%s, [%s#%d.%x] %5s -- %s: %s\n" % [severity[0..0], format_datetime(time), Process.pid, Thread.current.object_id, severity, progname, msg2str(msg)]
39
+ end
40
+ end
41
+
42
+
36
43
  logger = Logger.new STDOUT
37
44
  logger.level = Logger::DEBUG
45
+ logger.formatter = MyLoggerFormatter.new
38
46
 
39
47
 
40
48
  db = SessionlessDatabase.new
@@ -22,11 +22,12 @@ module HrrRbNetconf
22
22
  SESSION_ID_MAX = 2**32 - 1
23
23
  SESSION_ID_MODULO = SESSION_ID_MAX - SESSION_ID_MIN + 1
24
24
 
25
- def initialize datastore, capabilities: nil, strict_capabilities: false, logger: nil
25
+ def initialize datastore, capabilities: nil, strict_capabilities: false, enable_filter: true, logger: nil
26
26
  self.logger = logger
27
27
  @datastore = datastore
28
28
  @capabilities = capabilities || Capabilities.new(logger: logger)
29
29
  @strict_capabilities = strict_capabilities
30
+ @enable_filter = enable_filter
30
31
  @mutex = Mutex.new
31
32
  @sessions = Hash.new
32
33
  @locks = Hash.new
@@ -57,14 +58,11 @@ module HrrRbNetconf
57
58
  @mutex.synchronize do
58
59
  session_id = allocate_session_id
59
60
  log_info { "Session ID: #{session_id}" }
60
- @sessions[session_id] = Session.new self, @capabilities, @datastore, session_id, io, @strict_capabilities, logger: logger
61
+ @sessions[session_id] = Session.new self, @capabilities, @datastore, session_id, io, @strict_capabilities, @enable_filter, logger: logger
61
62
  end
62
63
  @sessions[session_id].start
63
64
  rescue => e
64
- log_error { "Session terminated: Session ID: #{session_id}" }
65
- raise
66
- else
67
- log_info { "Session closed: Session ID: #{session_id}" }
65
+ log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
68
66
  ensure
69
67
  @lock_mutex.synchronize do
70
68
  @locks.delete_if{ |tgt, sid| sid == session_id }
@@ -72,6 +70,7 @@ module HrrRbNetconf
72
70
  @mutex.synchronize do
73
71
  delete_session session_id
74
72
  end
73
+ log_info { "Session closed: Session ID: #{session_id}" }
75
74
  end
76
75
  end
77
76
 
@@ -50,7 +50,7 @@ module HrrRbNetconf
50
50
  unless @info.kind_of? Hash
51
51
  raise ArgumentError.new "error-info arg must be a kind of Hash, but given #{@info.class}"
52
52
  end
53
- unless self.class::INFO.all?{ |e| @info[e] }
53
+ unless self.class::INFO.all?{ |k| @info.has_key? k }
54
54
  raise ArgumentError.new "error-info arg must contain #{self.class::INFO} as keys, but given #{@info}"
55
55
  end
56
56
  end
@@ -27,7 +27,7 @@ module HrrRbNetconf
27
27
  def filter raw_output_e, input_e
28
28
  filter_e = input_e.elements['filter']
29
29
  if filter_e
30
- filter_type = filter_e.attributes['type']
30
+ filter_type = filter_e.attributes['type'] || 'subtree'
31
31
  if self[filter_type]
32
32
  self[filter_type].filter raw_output_e, filter_e
33
33
  else
@@ -10,12 +10,13 @@ module HrrRbNetconf
10
10
  class Operation
11
11
  include Loggable
12
12
 
13
- def initialize session, capabilities, datastore_session, strict_capabilities, logger: nil
13
+ def initialize session, capabilities, datastore_session, strict_capabilities, enable_filter, logger: nil
14
14
  self.logger = logger
15
15
  @session = session
16
16
  @capabilities = capabilities
17
17
  @datastore_session = datastore_session
18
18
  @strict_capabilities = strict_capabilities
19
+ @enable_filter = enable_filter
19
20
  @models = Hash.new
20
21
  @oper_procs = Hash.new
21
22
 
@@ -83,7 +84,11 @@ module HrrRbNetconf
83
84
  else
84
85
  raise "Unexpected output: #{raw_output.inspect}"
85
86
  end
86
- output_e = Filter.filter(raw_output_e, input_e)
87
+ if @enable_filter
88
+ output_e = Filter.filter(raw_output_e, input_e)
89
+ else
90
+ output_e = raw_output_e
91
+ end
87
92
  rpc_reply_e = xml_doc.clone
88
93
  rpc_reply_e.name = "rpc-reply"
89
94
  rpc_reply_e.add output_e
@@ -18,7 +18,7 @@ module HrrRbNetconf
18
18
 
19
19
  attr_reader :session_id
20
20
 
21
- def initialize server, capabilities, datastore, session_id, io, strict_capabilities, logger: nil
21
+ def initialize server, capabilities, datastore, session_id, io, strict_capabilities, enable_filter, logger: nil
22
22
  self.logger = logger
23
23
  @server = server
24
24
  @local_capabilities = capabilities
@@ -34,6 +34,7 @@ module HrrRbNetconf
34
34
  raise ArgumentError, "io must be an instance of IO or Array"
35
35
  end
36
36
  @strict_capabilities = strict_capabilities
37
+ @enable_filter = enable_filter
37
38
  @closed = false
38
39
  @notification_enabled = false
39
40
  @monitor = Monitor.new
@@ -127,7 +128,7 @@ module HrrRbNetconf
127
128
 
128
129
  def operation_loop
129
130
  datastore_session = @datastore.new_session self
130
- operation = Operation.new self, @capabilities, datastore_session, @strict_capabilities, logger: logger
131
+ operation = Operation.new self, @capabilities, datastore_session, @strict_capabilities, @enable_filter, logger: logger
131
132
 
132
133
  begin
133
134
  loop do
@@ -140,7 +141,7 @@ module HrrRbNetconf
140
141
  rpc_reply_e.add_namespace("urn:ietf:params:xml:ns:netconf:base:1.0")
141
142
  rpc_reply_e.add e.to_rpc_error
142
143
  rescue => e
143
- log_error { e.message }
144
+ log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
144
145
  raise
145
146
  end
146
147
  @monitor.synchronize do
@@ -151,7 +152,7 @@ module HrrRbNetconf
151
152
  rpc_reply_e.name = "rpc-reply"
152
153
  rpc_reply_e.add e.to_rpc_error
153
154
  rescue => e
154
- log_error { e.message }
155
+ log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
155
156
  raise
156
157
  ensure
157
158
  begin
@@ -2,5 +2,5 @@
2
2
  # vim: et ts=2 sw=2
3
3
 
4
4
  module HrrRbNetconf
5
- VERSION = "0.2.0"
5
+ VERSION = "0.2.1"
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hrr_rb_netconf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - hirura
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-11 00:00:00.000000000 Z
11
+ date: 2020-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hrr_rb_relaxed_xml