prefab-cloud-ruby 1.6.0.pre2 → 1.6.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
  SHA256:
3
- metadata.gz: 20317c94cd1f107434e8d4df80851ecaecf026cc406dc421e0f36a769f1cbda1
4
- data.tar.gz: 5efce4e6ab0ada5a01257c41e716726e591eab2e91ec70fa9f57e220cfd1cd5d
3
+ metadata.gz: f8cd1347e930a4820b28ae3943e100a09765efeb56ca423dc4e4f26b51e3543b
4
+ data.tar.gz: 783119a33360850c31c425558735d356202e5365aa9f3ae3e88f776a22c7e231
5
5
  SHA512:
6
- metadata.gz: 5bdf94c45e6c0a9c3e49939f392670cf0ed499eb5dfdbe63a8bfdf63ad6f501dbea7e6802b6053e2ee472d006663bfd353d2fe73be10ff5f68e06a574430e88b
7
- data.tar.gz: f29975d152647db4ba6ee3249732790dc89ed709d50b313a228c809f63b5ba770fae06f529a9ce6d213c12f1f6f6904ecb84f007824bcbfef6b88fe0f34c4f01
6
+ metadata.gz: 04b84fcdebab292f086d7909428ea8b77f0d7a53a2dfe5943716ba988ea778ddef0f3c0f09ed4ccddae048097e17f358699633213059ab3062ae04ae287acc99
7
+ data.tar.gz: 2f65bdf10b36016e397413774bc676b20ed40d42f4ea4abcb7984bdd16afcbefd313e05a28505630cc9a818bcca950e60dcb41774d15e353d08f1e4d8d028966
data/CHANGELOG.md CHANGED
@@ -1,11 +1,15 @@
1
1
  # Changelog
2
2
 
3
- ## Unreleased
3
+ ## 1.6.0 - 2024-03-27
4
4
 
5
5
  - Use semantic_logger for internal logging (#173)
6
6
  - Remove Prefab::LoggerClient as a logger for end users (#173)
7
7
  - Provide log_filter for end users (#173)
8
8
 
9
+ ## 1.5.1 - 2024-02-22
10
+
11
+ - Fix: Send context shapes by default (#174)
12
+
9
13
  ## 1.5.0 - 2024-02-12
10
14
 
11
15
  - Fix potential inconsistent Context behavior (#172)
data/README.md CHANGED
@@ -34,7 +34,7 @@ Many ruby web servers fork. When the process is forked, the current realtime upd
34
34
 
35
35
  ```ruby
36
36
  #config/application.rb
37
- Prefab.init # reads PREFAB_API_KEY env var
37
+ Prefab.init # reads PREFAB_API_KEY env var by default
38
38
  ```
39
39
 
40
40
  ```ruby
@@ -53,23 +53,51 @@ end
53
53
 
54
54
  ## Logging & Debugging
55
55
 
56
- To use dynamic logging. Install https://logger.rocketjob.io/rails.html and then add Prefab as a dynamic filter.
56
+ To use dynamic logging, we recommend [semantic logger]. Add semantic_logger to your Gemfile and then we'll configure our app to use it.
57
57
 
58
+ ### Plain ol' Ruby
59
+
60
+ ```ruby
61
+ # Gemfile
62
+ gem "semantic_logger"
58
63
  ```
64
+
65
+ ```ruby
66
+ require "semantic_logger"
67
+ require "prefab"
68
+
69
+ Prefab.init
70
+
71
+ SemanticLogger.sync!
72
+ SemanticLogger.default_level = :trace # Prefab will take over the filtering
73
+ SemanticLogger.add_appender(
74
+ io: $stdout,
75
+ formatter: :json,
76
+ filter: Prefab.log_filter,
77
+ )
78
+ ```
79
+
80
+ ### With Rails
81
+
82
+ ```ruby
83
+ # Gemfile
59
84
  gem "amazing_print"
60
85
  gem "rails_semantic_logger"
61
86
  ```
87
+
62
88
  ```ruby
63
- #application.rb
89
+ # config/application.rb
90
+ Prefab.init
91
+
92
+ # config/initializers/logging.rb
64
93
  SemanticLogger.sync!
65
94
  SemanticLogger.default_level = :trace # Prefab will take over the filtering
66
95
  SemanticLogger.add_appender(
67
96
  io: $stdout,
68
- formatter: Rails.env.development? ? :default : :json,
97
+ formatter: Rails.env.development? ? :color : :json,
69
98
  filter: Prefab.log_filter,
70
99
  )
71
- Prefab.init
72
- ````
100
+ ```
73
101
 
74
102
  ```ruby
75
103
  #puma.rb
@@ -102,3 +130,5 @@ REMOTE_BRANCH=main LOCAL_BRANCH=main bundle exec rake release
102
130
  ## Copyright
103
131
 
104
132
  Copyright (c) 2024 Prefab, Inc. See LICENSE.txt for further details.
133
+
134
+ [semantic logger]: https://logger.rocketjob.io/
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.6.0.pre2
1
+ 1.6.0
data/lib/prefab/client.rb CHANGED
@@ -51,6 +51,7 @@ module Prefab
51
51
 
52
52
  def log_path_aggregator
53
53
  return nil if @options.collect_max_paths <= 0
54
+
54
55
  @log_path_aggregator ||= LogPathAggregator.new(client: self, max_paths: @options.collect_max_paths,
55
56
  sync_interval: @options.collect_sync_interval)
56
57
  end
@@ -87,14 +88,7 @@ module Prefab
87
88
  end
88
89
 
89
90
  def set_rails_loggers
90
- Rails.logger = log
91
- ActionView::Base.logger = log
92
- ActionController::Base.logger = log
93
- ActiveJob::Base.logger = log if defined?(ActiveJob)
94
- ActiveRecord::Base.logger = log
95
- ActiveStorage.logger = log if defined?(ActiveStorage)
96
-
97
- LogSubscribers::ActionControllerSubscriber.attach_to :action_controller unless @options.disable_action_controller_logging
91
+ warn '[DEPRECATION] `set_rails_loggers` is deprecated since 1.6. Please use semantic_logger or `Prefab.log_filter` instead.'
98
92
  end
99
93
 
100
94
  def on_update(&block)
@@ -94,6 +94,8 @@ module Prefab
94
94
  when :periodic_example
95
95
  @collect_example_contexts = true
96
96
  @collect_max_example_contexts = context_max_size
97
+ @collect_shapes = true
98
+ @collect_max_shapes = context_max_size
97
99
  when :shape_only
98
100
  @collect_shapes = true
99
101
  @collect_max_shapes = context_max_size
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: prefab-cloud-ruby 1.6.0.pre2 ruby lib
5
+ # stub: prefab-cloud-ruby 1.6.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "prefab-cloud-ruby".freeze
9
- s.version = "1.6.0.pre2"
9
+ s.version = "1.6.0"
10
10
 
11
- s.required_rubygems_version = Gem::Requirement.new("> 1.3.1".freeze) if s.respond_to? :required_rubygems_version=
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Jeff Dwyer".freeze]
14
- s.date = "2024-02-22"
14
+ s.date = "2024-03-27"
15
15
  s.description = "Feature Flags, Live Config, and Dynamic Log Levels as a service".freeze
16
16
  s.email = "jdwyer@prefab.cloud".freeze
17
17
  s.executables = ["console".freeze]
@@ -6,12 +6,24 @@ module CommonHelpers
6
6
  def setup
7
7
  $oldstderr, $stderr = $stderr, StringIO.new
8
8
 
9
- $logs ||= StringIO.new
10
- SemanticLogger.add_appender(io: $logs)
9
+ $logs = StringIO.new
10
+ SemanticLogger.add_appender(io: $logs, filter: Prefab.log_filter)
11
+ SemanticLogger.sync!
11
12
  Timecop.freeze('2023-08-09 15:18:12 -0400')
12
13
  end
13
14
 
14
15
  def teardown
16
+ if $logs && !$logs.string.empty?
17
+ log_lines = $logs.string.split("\n").reject do |line|
18
+ line.match(/Prefab::ConfigClient -- No success loading checkpoints/)
19
+ end
20
+
21
+ if log_lines.size > 0
22
+ $logs = nil
23
+ raise "Unexpected logs. Handle logs with assert_logged\n\n#{log_lines}"
24
+ end
25
+ end
26
+
15
27
  if $stderr != $oldstderr && !$stderr.string.empty?
16
28
  # we ignore 2.X because of the number of `instance variable @xyz not initialized` warnings
17
29
  if !RUBY_VERSION.start_with?('2.')
@@ -41,7 +53,6 @@ module CommonHelpers
41
53
  }.freeze
42
54
 
43
55
  def new_client(overrides = {})
44
-
45
56
  config = overrides.delete(:config)
46
57
  project_env_id = overrides.delete(:project_env_id)
47
58
 
@@ -140,12 +151,6 @@ module CommonHelpers
140
151
  Prefab::Context.new(properties)
141
152
  end
142
153
 
143
- def assert_only_expected_logs
144
- # assert_equal "WARN 2023-08-09 15:18:12 -0400: cloud.prefab.client.configclient No success loading checkpoints\n", $logs.string
145
- # mark nil to indicate we handled it
146
- $logs = nil
147
- end
148
-
149
154
  def assert_logged(expected)
150
155
  # we do a uniq here because logging can happen in a separate thread so the
151
156
  # number of times a log might happen could be slightly variable.
@@ -159,6 +164,8 @@ module CommonHelpers
159
164
 
160
165
  assert(matched, "expectation: #{expectation}, got: #{actuals}")
161
166
  end
167
+ # mark nil to indicate we handled it
168
+ $logs = nil
162
169
  end
163
170
 
164
171
  def assert_stderr(expected)
@@ -50,6 +50,12 @@ class TestIntegration < Minitest::Test
50
50
  else
51
51
  raise "Unknown test type: #{it.test_type}"
52
52
  end
53
+
54
+ if test_case["name"].match(/doesn't raise on init timeout/)
55
+ assert_logged [
56
+ "Prefab::ConfigClient -- Couldn't Initialize In 0.01. Key any-key. Returning what we have"
57
+ ]
58
+ end
53
59
  end
54
60
  end
55
61
  end
@@ -8,7 +8,7 @@ class TestLogPathAggregator < Minitest::Test
8
8
  SLEEP_TIME = 0.01
9
9
 
10
10
  def test_push
11
- client = new_client
11
+ client = new_client(prefab_datasources: Prefab::Options::DATASOURCES::ALL,)
12
12
  aggregator = Prefab::LogPathAggregator.new(client: client, max_paths: 2, sync_interval: 1000)
13
13
 
14
14
  aggregator.push('test.test_log_path_aggregator.test_push.1', ::Logger::INFO)
@@ -19,16 +19,14 @@ class TestLogPathAggregator < Minitest::Test
19
19
  # we've reached the limit, so no more
20
20
  aggregator.push('test.test_log_path_aggregator.test_push.3', ::Logger::INFO)
21
21
  assert_equal 2, aggregator.data.size
22
-
23
- assert_only_expected_logs
24
22
  end
25
23
 
26
24
  def test_sync
27
25
  Timecop.freeze do
28
26
  client = new_client(namespace: 'this.is.a.namespace', allow_telemetry_in_local_mode: true)
29
27
 
30
- 2.times { client.log.should_log? 1, "test.test_log_path_aggregator.test_sync"}
31
- 3.times { client.log.should_log? 3, "test.test_log_path_aggregator.test_sync"}
28
+ 2.times { client.log.should_log? 1, "test.test_log_path_aggregator.test_sync" }
29
+ 3.times { client.log.should_log? 3, "test.test_log_path_aggregator.test_sync" }
32
30
 
33
31
  requests = wait_for_post_requests(client) do
34
32
  client.log_path_aggregator.send(:sync)
@@ -40,7 +38,9 @@ class TestLogPathAggregator < Minitest::Test
40
38
  assert_equal Prefab::TimeHelpers.now_in_ms, sent_logger.start_at
41
39
  assert_equal Prefab::TimeHelpers.now_in_ms, sent_logger.end_at
42
40
  assert_equal client.instance_hash, sent_logger.instance_hash
43
- assert_includes sent_logger.loggers, PrefabProto::Logger.new(logger_name: 'test.test_log_path_aggregator.test_sync', infos: 2, errors: 3)
41
+ assert_includes sent_logger.loggers,
42
+ PrefabProto::Logger.new(logger_name: 'test.test_log_path_aggregator.test_sync', infos: 2,
43
+ errors: 3)
44
44
  end
45
45
  end
46
46
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prefab-cloud-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0.pre2
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Dwyer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-22 00:00:00.000000000 Z
11
+ date: 2024-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -327,9 +327,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
327
327
  version: '0'
328
328
  required_rubygems_version: !ruby/object:Gem::Requirement
329
329
  requirements:
330
- - - ">"
330
+ - - ">="
331
331
  - !ruby/object:Gem::Version
332
- version: 1.3.1
332
+ version: '0'
333
333
  requirements: []
334
334
  rubygems_version: 3.2.32
335
335
  signing_key: