Class: Fluent::Plugin::RedisStorage

Inherits:
Storage
  • Object
show all
Defined in:
lib/fluent/plugin/storage_redis.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeRedisStorage

Returns a new instance of RedisStorage.



17
18
19
20
21
# File 'lib/fluent/plugin/storage_redis.rb', line 17

def initialize
  super

  @store = {}
end

Instance Attribute Details

#storeObject (readonly)

for test



15
16
17
# File 'lib/fluent/plugin/storage_redis.rb', line 15

def store
  @store
end

Instance Method Details

#configure(conf) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/fluent/plugin/storage_redis.rb', line 23

def configure(conf)
  super

  unless @path
    if conf && !conf.arg.empty?
      @path = conf.arg
    else
      raise Fluent::ConfigError, "path or conf.arg for <storage> is required."
    end
  end

  options = {
    host: @host,
    port: @port,
    thread_safe: true,
    db: @db_number
  }
  options[:password] = @password if @password

  @redis = Redis.new(options)
end

#delete(key) ⇒ Object



87
88
89
# File 'lib/fluent/plugin/storage_redis.rb', line 87

def delete(key)
  @store.delete(key.to_s)
end

#fetch(key, defval) ⇒ Object



79
80
81
# File 'lib/fluent/plugin/storage_redis.rb', line 79

def fetch(key, defval)
  @store.fetch(key.to_s, defval)
end

#get(key) ⇒ Object



75
76
77
# File 'lib/fluent/plugin/storage_redis.rb', line 75

def get(key)
  @store[key.to_s]
end

#loadObject



49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/fluent/plugin/storage_redis.rb', line 49

def load
  begin
    json_string = @redis.get(@path)
    json = Yajl::Parser.parse(json_string)
    unless json.is_a?(Hash)
      log.error "broken content for plugin storage (Hash required: ignored)", type: json.class
      log.debug "broken content", content: json_string
      return
    end
    @store = json
  rescue => e
    log.error "failed to load data for plugin storage from redis", path: @path, error: e
  end
end

#multi_workers_ready?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/fluent/plugin/storage_redis.rb', line 45

def multi_workers_ready?
  true
end

#put(key, value) ⇒ Object



83
84
85
# File 'lib/fluent/plugin/storage_redis.rb', line 83

def put(key, value)
  @store[key.to_s] = value
end

#saveObject



64
65
66
67
68
69
70
71
72
73
# File 'lib/fluent/plugin/storage_redis.rb', line 64

def save
  begin
    json_string = Yajl::Encoder.encode(@store)
    @redis.pipelined {
      @redis.set(@path, json_string)
    }
  rescue => e
    log.error "failed to save data for plugin storage to redis", path: @path, error: e
  end
end

#update(key, &block) ⇒ Object



91
92
93
# File 'lib/fluent/plugin/storage_redis.rb', line 91

def update(key, &block)
  @store[key.to_s] = block.call(@store[key.to_s])
end