Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/ldclient-rb/evaluation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ def eval_internal(flag, user, store, events)
failed_prereq = true
end
rescue => exn
@config.logger.error("[LDClient] Error evaluating prerequisite: #{exn.inspect}")
@config.logger.error { "[LDClient] Error evaluating prerequisite: #{exn.inspect}" }
failed_prereq = true
end
end
Expand Down
8 changes: 4 additions & 4 deletions lib/ldclient-rb/events.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@ def post_flushed_events(events)
req.options.open_timeout = @config.connect_timeout
end
if res.status < 200 || res.status >= 300
@config.logger.error("[LDClient] Unexpected status code while processing events: #{res.status}")
@config.logger.error { "[LDClient] Unexpected status code while processing events: #{res.status}" }
if res.status == 401
@config.logger.error("[LDClient] Received 401 error, no further events will be posted since SDK key is invalid")
@config.logger.error { "[LDClient] Received 401 error, no further events will be posted since SDK key is invalid" }
stop
end
end
Expand All @@ -78,14 +78,14 @@ def add_event(event)

if @queue.length < @config.capacity
event[:creationDate] = (Time.now.to_f * 1000).to_i
@config.logger.debug("[LDClient] Enqueueing event: #{event.to_json}")
@config.logger.debug { "[LDClient] Enqueueing event: #{event.to_json}" }
@queue.push(event)

if !@worker.alive?
@worker = create_worker
end
else
@config.logger.warn("[LDClient] Exceeded event queue capacity. Increase capacity to avoid dropping events.")
@config.logger.warn { "[LDClient] Exceeded event queue capacity. Increase capacity to avoid dropping events." }
end
end

Expand Down
30 changes: 15 additions & 15 deletions lib/ldclient-rb/ldclient.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ def initialize(sdk_key, config = Config.default, wait_for_sec = 5)
@event_processor = EventProcessor.new(sdk_key, config)

if @config.use_ldd?
@config.logger.info("[LDClient] Started LaunchDarkly Client in LDD mode")
@config.logger.info { "[LDClient] Started LaunchDarkly Client in LDD mode" }
return # requestor and update processor are not used in this mode
end

Expand All @@ -41,8 +41,8 @@ def initialize(sdk_key, config = Config.default, wait_for_sec = 5)
if @config.stream?
@update_processor = StreamProcessor.new(sdk_key, config, requestor)
else
@config.logger.info("Disabling streaming API")
@config.logger.warn("You should only disable the streaming API if instructed to do so by LaunchDarkly support")
@config.logger.info { "Disabling streaming API" }
@config.logger.warn { "You should only disable the streaming API if instructed to do so by LaunchDarkly support" }
@update_processor = PollingProcessor.new(config, requestor)
end
@update_processor.start
Expand All @@ -54,7 +54,7 @@ def initialize(sdk_key, config = Config.default, wait_for_sec = 5)
initialized?
end
rescue WaitUtil::TimeoutError
@config.logger.error("[LDClient] Timeout encountered waiting for LaunchDarkly client initialization")
@config.logger.error { "[LDClient] Timeout encountered waiting for LaunchDarkly client initialization" }
end
end
end
Expand All @@ -64,7 +64,7 @@ def flush
end

def toggle?(key, user, default = False)
@config.logger.warn("[LDClient] toggle? is deprecated. Use variation instead")
@config.logger.warn { "[LDClient] toggle? is deprecated. Use variation instead" }
variation(key, user, default)
end

Expand Down Expand Up @@ -114,16 +114,16 @@ def variation(key, user, default)
return default if @config.offline?

unless user
@config.logger.error("[LDClient] Must specify user")
@config.logger.error { "[LDClient] Must specify user" }
@event_processor.add_event(kind: "feature", key: key, value: default, default: default, user: user)
return default
end

if !initialized?
if @store.initialized?
@config.logger.warn("[LDClient] Client has not finished initializing; using last known values from feature store")
@config.logger.warn { "[LDClient] Client has not finished initializing; using last known values from feature store" }
else
@config.logger.error("[LDClient] Client has not finished initializing; feature store unavailable, returning default value")
@config.logger.error { "[LDClient] Client has not finished initializing; feature store unavailable, returning default value" }
@event_processor.add_event(kind: "feature", key: key, value: default, default: default, user: user)
return default
end
Expand All @@ -133,7 +133,7 @@ def variation(key, user, default)
feature = @store.get(FEATURES, key)

if feature.nil?
@config.logger.info("[LDClient] Unknown feature flag #{key}. Returning default value")
@config.logger.info { "[LDClient] Unknown feature flag #{key}. Returning default value" }
@event_processor.add_event(kind: "feature", key: key, value: default, default: default, user: user)
return default
end
Expand All @@ -149,12 +149,12 @@ def variation(key, user, default)
@event_processor.add_event(kind: "feature", key: key, user: user, value: res[:value], default: default, version: feature[:version])
return res[:value]
else
@config.logger.debug("[LDClient] Result value is null in toggle")
@config.logger.debug { "[LDClient] Result value is null in toggle" }
@event_processor.add_event(kind: "feature", key: key, user: user, value: default, default: default, version: feature[:version])
return default
end
rescue => exn
@config.logger.warn("[LDClient] Error evaluating feature flag: #{exn.inspect}. \nTrace: #{exn.backtrace}")
@config.logger.warn { "[LDClient] Error evaluating feature flag: #{exn.inspect}. \nTrace: #{exn.backtrace}" }
@event_processor.add_event(kind: "feature", key: key, user: user, value: default, default: default, version: feature[:version])
return default
end
Expand Down Expand Up @@ -192,7 +192,7 @@ def all_flags(user)
return Hash.new if @config.offline?

unless user
@config.logger.error("[LDClient] Must specify user in all_flags")
@config.logger.error { "[LDClient] Must specify user in all_flags" }
return Hash.new
end

Expand All @@ -202,7 +202,7 @@ def all_flags(user)
# TODO rescue if necessary
Hash[features.map{ |k, f| [k, evaluate(f, user, @store)[:value]] }]
rescue => exn
@config.logger.warn("[LDClient] Error evaluating all flags: #{exn.inspect}. \nTrace: #{exn.backtrace}")
@config.logger.warn { "[LDClient] Error evaluating all flags: #{exn.inspect}. \nTrace: #{exn.backtrace}" }
return Hash.new
end
end
Expand All @@ -212,7 +212,7 @@ def all_flags(user)
#
# @return [void]
def close
@config.logger.info("[LDClient] Closing LaunchDarkly client...")
@config.logger.info { "[LDClient] Closing LaunchDarkly client..." }
if not @config.offline?
@update_processor.stop
end
Expand All @@ -223,7 +223,7 @@ def close
def log_exception(caller, exn)
error_traceback = "#{exn.inspect} #{exn}\n\t#{exn.backtrace.join("\n\t")}"
error = "[LDClient] Unexpected exception in #{caller}: #{error_traceback}"
@config.logger.error(error)
@config.logger.error { error }
end

def sanitize_user(user)
Expand Down
12 changes: 6 additions & 6 deletions lib/ldclient-rb/polling.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def initialized?

def start
return unless @started.make_true
@config.logger.info("[LDClient] Initializing polling connection")
@config.logger.info { "[LDClient] Initializing polling connection" }
create_worker
end

Expand All @@ -26,7 +26,7 @@ def stop
if @worker && @worker.alive?
@worker.raise "shutting down client"
end
@config.logger.info("[LDClient] Polling connection stopped")
@config.logger.info { "[LDClient] Polling connection stopped" }
end
end

Expand All @@ -38,14 +38,14 @@ def poll
SEGMENTS => all_data[:segments]
})
if @initialized.make_true
@config.logger.info("[LDClient] Polling connection initialized")
@config.logger.info { "[LDClient] Polling connection initialized" }
end
end
end

def create_worker
@worker = Thread.new do
@config.logger.debug("[LDClient] Starting polling worker")
@config.logger.debug { "[LDClient] Starting polling worker" }
while !@stopped.value do
begin
started_at = Time.now
Expand All @@ -55,10 +55,10 @@ def create_worker
sleep(delta)
end
rescue InvalidSDKKeyError
@config.logger.error("[LDClient] Received 401 error, no further polling requests will be made since SDK key is invalid");
@config.logger.error { "[LDClient] Received 401 error, no further polling requests will be made since SDK key is invalid" };
stop
rescue StandardError => exn
@config.logger.error("[LDClient] Exception while polling: #{exn.inspect}")
@config.logger.error { "[LDClient] Exception while polling: #{exn.inspect}" }
# TODO: log_exception(__method__.to_s, exn)
end
end
Expand Down
16 changes: 8 additions & 8 deletions lib/ldclient-rb/redis_store.rb
Original file line number Diff line number Diff line change
Expand Up @@ -94,12 +94,12 @@ def self.default_prefix
def get(kind, key)
f = @cache[cache_key(kind, key)]
if f.nil?
@logger.debug("RedisFeatureStore: no cache hit for #{key} in '#{kind[:namespace]}', requesting from Redis")
@logger.debug { "RedisFeatureStore: no cache hit for #{key} in '#{kind[:namespace]}', requesting from Redis" }
f = with_connection do |redis|
begin
get_redis(kind, redis, key.to_sym)
rescue => e
@logger.error("RedisFeatureStore: could not retrieve #{key} from Redis in '#{kind[:namespace]}', with error: #{e}")
@logger.error { "RedisFeatureStore: could not retrieve #{key} from Redis in '#{kind[:namespace]}', with error: #{e}" }
nil
end
end
Expand All @@ -108,10 +108,10 @@ def get(kind, key)
end
end
if f.nil?
@logger.debug("RedisFeatureStore: #{key} not found in '#{kind[:namespace]}'")
@logger.debug { "RedisFeatureStore: #{key} not found in '#{kind[:namespace]}'" }
nil
elsif f[:deleted]
@logger.debug("RedisFeatureStore: #{key} was deleted in '#{kind[:namespace]}', returning nil")
@logger.debug { "RedisFeatureStore: #{key} was deleted in '#{kind[:namespace]}', returning nil" }
nil
else
f
Expand All @@ -124,7 +124,7 @@ def all(kind)
begin
hashfs = redis.hgetall(items_key(kind))
rescue => e
@logger.error("RedisFeatureStore: could not retrieve all '#{kind[:namespace]}' items from Redis with error: #{e}; returning none")
@logger.error { "RedisFeatureStore: could not retrieve all '#{kind[:namespace]}' items from Redis with error: #{e}; returning none" }
hashfs = {}
end
hashfs.each do |k, jsonItem|
Expand Down Expand Up @@ -169,7 +169,7 @@ def init(all_data)
end
end
@inited.set(true)
@logger.info("RedisFeatureStore: initialized with #{count} items")
@logger.info { "RedisFeatureStore: initialized with #{count} items" }
end

def upsert(kind, item)
Expand Down Expand Up @@ -219,7 +219,7 @@ def get_redis(kind, redis, key)
json_item = redis.hget(items_key(kind), key)
JSON.parse(json_item, symbolize_names: true) if json_item
rescue => e
@logger.error("RedisFeatureStore: could not retrieve #{key} from Redis, error: #{e}")
@logger.error { "RedisFeatureStore: could not retrieve #{key} from Redis, error: #{e}" }
nil
end
end
Expand All @@ -232,7 +232,7 @@ def put_redis_and_cache(kind, redis, key, item)
begin
redis.hset(items_key(kind), key, item.to_json)
rescue => e
@logger.error("RedisFeatureStore: could not store #{key} in Redis, error: #{e}")
@logger.error { "RedisFeatureStore: could not store #{key} in Redis, error: #{e}" }
end
put_cache(kind, key.to_sym, item)
end
Expand Down
8 changes: 4 additions & 4 deletions lib/ldclient-rb/requestor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,20 +42,20 @@ def make_request(path)
end
end

@config.logger.debug("[LDClient] Got response from uri: #{uri}\n\tstatus code: #{res.status}\n\theaders: #{res.headers}\n\tbody: #{res.body}")
@config.logger.debug { "[LDClient] Got response from uri: #{uri}\n\tstatus code: #{res.status}\n\theaders: #{res.headers}\n\tbody: #{res.body}" }

if res.status == 401
@config.logger.error("[LDClient] Invalid SDK key")
@config.logger.error { "[LDClient] Invalid SDK key" }
raise InvalidSDKKeyError
end

if res.status == 404
@config.logger.error("[LDClient] Resource not found")
@config.logger.error { "[LDClient] Resource not found" }
return nil
end

if res.status < 200 || res.status >= 300
@config.logger.error("[LDClient] Unexpected status code #{res.status}")
@config.logger.error { "[LDClient] Unexpected status code #{res.status}" }
return nil
end

Expand Down
18 changes: 9 additions & 9 deletions lib/ldclient-rb/stream.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def initialized?
def start
return unless @started.make_true

@config.logger.info("[LDClient] Initializing stream connection")
@config.logger.info { "[LDClient] Initializing stream connection" }

headers =
{
Expand All @@ -48,9 +48,9 @@ def start
conn.on(INDIRECT_PUT) { |message| process_message(message, INDIRECT_PUT) }
conn.on(INDIRECT_PATCH) { |message| process_message(message, INDIRECT_PATCH) }
conn.on_error { |err|
@config.logger.error("[LDClient] Unexpected status code #{err[:status_code]} from streaming connection")
@config.logger.error { "[LDClient] Unexpected status code #{err[:status_code]} from streaming connection" }
if err[:status_code] == 401
@config.logger.error("[LDClient] Received 401 error, no further streaming connection will be made since SDK key is invalid")
@config.logger.error { "[LDClient] Received 401 error, no further streaming connection will be made since SDK key is invalid" }
stop
end
}
Expand All @@ -60,29 +60,29 @@ def start
def stop
if @stopped.make_true
@es.close
@config.logger.info("[LDClient] Stream connection stopped")
@config.logger.info { "[LDClient] Stream connection stopped" }
end
end

def stop
if @stopped.make_true
@es.close
@config.logger.info("[LDClient] Stream connection stopped")
@config.logger.info { "[LDClient] Stream connection stopped" }
end
end

private

def process_message(message, method)
@config.logger.debug("[LDClient] Stream received #{method} message: #{message.data}")
@config.logger.debug { "[LDClient] Stream received #{method} message: #{message.data}" }
if method == PUT
message = JSON.parse(message.data, symbolize_names: true)
@feature_store.init({
FEATURES => message[:data][:flags],
SEGMENTS => message[:data][:segments]
})
@initialized.make_true
@config.logger.info("[LDClient] Stream initialized")
@config.logger.info { "[LDClient] Stream initialized" }
elsif method == PATCH
message = JSON.parse(message.data, symbolize_names: true)
for kind in [FEATURES, SEGMENTS]
Expand All @@ -108,7 +108,7 @@ def process_message(message, method)
SEGMENTS => all_data[:segments]
})
@initialized.make_true
@config.logger.info("[LDClient] Stream initialized (via indirect message)")
@config.logger.info { "[LDClient] Stream initialized (via indirect message)" }
elsif method == INDIRECT_PATCH
key = key_for_path(FEATURES, message.data)
if key
Expand All @@ -120,7 +120,7 @@ def process_message(message, method)
end
end
else
@config.logger.warn("[LDClient] Unknown message received: #{method}")
@config.logger.warn { "[LDClient] Unknown message received: #{method}" }
end
end

Expand Down