Class: RailsPerformance::Utils

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_performance/utils.rb

Constant Summary collapse

DEFAULT_TIME_OFFSET =
1.minute

Class Method Summary collapse

Class Method Details

.cache_key(now = Date.today) ⇒ Object

date key in redis store



18
19
20
# File 'lib/rails_performance/utils.rb', line 18

def self.cache_key(now = Date.today)
  "date-#{now}"
end

.days(duration = RailsPerformance.duration) ⇒ Object



49
50
51
# File 'lib/rails_performance/utils.rb', line 49

def self.days(duration = RailsPerformance.duration)
  (duration / 1.day) + 1
end

.fetch_from_redis(query) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
# File 'lib/rails_performance/utils.rb', line 28

def self.fetch_from_redis(query)
  RailsPerformance.log "\n\n   [REDIS QUERY]   -->   #{query}\n\n"

  keys = RailsPerformance.redis.keys(query)
  return [] if keys.blank?
  values = RailsPerformance.redis.mget(keys)

  RailsPerformance.log "\n\n   [FOUND]   -->   #{values.size}\n\n"

  [keys, values]
end

.field_key(now = RailsPerformance::Utils.time) ⇒ Object

write to current slot time - date -minute



24
25
26
# File 'lib/rails_performance/utils.rb', line 24

def self.field_key(now = RailsPerformance::Utils.time)
  now.strftime("%H:%M")
end

.from_datetimei(datetimei) ⇒ Object



13
14
15
# File 'lib/rails_performance/utils.rb', line 13

def self.from_datetimei(datetimei)
  Time.at(datetimei, in: "+00:00")
end

.kind_of_nowObject



9
10
11
# File 'lib/rails_performance/utils.rb', line 9

def self.kind_of_now
  time + DEFAULT_TIME_OFFSET
end

.median(array) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/rails_performance/utils.rb', line 53

def self.median(array)
  sorted = array.sort
  size = sorted.size
  center = size / 2

  if size == 0
    nil
  elsif size.even?
    (sorted[center - 1] + sorted[center]) / 2.0
  else
    sorted[center]
  end
end

.percentile(values, percentile) ⇒ Object



67
68
69
70
71
72
73
74
75
76
# File 'lib/rails_performance/utils.rb', line 67

def self.percentile(values, percentile)
  return nil if values.empty?

  sorted = values.sort
  rank = (percentile.to_f / 100) * (sorted.size - 1)

  lower = sorted[rank.floor]
  upper = sorted[rank.ceil]
  lower + (upper - lower) * (rank - rank.floor)
end

.save_to_redis(key, value, expire = RailsPerformance.duration.to_i) ⇒ Object



40
41
42
43
44
45
46
47
# File 'lib/rails_performance/utils.rb', line 40

def self.save_to_redis(key, value, expire = RailsPerformance.duration.to_i)
  # TODO think here if add return
  # return if value.empty?

  RailsPerformance.log "  [SAVE]    key  --->  #{key}\n"
  RailsPerformance.log "  [SAVE]    value  --->  #{value.to_json}\n\n"
  RailsPerformance.redis.set(key, value.to_json, ex: expire.to_i)
end

.timeObject



5
6
7
# File 'lib/rails_performance/utils.rb', line 5

def self.time
  Time.now.utc
end