gooddata 2.1.14 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +5 -5
  2. data/.gdc-ii-config.yaml +1 -1
  3. data/.github/workflows/build.yml +66 -0
  4. data/.github/workflows/pre-merge.yml +72 -0
  5. data/.sonar.settings +4 -0
  6. data/.travis.yml +78 -12
  7. data/CHANGELOG.md +62 -0
  8. data/Dockerfile +25 -14
  9. data/LICENSE +4418 -17
  10. data/LICENSE.rb +1 -1
  11. data/README.md +3 -3
  12. data/Rakefile +8 -1
  13. data/SDK_VERSION +1 -1
  14. data/VERSION +1 -1
  15. data/bin/test_projects_cleanup.rb +45 -3
  16. data/ci/mssql/pom.xml +62 -0
  17. data/ci/mysql/pom.xml +57 -0
  18. data/ci/postgresql/pom.xml +57 -0
  19. data/ci/redshift/pom.xml +1 -1
  20. data/dev-gooddata-sso.pub.encrypted +40 -40
  21. data/gdc_fossa_ruby_sdk.yaml +1 -0
  22. data/gooddata.gemspec +10 -6
  23. data/k8s/charts/lcm-bricks/Chart.yaml +1 -1
  24. data/k8s/charts/lcm-bricks/templates/prometheus/alertingRules.yaml +11 -1
  25. data/lcm.rake +2 -2
  26. data/lib/gooddata/bricks/middleware/aws_middleware.rb +35 -9
  27. data/lib/gooddata/cloud_resources/blobstorage/blobstorage_client.rb +98 -0
  28. data/lib/gooddata/cloud_resources/{cloud_resouce_factory.rb → cloud_resource_factory.rb} +8 -0
  29. data/lib/gooddata/cloud_resources/cloud_resources.rb +1 -1
  30. data/lib/gooddata/cloud_resources/mssql/drivers/.gitkeepme +0 -0
  31. data/lib/gooddata/cloud_resources/mssql/mssql_client.rb +122 -0
  32. data/lib/gooddata/cloud_resources/mysql/drivers/.gitkeepme +0 -0
  33. data/lib/gooddata/cloud_resources/mysql/mysql_client.rb +111 -0
  34. data/lib/gooddata/cloud_resources/postgresql/drivers/.gitkeepme +0 -0
  35. data/lib/gooddata/cloud_resources/postgresql/postgresql_client.rb +106 -0
  36. data/lib/gooddata/cloud_resources/snowflake/snowflake_client.rb +18 -1
  37. data/lib/gooddata/commands/scaffold.rb +9 -10
  38. data/lib/gooddata/core/nil_logger.rb +3 -1
  39. data/lib/gooddata/helpers/data_helper.rb +9 -5
  40. data/lib/gooddata/helpers/global_helpers.rb +6 -5
  41. data/lib/gooddata/lcm/actions/associate_clients.rb +8 -2
  42. data/lib/gooddata/lcm/actions/base_action.rb +0 -2
  43. data/lib/gooddata/lcm/actions/collect_meta.rb +3 -1
  44. data/lib/gooddata/lcm/actions/migrate_gdc_date_dimension.rb +3 -2
  45. data/lib/gooddata/lcm/actions/provision_clients.rb +31 -10
  46. data/lib/gooddata/lcm/actions/synchronize_clients.rb +56 -7
  47. data/lib/gooddata/lcm/actions/synchronize_dataset_mappings.rb +64 -0
  48. data/lib/gooddata/lcm/actions/synchronize_ldm.rb +19 -8
  49. data/lib/gooddata/lcm/actions/synchronize_user_filters.rb +16 -9
  50. data/lib/gooddata/lcm/actions/synchronize_users.rb +7 -6
  51. data/lib/gooddata/lcm/actions/update_metric_formats.rb +185 -0
  52. data/lib/gooddata/lcm/data/delete_from_lcm_release.sql.erb +5 -0
  53. data/lib/gooddata/lcm/helpers/release_table_helper.rb +42 -8
  54. data/lib/gooddata/lcm/lcm2.rb +5 -2
  55. data/lib/gooddata/lcm/types/base_type.rb +0 -2
  56. data/lib/gooddata/mixins/md_object_query.rb +9 -6
  57. data/lib/gooddata/models/blueprint/project_blueprint.rb +0 -2
  58. data/lib/gooddata/models/client.rb +14 -12
  59. data/lib/gooddata/models/data_source.rb +668 -0
  60. data/lib/gooddata/models/dataset_mapping.rb +36 -0
  61. data/lib/gooddata/models/domain.rb +3 -2
  62. data/lib/gooddata/models/metadata/analytical_dashboard.rb +49 -0
  63. data/lib/gooddata/models/metadata/analytical_visualization_object.rb +30 -0
  64. data/lib/gooddata/models/metadata/label.rb +26 -27
  65. data/lib/gooddata/models/metadata/visualization_object.rb +50 -0
  66. data/lib/gooddata/models/project.rb +66 -19
  67. data/lib/gooddata/models/schedule.rb +13 -1
  68. data/lib/gooddata/models/user_filters/user_filter_builder.rb +58 -54
  69. data/lib/gooddata/models/user_group.rb +0 -1
  70. data/lib/gooddata/rest/connection.rb +6 -4
  71. data/lib/gooddata/rest/phmap.rb +2 -1
  72. data/lib/gooddata.rb +2 -0
  73. data/rubydev_public.gpg.encrypted +51 -51
  74. data/rubydev_secret_keys.gpg.encrypted +109 -109
  75. metadata +52 -27
  76. data/DEPENDENCIES.md +0 -880
  77. data/lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb +0 -37
  78. data/lib/gooddata/helpers/data_source_helpers.rb +0 -47
data/LICENSE.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # encoding: UTF-8
2
2
  #
3
- # Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
3
+ # Copyright (c) 2010-2021 GoodData Corporation. All rights reserved.
4
4
  # This source code is licensed under the BSD-style license found in the
5
5
  # LICENSE file in the root directory of this source tree.
data/README.md CHANGED
@@ -18,8 +18,7 @@ Feel free to check out the [GoodData community website](http://community.gooddat
18
18
  [![Downloads](http://img.shields.io/gem/dt/gooddata.svg)](http://rubygems.org/gems/gooddata)
19
19
  [![Dependency Status](https://gemnasium.com/gooddata/gooddata-ruby.png)](https://gemnasium.com/gooddata/gooddata-ruby)
20
20
  [![Code Climate](https://codeclimate.com/github/gooddata/gooddata-ruby.png)](https://codeclimate.com/github/gooddata/gooddata-ruby)
21
- [![Build Status](https://travis-ci.org/gooddata/gooddata-ruby.png)](https://travis-ci.org/gooddata/gooddata-ruby)
22
- [![Coverage Status](https://coveralls.io/repos/gooddata/gooddata-ruby/badge.png)](https://coveralls.io/r/gooddata/gooddata-ruby)
21
+ [![Build Status](https://github.com/gooddata/gooddata-ruby/actions/workflows/build.yml/badge.svg)](https://github.com/gooddata/gooddata-ruby/actions/workflows/build.yml/)
23
22
 
24
23
  ## Supported versions
25
24
 
@@ -95,4 +94,5 @@ For full contributor info see [contributors page](https://github.com/gooddata/go
95
94
 
96
95
  ## Copyright
97
96
 
98
- Copyright (c) 2010 - 2018 GoodData Corporation and Thomas Watson Steen. See [LICENSE](/LICENSE) for details.
97
+ (c) 2010-2021 GoodData Corporation
98
+ This repository is governed by the terms and conditions in the LICENSE. This repository contains a number of open source packages detailed in NOTICES, including the GoodData Ruby SDK, which is licensed under the BSD-3-Clause license and contains additional open source components detailed in the file called LICENSE_FOR_RUBY_SDK_COMPONENT.
data/Rakefile CHANGED
@@ -33,7 +33,14 @@ namespace :gem do
33
33
  desc "Release gem version #{GoodData::VERSION} to rubygems"
34
34
  task :release do
35
35
  gem = "gooddata-#{GoodData::VERSION}.gem"
36
-
36
+ origin_license_file = 'LICENSE'
37
+ new_license_file = 'LICENSE_FOR_RUBY_SDK_COMPONENT.txt'
38
+ notices_file = 'NOTICES.txt'
39
+ File.delete(origin_license_file) if File.exist?(origin_license_file)
40
+ File.delete(notices_file) if File.exist?(notices_file)
41
+ puts "Deleted files: #{origin_license_file} and #{notices_file}"
42
+ File.rename(new_license_file, origin_license_file) if File.exists?(new_license_file)
43
+ puts "Renamed file #{new_license_file} to #{origin_license_file}"
37
44
  puts "Building #{gem} ..."
38
45
  res = `gem build ./gooddata.gemspec`
39
46
  file = res.match('File: (.*)')[1]
data/SDK_VERSION CHANGED
@@ -1 +1 @@
1
- 2.1.14
1
+ 2.2.0
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.7.24
1
+ 3.7.43
@@ -1,6 +1,6 @@
1
1
  require 'optparse'
2
2
 
3
- example = 'Usage example: GD_ENV=testing GD_SPEC_PASSWORD=secret bundle exec ruby bin/test_projects_cleanup.rb'
3
+ example = 'Usage example: GD_ENV=testing GD_SPEC_PASSWORD= bundle exec ruby bin/test_projects_cleanup.rb'
4
4
 
5
5
  options = {}
6
6
  OptionParser.new do |opts|
@@ -22,6 +22,39 @@ require_relative '../spec/environment/environment'
22
22
  GoodData::Environment.load
23
23
  config = GoodData::Environment::ConnectionHelper::LCM_ENVIRONMENT
24
24
  secrets = GoodData::Environment::ConnectionHelper::SECRETS
25
+ default_domain = GoodData::Environment::ConnectionHelper::DEFAULT_DOMAIN
26
+
27
+ def delete_segment_by_title(title, segments, days = 14, force = false)
28
+ return if segments.empty?
29
+ dead_line = Time.now - days * 60 * 60 * 24
30
+
31
+ filtered_segments = segments.select do |s|
32
+ if s.id.match(title) && s.id.length > 14 && s.id[s.id.length-14..-1]
33
+ segment_created = s.id[s.id.length-14..-1]
34
+ created = Time.parse(segment_created) if segment_created
35
+
36
+ s if created.year >= Time.new.year && created < dead_line
37
+ end
38
+ end
39
+
40
+ filtered_segments.each do |segment|
41
+ begin
42
+ if force
43
+ segment.clients.each do |segment_client|
44
+ GoodData.logger.info("Deleting segment: #{segment.id} - client: #{segment_client.client_id}")
45
+ segment_client.dissociate
46
+ end
47
+
48
+ puts "Deleting segment: #{segment.id}"
49
+ segment && segment.delete(force: true)
50
+ else
51
+ puts "Would delete segment: #{segment.id}"
52
+ end
53
+ rescue RuntimeError, StandardError => ex
54
+ puts "Failed to delete segment #{segment.id}, reason: #{ex}"
55
+ end
56
+ end
57
+ end
25
58
 
26
59
  def delete_project_by_title(title, projects, days = 14, force = false)
27
60
  dead_line = Time.now - days * 60 * 60 * 24
@@ -73,8 +106,16 @@ def delete_ads_by_title(title, client, days = 14, force = false)
73
106
  puts "#{deleted} ADS instances with title \"#{title}\" #{'would be ' unless force}deleted."
74
107
  end
75
108
 
76
- def clean_up!(client, force, days)
109
+ def clean_up!(client, force, days, opts = {})
77
110
  projects = client.projects
111
+
112
+ if opts[:domain_id]
113
+ domain = client.domain(opts[:domain_id])
114
+
115
+ # segments id format: {title}_{hostname}_{datetime}
116
+ delete_segment_by_title(/CAR_DEMO_PREMIUM/, domain.segments, days, force)
117
+ end
118
+
78
119
  delete_project_by_title(/Insurance Demo Master/, projects, days, force)
79
120
  delete_project_by_title(/Car Demo Master/, projects, days, force)
80
121
  delete_project_by_title(/Insurance Demo Workspace/, projects, days, force)
@@ -117,7 +158,8 @@ prod_client = init_client(username, password, "https://#{config[:prod_server]}")
117
158
 
118
159
  force = options[:force]
119
160
  days = options[:days] || 3
161
+
120
162
  clean_up!(dev_client, force, days)
121
- clean_up!(prod_client, force, days)
163
+ clean_up!(prod_client, force, days, {domain_id: default_domain})
122
164
 
123
165
  dev_client.disconnect
data/ci/mssql/pom.xml ADDED
@@ -0,0 +1,62 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project xmlns="http://maven.apache.org/POM/4.0.0"
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+ <modelVersion>4.0.0</modelVersion>
6
+
7
+ <groupId>com.gooddata.lcm</groupId>
8
+ <artifactId>lcm-mssql-driver</artifactId>
9
+ <version>1.0-SNAPSHOT</version>
10
+
11
+ <dependencies>
12
+ <dependency>
13
+ <groupId>com.microsoft.sqlserver</groupId>
14
+ <artifactId>mssql-jdbc</artifactId>
15
+ <version>9.3.1.jre8-preview</version>
16
+ </dependency>
17
+ <dependency>
18
+ <groupId>com.microsoft.azure</groupId>
19
+ <artifactId>msal4j</artifactId>
20
+ <version>1.10.1</version>
21
+ </dependency>
22
+ <dependency>
23
+ <groupId>org.slf4j</groupId>
24
+ <artifactId>slf4j-api</artifactId>
25
+ <version>1.7.2</version>
26
+ </dependency>
27
+ </dependencies>
28
+
29
+ <profiles>
30
+ <profile>
31
+ <id>binary-packaging</id>
32
+ <build>
33
+ <plugins>
34
+ <plugin>
35
+ <artifactId>maven-dependency-plugin</artifactId>
36
+ <executions>
37
+ <execution>
38
+ <phase>package</phase>
39
+ <goals>
40
+ <goal>copy-dependencies</goal>
41
+ </goals>
42
+ <configuration>
43
+ <outputDirectory>${project.build.directory}</outputDirectory>
44
+ <!-- compile scope gives runtime and compile dependencies (skips test deps) -->
45
+ <includeScope>runtime</includeScope>
46
+ </configuration>
47
+ </execution>
48
+ </executions>
49
+ </plugin>
50
+ </plugins>
51
+ </build>
52
+ </profile>
53
+ </profiles>
54
+
55
+ <repositories>
56
+ <repository>
57
+ <id>my-repo1</id>
58
+ <name>my custom repo</name>
59
+ <url>https://repository.mulesoft.org/nexus/content/repositories/public/</url>
60
+ </repository>
61
+ </repositories>
62
+ </project>
data/ci/mysql/pom.xml ADDED
@@ -0,0 +1,57 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project xmlns="http://maven.apache.org/POM/4.0.0"
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+ <modelVersion>4.0.0</modelVersion>
6
+
7
+ <groupId>com.gooddata.lcm</groupId>
8
+ <artifactId>lcm-mysql-driver</artifactId>
9
+ <version>1.0-SNAPSHOT</version>
10
+
11
+ <dependencies>
12
+ <dependency>
13
+ <groupId>mysql</groupId>
14
+ <artifactId>mysql-connector-java</artifactId>
15
+ <version>8.0.25</version>
16
+ </dependency>
17
+ <dependency>
18
+ <groupId>org.slf4j</groupId>
19
+ <artifactId>slf4j-api</artifactId>
20
+ <version>1.7.2</version>
21
+ </dependency>
22
+ </dependencies>
23
+
24
+ <profiles>
25
+ <profile>
26
+ <id>binary-packaging</id>
27
+ <build>
28
+ <plugins>
29
+ <plugin>
30
+ <artifactId>maven-dependency-plugin</artifactId>
31
+ <executions>
32
+ <execution>
33
+ <phase>package</phase>
34
+ <goals>
35
+ <goal>copy-dependencies</goal>
36
+ </goals>
37
+ <configuration>
38
+ <outputDirectory>${project.build.directory}</outputDirectory>
39
+ <!-- compile scope gives runtime and compile dependencies (skips test deps) -->
40
+ <includeScope>runtime</includeScope>
41
+ </configuration>
42
+ </execution>
43
+ </executions>
44
+ </plugin>
45
+ </plugins>
46
+ </build>
47
+ </profile>
48
+ </profiles>
49
+
50
+ <repositories>
51
+ <repository>
52
+ <id>my-repo1</id>
53
+ <name>my custom repo</name>
54
+ <url>https://repository.mulesoft.org/nexus/content/repositories/public/</url>
55
+ </repository>
56
+ </repositories>
57
+ </project>
@@ -0,0 +1,57 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project xmlns="http://maven.apache.org/POM/4.0.0"
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+ <modelVersion>4.0.0</modelVersion>
6
+
7
+ <groupId>com.gooddata.lcm</groupId>
8
+ <artifactId>lcm-postgresql-driver</artifactId>
9
+ <version>1.0-SNAPSHOT</version>
10
+
11
+ <dependencies>
12
+ <dependency>
13
+ <groupId>org.postgresql</groupId>
14
+ <artifactId>postgresql</artifactId>
15
+ <version>42.2.19</version>
16
+ </dependency>
17
+ <dependency>
18
+ <groupId>org.slf4j</groupId>
19
+ <artifactId>slf4j-api</artifactId>
20
+ <version>1.7.2</version>
21
+ </dependency>
22
+ </dependencies>
23
+
24
+ <profiles>
25
+ <profile>
26
+ <id>binary-packaging</id>
27
+ <build>
28
+ <plugins>
29
+ <plugin>
30
+ <artifactId>maven-dependency-plugin</artifactId>
31
+ <executions>
32
+ <execution>
33
+ <phase>package</phase>
34
+ <goals>
35
+ <goal>copy-dependencies</goal>
36
+ </goals>
37
+ <configuration>
38
+ <outputDirectory>${project.build.directory}</outputDirectory>
39
+ <!-- compile scope gives runtime and compile dependencies (skips test deps) -->
40
+ <includeScope>runtime</includeScope>
41
+ </configuration>
42
+ </execution>
43
+ </executions>
44
+ </plugin>
45
+ </plugins>
46
+ </build>
47
+ </profile>
48
+ </profiles>
49
+
50
+ <repositories>
51
+ <repository>
52
+ <id>my-repo1</id>
53
+ <name>my custom repo</name>
54
+ <url>https://repository.mulesoft.org/nexus/content/repositories/public/</url>
55
+ </repository>
56
+ </repositories>
57
+ </project>
data/ci/redshift/pom.xml CHANGED
@@ -67,7 +67,7 @@
67
67
  <repository>
68
68
  <id>my-repo1</id>
69
69
  <name>my custom repo</name>
70
- <url>https://repository.mulesoft.org/nexus/content/repositories/public/</url>
70
+ <url>https://sonatype-nexus.intgdc.com/repository/public/</url>
71
71
  </repository>
72
72
  </repositories>
73
73
  </project>
@@ -1,40 +1,40 @@
1
- 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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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
- 4q1CxNsPBgriRc+EGQNrkvIahPVdAv+Ho6d3C//t3EEKfVY0i1VqFbFd1DDt
11
- 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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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
- 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
- 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
- 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
- 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
- GsGrGb0w7Fmx6tb4nJ5y7MreggYiVF4a1a8qWp4hmPp8yuADK21gggDkxOQn
31
- J2hHqiJCrPHNHD/BL9x51bi2NXSCfMVhnhLnFfNw8QC49+CqRY4ujq04zqSE
32
- 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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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
40
- MUk4BaY=
1
+ SRNgp8VSJ8HqV2LnLD3kYkMO39u9rn3ssPvJHQuNHnPUDcc/FkCh529uTiqq
2
+ ON9+j5fFTjsKHr437hwnUCAq5Nn3ANSAhOSXehi3wqxicQrUU2xgbQbI+hk7
3
+ mLWrLOsm9Cn19kz9yblDh4aHTQBydJ6JwdPVnd6igIDnfLMVVVpzWK08aFfc
4
+ Y5KAeyIlLn5RQPQJL85LhVTOEG871z8wCAigeGaP2vnLzBj/9GQdwdDTsQzL
5
+ k1Rz2K3tL9SoUIVZ56dr1U11MYXduRzYJMawk21t9B7yNeKyuZCXx9U8VxAr
6
+ dqecLJoBAQI2ppPikJS3ycna/lRYD0OsGv6B7AR8sAkAB0XjpJZ9nNJys/PK
7
+ bBnmmKq+hvDu9zsIba8ptz0L3F5bi+Cfa+5c/Hyj7Jm3xiq5IWyh5LmtTmOI
8
+ MQa/fUPlerGe+7VZYlIm17fjd99cgqRM8yII/bTMvAEQREu1UxEwC4JFe9Bz
9
+ eFHeg6EorQJyBBV+LCDk86WS5RJBhBoTVj/LOm3BIUVr7Xee7naJxuRpQjgl
10
+ iTft/IfVhiwEPPonasXRjD1XwPKXUz8rX1C5JWDreOQB4hCPcNm29y/dV7Z4
11
+ 7hv4ki9YgIhhmc/sNqvSE7JO2w5dvyKo05mYQj1CQUdvqpbge68J8cV84wp5
12
+ Lj3jHRXyDf/2x0IdpJTACGUy4R8XQUYpLDAfbtmgTuHu8HndxVb3O+rpwk+K
13
+ ipXb0mj4YQvc2SbCJ58HryX9i9ZfzW1/PwNtHHw4q5+BhNVvRaqJ61aIS5LP
14
+ DzjqlJ4OtpZfNjgmwgk9pfDRmYS8MOld8lNfhIh9WjyuLAW+MiaMZy8o6hTS
15
+ 5vI65QGpD7HbgKQ4tX8LXAPVB8/rF0ReRcb1wiWydeP1eh4Dz6vXvYaJ0Jju
16
+ Q0/yCzbXyGFqv4P6FcOkVAyWhtF2kH/H114DxLq759r3Hoh+IMZutWlWFWhA
17
+ qslFPWN4P9R0kPO2KeiRsLOvBplQIANExar26dRg8hFHx0y3aT3CB7sa9bYw
18
+ DE7t2gVdMEU765f+bZhZQ2M6N2GKQv/UtXUT8xJ9skxFf1aVLDNwFh+3xs1d
19
+ f2WosiqrQ/bsagdZVmuDob9qREdbRP+EF4toWFJyL4wAhTUht1jJFogIkHBl
20
+ GtuT9c/CDQ4je4gANU0vyNf0XmlwYnZ6oQfMl7XBmYeEtXBA5uQAWeFcy6vL
21
+ zqfzwksASCo9LdUqfctD3gjMsm2J+IdAh99OxRcfHvnbV6xL9m+4Ng0GJppJ
22
+ t+w42XqznLRXLTS9RcFD2GFm7mNZziDT2Mb9L4e6Bjy5SoqCftiCbDzGJyka
23
+ BHK/4+l1MsS+J4Qr4qGFF9+HVTP/EF8InQwQECaujyzsrfX8Wn4GuSX4ZdMt
24
+ F0kakkN8A+9LpmFlb8oi4bsmzFTo1tQPRJwann/5TO0jm+Vt6ETmepE0EZ1K
25
+ SIXfQT+a9laF/UJ3bGGxLXIRp3g/ICz0ofBDeSHOCjOVhXVfKnRs/2KpPPex
26
+ yPKLTUdIAtOsKTEtF9JF97C7D/JzxHbssTCj6518BHGxBepn0HZUpeGOlClj
27
+ HiKh8PGKtP0tix1NI/tmhSHCdoi6L/XEryU2pm87qKrlKJU/6z5w7rtpCxto
28
+ X5ztrFk91a3VPEzGRmh7Hw5oNzCi5jmSzZeVgIXxEkVfdUrGAi7ZmJtgEUz5
29
+ 1BJYd2MSBlqHGHF1iIQoqtyklLuqOJR1GvS1/OxQXpXXcVTy47fzlNuKuYkg
30
+ 7beiD5H0Sz/d6J4YNgaJnde+FscHuwOfjzH6uOGQMa6A1NEBW5J1TrAPiVh9
31
+ nm7pPtDg41dScUp3JqeMRA1Akm5wyGna8yocb3CwvSBEy7KrW/8mUR/TpLao
32
+ f9HuWE8UNPjqUl6nTzVpZ2TJFM4ffZbX3NsjS+wsZFtyRAD4z0bBKveUTm19
33
+ pMTBvNljgvGlS6mzYZybPh00l3kiRU9z4Xf7Y1KQH4oSxTpwmgmqiESD0Xv8
34
+ ZmJCU/4VAxbzHwogyeaQvX4pAeC2C1lqgwYdAh6lO7OwgAhkGg3p41V1j6BA
35
+ aOcqaHk+zKpP3pL3jzAZdLvL49y430UXDNN3M6nSafFzSMrPWPjGNyIXVx68
36
+ uDNKCSIcgwAGPtossk0qRKygoQUlKdKull+gOjP/bSIoENKE4rz8RdCsG5qA
37
+ 5T7/iJflhrWGlXfI0MgIe7Lpl41jQ769rI6tSuHu9EsMFOW6/W55IsUR2+p7
38
+ RxClPslQd3tR/TSZvOM5onHK8sM/Lk+rG9BTi0h0ghwVYEiTXPSKPw70z3WY
39
+ 1YlVQS9RSr0AVn9O/Esju2XFtkcE4spXgqiQx0Wx3Y9+21UryNu1amI8rzIH
40
+ N/WeNcE=
@@ -1,4 +1,5 @@
1
1
  ---
2
+ generate_attribution_file: true
2
3
  fossa_project: "gooddata-ruby-sdk"
3
4
  ignored_paths:
4
5
  - 'ci/.*'
data/gooddata.gemspec CHANGED
@@ -5,7 +5,7 @@ require 'gooddata/version'
5
5
  Gem::Specification.new do |s|
6
6
  s.name = 'gooddata'
7
7
  s.version = GoodData::VERSION
8
- s.licenses = ['BSD']
8
+ s.licenses = ['BSD-3-Clause']
9
9
  s.platform = 'java' if RUBY_PLATFORM =~ /java/
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.email = 'lcm@gooddata.com'
25
25
  s.extra_rdoc_files = %w(LICENSE README.md)
26
26
 
27
- s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
27
+ s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR).map { |f| f unless %w(NOTICES.txt LICENSE_FOR_RUBY_SDK_COMPONENT.txt).include?(f) }
28
28
  s.files.reject! { |fn| fn.start_with? 'spec/' }
29
29
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
30
30
 
@@ -55,14 +55,19 @@ Gem::Specification.new do |s|
55
55
  s.add_development_dependency 'sqlite3' if RUBY_PLATFORM != 'java'
56
56
 
57
57
  if RUBY_VERSION >= '2.5'
58
- s.add_dependency 'activesupport', '>= 6.0.3.1', '< 6.1'
58
+ s.add_dependency 'activesupport', '>= 6.0.3.1', '< 6.2'
59
59
  else
60
60
  s.add_dependency 'activesupport', '>= 5.2.4.3', '< 6.0'
61
61
  end
62
62
 
63
63
  s.add_dependency 'aws-sdk-s3', '~> 1.16'
64
- s.add_dependency 'docile', '~> 1.1'
65
- s.add_dependency 'erubis', '~> 2.7'
64
+ if RUBY_VERSION >= '2.5'
65
+ s.add_dependency 'docile', '~> 1.1'
66
+ else
67
+ s.add_dependency 'docile', '> 1.1', '< 1.4.0'
68
+ end
69
+ s.add_dependency 'azure-storage-blob', '~> 1.1.0'
70
+ s.add_dependency 'nokogiri', '~> 1.10.0'
66
71
  s.add_dependency 'gli', '~> 2.15'
67
72
  s.add_dependency 'gooddata_datawarehouse', '~> 0.0.10' if RUBY_PLATFORM == 'java'
68
73
  s.add_dependency 'highline', '= 2.0.0.pre.develop.14'
@@ -74,7 +79,6 @@ Gem::Specification.new do |s|
74
79
  s.add_dependency 'restforce', '>= 2.4', '< 4.0'
75
80
  s.add_dependency 'rest-client', '~> 2.0'
76
81
  s.add_dependency 'rubyzip', '~> 1.2', '>= 1.2.1'
77
- s.add_dependency 'salesforce_bulk_query', '~> 0.2'
78
82
  s.add_dependency 'terminal-table', '~> 1.7'
79
83
  s.add_dependency 'thread_safe'
80
84
  s.add_dependency 'backports'
@@ -1,4 +1,4 @@
1
1
  apiVersion: v1
2
2
  name: lcm-bricks
3
3
  description: LCM Bricks
4
- version: 2.0.3
4
+ version: 2.0.8
@@ -92,4 +92,14 @@ data:
92
92
  annotations:
93
93
  description: "We are hitting CPU limit in LCM namespace."
94
94
  summary: "We are hitting CPU limit in LCM namespace."
95
-
95
+ - alert: "[LCM] POD is in undesirable state on cluster={{ .Values.clusterId }}"
96
+ expr: kube_pod_status_phase{namespace='{{ .Release.Namespace }}', phase!~"Running|Succeeded|Failed"} > 0
97
+ for: 5m
98
+ labels:
99
+ cluster_id: {{ .Values.clusterId }}
100
+ severity: critical
101
+ team: lcm
102
+ annotations:
103
+ description: "POD {{`{{ $labels.pod }}`}} is not in desirable state"
104
+ summary: "POD is not in desirable state"
105
+ runbook: "https://confluence.intgdc.com/display/plat/Generic+runbooks#Genericrunbooks-Podisinundesirablestate"
data/lcm.rake CHANGED
@@ -3,7 +3,7 @@ require 'fileutils'
3
3
  require 'pathname'
4
4
  require 'rspec/core/rake_task'
5
5
 
6
- test_cases = %i[integration slow userprov load]
6
+ test_cases = %i[integration-e2e integration-release integration-others slow userprov load]
7
7
 
8
8
  # Schema for new Bricks.
9
9
  brick_info_schema = {
@@ -79,7 +79,7 @@ namespace :test do
79
79
  test_cases.each do |test_case|
80
80
  desc "Run #{test_case} tests"
81
81
  RSpec::Core::RakeTask.new(test_case) do |task|
82
- task.pattern = "spec/lcm/#{test_case}/**/*_spec.rb"
82
+ task.pattern = test_case['integration'] ? "spec/lcm/integration/spec/#{test_case.to_s.split('-')[-1]}/*_spec.rb" : "spec/lcm/#{test_case}/**/*_spec.rb"
83
83
  end
84
84
  end
85
85
 
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
  #
3
- # Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
3
+ # Copyright (c) 2010-2021 GoodData Corporation. All rights reserved.
4
4
  # This source code is licensed under the BSD-style license found in the
5
5
  # LICENSE file in the root directory of this source tree.
6
6
 
@@ -12,21 +12,47 @@ module GoodData
12
12
  class AWSMiddleware < Bricks::Middleware
13
13
  def call(params)
14
14
  params = params.to_hash
15
- if params.key?('aws_client')
15
+ s3_config = get_s3_config(params)
16
+
17
+ unless s3_config.empty?
16
18
  GoodData.logger.info('Setting up AWS-S3 connection')
17
- raise 'Unable to connect to AWS. Parameter "aws_client" seems to be empty' unless params['aws_client']
18
- raise 'Unable to connect to AWS. Parameter "access_key_id" is missing' if params['aws_client']['access_key_id'].blank?
19
- raise 'Unable to connect to AWS. Parameter "secret_access_key" is missing' if params['aws_client']['secret_access_key'].blank?
20
- params['aws_client'] = rewrite_for_aws_sdk_v2(params['aws_client'])
21
- symbolized_config = GoodData::Helpers.symbolize_keys(params['aws_client'])
22
- s3 = Aws::S3::Resource.new(symbolized_config)
23
- params['aws_client']['s3_client'] = s3
19
+ if params.key?('aws_client')
20
+ params['s3_client'] = {}
21
+ elsif params.key?('s3_client')
22
+ params['input_source'] = {} unless params.key?('input_source')
23
+ params['input_source']['bucket'] = params['s3_client']['bucket']
24
+ end
25
+ s3_config = rewrite_for_aws_sdk_v2(s3_config)
26
+ symbolized_config = GoodData::Helpers.symbolize_keys(s3_config)
27
+ params['s3_client']['client'] = Aws::S3::Resource.new(symbolized_config)
24
28
  end
25
29
  @app.call(params)
26
30
  end
27
31
 
28
32
  private
29
33
 
34
+ def get_s3_config(params)
35
+ s3_config = {}
36
+ if params.key?('aws_client')
37
+ GoodData.logger.warn('Found two configuration aws_client and s3_client for S3 input source, use aws_client configuration') if params.key?('s3_client')
38
+ raise 'Unable to connect to AWS. Parameter "aws_client" seems to be empty' unless params['aws_client']
39
+ raise 'Unable to connect to AWS. Parameter "access_key_id" is missing' if params['aws_client']['access_key_id'].blank?
40
+ raise 'Unable to connect to AWS. Parameter "secret_access_key" is missing' if params['aws_client']['secret_access_key'].blank?
41
+
42
+ s3_config = params['aws_client']
43
+ elsif params.key?('s3_client')
44
+ raise 'Unable to connect to AWS. Parameter "s3_client" seems to be empty' unless params['s3_client']
45
+ raise 'Unable to connect to AWS. Parameter "accessKey" is missing' if params['s3_client']['accessKey'].blank?
46
+ raise 'Unable to connect to AWS. Parameter "secretKey" is missing' if params['s3_client']['secretKey'].blank?
47
+ raise 'Unable to connect to AWS. Parameter "bucket" is missing' if params['s3_client']['bucket'].blank?
48
+
49
+ s3_config['access_key_id'] = params['s3_client']['accessKey']
50
+ s3_config['secret_access_key'] = params['s3_client']['secretKey']
51
+ s3_config['region'] = params['s3_client']['region']
52
+ end
53
+ s3_config
54
+ end
55
+
30
56
  def rewrite_for_aws_sdk_v2(config)
31
57
  config['region'] = 'us-west-2' unless config['region']
32
58
  if config['use_ssl']