xlo 0.0.1.5 → 0.0.2

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/xlo.rb +68 -48
  4. metadata +15 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1cefed55ed2f5d48a08f379675b3e4d30effbe7d
4
- data.tar.gz: 452cff1d495238cc4b7167048f9224b5bd9e7607
3
+ metadata.gz: 6093051b78a35019ac0deee5d6449e904ed31492
4
+ data.tar.gz: afbc066cc514e55264cf96cc94bed301f32ea750
5
5
  SHA512:
6
- metadata.gz: 33c726287743a4304b4814382bea6b7f1d72b896a5a1d7a9c32ef9f8ef9d1e0a781345a7e67b1d287ca6b0c16f215ab6eec8dbf8c6b30e37d7f84ae780cd360e
7
- data.tar.gz: 70fefa849e1a7ba9e1111d7c78eb579b043f9438124178a4c947997aeeb3e6dfc6579ce660de4443df931f8d924c9aaed00a4b3666e138a6eea25abb517ba514
6
+ metadata.gz: 61a42f4edc4bffab04157da99caed215ea573dda51d450d2ecfeec2f5b753ac3dd41f4a5d42ed1cbcdfd2e614d29e05bce6b06066b1314743dcda07d55c597b9
7
+ data.tar.gz: a392d6dfdcd481cbac3c6261c0b2947b8b4fe8803f69f55cd9214562b828a4dac440ba7069e581c687a3c5588bc0ea33a0f3a5cd24cd4f84ff46726aad634d3c
data/README.md CHANGED
@@ -10,7 +10,7 @@ XLO is a rnv/xmllint wrapper who captures the error generate by this validators
10
10
  1. `gem install xlo`
11
11
  2. `apt-get install rnv`
12
12
  3. `apt-get install xmllint`
13
- 4. `xlo rnc-schema xml-folder`
13
+ 4. `xlo start rnc-schema xml-folder`
14
14
 
15
15
  ## Note
16
16
  the code contains several functions who could be use to like a ruby api
data/lib/xlo.rb CHANGED
@@ -1,28 +1,38 @@
1
+ require 'os'
1
2
  require 'open3'
2
3
 
3
4
  class Xlo
4
5
  attr_accessor :rnv, :xmllint, :csv
5
6
 
6
- def initialize(_file)
7
+ def initialize(*args)
7
8
  @rnv = []
8
9
  @xmllint = []
9
- @csv = File.new(_file,"w+")
10
- @csv << "type; error; freq; files \n"
10
+
11
+ if args.size == 1
12
+ @csv = File.new(args[0],"w+")
13
+ @csv << "type; error; freq; files \n"
14
+ end
15
+
11
16
  @error = {}
17
+ @mutex = Mutex.new
12
18
  end
13
19
 
14
- def rnv_wrapper (_rnc, _dir)
15
- Dir[_dir + "/" + "*.xml"].each do |file|
16
- stdout = Open3.capture3("rnv #{_rnc} #{file}")
17
- stdout = stdout[1].split("\n")
18
- stdout.each do |line|
19
- @rnv << line
20
- end
20
+ def get_error
21
+ return @error
22
+ end
23
+
24
+ def rnv_wrapper (_rnc, _file)
25
+ rnv = []
26
+ stdout = Open3.capture3("rnv #{_rnc} #{_file}")
27
+ stdout = stdout[1].split("\n")
28
+ stdout.each do |line|
29
+ rnv << line
21
30
  end
31
+ return rnv
22
32
  end
23
33
 
24
- def rnv_aggregate
25
- @rnv.each do |el|
34
+ def rnv_aggregate(_rnv)
35
+ _rnv.each do |el|
26
36
  if (el.include?("error") && !el.include?("are invalid"))
27
37
 
28
38
  type = el.split("error")[1].split(" ")[1]
@@ -37,64 +47,74 @@ class Xlo
37
47
  filename = File.basename(el.split("error")[0])
38
48
  filename[filename.length - 2] = ""
39
49
  end
40
-
41
- if (@error.has_key?(key))
42
- @error[key] << " || " + filename
43
- else
44
- @error[key] = filename
50
+ @mutex.synchronize do
51
+ if (@error.has_key?(key))
52
+ @error[key] << " || " + filename
53
+ else
54
+ @error[key] = filename
55
+ end
45
56
  end
46
-
47
57
  end
48
58
  end
49
59
  end
50
60
 
51
- def xmllint_wrapper (_dir)
52
- Dir[_dir + "/" + "*.xml"].each do |file|
53
- stdout = Open3.capture3("xmllint #{file}")
54
- stdout = stdout[1].split("\n")
55
- stdout.each do |line|
56
- @xmllint << line
57
- end
61
+ def xmllint_wrapper (_file)
62
+ xmllint = []
63
+ stdout = Open3.capture3("xmllint #{_file}")
64
+ stdout = stdout[1].split("\n")
65
+ stdout.each do |line|
66
+ xmllint << line
58
67
  end
68
+ return xmllint
59
69
  end
60
70
 
61
- def xmllint_aggregate
62
-
63
- @xmllint.delete_if {|el| el.include?("^")}
64
- @xmllint.map { |e| e.chomp }
65
- @xmllint = @xmllint.values_at(* @xmllint.each_index.select {|i| i.even?})
66
- @xmllint.each do |el|
71
+ def xmllint_aggregate(_xmllint)
72
+ _xmllint.delete_if {|el| el.include?("^")}
73
+ _xmllint.map { |e| e.chomp }
74
+ _xmllint = _xmllint.values_at(* _xmllint.each_index.select {|i| i.even?})
75
+ _xmllint.each do |el|
67
76
  split_el = el.split(" ")
68
77
  type = el[/element|attribute|parser error/]
69
78
  key = type + ";" + el.split(":")[-1]
70
79
  filename = File.basename(split_el[0])[0..-2]
71
- if (@error.has_key?(key))
72
- @error[key] << " || " + filename
73
- else
74
- @error[key] = filename
80
+ @mutex.synchronize do
81
+ if (@error.has_key?(key))
82
+ @error[key] << " || " + filename
83
+ else
84
+ @error[key] = filename
85
+ end
75
86
  end
76
87
  end
77
88
  end
78
89
 
79
90
  def csv_writer
80
91
  @error.each do |entry|
81
- line = entry.dup
82
- line[-1] = line[-1].split("||")[0..50].join
83
- freq = entry[1].split("||").length
84
- @csv.write(line.insert(1, freq.to_s).join(";")[0..-2] + "\n" )
85
- end
92
+ line = entry.dup
93
+ line[-1] = line[-1].split("||")[0..50].join
94
+ freq = entry[1].split("||").length
95
+ @csv.write(line.insert(1, freq.to_s).join(";")[0..-2] + "\n" )
96
+ end
86
97
  end
87
98
 
88
- def self.main(_rnv_arg,_folder_arg)
89
-
90
- xlo = Xlo.new(File.new("error.csv", "w+"))
91
-
92
- xlo.rnv_wrapper(_rnv_arg, _folder_arg)
93
- xlo.rnv_aggregate
99
+ def run(_rnv_arg, _folder_arg, _pool_size = 1)
100
+ jobs = Queue.new
101
+ Dir[_folder_arg + "/" + "*.xml"].each {|f| jobs.push f}
94
102
 
95
- xlo.xmllint_wrapper(_folder_arg)
96
- xlo.xmllint_aggregate
103
+ workers = (_pool_size).times.map do
104
+ Thread.new do
105
+ while jobs.size != 0
106
+ file = jobs.pop
107
+ rnv_aggregate(rnv_wrapper(_rnv_arg,file))
108
+ xmllint_aggregate(xmllint_wrapper(file))
109
+ end
110
+ end
111
+ end
112
+ workers.map(&:join)
113
+ end
97
114
 
115
+ def self.main(_rnv_arg,_folder_arg)
116
+ xlo = Xlo.new("error.csv")
117
+ xlo.run(_rnv_arg, _folder_arg, OS.cpu_count)
98
118
  xlo.csv_writer
99
119
  end
100
120
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xlo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.5
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Meoni
@@ -10,6 +10,20 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2016-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: facter
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 2.4.6
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 2.4.6
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: thor
15
29
  requirement: !ruby/object:Gem::Requirement