fluent-plugin-google-cloud-storage-out 0.1.10 → 0.1.11
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0ae88e22d3d8cac4aa939ccc35fe2af17ca90fbe
|
4
|
+
data.tar.gz: 6e94e55d777c8c0bc07819d2119c68402deffd05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2977e856bd530808ec34d62a30c37fcc85ac3c086c4be95a4a88a470611739fa8e1f937daa3ef584eb903a11a1ffda7d7c74b4cb2a00342454cb73e1304ac229
|
7
|
+
data.tar.gz: 4326eaad59d06a09c3416fd2e9095804a5d0fea152176517f8a3027383a31eff0515c5276f0282e78b0fd65f02cdf04cbd2c96b4de7b5b650feb2676d5ba1659
|
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "fluent-plugin-google-cloud-storage-out"
|
7
|
-
spec.version = "0.1.
|
7
|
+
spec.version = "0.1.11"
|
8
8
|
spec.authors = ["Hideki Matsuoka"]
|
9
9
|
spec.email = ["matsuoka.hide@gmail.com"]
|
10
10
|
|
@@ -13,9 +13,17 @@ module Fluent
|
|
13
13
|
|
14
14
|
SUPPORTED_COMPRESS = {
|
15
15
|
'gz' => :gz,
|
16
|
-
'gzip' => :
|
16
|
+
'gzip' => :gz,
|
17
17
|
}
|
18
18
|
|
19
|
+
UNIQUE_STRATEGY= {
|
20
|
+
'chunk_id' => :chunk_id,
|
21
|
+
'increment' => :increment,
|
22
|
+
'timestamp' => :timestamp,
|
23
|
+
}
|
24
|
+
|
25
|
+
UNIQUE_PLACE_HOLDER = '${unique}'
|
26
|
+
|
19
27
|
#
|
20
28
|
# Config Parameters
|
21
29
|
#
|
@@ -40,6 +48,18 @@ module Fluent
|
|
40
48
|
#desc "The tag for out"
|
41
49
|
config_param :default_tag, :string, :default => 'tag_missing'
|
42
50
|
|
51
|
+
#desc "The unique strategy for avoid override for same path"
|
52
|
+
config_param :unique_strategy, :default => nil do |val|
|
53
|
+
c = UNIQUE_STRATEGY[val]
|
54
|
+
unless c
|
55
|
+
raise ConfigError, "Unsupported make uniuqe strategy '#{val}'"
|
56
|
+
end
|
57
|
+
c
|
58
|
+
end
|
59
|
+
|
60
|
+
#desc "The format for unique replacement, if you set timestamp to unique_strategy, you should set time format"
|
61
|
+
config_param :unique_format, :string, :default => "%Y%m%d%H%M%S%L"
|
62
|
+
|
43
63
|
#desc "Compress flushed file."
|
44
64
|
config_param :compress, :default => nil do |val|
|
45
65
|
c = SUPPORTED_COMPRESS[val]
|
@@ -75,9 +95,18 @@ module Fluent
|
|
75
95
|
|
76
96
|
super
|
77
97
|
|
98
|
+
if @path.index(UNIQUE_PLACE_HOLDER).nil? && @unique_strategy
|
99
|
+
raise Fluent::ConfigError, "Path must contain ${unique}, or you set the unique_strategy to nil."
|
100
|
+
end
|
101
|
+
|
78
102
|
@formatter = Plugin.new_formatter(@format)
|
79
103
|
@formatter.configure(conf)
|
104
|
+
@path_suffix = ".log"
|
80
105
|
prepare_client()
|
106
|
+
|
107
|
+
if @unique_strategy == :increment
|
108
|
+
@samepath_counter = 0
|
109
|
+
end
|
81
110
|
end
|
82
111
|
|
83
112
|
def prepare_client
|
@@ -103,17 +132,56 @@ module Fluent
|
|
103
132
|
@formatter.format(tag, time, record)
|
104
133
|
end
|
105
134
|
|
106
|
-
def
|
107
|
-
|
108
|
-
|
109
|
-
|
135
|
+
def chunk_unique_id_to_str(unique_id)
|
136
|
+
unique_id.unpack('C*').map{|x| x.to_s(16).rjust(2,'0')}.join('')
|
137
|
+
end
|
138
|
+
|
139
|
+
def path_format_with_unique_strategy(path, strategy, chunk_key, chunk_unique)
|
140
|
+
case strategy
|
141
|
+
when nil
|
142
|
+
path
|
143
|
+
when :chunk_id
|
144
|
+
path.gsub(UNIQUE_PLACE_HOLDER, chunk_unique_id_to_str(chunk_unique))
|
145
|
+
when :increment
|
146
|
+
if @before_chunk_key
|
147
|
+
if @before_chunk_key == chunk_key
|
148
|
+
@samepath_counter += 1
|
149
|
+
else
|
150
|
+
@samepath_counter = 0
|
151
|
+
end
|
152
|
+
end
|
153
|
+
@before_chunk_key = chunk_key
|
154
|
+
path.gsub(UNIQUE_PLACE_HOLDER, "#{@samepath_counter}")
|
155
|
+
when :timestamp
|
156
|
+
path.gsub(UNIQUE_PLACE_HOLDER, Time.now.strftime(@unique_format))
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
def path_format(chunk)
|
161
|
+
# format from chunk key
|
162
|
+
path = Time.strptime(chunk.key, @time_slice_format).strftime(@path)
|
163
|
+
|
164
|
+
# format for make unique
|
165
|
+
path = path_format_with_unique_strategy(path, @unique_strategy, chunk.key, chunk.unique_id)
|
166
|
+
|
167
|
+
# append .log
|
168
|
+
unless path.include?(".log")
|
169
|
+
path.concat(@path_suffix)
|
170
|
+
end
|
171
|
+
|
172
|
+
# append .gz
|
173
|
+
case @compress
|
174
|
+
when nil
|
175
|
+
path
|
176
|
+
when :gz
|
177
|
+
"#{path}.gz"
|
178
|
+
end
|
110
179
|
end
|
111
180
|
|
112
181
|
def send(path, data)
|
113
182
|
mimetype = MIME::Types.type_for(path).first
|
114
|
-
|
115
183
|
io = nil
|
116
|
-
if
|
184
|
+
if @compress
|
117
185
|
io = StringIO.new("")
|
118
186
|
writer = Zlib::GzipWriter.new(io)
|
119
187
|
writer.write(data)
|
@@ -127,10 +195,9 @@ module Fluent
|
|
127
195
|
end
|
128
196
|
|
129
197
|
def write(chunk)
|
130
|
-
gcs_path = path_format(chunk
|
198
|
+
gcs_path = path_format(chunk)
|
131
199
|
send(gcs_path, chunk.read)
|
132
200
|
gcs_path
|
133
201
|
end
|
134
202
|
end
|
135
203
|
end
|
136
|
-
|