ievkit 0.1.1 → 0.3.0

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
  SHA1:
3
- metadata.gz: 29e6eb79738b6b1ec9e1a0230e61c5c07e5673d8
4
- data.tar.gz: 14ac14eed21f5b19a6019c1e8da884f57eaf7690
3
+ metadata.gz: 2a498bb62a5338a534689cc343f876155328c8e0
4
+ data.tar.gz: 7dbabc5103d76f7fdd66132930cf0c4537f971e9
5
5
  SHA512:
6
- metadata.gz: fc6c82d55605217b4fb901050b9e6c7d4d1257d7e6af8aa2ac23e4d990b2bc758b17444120d1af100d539d4962a8322b000e208852a97824cadfe600266752c2
7
- data.tar.gz: 3ec24056491bdc87260779d1a8f731130b36750f91b74bf6f5bed6d797339c8e27051085bfe4477ebf3a892b7bcf60ba9d02a2ff58b2ecbf0e17371389cbdbb9
6
+ metadata.gz: 67ef1d6ab0ae5573b4eaeb8b48d479b28c4f48f40fe3a9ed5f2355ee2f4860e22e9f7bfd9722654785245753c8c9c4042a60b9cf7cc660ad2435c193df083373
7
+ data.tar.gz: 815428b6331e312bf5c8191bee959e9027b994ea24ecdedde44824a30e65d46d091be2c8f8dc5b2d2c2f817ebe2e7aed2ae4899a8292b85ffacc5923021f8316
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
1
  source 'https://rubygems.org'
2
- ruby '2.3.0'
2
+ ruby '2.3.1'
3
3
  # Specify your gem's dependencies in ievkit.gemspec
4
4
  gemspec
@@ -1,16 +1,17 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ievkit (0.1.1)
4
+ ievkit (0.2.0)
5
5
  faraday_middleware (~> 0.10.0)
6
6
  figaro (~> 1.1.1)
7
+ redis (~> 3.2)
7
8
  rest-client (~> 1.8.0)
8
9
 
9
10
  GEM
10
11
  remote: https://rubygems.org/
11
12
  specs:
12
13
  diff-lcs (1.2.5)
13
- domain_name (0.5.20160310)
14
+ domain_name (0.5.20160615)
14
15
  unf (>= 0.0.5, < 1.0.0)
15
16
  faraday (0.9.2)
16
17
  multipart-post (>= 1.2, < 3)
@@ -20,10 +21,11 @@ GEM
20
21
  thor (~> 0.14)
21
22
  http-cookie (1.0.2)
22
23
  domain_name (~> 0.5)
23
- mime-types (2.99.1)
24
+ mime-types (2.99.2)
24
25
  multipart-post (2.0.0)
25
26
  netrc (0.11.0)
26
27
  rake (11.1.2)
28
+ redis (3.3.1)
27
29
  rest-client (1.8.0)
28
30
  http-cookie (>= 1.0.2, < 2.0)
29
31
  mime-types (>= 1.16, < 3.0)
@@ -55,5 +57,8 @@ DEPENDENCIES
55
57
  rake (~> 11.1)
56
58
  rspec
57
59
 
60
+ RUBY VERSION
61
+ ruby 2.3.1p112
62
+
58
63
  BUNDLED WITH
59
- 1.11.2
64
+ 1.12.5
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Ievkit
2
2
 
3
3
  [![Code Climate](https://codeclimate.com/github/afimb/ievkit/badges/gpa.svg)](https://codeclimate.com/github/afimb/ievkit)
4
+ [![Dependency Status](https://gemnasium.com/afimb/ievkit.svg)](https://gemnasium.com/afimb/ievkit)
4
5
  [![Gem Version](https://badge.fury.io/rb/ievkit.svg)](https://badge.fury.io/rb/ievkit)
5
6
 
6
7
  ## Installation
@@ -2,3 +2,4 @@ IEV_VERSION: '1.0'
2
2
  IEV_HOST:
3
3
  IEV_PORT:
4
4
  IEV_PATH:
5
+ iev_admin_key:
@@ -30,6 +30,7 @@ Gem::Specification.new do |spec|
30
30
  spec.add_dependency 'figaro', '~> 1.1.1'
31
31
  spec.add_dependency 'faraday_middleware', '~> 0.10.0'
32
32
  spec.add_dependency 'rest-client', '~> 1.8.0'
33
+ spec.add_dependency 'redis', '~>3.2'
33
34
 
34
35
  spec.add_development_dependency 'bundler', '~> 1.11'
35
36
  spec.add_development_dependency 'rake', '~> 11.1'
@@ -1,7 +1,9 @@
1
1
  require 'figaro'
2
2
  require 'faraday_middleware'
3
+ require 'redis'
3
4
  require 'logger'
4
5
  require 'ievkit/version'
6
+ require 'ievkit/cache'
5
7
  require 'ievkit/job'
6
8
  require 'ievkit/client'
7
9
  require 'ievkit/railtie' if defined?(Rails)
@@ -0,0 +1,12 @@
1
+ class Redis
2
+ def cache(key, expire = nil)
3
+ value = get(key)
4
+ return JSON.parse(value) if value
5
+ return nil unless block_given?
6
+ value = yield(self)
7
+ return nil unless value
8
+ set(key, value.to_json)
9
+ expire(key, expire) if expire.to_i > 0
10
+ value
11
+ end
12
+ end
@@ -1,12 +1,15 @@
1
1
  module Ievkit
2
2
  class Client
3
- attr_reader :iev_url_prefix, :iev_url_suffix, :iev_url_jobs, :referential
3
+ attr_reader :iev_url_prefix, :iev_url_prefix_admin, :iev_url_list_tests, :iev_url_suffix, :iev_url_jobs, :referential, :redis
4
4
 
5
5
  def initialize(referential)
6
6
  @payload = {}
7
7
  @referential = referential
8
8
  @iev_url_prefix = init_iev_url_prefix
9
+ @iev_url_prefix_admin = init_iev_url_prefix_admin
10
+ @iev_url_list_tests = init_iev_url_list_tests
9
11
  @iev_url_jobs = init_iev_url_jobs
12
+ @redis = Redis.new
10
13
  end
11
14
 
12
15
  def prepare_post_request(type, options)
@@ -22,11 +25,34 @@ module Ievkit
22
25
  end
23
26
  end
24
27
 
25
- def prepare_request(url, http_method)
28
+ def prepare_request(url, http_method, disable_cache = false)
29
+ unless disable_cache
30
+ cache_key = [url, http_method.to_s].join('_')
31
+ begin
32
+ response_cached = @redis.cache(cache_key)
33
+ return response_cached if response_cached
34
+ rescue => e
35
+ Ievkit::Log.logger.fatal("Unable to contact Redis server: #{e.message}")
36
+ end
37
+ end
26
38
  init_connection(url)
27
39
  begin
28
40
  response = @connection.send(http_method)
29
- parse_response(response)
41
+ unless disable_cache
42
+ cache_control = response.headers['cache-control']
43
+ max_age = 0
44
+ no_cache = true
45
+ if cache_control
46
+ max_age = cache_control[/max-age=(.*)/, 1].to_i
47
+ no_cache = false if max_age > 0 && cache_control[/no-transform/]
48
+ end
49
+ return parse_response(response) if no_cache
50
+ @redis.cache(cache_key, max_age) {
51
+ parse_response(response)
52
+ }
53
+ else
54
+ return parse_response(response)
55
+ end
30
56
  rescue => e
31
57
  Ievkit::Log.logger.fatal("Unable to contact IEV server: #{e.message}")
32
58
  return false
@@ -53,6 +79,29 @@ module Ievkit
53
79
  @payload[:file[1]] = Faraday::UploadIO.new(iev_file, 'application/zip', filename)
54
80
  end
55
81
 
82
+ def get_stats
83
+ @payload = { key: ENV['iev_admin_key'] }
84
+ init_connection(@iev_url_prefix_admin)
85
+ begin
86
+ response = @connection.get('get_monthly_stats', @payload)
87
+ parse_response(response)
88
+ rescue => e
89
+ Ievkit::Log.logger.fatal("Unable to contact IEV server: #{e.message}")
90
+ return false
91
+ end
92
+ end
93
+
94
+ def list_tests(action, format)
95
+ init_connection(@iev_url_list_tests)
96
+ begin
97
+ response = @connection.get("#{action}/#{format}", @payload)
98
+ parse_response(response)
99
+ rescue => e
100
+ Ievkit::Log.logger.fatal("Unable to contact IEV server: #{e.message}")
101
+ return false
102
+ end
103
+ end
104
+
56
105
  protected
57
106
 
58
107
  def headers
@@ -100,6 +149,25 @@ module Ievkit
100
149
  ].compact * '/'
101
150
  end
102
151
 
152
+ def init_iev_url_prefix_admin
153
+ [
154
+ "#{ENV['IEV_HOST']}:#{ENV['IEV_PORT']}",
155
+ ENV['IEV_PATH'],
156
+ 'admin',
157
+ ''
158
+ ].compact * '/'
159
+ end
160
+
161
+ def init_iev_url_list_tests
162
+ [
163
+ "#{ENV['IEV_HOST']}:#{ENV['IEV_PORT']}",
164
+ ENV['IEV_PATH'],
165
+ 'admin',
166
+ 'test_list',
167
+ ''
168
+ ].compact * '/'
169
+ end
170
+
103
171
  def init_iev_url_suffix(type = nil)
104
172
  [
105
173
  caller_locations(2, 2)[0].label,
@@ -1,6 +1,7 @@
1
1
  module Ievkit
2
2
  class Job
3
3
  attr_reader :client, :response
4
+ attr_accessor :disable_cache
4
5
 
5
6
  def initialize(referential_id)
6
7
  @client = Ievkit::Client.new(referential_id)
@@ -26,10 +27,43 @@ module Ievkit
26
27
  get_job(url).to_s.include?('terminated_jobs')
27
28
  end
28
29
 
30
+ def get_stats
31
+ @client.get_stats
32
+ end
33
+
34
+ def list_tests(action, format)
35
+ @client.list_tests(action, format)
36
+ end
37
+
38
+ def download_validation_report(data, errors)
39
+ csv = []
40
+ csv << "\uFEFF;Statut/Information;Nombre d'erreurs;Nombre d'avertissements"
41
+ data.each do |el|
42
+ t = [el[:name], I18n.t("compliance_check_results.severities.#{el[:status]}"), el[:count_error], el[:count_warning]]
43
+ csv << t.join(';')
44
+ next unless el[:check_point_errors]
45
+ el[:check_point_errors].each do |index|
46
+ error = errors[index]
47
+ next unless error
48
+ t = []
49
+ esf = error[:source][:file]
50
+ if esf && esf[:filename]
51
+ filename = []
52
+ filename << "#{I18n.t('report.file.line')} #{esf[:line_number]}" if esf[:line_number].to_i > 0
53
+ filename << "#{I18n.t('report.file.column')} #{esf[:column_number]}" if esf[:column_number].to_i > 0
54
+ t << filename.join(' ') if filename.present?
55
+ end
56
+ t << error[:error_name]
57
+ csv << ';'+t.join(' ')
58
+ end
59
+ end
60
+ csv.join("\n")
61
+ end
62
+
29
63
  protected
30
64
 
31
65
  def do_job(url, http_method)
32
- @client.prepare_request(url, http_method)
66
+ @client.prepare_request(url, http_method, @disable_cache)
33
67
  end
34
68
 
35
69
  def importer(type, options)
@@ -1,3 +1,3 @@
1
1
  module Ievkit
2
- VERSION = '0.1.1'
2
+ VERSION = '0.3.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ievkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bruno Perles
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-04-20 00:00:00.000000000 Z
11
+ date: 2016-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: figaro
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.8.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: redis
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.2'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.2'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -117,6 +131,7 @@ files:
117
131
  - config/initializers/figaro.rb
118
132
  - ievkit.gemspec
119
133
  - lib/ievkit.rb
134
+ - lib/ievkit/cache.rb
120
135
  - lib/ievkit/client.rb
121
136
  - lib/ievkit/job.rb
122
137
  - lib/ievkit/railtie.rb
@@ -147,4 +162,3 @@ signing_key:
147
162
  specification_version: 4
148
163
  summary: ''
149
164
  test_files: []
150
- has_rdoc: