gooddata 2.1.8-java → 2.1.9-java

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/.rubocop.yml +6 -0
  3. data/.travis.yml +1 -1
  4. data/Dockerfile +9 -4
  5. data/Dockerfile.jruby +4 -4
  6. data/Dockerfile.ruby +5 -4
  7. data/SDK_VERSION +1 -1
  8. data/VERSION +1 -1
  9. data/bin/provision.sh +2 -0
  10. data/bin/release.sh +2 -0
  11. data/bin/rollout.sh +2 -0
  12. data/bin/run_brick.rb +28 -7
  13. data/bin/test_projects_cleanup.rb +4 -0
  14. data/bin/user_filters.sh +2 -0
  15. data/ci.rake +1 -1
  16. data/dev-gooddata-sso.pub.encrypted +40 -40
  17. data/gooddata.gemspec +5 -1
  18. data/lcm.rake +10 -0
  19. data/lib/gooddata/bricks/middleware/execution_result_middleware.rb +68 -0
  20. data/lib/gooddata/bricks/middleware/logger_middleware.rb +2 -1
  21. data/lib/gooddata/bricks/middleware/mask_logger_decorator.rb +5 -1
  22. data/lib/gooddata/bricks/pipeline.rb +7 -0
  23. data/lib/gooddata/cloud_resources/cloud_resouce_factory.rb +28 -0
  24. data/lib/gooddata/cloud_resources/cloud_resource_client.rb +24 -0
  25. data/lib/gooddata/cloud_resources/cloud_resources.rb +12 -0
  26. data/lib/gooddata/cloud_resources/redshift/drivers/log4j.properties +15 -0
  27. data/lib/gooddata/cloud_resources/redshift/redshift_client.rb +100 -0
  28. data/lib/gooddata/exceptions/invalid_env_error.rb +15 -0
  29. data/lib/gooddata/helpers/data_helper.rb +10 -0
  30. data/lib/gooddata/helpers/global_helpers.rb +4 -0
  31. data/lib/gooddata/helpers/global_helpers_params.rb +4 -7
  32. data/lib/gooddata/lcm/actions/collect_segment_clients.rb +4 -1
  33. data/lib/gooddata/lcm/actions/collect_segments.rb +1 -2
  34. data/lib/gooddata/lcm/actions/create_segment_masters.rb +5 -3
  35. data/lib/gooddata/lcm/actions/synchronize_clients.rb +1 -1
  36. data/lib/gooddata/lcm/actions/synchronize_etls_in_segment.rb +1 -2
  37. data/lib/gooddata/lcm/actions/synchronize_ldm.rb +10 -2
  38. data/lib/gooddata/lcm/actions/synchronize_user_filters.rb +22 -2
  39. data/lib/gooddata/lcm/actions/synchronize_users.rb +19 -0
  40. data/lib/gooddata/lcm/actions/update_release_table.rb +7 -1
  41. data/lib/gooddata/lcm/exceptions/lcm_execution_error.rb +16 -0
  42. data/lib/gooddata/lcm/helpers/release_table_helper.rb +16 -8
  43. data/lib/gooddata/lcm/lcm2.rb +6 -4
  44. data/lib/gooddata/models/execution.rb +0 -1
  45. data/lib/gooddata/models/execution_detail.rb +0 -1
  46. data/lib/gooddata/models/profile.rb +33 -11
  47. data/lib/gooddata/models/project.rb +2 -2
  48. data/lib/gooddata/models/project_creator.rb +2 -0
  49. data/lib/gooddata/models/schedule.rb +0 -1
  50. data/lib/gooddata/rest/client.rb +2 -2
  51. data/lib/gooddata/rest/connection.rb +5 -3
  52. data/rubydev_public.gpg.encrypted +51 -51
  53. data/rubydev_secret_keys.gpg.encrypted +109 -109
  54. metadata +12 -5
  55. data/lib/gooddata/extensions/hash.rb +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fec58c94885527f530a78738e98c1af58921a28203b51d82cd355cec902c2b1c
4
- data.tar.gz: 9759123a281f2be6dffaca14fa992e075514a3d6c2915f97b10275b5c8371cf5
3
+ metadata.gz: cc6c846aa117ae4e5809d836ccdd2e0a9b5bd0a223837328c3f0e07065ee6b0f
4
+ data.tar.gz: d77bc24dd2ce6f01a6c0685cf58d099117a442113dfbb6cfb1c615d71af033a3
5
5
  SHA512:
6
- metadata.gz: e4d92dd24e6e5cfec17a0dd83b3969a80a5b616ba2aa3e9bb7e08dd44898538eb26b2cbe104da61fa65d0cddcb8829a5902e1895bdb1539be10b56c6b90f4371
7
- data.tar.gz: e88afe5e138338229f1aaba220dee25ae4aca2ad1d4330a451377742fea30c1b2a12daeabc05e07eebacc62ca828ce144e74fe6a2357c62d170230fe70a228bc
6
+ metadata.gz: 36a5cae65532cae267891feecd76562e83082c2f812201577c30a42a97d93ddcf2689f4f35166089e9262d9afd08f6564c114e6ad769081a3422909d26b5b8ec
7
+ data.tar.gz: e77339f7f2a67fa32213aa42619e71ac85f3495a1c9f1110458f71eb15e825e0014c5b9f06c72f85311ad0dcfad4b6dee0700464f6088350beee94ec02256de7
@@ -98,3 +98,9 @@ UselessAccessModifier:
98
98
 
99
99
  Style/PerlBackrefs:
100
100
  Enabled: false
101
+
102
+ Style/Encoding:
103
+ Enabled: false
104
+
105
+ Layout/EmptyLineAfterMagicComment:
106
+ Enabled: false
@@ -259,7 +259,7 @@ jobs:
259
259
  stage: after-merge
260
260
  script: bundle exec rake test:unit
261
261
  os: osx
262
- osx_image: xcode9.3
262
+ osx_image: xcode9.4
263
263
  rvm: 2.4.3
264
264
 
265
265
  - name: unit tests 2.5
data/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- FROM harbor.intgdc.com/tools/gdc-java-8-jre:d0f5e08
1
+ FROM harbor.intgdc.com/tools/gdc-java-8-jre:0dec94a
2
2
 
3
3
  ARG RVM_VERSION=stable
4
4
  ARG JRUBY_VERSION=9.2.5.0
@@ -6,10 +6,10 @@ ARG JRUBY_VERSION=9.2.5.0
6
6
  LABEL image_name="GDC LCM Bricks"
7
7
  LABEL maintainer="LCM <lcm@gooddata.com>"
8
8
  LABEL git_repository_url="https://github.com/gooddata/gooddata-ruby/"
9
- LABEL parent_image="harbor.intgdc.com/tools/gdc-java-8-jre:d0f5e08"
9
+ LABEL parent_image="harbor.intgdc.com/tools/gdc-java-8-jre:0dec94a"
10
10
 
11
11
  # which is required by RVM
12
- RUN yum install -y curl which patch make git \
12
+ RUN yum install -y curl which patch make git maven \
13
13
  && yum clean all \
14
14
  && rm -rf /var/cache/yum
15
15
 
@@ -43,12 +43,17 @@ RUN groupadd -g 48 apache \
43
43
  USER apache
44
44
 
45
45
  ADD ./bin ./bin
46
- ADD ./lib ./lib
46
+ ADD --chown=apache:apache ./lib ./lib
47
47
  ADD ./SDK_VERSION .
48
48
  ADD ./VERSION .
49
49
  ADD ./Gemfile .
50
50
  ADD ./gooddata.gemspec .
51
51
 
52
+ RUN mkdir -p tmp
53
+ COPY spec/lcm/redshift_driver_pom.xml tmp/pom.xml
54
+ RUN mvn -f tmp/pom.xml clean install -P binary-packaging
55
+ RUN cp -rf tmp/target/*.jar ./lib/gooddata/cloud_resources/redshift/drivers/
56
+
52
57
  RUN bundle install
53
58
 
54
59
  ARG GIT_COMMIT=unspecified
@@ -7,11 +7,11 @@ RUN apk add --no-cache curl make gcc git g++ python linux-headers binutils-gold
7
7
  # Switch to directory with sources
8
8
  WORKDIR /src
9
9
  ENV HOME=/src
10
+ ENV BUNDLE_PATH=$HOME/bundle
10
11
 
11
- RUN gem update --system \
12
- && gem install bundler
13
-
14
- ENV BUNDLE_PATH=/bundle
12
+ RUN gem update --system 3.0.6 \
13
+ && gem install --install-dir $BUNDLE_PATH bundler -v 1.17.3 \
14
+ && gem install --install-dir $BUNDLE_PATH rake -v 11.3.0
15
15
 
16
16
  ADD . .
17
17
 
@@ -8,11 +8,12 @@ RUN ln -s /usr/bin/make /usr/bin/gmake
8
8
 
9
9
  # Switch to directory with sources
10
10
  WORKDIR /src
11
+ ENV HOME=/src
12
+ ENV BUNDLE_PATH=$HOME/bundle
11
13
 
12
- RUN gem update --system \
13
- && gem install bundler
14
-
15
- ENV BUNDLE_PATH=/bundle
14
+ RUN gem update --system 3.0.6 \
15
+ && gem install --install-dir $BUNDLE_PATH bundler -v 1.17.3 \
16
+ && gem install --install-dir $BUNDLE_PATH rake -v 11.3.0
16
17
 
17
18
  ADD . .
18
19
 
@@ -1 +1 @@
1
- 2.1.8
1
+ 2.1.9
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.7.9
1
+ 3.7.14
@@ -1,3 +1,5 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
+ export JRUBY_OPTS=-J-Xmx2560m
4
+
3
5
  /bin/bash -l -c "bundle exec ./bin/run_brick.rb provisioning_brick"
@@ -1,3 +1,5 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
+ export JRUBY_OPTS=-J-Xmx2560m
4
+
3
5
  /bin/bash -l -c "bundle exec ./bin/run_brick.rb release_brick"
@@ -1,3 +1,5 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
+ export JRUBY_OPTS=-J-Xmx2560m
4
+
3
5
  /bin/bash -l -c "bundle exec ./bin/run_brick.rb rollout_brick"
@@ -14,28 +14,49 @@ def get_brick_params(prefix)
14
14
  ENV.select { |k,| k.to_s.match(/^#{prefix}.*/) }.map { |k, v| [k.slice(prefix.length..-1), v] }.to_h
15
15
  end
16
16
 
17
+ def handle_error(params, log, brick_type, error, error_message)
18
+ execution_log = GoodData.logger
19
+ execution_log.error "Execution failed. Error: #{error}" unless execution_log.nil?
20
+ GoodData::Bricks::ExecutionResultMiddleware.update_execution_result(GoodData::Bricks::ExecutionStatus::ERROR, error_message)
21
+ log.error "action=#{brick_type}_execution status=failed commit_hash=#{params['GOODDATA_RUBY_COMMIT']} execution_id=#{params['GDC_EXECUTION_ID']} exception=#{error}"
22
+ raise
23
+ end
24
+
17
25
  syslog_node = ENV['NODE_NAME']
18
26
  log = RemoteSyslogLogger.new(syslog_node, 514, :program => "ruby_#{brick_type}", :facility => 'local2')
19
27
 
20
28
  log.info "action=#{brick_type}_execution status=init"
21
29
 
22
30
  begin
31
+ commit_hash = ENV['GOODDATA_RUBY_COMMIT'] || ''
32
+ execution_id = ENV['GDC_EXECUTION_ID']
33
+ log_directory = ENV['GDC_LOG_DIRECTORY'] || '/tmp/'
34
+ execution_log_path = ENV['GDC_EXECUTION_LOG_PATH']
35
+ execution_result_log_path = ENV['GDC_EXECUTION_RESULT_LOG_PATH']
36
+ execution_result_log_params = {
37
+ 'GOODDATA_RUBY_COMMIT' => commit_hash,
38
+ 'GDC_EXECUTION_ID' => execution_id,
39
+ 'GDC_LOG_DIRECTORY' => log_directory,
40
+ 'GDC_EXECUTION_LOG_PATH' => execution_log_path,
41
+ 'GDC_EXECUTION_RESULT_LOG_PATH' => execution_result_log_path
42
+ }
43
+
23
44
  brick_pipeline = GoodData::Bricks::Pipeline.send("#{brick_type}_pipeline")
24
45
  normal_params = get_brick_params(BRICK_PARAM_PREFIX)
25
46
  hidden_params = get_brick_params(HIDDEN_BRICK_PARAMS_PREFIX)
26
47
  params = normal_params.merge(hidden_params)
27
48
 
28
49
  params['values_to_mask'] = hidden_params.values
29
- commit_hash = ENV['GOODDATA_RUBY_COMMIT'] || ''
30
- execution_id = ENV['GDC_EXECUTION_ID']
31
50
  params['gooddata_ruby_commit'] = commit_hash
32
- params['GDC_LOG_DIRECTORY'] = ENV['GDC_LOG_DIRECTORY'] || '/tmp/'
51
+ params['GDC_LOG_DIRECTORY'] = log_directory
33
52
  params['GDC_EXECUTION_ID'] = execution_id
53
+ params['GDC_EXECUTION_LOG_PATH'] = execution_log_path
54
+ params['GDC_EXECUTION_RESULT_LOG_PATH'] = execution_result_log_path
55
+
34
56
  log.info "action=#{brick_type}_execution status=start commit_hash=#{commit_hash} execution_id=#{execution_id}"
35
57
  brick_pipeline.call(params)
58
+ rescue GoodData::LcmExecutionError => lcm_error
59
+ handle_error(execution_result_log_params, log, brick_type, lcm_error, lcm_error.summary_error)
36
60
  rescue Exception => e # rubocop:disable RescueException
37
- execution_log = GoodData.logger
38
- execution_log.error "Execution failed. Message: #{e.message}. Error: #{e}" unless execution_log.nil?
39
- log.info "action=#{brick_type}_execution status=failed commit_hash=#{commit_hash} execution_id=#{execution_id} exception=#{e}"
40
- raise
61
+ handle_error(execution_result_log_params, log, brick_type, e, e.to_s)
41
62
  end
@@ -29,6 +29,7 @@ def delete_project_by_title(title, projects, days = 14, force = false)
29
29
  p.title.match(title) && p.created < dead_line
30
30
  end
31
31
  filtered_projects.each do |project|
32
+ begin
32
33
  if force
33
34
  puts "Deleting: #{project.pid} - #{project.title} - #{project.created}"
34
35
  project_add = project.add
@@ -37,6 +38,9 @@ def delete_project_by_title(title, projects, days = 14, force = false)
37
38
  else
38
39
  puts "Would delete: #{project.pid} - #{project.title} - #{project.created}"
39
40
  end
41
+ rescue StandardError => ex
42
+ puts "Failed to delete project #{project.pid}, reason: #{ex}"
43
+ end
40
44
  end
41
45
  puts "#{filtered_projects.length} projects matching \"#{title}\" #{'would be ' unless force}deleted."
42
46
  end
@@ -1,3 +1,5 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
+ export JRUBY_OPTS=-J-Xmx2560m
4
+
3
5
  /bin/bash -l -c "bundle exec ./bin/run_brick.rb user_filters_brick"
data/ci.rake CHANGED
@@ -1,7 +1,7 @@
1
1
  namespace :docker do
2
2
  desc 'Build Docker image'
3
3
  task :build do
4
- system('docker-compose build')
4
+ system('docker-compose build --no-cache')
5
5
  end
6
6
 
7
7
  desc 'Bundles gems using cache'
@@ -1,40 +1,40 @@
1
- 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
- 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
- 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
- q0UGZ5VHtiJSAE27eSVi6CI04CtOR/2XBwZFytEyKBabQD89YEvtZgwXvRsO
5
- +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
- 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
- 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
- IqyBZEEpASgupQJz77OOyF1lderX6/vC7MwNkjUuMmtRr0q3WwtxildcHKr0
9
- Q4dwCHkq+cLJ7RjtVQlVZUgnFvuZikGSRwnQB0RBSCRMA1ekmuQ3cukk8V7p
10
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- RsqLNc/po0IbySnlY1B5zsKn1QRs6A3Onu6xj4gOSUVDGs1a8L1xNWkqGiOh
26
- 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
- WtRyeiSQQD1dKUVEkISI7+oVfS4OI07tlMRpzuJtrvYCV0ASImYyqD83lZFm
28
- 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
- ZZLcW1Kqna9DxY/PLE5JbQS/CmRaPRt2VLKyKyqoSYQFdbdRzJyAIe0PT+6A
30
- 2qEFRLkovlx7kdkqQCbEvnHN/C+cXdyKf/8EtYliGkLRoGfLc6xenQba14U9
31
- 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
- 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
- 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
- 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
- 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
- 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
- eygWl/IlTNArWPHJJG4BRdIvzrvLCM8+3NcSQAWCsWp1ZaiTfw5NbKrP1Eze
38
- 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
- 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
40
- B+9dpPw=
1
+ 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
40
+ PHRjAjc=
@@ -54,7 +54,11 @@ Gem::Specification.new do |s|
54
54
 
55
55
  s.add_development_dependency 'sqlite3' if RUBY_PLATFORM != 'java'
56
56
 
57
- s.add_dependency 'activesupport', '> 4.2.9', '< 6.1'
57
+ if RUBY_VERSION >= '2.5'
58
+ s.add_dependency 'activesupport', '> 4.2.9', '< 6.1'
59
+ else
60
+ s.add_dependency 'activesupport', '> 4.2.9', '< 6.0'
61
+ end
58
62
 
59
63
  s.add_dependency 'aws-sdk-s3', '~> 1.16'
60
64
  s.add_dependency 'docile', '~> 1.1'
data/lcm.rake CHANGED
@@ -118,6 +118,7 @@ end
118
118
  namespace :docker do
119
119
  desc 'Build Docker image'
120
120
  task :build do
121
+ Rake::Task["maven:build_redshift"].invoke
121
122
  system('docker build -f Dockerfile.jruby -t gooddata/appstore .')
122
123
  end
123
124
 
@@ -127,6 +128,15 @@ namespace :docker do
127
128
  end
128
129
  end
129
130
 
131
+ namespace :maven do
132
+ task :build_redshift do
133
+ system("cp -rf spec/lcm/redshift_driver_pom.xml tmp/pom.xml")
134
+ system('mvn -f tmp/pom.xml clean install -P binary-packaging')
135
+ system('cp -rf tmp/target/*.jar lib/gooddata/cloud_resources/redshift/drivers/')
136
+ system('rm -rf lib/gooddata/cloud_resources/redshift/drivers/lcm-redshift-driver*.jar')
137
+ end
138
+ end
139
+
130
140
  namespace :sdk do
131
141
  desc 'Updates gooddata-ruby to the version specified in the root Gemfile'
132
142
  task :update do
@@ -0,0 +1,68 @@
1
+ # Copyright (c) 2019, GoodData Corporation. All rights reserved.
2
+ # This source code is licensed under the BSD-style license found in the
3
+ # LICENSE file in the root directory of this source tree.
4
+
5
+ require_relative 'base_middleware'
6
+
7
+ # rubocop:disable Style/ClassVars
8
+ module GoodData
9
+ module Bricks
10
+ module ExecutionStatus
11
+ OK = 'OK'
12
+ ERROR = 'ERROR'
13
+ WARNING = 'WARNING'
14
+ end
15
+
16
+ class ExecutionResultMiddleware < Bricks::Middleware
17
+ @@result_log_path = nil
18
+
19
+ def call(params)
20
+ result_log_path(params)
21
+ @app.call(params)
22
+ end
23
+
24
+ # Update process execution result when the script is executed inside a GDC ETL process execution (ruby bricks).
25
+ # Ruby bricks should update execution result at the end of script with status=WARNING or OK and summary message if the script exits normally.
26
+ # If any fatal error, script should update execution result with status=ERROR and error message,
27
+ # then throw exception to notify GDC platform that the script terminated unexpectedly.
28
+ # @param [HashMap] params contains GDC_EXECUTION_RESULT_LOG_PATH or GDC_LOG_DIRECTORY, GDC_EXECUTION_ID
29
+ # @param [ExecutionStatus] status execution status
30
+ # @param [String] message execution message
31
+ def self.update_execution_result(status, message = "")
32
+ if status != ExecutionStatus::OK && status != ExecutionStatus::ERROR && status != ExecutionStatus::WARNING
33
+ GoodData.logger.warn("Unknown execution status #{status}, ignored it.")
34
+ end
35
+
36
+ result = {
37
+ executionResult: {
38
+ status: status,
39
+ message: message
40
+ }
41
+ }
42
+ update_result(result)
43
+ end
44
+
45
+ private
46
+
47
+ def result_log_path(params)
48
+ log_directory = params['GDC_LOG_DIRECTORY']
49
+ execution_id = params['GDC_EXECUTION_ID']
50
+ result_log_path = params['GDC_EXECUTION_RESULT_LOG_PATH'] || ENV['GDC_EXECUTION_RESULT_LOG_PATH']
51
+ result_log_path = "#{log_directory}/#{execution_id}_result.json" if result_log_path.nil? && !log_directory.nil?
52
+ @@result_log_path = result_log_path
53
+ end
54
+
55
+ def self.update_result(result)
56
+ if @@result_log_path.nil?
57
+ GoodData.gd_logger.warn("action=update_execution_result status=error Not found execution result logger file.") unless GoodData.gd_logger.nil?
58
+ return
59
+ end
60
+
61
+ File.open(@@result_log_path, 'w') { |file| file.write(JSON.pretty_generate(result)) }
62
+ rescue Exception => e # rubocop:disable RescueException
63
+ GoodData.gd_logger.error("action=update_execution_result status=error reason=#{e.message}") unless GoodData.gd_logger.nil?
64
+ end
65
+ end
66
+ end
67
+ end
68
+ # rubocop:enable Style/ClassVars
@@ -36,7 +36,8 @@ module GoodData
36
36
  log_directory = params['GDC_LOG_DIRECTORY']
37
37
  execution_id = params['GDC_EXECUTION_ID']
38
38
  FileUtils.mkpath log_directory
39
- logger = Logger.new("#{log_directory}/#{execution_id}.log")
39
+ execution_log_path = params['GDC_EXECUTION_LOG_PATH'].nil? ? "#{log_directory}/#{execution_id}.log" : params['GDC_EXECUTION_LOG_PATH']
40
+ logger = Logger.new(execution_log_path)
40
41
  logger.level = params['GDC_LOG_LEVEL'] || 'info'
41
42
  values_to_mask = params['values_to_mask'] || []
42
43
  logger = MaskLoggerDecorator.new(logger, values_to_mask)
@@ -20,7 +20,11 @@ module GoodData
20
20
  # @return [[String]] array of all String in values
21
21
  def extract_values(values)
22
22
  if values.is_a?(String)
23
- [values]
23
+ if values.nil? || values.empty? || values.gsub(/[*|\s]/, '') == ''
24
+ []
25
+ else
26
+ [values]
27
+ end
24
28
  elsif values.is_a?(Hash) || values.is_a?(Array)
25
29
  (values.is_a?(Hash) ? values.values : values).reduce([]) do |strings, item|
26
30
  strings.concat extract_values(item)
@@ -32,6 +32,7 @@ module GoodData
32
32
  prepare([
33
33
  LoggerMiddleware,
34
34
  DecodeParamsMiddleware,
35
+ ExecutionResultMiddleware,
35
36
  BenchMiddleware,
36
37
  GoodDataMiddleware,
37
38
  AWSMiddleware,
@@ -44,6 +45,7 @@ module GoodData
44
45
  prepare([
45
46
  LoggerMiddleware,
46
47
  DecodeParamsMiddleware,
48
+ ExecutionResultMiddleware,
47
49
  BenchMiddleware,
48
50
  GoodDataMiddleware,
49
51
  AWSMiddleware,
@@ -56,6 +58,7 @@ module GoodData
56
58
  def self.release_brick_pipeline
57
59
  prepare([
58
60
  LoggerMiddleware,
61
+ ExecutionResultMiddleware,
59
62
  DecodeParamsMiddleware,
60
63
  BenchMiddleware,
61
64
  GoodDataMiddleware,
@@ -68,6 +71,7 @@ module GoodData
68
71
  def self.provisioning_brick_pipeline
69
72
  prepare([
70
73
  LoggerMiddleware,
74
+ ExecutionResultMiddleware,
71
75
  DecodeParamsMiddleware,
72
76
  BenchMiddleware,
73
77
  GoodDataMiddleware,
@@ -80,6 +84,7 @@ module GoodData
80
84
  def self.rollout_brick_pipeline
81
85
  prepare([
82
86
  LoggerMiddleware,
87
+ ExecutionResultMiddleware,
83
88
  DecodeParamsMiddleware,
84
89
  BenchMiddleware,
85
90
  GoodDataMiddleware,
@@ -93,6 +98,7 @@ module GoodData
93
98
  prepare(
94
99
  [
95
100
  LoggerMiddleware,
101
+ ExecutionResultMiddleware,
96
102
  DecodeParamsMiddleware,
97
103
  BenchMiddleware,
98
104
  HelloWorldBrick
@@ -104,6 +110,7 @@ module GoodData
104
110
  prepare(
105
111
  [
106
112
  LoggerMiddleware,
113
+ ExecutionResultMiddleware,
107
114
  DecodeParamsMiddleware,
108
115
  BenchMiddleware,
109
116
  HelpBrick