avmtrf1-tools 0.29.0 → 0.32.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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/lib/avmtrf1/check_point/session.rb +10 -9
  3. data/lib/avmtrf1/esosti/instance/changed.rb +8 -5
  4. data/lib/avmtrf1/executables.rb +10 -2
  5. data/lib/avmtrf1/forponto/user/month.rb +1 -1
  6. data/lib/avmtrf1/inventario_sistemas.rb +40 -0
  7. data/lib/avmtrf1/inventario_sistemas/parser.rb +42 -0
  8. data/lib/avmtrf1/inventario_sistemas/parser/body.rb +27 -0
  9. data/lib/avmtrf1/inventario_sistemas/parser/body_row.rb +12 -0
  10. data/lib/avmtrf1/inventario_sistemas/parser/header.rb +38 -0
  11. data/lib/avmtrf1/inventario_sistemas/parser/header_column.rb +27 -0
  12. data/lib/avmtrf1/inventario_sistemas/site_build.rb +71 -0
  13. data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base.rb +41 -0
  14. data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base/elements.rb +54 -0
  15. data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base/layout.rb +55 -0
  16. data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base/stylesheet.css +57 -0
  17. data/lib/avmtrf1/inventario_sistemas/site_build/index.rb +20 -0
  18. data/lib/avmtrf1/inventario_sistemas/site_build/sistema.rb +62 -0
  19. data/lib/avmtrf1/inventario_sistemas/site_build/sistemas_index.rb +31 -0
  20. data/lib/avmtrf1/patches/eac_launcher/git/base.rb +0 -15
  21. data/lib/avmtrf1/redmine/instance.rb +2 -1
  22. data/lib/avmtrf1/rest_provider/instance.rb +13 -55
  23. data/lib/avmtrf1/rest_provider/instance/issues.rb +30 -0
  24. data/lib/avmtrf1/rest_provider/request.rb +44 -0
  25. data/lib/avmtrf1/rest_provider/response.rb +77 -0
  26. data/lib/avmtrf1/tools/application.rb +13 -0
  27. data/lib/avmtrf1/tools/runner.rb +16 -26
  28. data/lib/avmtrf1/tools/runner/check_point.rb +1 -1
  29. data/lib/avmtrf1/tools/runner/check_point/login.rb +1 -1
  30. data/lib/avmtrf1/tools/runner/esosti.rb +1 -1
  31. data/lib/avmtrf1/tools/runner/esosti/changed.rb +7 -2
  32. data/lib/avmtrf1/tools/runner/esosti/fetch.rb +7 -2
  33. data/lib/avmtrf1/tools/runner/esosti/request.rb +88 -0
  34. data/lib/avmtrf1/tools/runner/forponto.rb +1 -1
  35. data/lib/avmtrf1/tools/runner/forponto/espelho.rb +1 -1
  36. data/lib/avmtrf1/tools/runner/forponto/marcacoes.rb +1 -1
  37. data/lib/avmtrf1/tools/runner/forponto/resumos.rb +1 -1
  38. data/lib/avmtrf1/tools/runner/forponto/saldo.rb +1 -1
  39. data/lib/avmtrf1/tools/runner/git.rb +1 -1
  40. data/lib/avmtrf1/tools/runner/git/issues_check.rb +1 -1
  41. data/lib/avmtrf1/tools/runner/git/push_large.rb +1 -1
  42. data/lib/avmtrf1/tools/runner/inventario_sistemas.rb +71 -0
  43. data/lib/avmtrf1/tools/runner/openvpn.rb +38 -0
  44. data/lib/avmtrf1/tools/runner/oracle.rb +1 -1
  45. data/lib/avmtrf1/tools/runner/oracle/query.rb +1 -1
  46. data/lib/avmtrf1/tools/runner/oracle/source_get.rb +1 -1
  47. data/lib/avmtrf1/tools/runner/oracle/user_clear.rb +1 -1
  48. data/lib/avmtrf1/tools/runner/php.rb +8 -15
  49. data/lib/avmtrf1/tools/runner/php/docker.rb +19 -29
  50. data/lib/avmtrf1/tools/runner/red.rb +1 -1
  51. data/lib/avmtrf1/tools/runner/trf1_dspace_base0.rb +1 -1
  52. data/lib/avmtrf1/tools/runner/trf1_dspace_base0/deploy.rb +3 -3
  53. data/lib/avmtrf1/tools/version.rb +1 -1
  54. data/lib/avmtrf1/trf1_dspace_base0/deploy.rb +3 -3
  55. metadata +56 -10
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avmtrf1
4
+ class InventarioSistemas
5
+ class SiteBuild
6
+ class HtmlPageBase
7
+ module Layout
8
+ def metadata_info
9
+ "<div class='input_metadata'>" \
10
+ "Extraído de <strong>#{site.input_file.basename}</strong>." \
11
+ '</div>'
12
+ end
13
+
14
+ def output_body
15
+ <<HTML
16
+ <body><div id="top">
17
+ #{output_navbar}
18
+ <h1>#{site_title}</h1>
19
+ #{metadata_info}
20
+ </div><div id="inner">
21
+ <h2>#{title}</h2>
22
+ #{output_inner_content}
23
+ </div></body>
24
+ HTML
25
+ end
26
+
27
+ def output_content
28
+ "<html>\n" + output_header + output_body + '</html>'
29
+ end
30
+
31
+ def output_header
32
+ <<HTML
33
+ <head>
34
+ <meta charset="UTF-8">
35
+ <title>#{site_title} - #{title}</title>
36
+ <style>
37
+ #{::File.read(::File.join(__dir__, 'stylesheet.css'))}
38
+ </style>
39
+ </head>
40
+ HTML
41
+ end
42
+
43
+ def output_navbar
44
+ '<nav>' + output_navbar_path(false) + '</nav>'
45
+ end
46
+
47
+ def output_navbar_path(links)
48
+ (parent.present? ? parent.output_navbar_path(true) + NAVBAR_SEPARATOR : '') +
49
+ (links ? self_html_link : title)
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,57 @@
1
+ body, #top, #top * {
2
+ padding: 0;
3
+ margin: 0;
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ #top * {
8
+ padding: 0.3em;
9
+ }
10
+
11
+ #inner {
12
+ margin: 0.3em;
13
+ }
14
+
15
+ nav {
16
+ padding: 0.2em;
17
+ }
18
+
19
+ a {
20
+ color: blue;
21
+ }
22
+
23
+ a:visited {
24
+ color: darkblue;
25
+ }
26
+
27
+ h1 {
28
+ text-align: right;
29
+ background-color: lightyellow;
30
+ }
31
+
32
+ .input_metadata {
33
+ text-align: right;
34
+ background-color: lightblue;
35
+ }
36
+
37
+ table {
38
+ border: thin solid black;
39
+ border-collapse: collapse;
40
+ }
41
+
42
+ .odd {
43
+ background-color: lightgray;
44
+ }
45
+
46
+ td, th {
47
+ border-left: thin solid black;
48
+ }
49
+
50
+ th {
51
+ border-bottom: thin solid black;
52
+ }
53
+
54
+ nav, nav a, nav a:visited, th {
55
+ background-color: black;
56
+ color: white;
57
+ }
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'avmtrf1/inventario_sistemas/site_build/html_page_base'
5
+
6
+ module Avmtrf1
7
+ class InventarioSistemas
8
+ class SiteBuild
9
+ class Index < ::Avmtrf1::InventarioSistemas::SiteBuild::HtmlPageBase
10
+ def output_inner_content
11
+ ['<ul>', "<li>#{site.sistemas_index.self_html_link}</li>", '</ul>'].join("\n")
12
+ end
13
+
14
+ def title
15
+ 'Índice'
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'avmtrf1/inventario_sistemas/parser/header_column'
5
+ require 'avmtrf1/inventario_sistemas/site_build/html_page_base'
6
+
7
+ module Avmtrf1
8
+ class InventarioSistemas
9
+ class SiteBuild
10
+ class Sistema < ::Avmtrf1::InventarioSistemas::SiteBuild::HtmlPageBase
11
+ attr_reader :raw_row
12
+
13
+ def initialize(site, parent, raw_row)
14
+ super(site, parent)
15
+ @raw_row = raw_row
16
+ end
17
+
18
+ def id
19
+ nome.parameterize
20
+ end
21
+
22
+ def gestor
23
+ column_value('gestor na jf1', 'unidade')
24
+ end
25
+
26
+ def nome
27
+ column_value('sistema', 'sigla')
28
+ end
29
+
30
+ def producao
31
+ html_linkfy(column_value('ambientes', 'produção – serv. ap'))
32
+ end
33
+
34
+ def responsavel
35
+ %w[unidade seção nome]
36
+ .map { |sub| column_value('responsável pelo desenvolvimento', sub) }
37
+ .reject(&:blank?).join(' » ')
38
+ end
39
+
40
+ def output_inner_content
41
+ column_values = site.parser.header_columns.map { |c| [c.key, column_value(c)] }
42
+ '<h3>Detalhes</h3>' + html_table(%w[Campo Valor], column_values)
43
+ end
44
+
45
+ def title
46
+ nome
47
+ end
48
+
49
+ def column_value(main, sub = nil)
50
+ column = if main.is_a?(::Avmtrf1::InventarioSistemas::Parser::HeaderColumn)
51
+ main
52
+ else
53
+ site.column(main, sub)
54
+ end
55
+ raise 'Out of bound' if column.index >= raw_row.count
56
+
57
+ raw_row[column.index]
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'avmtrf1/inventario_sistemas/site_build/html_page_base'
5
+
6
+ module Avmtrf1
7
+ class InventarioSistemas
8
+ class SiteBuild
9
+ class SistemasIndex < ::Avmtrf1::InventarioSistemas::SiteBuild::HtmlPageBase
10
+ def output_inner_content
11
+ output_count + output_list
12
+ end
13
+
14
+ def title
15
+ 'Sistemas'
16
+ end
17
+
18
+ def output_count
19
+ "<p>Quantidade: #{site.sistemas.count}</p>"
20
+ end
21
+
22
+ def output_list
23
+ html_table(
24
+ %w[Nome Produção Responsável Gestor],
25
+ site.sistemas.map { |s| [s.self_html_link, s.producao, s.responsavel, s.gestor] }
26
+ )
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -16,21 +16,6 @@ module Avmtrf1
16
16
  end
17
17
 
18
18
  module InstanceMethods
19
- def execute(*args)
20
- args, options = build_args(args)
21
- ::EacRubyUtils::Envs.local.command(*args).execute(options)
22
- end
23
-
24
- def system(*args)
25
- args, options = build_args(args)
26
- ::EacRubyUtils::Envs.local.command(*args).system(options)
27
- end
28
-
29
- def command(*args)
30
- args, _options = build_args(args)
31
- ::EacRubyUtils::Envs.local.command(*args)
32
- end
33
-
34
19
  def status_files
35
20
  execute!('-c', 'core.quotepath=off', 'status', '--porcelain').each_line.map do |line|
36
21
  parse_status_file(line)
@@ -31,7 +31,8 @@ module Avmtrf1
31
31
  private
32
32
 
33
33
  def issue_statuses
34
- request('/issue_statuses').fetch('issue_statuses').map do |data|
34
+ request_json('/issue_statuses').response.body_data_or_raise.fetch('issue_statuses')
35
+ .map do |data|
35
36
  ::Avmtrf1::Redmine::Entities::IssueStatus.new(self, data)
36
37
  end
37
38
  end
@@ -1,9 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'avmtrf1/rest_provider/request'
3
4
  require 'curb'
4
- require 'json'
5
- require 'avmtrf1/jira/entities/issue'
6
- require 'eac_ruby_utils/console/speaker'
5
+ require 'eac_ruby_utils/core_ext'
7
6
 
8
7
  module Avmtrf1
9
8
  module RestProvider
@@ -12,60 +11,19 @@ module Avmtrf1
12
11
  # * self.build_service_url(service_url_suffix)
13
12
  # * self.issue_get_url_suffix(provider_issue_id)
14
13
  class Instance
15
- include ::EacRubyUtils::Console::Speaker
16
-
17
- attr_reader :root_url, :username, :password
18
-
19
- def initialize(root_url, username, password)
20
- @root_url = root_url
21
- @username = username
22
- @password = password
23
- end
24
-
25
- def find_issue(global_issue_id)
26
- parsed = self.class.parse_issue_id(global_issue_id)
27
- parsed.present? ? issue(parsed.provider_issue_id) : nil
28
- end
29
-
30
- def issue(provider_issue_id)
31
- data = request(issue_get_url_suffix(provider_issue_id))
32
- data = issue_class.parse_data(data) if issue_class.respond_to?(:parse_data)
33
- data.present? ? issue_class.new(self, data) : nil
34
- end
35
-
36
- def request(service_url_suffix)
37
- url = build_service_url(service_url_suffix)
38
- infov 'URL', url
39
- c = ::Curl::Easy.new(url)
40
- c.http_auth_types = :basic
41
- c.username = username
42
- c.password = password
43
- c.headers['Accept'] = 'application/json'
44
- curl_perform(c)
45
- end
46
-
47
- def issue_class
48
- "#{self.class.name.deconstantize}::Entities::Issue".constantize
49
- end
50
-
51
- private
52
-
53
- def curl_perform(curl)
54
- raise 'Curl failed' unless curl.perform
55
-
56
- infov 'Return status', curl.status
57
- return JSON.parse(curl.body_str) if curl.status.to_i == 200
58
-
59
- raise curl_raise_message(curl)
14
+ require_sub __FILE__, include_modules: true
15
+ common_constructor :root_url, :username, :password
16
+
17
+ def request(service_url_suffix, headers = {}, &body_data_proc)
18
+ r = Avmtrf1::RestProvider::Request.new(build_service_url(service_url_suffix),
19
+ body_data_proc)
20
+ headers.each { |name, value| r.header(name, value) }
21
+ r.autenticate(username, password)
22
+ r
60
23
  end
61
24
 
62
- def curl_raise_message(curl)
63
- raise <<~MESSAGE
64
- "#{curl.url} returned #{curl.status.to_i}:
65
- #{'=' * 10}
66
- #{curl.body_str}
67
- #{'=' * 10}"
68
- MESSAGE
25
+ def request_json(service_url_suffix, headers = {}, &body_data_proc)
26
+ request(service_url_suffix, headers.merge('Accept' => 'application/json'), &body_data_proc)
69
27
  end
70
28
  end
71
29
  end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avmtrf1
4
+ module RestProvider
5
+ class Instance
6
+ module Issues
7
+ def find_issue(global_issue_id)
8
+ parsed = self.class.parse_issue_id(global_issue_id)
9
+ parsed.present? ? issue(parsed.provider_issue_id) : nil
10
+ end
11
+
12
+ def issue(provider_issue_id)
13
+ issue_request(provider_issue_id).response.body_data_or_raise
14
+ end
15
+
16
+ # @return [Avmtrf1::RestProvider::Request]
17
+ def issue_request(provider_issue_id)
18
+ request_json(issue_get_url_suffix(provider_issue_id)) do |data|
19
+ data = issue_class.parse_data(data) if issue_class.respond_to?(:parse_data)
20
+ data.present? ? issue_class.new(self, data) : nil
21
+ end
22
+ end
23
+
24
+ def issue_class
25
+ "#{self.class.name.deconstantize}::Entities::Issue".constantize
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/rest_provider/response'
4
+ require 'eac_ruby_utils/core_ext'
5
+ require 'ostruct'
6
+
7
+ module Avmtrf1
8
+ module RestProvider
9
+ class Request
10
+ common_constructor :url, :body_data_proc, default: [nil]
11
+
12
+ def autenticate(username, password)
13
+ self.auth = ::OpenStruct.new(username: username, password: password)
14
+ end
15
+
16
+ def header(name, value)
17
+ headers[name.to_s] = value
18
+ end
19
+
20
+ def response
21
+ ::Avmtrf1::RestProvider::Response.new(build_curl, body_data_proc)
22
+ end
23
+
24
+ private
25
+
26
+ attr_accessor :auth
27
+
28
+ def build_curl
29
+ r = ::Curl::Easy.new(url)
30
+ auth.if_present do |a|
31
+ r.http_auth_types = :basic
32
+ r.username = a.username
33
+ r.password = a.password
34
+ end
35
+ r.headers.merge!(headers)
36
+ r
37
+ end
38
+
39
+ def headers
40
+ @headers ||= {}
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/hash/conversions'
4
+ require 'eac_ruby_utils/core_ext'
5
+ require 'json'
6
+
7
+ module Avmtrf1
8
+ module RestProvider
9
+ class Response < ::StandardError
10
+ common_constructor :curl, :body_data_proc
11
+
12
+ def body_data
13
+ r = performed_curl.headers['Accept'].if_present(body_str) do |v|
14
+ send("body_data_from_#{v.parameterize.underscore}")
15
+ end
16
+ r = body_data_proc.call(r) if body_data_proc.present?
17
+ r
18
+ end
19
+
20
+ def body_data_or_raise
21
+ raise_unless_200
22
+
23
+ body_data
24
+ end
25
+
26
+ def body_str
27
+ performed_curl.body_str
28
+ end
29
+
30
+ def body_str_or_raise
31
+ raise_unless_200
32
+
33
+ body_str
34
+ end
35
+
36
+ def raise_unless_200
37
+ return nil if status == 200
38
+
39
+ raise self
40
+ end
41
+
42
+ def status
43
+ performed_curl.status.to_i
44
+ end
45
+
46
+ def url
47
+ curl.url
48
+ end
49
+
50
+ def to_s
51
+ "URL: #{url}\nStatus: #{status}\nBody:\n\n#{body_str}"
52
+ end
53
+
54
+ private
55
+
56
+ def body_data_from_application_json
57
+ ::JSON.parse(body_str)
58
+ end
59
+
60
+ def body_data_from_application_xml
61
+ Hash.from_xml(body_str)
62
+ end
63
+
64
+ def perform
65
+ @perform ||= begin
66
+ curl.perform || raise("CURL perform failed for #{url}")
67
+ true
68
+ end
69
+ end
70
+
71
+ def performed_curl
72
+ perform
73
+ curl
74
+ end
75
+ end
76
+ end
77
+ end