fluent-plugin-juniper-telemetry 0.2.11 → 0.3.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c6cababee592eb8a30f399415a1b99eac024fd22
4
+ data.tar.gz: ac660b8de786e4d4ccfb38837659f53e28de6dde
5
+ SHA512:
6
+ metadata.gz: 5da21d83ec990c8ea733fa77ed2958401b892ee61f1da6cff1c05d1298a47b1ce9250c43ce6c9219e33690ef9af8ce25f03ec8ec1f6036d259cbac1d1efca45f
7
+ data.tar.gz: a1353850da699ba1d785f354e6fc28176d81cb37ec5d16643c0f740985741b0f5ddbf99b30b8c1a7334a91e2acee0db30e0801238787a077bc68050cdf8f491d
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ ##
4
+ # This file is auto-generated. DO NOT EDIT!
5
+ #
6
+ require 'protobuf'
7
+
8
+
9
+ ##
10
+ # Imports
11
+ #
12
+ require 'telemetry_top.pb'
13
+
14
+
15
+ ##
16
+ # Message Classes
17
+ #
18
+ class CpuMemoryUtilization < ::Protobuf::Message; end
19
+ class CpuMemoryUtilizationSummary < ::Protobuf::Message; end
20
+ class CpuMemoryUtilizationPerApplication < ::Protobuf::Message; end
21
+
22
+
23
+ ##
24
+ # Message Fields
25
+ #
26
+ class CpuMemoryUtilization
27
+ repeated ::CpuMemoryUtilizationSummary, :utilization, 1
28
+ end
29
+
30
+ class CpuMemoryUtilizationSummary
31
+ optional :string, :name, 1
32
+ optional :uint64, :size, 2
33
+ optional :uint64, :bytes_allocated, 3
34
+ optional :int32, :utilization, 4
35
+ repeated ::CpuMemoryUtilizationPerApplication, :application_utilization, 5
36
+ end
37
+
38
+ class CpuMemoryUtilizationPerApplication
39
+ optional :string, :name, 1
40
+ optional :uint64, :bytes_allocated, 2
41
+ optional :uint64, :allocations, 3
42
+ optional :uint64, :frees, 4
43
+ optional :uint64, :allocations_failed, 5
44
+ end
45
+
46
+
47
+ ##
48
+ # Extended Message Fields
49
+ #
50
+ class ::JuniperNetworksSensors < ::Protobuf::Message
51
+ optional ::CpuMemoryUtilization, :".cpu_memory_util_ext", 1, :extension => true
52
+ end
53
+
@@ -3,13 +3,13 @@
3
3
  ##
4
4
  # This file is auto-generated. DO NOT EDIT!
5
5
  #
6
- require 'protobuf/message'
6
+ require 'protobuf'
7
7
 
8
8
 
9
9
  ##
10
10
  # Imports
11
11
  #
12
- require 'jvision_top.pb'
12
+ require 'telemetry_top.pb'
13
13
 
14
14
 
15
15
  ##
@@ -78,6 +78,6 @@ end
78
78
  # Extended Message Fields
79
79
  #
80
80
  class ::JuniperNetworksSensors < ::Protobuf::Message
81
- optional ::Firewall, :jnpr_firewall_ext, 6, :extension => true
81
+ optional ::Firewall, :".jnpr_firewall_ext", 6, :extension => true
82
82
  end
83
83
 
@@ -1,10 +1,11 @@
1
1
  require 'juniper_telemetry_lib.rb'
2
2
  require 'protobuf'
3
- require 'jvision_top.pb.rb'
3
+ require 'telemetry_top.pb.rb'
4
4
  require 'port.pb.rb'
5
5
  require 'lsp_stats.pb.rb'
6
6
  require 'logical_port.pb.rb'
7
7
  require 'firewall.pb.rb'
8
+ require 'cpu_memory_utilization.pb.rb'
8
9
 
9
10
  module Fluent
10
11
  class TextParser
@@ -58,6 +59,7 @@ module Fluent
58
59
  if sensor == "jnpr_interface_ext"
59
60
 
60
61
  resource = "/junos/system/linecard/interface/"
62
+ $log.debug "Will extract info for Sensor: #{sensor} / Resource #{resource}"
61
63
 
62
64
  datas_sensors[sensor]['interface_stats'].each do |datas|
63
65
 
@@ -123,41 +125,19 @@ module Fluent
123
125
  $log.debug "Unable to parse " + sensor + " sensor, Data Dump : " + datas.inspect.to_s
124
126
  end
125
127
  end
126
- ##############################################################
127
- ### Support for resource /junos/system/linecard/firewall/ ##
128
- ##############################################################
129
- # elsif sensor == "jnpr_firewall_ext"
130
- #
131
- # resource = "/junos/system/linecard/firewall"
132
- #
133
- # datas_sensors[sensor]['firewall_stats'].each do |datas|
134
- #
135
- # begin
136
- # ## Extract interface name and clean up
137
- # sensor_data.push({ 'device' => device_name })
138
- # sensor_data.push({ 'filter_name' => datas['filter_name'] })
139
- #
140
- # ## Clean up Current object
141
- # # datas.delete("filter_name")
142
- #
143
- # $log.warn "Sensor Filter : " + datas['filter_name']
144
- #
145
- # rescue
146
- # $log.warn "Unable to parse " + sensor + " sensor, an error occured.."
147
- # $log.debug "Unable to parse " + sensor + " sensor, Data Dump : " + datas.inspect.to_s
148
- # end
149
- # end
150
- #####################################################################
151
- ### Support for resource /junos/services/label-switched-path/usage/##
152
- #####################################################################
153
- #datas Dump : {"name"=>"to_mx104-9", "instance_identifier"=>0,
154
- # "counter_name"=>"c-25", "packets"=>2521648779, "bytes"=>2526692076558,
155
- # "packet_rate"=>598640, "byte_rate"=>599837511}
156
- elsif sensor == "jnpr_lsp_statistics_ext"
157
-
158
- resource = "/junos/services/label-switched-path/usage/"
159
-
160
- datas_sensors[sensor]['lsp_stats_records'].each do |datas|
128
+
129
+ #####################################################################
130
+ ### Support for resource /junos/services/label-switched-path/usage/##
131
+ #####################################################################
132
+ #datas Dump : {"name"=>"to_mx104-9", "instance_identifier"=>0,
133
+ # "counter_name"=>"c-25", "packets"=>2521648779, "bytes"=>2526692076558,
134
+ # "packet_rate"=>598640, "byte_rate"=>599837511}
135
+ elsif sensor == "jnpr_lsp_statistics_ext"
136
+
137
+ resource = "/junos/services/label-switched-path/usage/"
138
+ $log.debug "Will extract info for Sensor: #{sensor} / Resource #{resource}"
139
+
140
+ datas_sensors[sensor]['lsp_stats_records'].each do |datas|
161
141
 
162
142
  # Save all info extracted on a list
163
143
  sensor_data = []
@@ -189,14 +169,84 @@ module Fluent
189
169
  end
190
170
  end
191
171
 
192
- ##############################################################
193
- ### Support for resource /junos/system/linecard/interface/logical/usage ##
194
- ##############################################################
195
- elsif sensor == "jnprLogicalInterfaceExt"
172
+ ##############################################################
173
+ ### Support for resource /junos/system/linecard/interface/logical/usage ##
174
+ ##############################################################
175
+ elsif sensor == "jnprLogicalInterfaceExt"
176
+
177
+ resource = "/junos/system/linecard/interface/logical/usage"
178
+ $log.debug "Will extract info for Sensor: #{sensor} / Resource #{resource}"
179
+
180
+ datas_sensors[sensor]['interface_info'].each do |datas|
181
+
182
+ # Save all info extracted on a list
183
+ sensor_data = []
184
+
185
+ begin
186
+ ## Extract interface name and clean up
187
+ sensor_data.push({ 'device' => device_name })
188
+ sensor_data.push({ 'interface' => datas['if_name'] })
189
+
190
+ ## Clean up Current object
191
+ datas.delete("if_name")
192
+ datas.delete("init_time")
193
+ datas.delete("snmp_if_index")
194
+ datas.delete("op_state")
195
+
196
+ # Check if the interface has a parent
197
+ if datas.key?('parent_ae_name')
198
+ sensor_data.push({ 'interface_parent' => datas['parent_ae_name'] })
199
+ datas.delete("parent_ae_name")
200
+ end
201
+
202
+ datas.each do |section, data|
203
+ data.each do |type, value|
204
+
205
+ local_sensor_data = sensor_data.dup
206
+
207
+ if value.kind_of?(Array)
208
+ value.each do |entry|
209
+
210
+ ['if_packets', 'if_octets'].each do |data_type|
211
+ local_sensor_data.push({ 'forwarding_class' => entry['fc_number'] })
212
+ local_sensor_data.push({ 'family' => entry['if_family'] })
213
+ local_sensor_data.push({ 'type' => section + '.' + type + '.' + data_type })
214
+ local_sensor_data.push({ 'value' => entry[data_type] })
215
+
216
+ record = build_record(output_format, local_sensor_data)
217
+ yield gpb_time, record
218
+ end
219
+ end
220
+ else
221
+ local_sensor_data.push({ 'type' => section + '.' + type })
222
+ local_sensor_data.push({ 'value' => value })
223
+
224
+ record = build_record(output_format, local_sensor_data)
225
+
226
+ yield gpb_time, record
227
+ end
228
+ end
229
+ end
230
+ rescue => e
231
+ $log.warn "Unable to parse " + sensor + " sensor, Error during processing: #{$!}"
232
+ $log.debug "Unable to parse " + sensor + " sensor, Data Dump : " + datas.inspect.to_s
233
+ end
234
+ end
235
+
236
+ ##############################################################
237
+ ### Support for resource /junos/system/linecard/firewall/ ##
238
+ ##############################################################
239
+ #{"message":"Unable to parse jnpr_firewall_ext sensor, Data Dump : {\"jnpr_firewall_ext\"=>
240
+ #{\"firewall_stats\"=>[{\"filter_name\"=>\"__default_bpdu_filter__\", \"timestamp\"=>1465467390, \"memory_usage\"=>[{\"name\"=>\"HEAP\", \"allocated\"=>2440}]},
241
+ #{\"filter_name\"=>\"test\", \"timestamp\"=>1465467390, \"memory_usage\"=>[{\"name\"=>\"HEAP\", \"allocated\"=>1688}],
242
+ #\"counter_stats\"=>[{\"name\"=>\"cnt1\", \"packets\"=>79, \"bytes\"=>6320}]},
243
+ #{\"filter_name\"=>\"__default_arp_policer__\", \"timestamp\"=>1464456904, \"memory_usage\"=>[{\"name\"=>\"HEAP\", \"allocated\"=>1600}]}]}}"}
244
+ elsif sensor == "jnpr_firewall_ext"
196
245
 
197
- resource = "/junos/system/linecard/interface/logical/usage"
246
+ resource = "/junos/system/linecard/firewall/"
247
+ $log.debug "Will extract info for Sensor: #{sensor} / Resource #{resource}"
198
248
 
199
- datas_sensors[sensor]['interface_info'].each do |datas|
249
+ datas_sensors[sensor]['firewall_stats'].each do |datas|
200
250
 
201
251
  # Save all info extracted on a list
202
252
  sensor_data = []
@@ -204,28 +254,81 @@ module Fluent
204
254
  begin
205
255
  ## Extract interface name and clean up
206
256
  sensor_data.push({ 'device' => device_name })
207
- sensor_data.push({ 'interface' => datas['if_name'] })
257
+ sensor_data.push({ 'filter_name' => datas['filter_name'] })
258
+ sensor_data.push({ 'filter_timestamp' => datas['timestamp'] })
208
259
 
209
260
  ## Clean up Current object
210
- datas.delete("if_name")
211
- datas.delete("init_time")
212
- datas.delete("snmp_if_index")
213
- datas.delete("op_state")
261
+ datas.delete("filter_name")
262
+ datas.delete("timestamp")
214
263
 
215
- datas.each do |section, data|
216
- data.each do |type, value|
217
-
218
- sensor_data.push({ 'type' => section + '.' + type })
219
- sensor_data.push({ 'value' => value })
264
+ if datas.key?('memory_usage')
265
+ datas['memory_usage'].each do |memory_usage|
266
+ sensor_data.push({ 'type' => 'memory_usage.' + memory_usage['name'] })
267
+ sensor_data.push({ 'value' => memory_usage['allocated'] })
268
+ memory_usage.delete("name")
269
+ memory_usage.delete("allocated")
220
270
 
221
271
  record = build_record(output_format, sensor_data)
222
272
  yield gpb_time, record
273
+ end
223
274
 
275
+ ## Clean up Current object
276
+ datas.delete("memory_usage")
277
+ end
278
+
279
+ if datas.key?('counter_stats')
280
+ datas['counter_stats'].each do |counters|
281
+ sensor_data.push({ 'filter_counter_name' => counters['name'] })
282
+ counters.delete("name")
283
+ counters.each do |type, value|
284
+ sensor_data.push({ 'type' => 'filter_counter.' + type })
285
+ sensor_data.push({ 'value' => value })
286
+ record = build_record(output_format, sensor_data)
287
+ yield gpb_time, record
288
+ end
224
289
  end
225
290
  end
291
+
226
292
  rescue => e
227
293
  $log.warn "Unable to parse " + sensor + " sensor, Error during processing: #{$!}"
228
- $log.debug "Unable to parse " + sensor + " sensor, Data Dump : " + datas.inspect.to_s
294
+ $log.debug "Unable to parse " + sensor + " sensor, Data Dump : " + datas_sensors.inspect.to_s
295
+ end
296
+ end
297
+ #####################################################################
298
+ ### Support for resource /junos/TBD /##
299
+ #####################################################################
300
+ elsif sensor == "cpu_memory_util_ext"
301
+
302
+ resource = "/junos/TBD/"
303
+ $log.debug "Will extract info for Sensor: #{sensor} / Resource #{resource}"
304
+
305
+ datas_sensors[sensor]['utilization'].each do |datas|
306
+
307
+ # Save all info extracted on a list
308
+ sensor_data = []
309
+
310
+ begin
311
+ ## Extract interface name and clean up
312
+ sensor_data.push({ 'device' => device_name })
313
+
314
+ name = clean_up_name(datas['name'])
315
+
316
+ ## Clean up Current object
317
+ datas.delete("name")
318
+
319
+ datas.each do |type, value|
320
+
321
+ sensor_data.push({ 'type' => 'cpu_mem.' + type })
322
+ sensor_data.push({ 'name' => name })
323
+ sensor_data.push({ 'value' => value })
324
+
325
+ record = build_record(output_format, sensor_data)
326
+ yield gpb_time, record
327
+
328
+ end
329
+ rescue => e
330
+ $log.warn "Unable to parse " + sensor + " sensor, Error during processing: #{$!}"
331
+ $log.debug "Unable to parse " + sensor + " sensor, Data Dump : " + datas_sensors.inspect.to_s
229
332
  end
230
333
  end
231
334
  else
@@ -3,10 +3,11 @@
3
3
  ##
4
4
  # This file is auto-generated. DO NOT EDIT!
5
5
  #
6
- require 'protobuf/message'
6
+ require 'protobuf'
7
7
 
8
8
  module Google
9
9
  module Protobuf
10
+ ::Protobuf::Optionable.inject(self) { ::Google::Protobuf::FileOptions }
10
11
 
11
12
  ##
12
13
  # Message Classes
@@ -15,7 +15,7 @@ def epoc_to_sec(epoc)
15
15
  elsif nbr_digit == 16
16
16
  return (epoc.to_i/1000000).to_i
17
17
  end
18
-
18
+
19
19
  return epoc
20
20
  end
21
21
 
@@ -28,6 +28,7 @@ def clean_up_name(name)
28
28
  tmp.gsub!('/', '_')
29
29
  tmp.gsub!(':', '_')
30
30
  tmp.gsub!('.', '_')
31
+ tmp.gsub!(' ', '_')
31
32
 
32
33
  return tmp
33
34
  end
@@ -3,13 +3,13 @@
3
3
  ##
4
4
  # This file is auto-generated. DO NOT EDIT!
5
5
  #
6
- require 'protobuf/message'
6
+ require 'protobuf'
7
7
 
8
8
 
9
9
  ##
10
10
  # Imports
11
11
  #
12
- require 'jvision_top.pb'
12
+ require 'telemetry_top.pb'
13
13
 
14
14
 
15
15
  ##
@@ -69,6 +69,6 @@ end
69
69
  # Extended Message Fields
70
70
  #
71
71
  class ::JuniperNetworksSensors < ::Protobuf::Message
72
- optional ::LogicalPort, :jnprLogicalInterfaceExt, 7, :extension => true
72
+ optional ::LogicalPort, :".jnprLogicalInterfaceExt", 7, :extension => true
73
73
  end
74
74
 
@@ -3,7 +3,7 @@
3
3
  ##
4
4
  # This file is auto-generated. DO NOT EDIT!
5
5
  #
6
- require 'protobuf/message'
6
+ require 'protobuf'
7
7
 
8
8
 
9
9
  ##
@@ -3,13 +3,13 @@
3
3
  ##
4
4
  # This file is auto-generated. DO NOT EDIT!
5
5
  #
6
- require 'protobuf/message'
6
+ require 'protobuf'
7
7
 
8
8
 
9
9
  ##
10
10
  # Imports
11
11
  #
12
- require 'jvision_top.pb'
12
+ require 'telemetry_top.pb'
13
13
 
14
14
 
15
15
  ##
@@ -41,6 +41,6 @@ end
41
41
  # Extended Message Fields
42
42
  #
43
43
  class ::JuniperNetworksSensors < ::Protobuf::Message
44
- optional ::LspStats, :jnpr_lsp_statistics_ext, 5, :extension => true
44
+ optional ::LspStats, :".jnpr_lsp_statistics_ext", 5, :extension => true
45
45
  end
46
46
 
@@ -3,13 +3,13 @@
3
3
  ##
4
4
  # This file is auto-generated. DO NOT EDIT!
5
5
  #
6
- require 'protobuf/message'
6
+ require 'protobuf'
7
7
 
8
8
 
9
9
  ##
10
10
  # Imports
11
11
  #
12
- require 'jvision_top.pb'
12
+ require 'telemetry_top.pb'
13
13
 
14
14
 
15
15
  ##
@@ -84,6 +84,6 @@ end
84
84
  # Extended Message Fields
85
85
  #
86
86
  class ::JuniperNetworksSensors < ::Protobuf::Message
87
- optional ::GPort, :jnpr_interface_ext, 3, :extension => true
87
+ optional ::GPort, :".jnpr_interface_ext", 3, :extension => true
88
88
  end
89
89
 
@@ -3,7 +3,7 @@
3
3
  ##
4
4
  # This file is auto-generated. DO NOT EDIT!
5
5
  #
6
- require 'protobuf/message'
6
+ require 'protobuf'
7
7
 
8
8
 
9
9
  ##
@@ -50,10 +50,10 @@ end
50
50
  # Extended Message Fields
51
51
  #
52
52
  class ::Google::Protobuf::FieldOptions < ::Protobuf::Message
53
- optional ::TelemetryFieldOptions, :telemetry_options, 1024, :extension => true
53
+ optional ::TelemetryFieldOptions, :".telemetry_options", 1024, :extension => true
54
54
  end
55
55
 
56
56
  class ::EnterpriseSensors < ::Protobuf::Message
57
- optional ::JuniperNetworksSensors, :juniperNetworks, 2636, :extension => true
57
+ optional ::JuniperNetworksSensors, :".juniperNetworks", 2636, :extension => true
58
58
  end
59
59
 
metadata CHANGED
@@ -1,65 +1,58 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-juniper-telemetry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.11
5
- prerelease:
4
+ version: 0.3.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Damien Garros
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2016-04-26 00:00:00.000000000 Z
11
+ date: 2016-12-23 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: fluentd
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
- version: 0.10.58
19
+ version: 0.12.29
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
- version: 0.10.58
26
+ version: 0.12.29
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: protobuf
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rake
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
- description: ! 'Input plugin for Fluentd for Juniper devices telemetry data streaming
55
+ description: 'Input plugin for Fluentd for Juniper devices telemetry data streaming
63
56
  : Jvision / analyticsd etc ..'
64
57
  email:
65
58
  - dgarros@gmail.com
@@ -67,41 +60,41 @@ executables: []
67
60
  extensions: []
68
61
  extra_rdoc_files: []
69
62
  files:
70
- - lib/fluent/plugin/parser_juniper_jti.rb
63
+ - lib/cpu_memory_utilization.pb.rb
64
+ - lib/firewall.pb.rb
71
65
  - lib/fluent/plugin/parser_juniper_analyticsd.rb
66
+ - lib/fluent/plugin/parser_juniper_jti.rb
72
67
  - lib/fluent/plugin/parser_juniper_na.rb
68
+ - lib/google/protobuf/descriptor.pb.rb
73
69
  - lib/juniper_telemetry_lib.rb
74
- - lib/jvision_top.pb.rb
75
- - lib/port.pb.rb
76
- - lib/firewall.pb.rb
77
- - lib/lsp_mon.pb.rb
78
70
  - lib/logical_port.pb.rb
71
+ - lib/lsp_mon.pb.rb
79
72
  - lib/lsp_stats.pb.rb
80
- - lib/google/protobuf/descriptor.pb.rb
73
+ - lib/port.pb.rb
74
+ - lib/telemetry_top.pb.rb
81
75
  homepage: https://github.com/JNPRAutomate/fluentd-plugin-juniper-telemetry
82
76
  licenses:
83
77
  - Apache 2.0
78
+ metadata: {}
84
79
  post_install_message:
85
80
  rdoc_options: []
86
81
  require_paths:
87
82
  - lib
88
83
  required_ruby_version: !ruby/object:Gem::Requirement
89
- none: false
90
84
  requirements:
91
- - - ! '>='
85
+ - - ">="
92
86
  - !ruby/object:Gem::Version
93
87
  version: '0'
94
88
  required_rubygems_version: !ruby/object:Gem::Requirement
95
- none: false
96
89
  requirements:
97
- - - ! '>='
90
+ - - ">="
98
91
  - !ruby/object:Gem::Version
99
92
  version: '0'
100
93
  requirements: []
101
94
  rubyforge_project:
102
- rubygems_version: 1.8.23
95
+ rubygems_version: 2.5.1
103
96
  signing_key:
104
- specification_version: 3
105
- summary: ! 'Input plugin for Fluentd for Juniper devices telemetry data streaming
106
- : Jvision / analyticsd etc ..'
97
+ specification_version: 4
98
+ summary: 'Input plugin for Fluentd for Juniper devices telemetry data streaming :
99
+ Jvision / analyticsd etc ..'
107
100
  test_files: []