hrr_rb_netconf 0.2.0 → 0.2.1

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
  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