gooddata 0.6.26 → 0.6.27

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 (50) hide show
  1. checksums.yaml +4 -4
  2. data/gooddata.gemspec +3 -4
  3. data/lib/gooddata/cli/shared.rb +5 -0
  4. data/lib/gooddata/commands/project.rb +2 -4
  5. data/lib/gooddata/core/logging.rb +48 -29
  6. data/lib/gooddata/core/nil_logger.rb +6 -0
  7. data/lib/gooddata/helpers/global_helpers.rb +3 -3
  8. data/lib/gooddata/models/domain.rb +5 -4
  9. data/lib/gooddata/models/metadata.rb +2 -1
  10. data/lib/gooddata/models/metadata/report.rb +5 -1
  11. data/lib/gooddata/models/model.rb +1 -1
  12. data/lib/gooddata/models/process.rb +2 -0
  13. data/lib/gooddata/models/project.rb +30 -9
  14. data/lib/gooddata/models/project_metadata.rb +8 -2
  15. data/lib/gooddata/rest/connection.rb +19 -17
  16. data/lib/gooddata/version.rb +1 -1
  17. data/spec/environment/develop.rb +4 -4
  18. data/spec/environment/environment.rb +9 -2
  19. data/spec/integration/clients_spec.rb +5 -6
  20. data/spec/integration/full_process_schedule_spec.rb +1 -1
  21. data/spec/integration/project_spec.rb +3 -3
  22. data/spec/integration/schedule_spec.rb +2 -2
  23. data/spec/integration/user_filters_spec.rb +2 -1
  24. data/spec/integration/user_group_spec.rb +8 -8
  25. data/spec/integration/variables_spec.rb +2 -1
  26. data/spec/unit/core/logging_spec.rb +11 -3
  27. data/spec/unit/helpers_spec.rb +0 -1
  28. data/spec/unit/models/domain_spec.rb +0 -9
  29. data/spec/unit/models/from_wire_spec.rb +0 -4
  30. data/spec/unit/models/metric_spec.rb +0 -4
  31. data/spec/unit/models/profile_spec.rb +3 -2
  32. data/spec/unit/models/project_role_spec.rb +7 -8
  33. data/spec/unit/models/to_manifest_spec.rb +2 -4
  34. metadata +30 -81
  35. data/lib/gooddata/rest/connections/rest_client_connection.rb +0 -181
  36. data/spec/unit/cli/commands/cmd_api_spec.rb +0 -40
  37. data/spec/unit/cli/commands/cmd_domain_spec.rb +0 -112
  38. data/spec/unit/cli/commands/cmd_process_spec.rb +0 -47
  39. data/spec/unit/cli/commands/cmd_project_spec.rb +0 -85
  40. data/spec/unit/cli/commands/cmd_role_spec.rb +0 -59
  41. data/spec/unit/cli/commands/cmd_run_ruby_spec.rb +0 -17
  42. data/spec/unit/cli/commands/cmd_scaffold_spec.rb +0 -64
  43. data/spec/unit/cli/commands/cmd_user_spec.rb +0 -35
  44. data/spec/unit/commands/command_api_spec.rb +0 -18
  45. data/spec/unit/commands/command_auth_spec.rb +0 -171
  46. data/spec/unit/commands/command_dataset_spec.rb +0 -50
  47. data/spec/unit/commands/command_process_spec.rb +0 -97
  48. data/spec/unit/commands/command_scaffold_spec.rb +0 -67
  49. data/spec/unit/commands/command_user_spec.rb +0 -28
  50. data/spec/unit/data/guesser_spec.rb +0 -63
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2127d4270e7e7ca7cb11b464bc50764279bccdf8
4
- data.tar.gz: 3422d4671cd05b67654483c2d05528935f5c19c7
3
+ metadata.gz: c7c722429b61df1bed1aaded70e6965395e0fca4
4
+ data.tar.gz: 053753b93d712a9b425f78ffe01d2d79073f2b40
5
5
  SHA512:
6
- metadata.gz: 0de341f4966e2955cc650c06ab6af2ae0d4e14d74a995d165bb9b62c72a1f32391691052d80687be74dc84694d93070114fd99460295b72957bff3614a95b69a
7
- data.tar.gz: bdcc154ca1a135aaa194f6f6bca3697c1cbef5deb95e8c38eb3220c2b0d71e15367d727ebdd6a221a3fa729cc88acf19d18ffe106af743601e2fd59bc1a944ba
6
+ metadata.gz: a779370b66fdba96c47a2d56af28a71223b383765a52f4452c6736dd10646fe8296605aa3426e315d67f2af199fce33e3cff6a7ddaaa652734e267749e4571d8
7
+ data.tar.gz: 176dff8b1c9691c537a43cc7e1cb9c316cee0a9a7efb9d24fa57cc55e211a3b67cdbb4a7193a6988983924bf09fac67371f4eb450c9157441ef062c266ffd782
data/gooddata.gemspec CHANGED
@@ -29,13 +29,12 @@ Gem::Specification.new do |s|
29
29
 
30
30
  s.add_development_dependency 'bundler'
31
31
  s.add_development_dependency 'debase', '~> 0.1', '>= 0.1.7' if !ENV['TRAVIS_BUILD'] && RUBY_VERSION >= '2.0.0'
32
- s.add_development_dependency 'guard', '~> 2.13', '>= 2.13.0'
33
- s.add_development_dependency 'guard-rspec', '~> 4.6', '>= 4.6.4'
34
32
  s.add_development_dependency 'license_finder', '~> 2.0', '>= 2.0.4'
35
- s.add_development_dependency 'rake', '~> 10.4', '>= 10.4.2'
33
+ s.add_development_dependency 'rake', '~> 11.1', '>= 11.1.1'
36
34
  s.add_development_dependency 'rake-notes', '~> 0.2', '>= 0.2.0'
37
35
  s.add_development_dependency 'redcarpet', '~> 3.1', '>= 3.1.1' if RUBY_PLATFORM != 'java'
38
- s.add_development_dependency 'rspec', '~> 3.3', '>= 3.3.0'
36
+ s.add_development_dependency 'rspec', '~> 3.4', '>= 3.4.0'
37
+ s.add_development_dependency 'rspec-expectations', '~> 3.4', '>= 3.4.0'
39
38
  s.add_development_dependency 'rubocop', '~> 0.34', '>= 0.34.0'
40
39
  s.add_development_dependency 'ruby-debug-ide', '~> 0.4' if !ENV['TRAVIS_BUILD'] && RUBY_VERSION >= '2.0.0'
41
40
  s.add_development_dependency 'simplecov', '~> 0.10', '>= 0.10.0'
@@ -40,6 +40,11 @@ module GoodData
40
40
  arg_name 'server'
41
41
  flag [:s, :server]
42
42
 
43
+ desc 'Verify SSL certificate'
44
+ default_value true
45
+ arg_name 'verify-ssl'
46
+ switch [:'verify-ssl', :verify_ssl]
47
+
43
48
  desc 'WEBDAV Server. Used for uploads of files'
44
49
  default_value nil
45
50
  arg_name 'web dav server'
@@ -106,7 +106,7 @@ module GoodData
106
106
  def jack_in(options)
107
107
  goodfile_path = GoodData::Helpers.find_goodfile(Pathname('.'))
108
108
 
109
- spin_session = proc do |goodfile, _blueprint|
109
+ spin_session = proc do |goodfile|
110
110
  project_id = options[:project_id] || goodfile[:project_id]
111
111
 
112
112
  begin
@@ -125,10 +125,8 @@ module GoodData
125
125
 
126
126
  if goodfile_path
127
127
  goodfile = MultiJson.load(File.read(goodfile_path), :symbolize_keys => true)
128
- model_key = goodfile[:model]
129
- blueprint = GoodData::Model::ProjectBlueprint.new(eval(File.read(model_key)).to_hash) if File.exist?(model_key) && !File.directory?(model_key)
130
128
  FileUtils.cd(goodfile_path.dirname) do
131
- spin_session.call(goodfile, blueprint)
129
+ spin_session.call(goodfile)
132
130
  end
133
131
  else
134
132
  spin_session.call({}, nil)
@@ -4,33 +4,40 @@
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
 
7
+ require 'rest-client'
8
+
7
9
  require_relative 'nil_logger'
8
10
 
9
11
  module GoodData
12
+ DEFAULT_LOG_LEVEL = Logger::INFO
13
+ DEFAULT_LOG_OUTPUT = STDOUT
14
+ DEFAULT_LOGGER_CLASS = Logger
15
+
16
+ DEFAULT_RESTLOG_LEVEL = Logger::INFO
17
+ DEFAULT_RESTLOG_OUTPUT = STDOUT
18
+ DEFAULT_RESTLOGGER_CLASS = Logger
19
+
10
20
  class << self
11
- attr_writer :logger
21
+ attr_accessor :logger, :rest_logger
12
22
  attr_writer :stats
13
23
 
14
24
  # Turn logging on
15
25
  #
16
26
  # ### Example
17
27
  #
28
+ # # Turn of default logging
18
29
  # GoodData.logging_on
19
30
  #
20
- def logging_on(level = nil)
21
- @logger = default_logger if logger.is_a? NilLogger
22
- @logger.level = level if level
23
- @logger
24
- end
25
-
26
- # Turn logging on with HTTP included
31
+ # # Log only WARN and higher
32
+ # GoodData.logging_on(Logger::WARN)
27
33
  #
28
- # ### Example
29
- #
30
- # GoodData.logging_http_on
34
+ # # Log DEBUG and above to file
35
+ # GoodData.logging_on(Logger::DEBUG, 'log.txt')
31
36
  #
32
- def logging_http_on
33
- logging_on(Logger::DEBUG)
37
+ def logging_on(level = DEFAULT_LOG_LEVEL, output = DEFAULT_LOG_OUTPUT, klass = DEFAULT_LOGGER_CLASS)
38
+ @logger = klass.new(output)
39
+ @logger.level = level
40
+ @logger
34
41
  end
35
42
 
36
43
  # Turn logging on
@@ -47,18 +54,30 @@ module GoodData
47
54
  !@logger.instance_of?(NilLogger)
48
55
  end
49
56
 
50
- # Returns the logger instance. The default implementation
51
- # is a logger to stdout on INFO level
52
- # For some serious logging, set the logger instance using
53
- # the logger= method
57
+ # Turn logging on with HTTP included
54
58
  #
55
59
  # ### Example
56
60
  #
57
- # require 'logger'
58
- # GoodData.logger = Logger.new(STDOUT)
61
+ # GoodData.logging_http_on
59
62
  #
60
- def logger
61
- @logger ||= default_logger
63
+ def logging_http_on(level = DEFAULT_RESTLOG_LEVEL, output = DEFAULT_RESTLOG_OUTPUT, klass = DEFAULT_RESTLOGGER_CLASS)
64
+ @logger = klass.new(output)
65
+ @logger.level = level
66
+ @logger
67
+ end
68
+
69
+ # Turn logging on
70
+ #
71
+ # ### Example
72
+ #
73
+ # GoodData.logging_http_off
74
+ #
75
+ def logging_http_off
76
+ @rest_client = NilLogger.new
77
+ end
78
+
79
+ def logging_http_on?
80
+ !@rest_client.instance_of?(NilLogger)
62
81
  end
63
82
 
64
83
  def stats_on
@@ -73,14 +92,14 @@ module GoodData
73
92
  @stats = false
74
93
  end
75
94
 
76
- private
95
+ # Initial setup of logger
96
+ GoodData.logger = GoodData.logging_on
77
97
 
78
- # The default logger - stdout and INFO level
79
- #
80
- def default_logger
81
- log = Logger.new(STDOUT)
82
- log.level = Logger::INFO
83
- log
84
- end
98
+ # Initial setup of rest logger
99
+ GoodData.rest_logger = GoodData.logging_http_on(
100
+ nil,
101
+ DEFAULT_RESTLOG_OUTPUT,
102
+ NilLogger
103
+ )
85
104
  end
86
105
  end
@@ -7,6 +7,12 @@
7
7
  module GoodData
8
8
  # Dummy implementation of logger
9
9
  class NilLogger
10
+ attr_accessor :level
11
+
12
+ def initialize(*_args)
13
+ @level = nil
14
+ end
15
+
10
16
  def debug(*_args)
11
17
  end
12
18
 
@@ -28,10 +28,10 @@ module GoodData
28
28
  root = Pathname(options[:root] || '/')
29
29
  pwd = Pathname(pwd).expand_path
30
30
  loop do
31
- gf = pwd + 'Goodfile'
32
- return gf if gf.exist?
31
+ gf = pwd + '.gooddata'
32
+ return gf if File.exist?(gf)
33
33
  pwd = pwd.parent
34
- break unless root == pwd
34
+ break if root == pwd
35
35
  end
36
36
  nil
37
37
  end
@@ -14,6 +14,8 @@ module GoodData
14
14
  class Domain < Rest::Resource
15
15
  attr_reader :name
16
16
 
17
+ ProvisioningResult = Struct.new('ProvisioningResult', :id, :status, :project_uri, :error)
18
+
17
19
  class << self
18
20
  # Looks for domain
19
21
  #
@@ -230,11 +232,11 @@ module GoodData
230
232
  domain = client.domain(default_domain_name)
231
233
 
232
234
  # Prepare cache for domain users
233
- domain_users_cache = Hash[domain.users.map { |u| [u.login, u] }]
235
+ domain_users_cache = Hash[domain.users.map { |u| [u.login.downcase, u] }]
234
236
 
235
237
  list.pmapcat do |user|
236
238
  begin
237
- user_data = user.to_hash
239
+ user_data = user.to_hash.tap { |uh| uh[:login].downcase }
238
240
  domain_user = domain_users_cache[user_data[:login]]
239
241
  if !domain_user
240
242
  added_user = domain.add_user(user_data, opts)
@@ -387,7 +389,6 @@ module GoodData
387
389
  def provision_client_projects
388
390
  res = client.post(segments_uri + '/provisionClientProjects', nil)
389
391
  res = client.poll_on_code(res['asyncTask']['links']['poll'])
390
- klass = Struct.new('ProvisioningResult', :id, :status, :project_uri, :error)
391
392
  failed_count = GoodData::Helpers.get_path(res, %w(clientProjectProvisioningResult failed count), 0)
392
393
  created_count = GoodData::Helpers.get_path(res, %w(clientProjectProvisioningResult created count), 0)
393
394
  return Enumerator.new([]) if failed_count + created_count == 0
@@ -396,7 +397,7 @@ module GoodData
396
397
  loop do
397
398
  result = client.get(uri)
398
399
  (GoodData::Helpers.get_path(result, %w(clientProjectProvisioningResultDetails items)) || []).each do |item|
399
- y << klass.new(item['id'], item['status'], item['project'], item['error'])
400
+ y << ProvisioningResult.new(item['id'], item['status'], item['project'], item['error'])
400
401
  end
401
402
  uri = GoodData::Helpers.get_path(res, %w(clientProjectProvisioningResultDetails paging next))
402
403
  break if uri.nil?
@@ -194,7 +194,8 @@ module GoodData
194
194
  explicit_identifier = meta['identifier']
195
195
  # Pre-check to provide a user-friendly error rather than
196
196
  # failing later
197
- if explicit_identifier && MdObject[explicit_identifier, opts]
197
+ klass = self.class
198
+ if explicit_identifier && klass[explicit_identifier, opts]
198
199
  fail "Identifier '#{explicit_identifier}' already in use"
199
200
  end
200
201
 
@@ -27,7 +27,11 @@ module GoodData
27
27
  title = options[:title]
28
28
  fail 'Report needs a title specified' unless title
29
29
  summary = options[:summary] || ''
30
- rd = options[:rd] || ReportDefinition.create(options)
30
+
31
+ options_rd = options.dup
32
+ options_rd.delete(:identifier)
33
+
34
+ rd = options[:rd] || ReportDefinition.create(options_rd)
31
35
  rd.save
32
36
 
33
37
  report = {
@@ -175,7 +175,7 @@ module GoodData
175
175
  data.zip(manifest['dataSetSLIManifestList']).each do |item|
176
176
  path = item[0][:data]
177
177
  path = item[0][:data].path if item[0][:data].respond_to? :path
178
- inline_data = path.is_a?(String) ? false : true
178
+ inline_data = !path.is_a?(String)
179
179
  csv_header = nil
180
180
 
181
181
  filename = item[1]['dataSetSLIManifest']['file']
@@ -170,6 +170,7 @@ module GoodData
170
170
  private
171
171
 
172
172
  def with_zip(opts = {})
173
+ client = opts[:client]
173
174
  Tempfile.open('deploy-graph-archive') do |temp|
174
175
  zip_filename = temp.path
175
176
  File.open(zip_filename, 'w') do |zip|
@@ -183,6 +184,7 @@ module GoodData
183
184
  end
184
185
 
185
186
  def zip_and_upload(path, files_to_exclude, opts = {})
187
+ client = opts[:client]
186
188
  puts 'Creating package for upload'
187
189
  if !path.directory? && (path.extname == '.grf' || path.extname == '.rb')
188
190
  with_zip(opts) do |zipfile|
@@ -207,7 +207,11 @@ module GoodData
207
207
  else
208
208
  client.projects(to_project)
209
209
  end
210
+ transfer_processes(from_project, to_project)
211
+ transfer_schedules(from_project, to_project)
212
+ end
210
213
 
214
+ def transfer_processes(from_project, to_project)
211
215
  from_project.processes.each do |process|
212
216
  Dir.mktmpdir('etl_transfer') do |dir|
213
217
  dir = Pathname(dir)
@@ -224,7 +228,6 @@ module GoodData
224
228
  .select { |_, procs| procs.length == 1 }
225
229
  .flat_map { |_, procs| procs.select { |p| p[0].project.pid == to_project.pid }.map { |p| p[0] } }
226
230
  .peach(&:delete)
227
- transfer_schedules(from_project, to_project)
228
231
  end
229
232
 
230
233
  # Clones project along with etl and schedules.
@@ -352,8 +355,8 @@ module GoodData
352
355
  # @param [options] Optional report options
353
356
  # @return [GoodData::Report] Instance of new report
354
357
  def add_report(options = {})
355
- rep = GoodData::Report.create(options.merge(client: client, project: self))
356
- rep.save
358
+ report = GoodData::Report.create(options.merge(client: client, project: self))
359
+ report.save
357
360
  end
358
361
 
359
362
  alias_method :create_report, :add_report
@@ -1283,7 +1286,7 @@ module GoodData
1283
1286
  # Imports users
1284
1287
  def import_users(new_users, options = {})
1285
1288
  role_list = roles
1286
- users_list = users(all: true)
1289
+ users_list = users
1287
1290
  new_users = new_users.map { |x| (x.is_a?(Hash) && x[:user] && x[:user].to_hash.merge(role: x[:role])) || x.to_hash }
1288
1291
 
1289
1292
  GoodData.logger.warn("Importing users to project (#{pid})")
@@ -1305,6 +1308,11 @@ module GoodData
1305
1308
  role && role.uri
1306
1309
  end
1307
1310
 
1311
+ u[:role_title] = u[:role].map do |r|
1312
+ role = get_role(r, role_list)
1313
+ role && role.title
1314
+ end
1315
+
1308
1316
  if u[:role].all?(&:nil?)
1309
1317
  u[:type] = :error
1310
1318
  u[:reason] = 'Invalid role(s) specified'
@@ -1321,6 +1329,18 @@ module GoodData
1321
1329
 
1322
1330
  # Diff users. Only login and role is important for the diff
1323
1331
  diff = GoodData::Helpers.diff(whitelisted_users, diffable_new, key: :login, fields: [:login, :role, :status])
1332
+ diff_results = diff.flat_map do |operation, users|
1333
+ if operation == :changed
1334
+ users.map { |u| u[:new_obj].merge(operation: operation) }
1335
+ else
1336
+ users.map { |u| u.merge(operation: operation) }
1337
+ end
1338
+ end
1339
+ diff_results = diff_results.map do |u|
1340
+ u[:login_uri] = "/gdc/account/profile/" + u[:login]
1341
+ u
1342
+ end
1343
+ return diff_results if options[:dry_run]
1324
1344
 
1325
1345
  # Create new users
1326
1346
  u = diff[:added].map { |x| { user: x, role: x[:role] } }
@@ -1337,7 +1357,7 @@ module GoodData
1337
1357
  # Remove old users
1338
1358
  to_remove = diff[:removed].reject { |user| user[:status] == 'DISABLED' || user[:status] == :disabled }
1339
1359
  GoodData.logger.warn("Removing #{to_remove.count} users from project (#{pid})")
1340
- results.concat(disable_users(to_remove))
1360
+ results.concat(disable_users(to_remove, roles: role_list, project_users: whitelisted_users))
1341
1361
 
1342
1362
  # reassign to groups
1343
1363
  mappings = new_users.map(&:to_hash).flat_map do |user|
@@ -1361,19 +1381,20 @@ module GoodData
1361
1381
  g.set_members(whitelist_users(g.members.map(&:to_hash), [], options[:whitelists], :include).first.map { |x| x[:uri] })
1362
1382
  end
1363
1383
  end
1364
- results
1384
+ GoodData::Helpers.join(results, diff_results, [:user], [:login_uri])
1365
1385
  end
1366
1386
 
1367
- def disable_users(list)
1387
+ def disable_users(list, options = {})
1368
1388
  list = list.map(&:to_hash)
1369
1389
  url = "#{uri}/users"
1370
1390
  payloads = list.map do |u|
1371
- generate_user_payload(u[:uri], 'DISABLED')
1391
+ uri, = resolve_roles(u, [], options)
1392
+ generate_user_payload(uri, 'DISABLED')
1372
1393
  end
1373
1394
 
1374
1395
  payloads.each_slice(100).mapcat do |payload|
1375
1396
  result = client.post(url, 'users' => payload)
1376
- result['projectUsersUpdateResult'].mapcat { |k, v| v.map { |x| { type: k.to_sym, uri: x } } }
1397
+ result['projectUsersUpdateResult'].mapcat { |k, v| v.map { |x| { type: k.to_sym, user: x } } }
1377
1398
  end
1378
1399
  end
1379
1400
 
@@ -14,16 +14,22 @@ module GoodData
14
14
  def [](key, opts = { :client => GoodData.connection, :project => GoodData.project })
15
15
  client, project = GoodData.get_client_and_project(opts)
16
16
 
17
+ get_opts = {
18
+ do_not_log: [
19
+ RestClient::ResourceNotFound
20
+ ]
21
+ }
22
+
17
23
  if key == :all
18
24
  uri = "/gdc/projects/#{project.pid}/dataload/metadata"
19
- res = client.get(uri)
25
+ res = client.get(uri, get_opts)
20
26
  res['metadataItems']['items'].reduce({}) do |memo, i|
21
27
  memo[i['metadataItem']['key']] = i['metadataItem']['value']
22
28
  memo
23
29
  end
24
30
  else
25
31
  uri = "/gdc/projects/#{project.pid}/dataload/metadata/#{key}"
26
- res = client.get(uri)
32
+ res = client.get(uri, get_opts)
27
33
  res['metadataItem']['value']
28
34
  end
29
35
  end
@@ -330,7 +330,7 @@ module GoodData
330
330
  # @param uri [String] Target URI
331
331
  def delete(uri, options = {})
332
332
  options = log_info(options)
333
- GoodData.logger.debug "DELETE: #{@server.url}#{uri}"
333
+ GoodData.rest_logger.info "DELETE: #{@server.url}#{uri}"
334
334
  profile "DELETE #{uri}" do
335
335
  b = proc do
336
336
  params = fresh_request_params(options[:request_id])
@@ -338,7 +338,7 @@ module GoodData
338
338
  @server[uri].delete(params)
339
339
  rescue RestClient::Exception => e
340
340
  # log the error if it happens
341
- log_error(e, uri, params)
341
+ log_error(e, uri, params, options)
342
342
  raise e
343
343
  end
344
344
  end
@@ -351,9 +351,12 @@ module GoodData
351
351
  # @param e [RuntimeException] Exception to log
352
352
  # @param uri [String] Uri on which the request failed
353
353
  # @param uri [Hash] Additional params
354
- def log_error(e, uri, params)
354
+ def log_error(e, uri, params, options = {})
355
355
  return if e.response && e.response.code == 401 && !uri.include?('token') && !uri.include?('login')
356
- GoodData.logger.error(format_error(e, params))
356
+
357
+ if options[:do_not_log].nil? || options[:do_not_log].index(e.class).nil?
358
+ GoodData.logger.error(format_error(e, params))
359
+ end
357
360
  end
358
361
 
359
362
  # HTTP GET
@@ -361,7 +364,7 @@ module GoodData
361
364
  # @param uri [String] Target URI
362
365
  def get(uri, options = {}, &user_block)
363
366
  options = log_info(options)
364
- GoodData.logger.debug "GET: #{@server.url}#{uri}, #{options}"
367
+ GoodData.rest_logger.info "GET: #{@server.url}#{uri}, #{options}"
365
368
  profile "GET #{uri}" do
366
369
  b = proc do
367
370
  params = fresh_request_params(options[:request_id]).merge(options)
@@ -369,7 +372,7 @@ module GoodData
369
372
  @server[uri].get(params, &user_block)
370
373
  rescue RestClient::Exception => e
371
374
  # log the error if it happens
372
- log_error(e, uri, params)
375
+ log_error(e, uri, params, options)
373
376
  raise e
374
377
  end
375
378
  end
@@ -383,7 +386,7 @@ module GoodData
383
386
  def put(uri, data, options = {})
384
387
  options = log_info(options)
385
388
  payload = data.is_a?(Hash) ? data.to_json : data
386
- GoodData.logger.debug "PUT: #{@server.url}#{uri}, #{scrub_params(data, KEYS_TO_SCRUB)}"
389
+ GoodData.rest_logger.info "PUT: #{@server.url}#{uri}, #{scrub_params(data, KEYS_TO_SCRUB)}"
387
390
  profile "PUT #{uri}" do
388
391
  b = proc do
389
392
  params = fresh_request_params(options[:request_id])
@@ -391,7 +394,7 @@ module GoodData
391
394
  @server[uri].put(payload, params)
392
395
  rescue RestClient::Exception => e
393
396
  # log the error if it happens
394
- log_error(e, uri, params)
397
+ log_error(e, uri, params, options)
395
398
  raise e
396
399
  end
397
400
  end
@@ -404,7 +407,7 @@ module GoodData
404
407
  # @param uri [String] Target URI
405
408
  def post(uri, data = nil, options = {})
406
409
  options = log_info(options)
407
- GoodData.logger.debug "POST: #{@server.url}#{uri}, #{scrub_params(data, KEYS_TO_SCRUB)}"
410
+ GoodData.rest_logger.info "POST: #{@server.url}#{uri}, #{scrub_params(data, KEYS_TO_SCRUB)}"
408
411
  profile "POST #{uri}" do
409
412
  payload = data.is_a?(Hash) ? data.to_json : data
410
413
  b = proc do
@@ -413,7 +416,7 @@ module GoodData
413
416
  @server[uri].post(payload, params)
414
417
  rescue RestClient::Exception => e
415
418
  # log the error if it happens
416
- log_error(e, uri, params)
419
+ log_error(e, uri, params, options)
417
420
  raise e
418
421
  end
419
422
  end
@@ -506,7 +509,6 @@ module GoodData
506
509
  return if webdav_dir_exists?(url)
507
510
 
508
511
  method = :mkcol
509
- GoodData.logger.debug "#{method}: #{url}"
510
512
  b = proc do
511
513
  raw = {
512
514
  :method => method,
@@ -595,25 +597,25 @@ module GoodData
595
597
 
596
598
  if content_type == 'application/json' || content_type == 'application/json;charset=UTF-8'
597
599
  result = response.to_str == '""' ? {} : MultiJson.load(response.to_str)
598
- GoodData.logger.debug "Request ID: #{response.headers[:x_gdc_request]} - Response: #{result.inspect}"
600
+ GoodData.rest_logger.debug "Request ID: #{response.headers[:x_gdc_request]} - Response: #{result.inspect}"
599
601
  elsif ['text/plain;charset=UTF-8', 'text/plain; charset=UTF-8', 'text/plain'].include?(content_type)
600
602
  result = response
601
- GoodData.logger.debug 'Response: plain text'
603
+ GoodData.rest_logger.debug 'Response: plain text'
602
604
  elsif content_type == 'application/zip'
603
605
  result = response
604
- GoodData.logger.debug 'Response: a zipped stream'
606
+ GoodData.rest_logger.debug 'Response: a zipped stream'
605
607
  elsif response.headers[:content_length].to_s == '0'
606
608
  result = nil
607
- GoodData.logger.debug 'Response: Empty response possibly 204'
609
+ GoodData.rest_logger.debug 'Response: Empty response possibly 204'
608
610
  elsif response.code == 204
609
611
  result = nil
610
- GoodData.logger.debug 'Response: 204 no content'
612
+ GoodData.rest_logger.debug 'Response: 204 no content'
611
613
  else
612
614
  fail "Unsupported response content type '%s':\n%s" % [content_type, response.to_str[0..127]]
613
615
  end
614
616
  result
615
617
  rescue RestClient::Exception => e
616
- GoodData.logger.debug "Response: #{e.response}"
618
+ GoodData.logger.error "Response: #{e.response}"
617
619
  raise $ERROR_INFO
618
620
  end
619
621