Module: Dialog::RedisCached

Defined in:
lib/storage/redis/rediscached.rb

Class Method Summary collapse

Class Method Details

.areaDescr(args) ⇒ Object



17
18
19
20
21
22
23
24
25
# File 'lib/storage/redis/rediscached.rb', line 17

def areaDescr(args)
  case args[:x][:redis][:region]
  when 'chat'
    args[:x][:redis][:area] = args[:mmsg][:fqndata][:o][:chat][:id]
    args[:pushCache] = true if args[:x][:redis][:territory] == 'context'
  when 'user'
    args[:x][:redis][:area] = args[:mmsg][:user_id]
  end
end

.pullCached(args) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/storage/redis/rediscached.rb', line 28

def pullCached(args)
  # Using a "REGION -> AREA -> TERRITORY" semantics
  # Means: hash 'REGION:AREA' key 'TERRITORY'
  areaDescr(args)
  #       redis ||= Redis.new(path: Bot.configuration.redis_url) ### May be BUG - needs additional Redis connection
  a = Dialog::redis.hmget("#{args[:x][:redis][:region]}:#{args[:x][:redis][:area]}", ":#{args[:x][:redis][:territory]}")[0]  # possible BUG - first array element
  Dialog.logger.debug "Redis Request: \"#{args[:x][:redis][:region]}:#{args[:x][:redis][:area]}\" Key: \":#{args[:x][:redis][:territory]}\" Answer: \"#{a}\", x: #{args[:x][:redis]}"      
  
  if a.nil? and args[:pushCache] == true
    a = pushCached(args)
  end
  Dialog.logger.debug "Using RedisCached for the upper request"
  Dialog.clearRedis(args)
  a
end

.pushCached(args) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/storage/redis/rediscached.rb', line 45

def pushCached(args)
  areaDescr(args)
  Dialog.logger.debug "Redis pushToCache, area::#{args[:x][:redis][:area]}, region::#{args[:x][:redis][:region]}"        
  case args[:x][:redis][:region]
  when 'chat'
    
    case args[:x][:redis][:territory]
    when 'context'
      pushCachedContext(args)
    end

  when 'user'
    case args[:x][:redis][:territory]
    when 'settings'
      @v = true
    end
  end
  
  @v=redisWrite_ChatCached({hname: "#{args[:x][:redis][:region]}:#{args[:x][:redis][:area]}", k: args[:x][:redis][:territory], v: @v}, args)
  @v
end

.pushCachedContext(args) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/storage/redis/rediscached.rb', line 68

def pushCachedContext(args)
  Dialog.clearApi(args)
  args[:smsg] = {chat_id: args[:mmsg][:fqndata][:o][:chat][:id]}
  args[:api][:op] = 'ChatAdministrators'
  a = Dialog::BotApi.apiActionGet(args)
  bman = 0;  cman = 0
  a['result'].each do |user|
    Dialog.logger.debug "userId #{user['user']['id']}, userStatus #{user['status']}; cliId #{args[:globals][:cliId]}, botId #{Dialog.config.naming.id}"
    cman = 1 if (user['user']['id'].to_i == args[:globals][:cliId]  and user['status'] == 'creator')
    bman = 1 if (user['user']['id'].to_i == Dialog.config.naming.id and user['status'] == 'administrator')
  end
  Dialog.logger.debug "Context args: @bman=#{bman} @cman=#{cman}"
  @v = Dialog::Naming::ChatContext.Fullman if (bman == 1 and cman == 1)      
  @v = Dialog::Naming::ChatContext.Botman if (bman == 1 and cman == 0)
  @v = Dialog::Naming::ChatContext.Climan if (bman == 0 and cman == 1)
  @v = Dialog::Naming::ChatContext.Noman if (bman == 0 and cman == 0)

end

.redisWrite_ChatCached(vals, args) ⇒ Object



87
88
89
90
91
92
93
# File 'lib/storage/redis/rediscached.rb', line 87

def redisWrite_ChatCached(vals, args)
  Dialog.redis.hmset("#{vals[:hname]}", ":#{vals[:k]}", vals[:v])
  args[:x][:redis].key?(:ttl) ? true : args[:x][:redis][:ttl] = 600
  Dialog.redis.expire "#{vals[:hname]}", args[:x][:redis][:ttl]
  Dialog.logger.debug "Redis SET - #{vals[:hname]} K:#{vals[:k]} V: #{vals[:v]} with ttl #{args[:x][:redis][:ttl]}"
  vals[:v]
end