Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit b47de77

Browse files
committed
Merge pull request #14 from github/avoid-openssl
Avoid loading openssl + securerandom unless needed
2 parents c5151c0 + d3a7ccb commit b47de77

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

lib/statsd.rb

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
require 'openssl'
2-
require 'securerandom'
31
require 'socket'
4-
require 'time'
52
require 'zlib'
63

74
# = Statsd: A Statsd client (https://github.com/etsy/statsd)
@@ -32,9 +29,6 @@ def initialize(host, port, key = nil)
3229
#characters that will be replaced with _ in stat names
3330
RESERVED_CHARS_REGEX = /[\:\|\@]/
3431

35-
# Digest object as a constant
36-
SHA256 = OpenSSL::Digest::SHA256.new
37-
3832
class << self
3933
# Set to any standard logger instance (including stdlib's Logger) to enable
4034
# stat logging using logger.debug
@@ -150,11 +144,22 @@ def select_host(stat)
150144
end
151145

152146
def signed_payload(key, message)
147+
sha256 = Statsd.setup_openssl
153148
payload = timestamp + nonce + message
154-
signature = OpenSSL::HMAC.digest(SHA256, key, payload)
149+
signature = OpenSSL::HMAC.digest(sha256, key, payload)
155150
signature + payload
156151
end
157152

153+
# defer loading openssl and securerandom unless needed. this shaves ~10ms off
154+
# of baseline require load time for environments that don't require message signing.
155+
def self.setup_openssl
156+
@sha256 ||= begin
157+
require 'securerandom'
158+
require 'openssl'
159+
OpenSSL::Digest::SHA256.new
160+
end
161+
end
162+
158163
def timestamp
159164
[Time.now.to_i].pack("Q<")
160165
end

0 commit comments

Comments
 (0)