prefab-cloud-ruby 1.6.0.pre2 → 1.6.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.
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: