log2json 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/redis2es +37 -8
- data/bin/tail-log.sh +10 -5
- data/log2json.gemspec +1 -1
- metadata +3 -3
data/bin/redis2es
CHANGED
@@ -111,24 +111,53 @@ def enqueue(logstr)
|
|
111
111
|
@queue << log.to_json
|
112
112
|
end
|
113
113
|
|
114
|
+
def load_redis_script
|
115
|
+
# totaly stolen from logstash
|
116
|
+
redis_script = <<EOF
|
117
|
+
local i = tonumber(ARGV[1])
|
118
|
+
local res = {}
|
119
|
+
local length = redis.call('llen',KEYS[1])
|
120
|
+
if length < i then i = length end
|
121
|
+
while (i > 0) do
|
122
|
+
local item = redis.call("lpop", KEYS[1])
|
123
|
+
if (not item) then
|
124
|
+
break
|
125
|
+
end
|
126
|
+
table.insert(res, item)
|
127
|
+
i = i-1
|
128
|
+
end
|
129
|
+
return res
|
130
|
+
EOF
|
131
|
+
@redis_script_sha = @redis.script(:load, redis_script)
|
132
|
+
end
|
133
|
+
|
114
134
|
def main
|
135
|
+
load_redis_script()
|
115
136
|
time_start = Time.now
|
116
137
|
loop do
|
117
138
|
# wait for input from the redis queue
|
118
139
|
ret = @redis.blpop(REDIS_QUEUE, timeout: FLUSH_TIMEOUT/2)
|
119
140
|
enqueue(ret[1]) if ret != nil
|
120
141
|
|
121
|
-
# try to queue up to FLUSH_SIZE
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
142
|
+
# try to queue up to FLUSH_SIZE.
|
143
|
+
begin
|
144
|
+
length = FLUSH_SIZE - @queue.length
|
145
|
+
@redis.evalsha(@redis_script_sha, [REDIS_QUEUE], length).each do |item|
|
146
|
+
enqueue(item)
|
147
|
+
end
|
148
|
+
rescue Redis::CommandError => e
|
149
|
+
#Note: redis script reload logic and code are copied from logstash.
|
150
|
+
if e.to_s =~ /NOSCRIPT/ then
|
151
|
+
@logger.warn("Redis may have been restarted, reloading redis batch EVAL script", :exception => e);
|
152
|
+
load_redis_script()
|
153
|
+
retry
|
154
|
+
else
|
155
|
+
raise e
|
156
|
+
end
|
128
157
|
end
|
129
158
|
|
130
159
|
# flush when the queue is full or when time is up.
|
131
|
-
if @queue.size
|
160
|
+
if @queue.size >= FLUSH_SIZE or (Time.now - time_start) >= FLUSH_TIMEOUT
|
132
161
|
time_start = Time.now # reset timer upon a flush or timeout
|
133
162
|
flush_queue()
|
134
163
|
end
|
data/bin/tail-log.sh
CHANGED
@@ -27,6 +27,9 @@ IFS=$OIFS
|
|
27
27
|
SINCEDB_DIR=${SINCEDB_DIR:-~/.tail-log}
|
28
28
|
mkdir -p "$SINCEDB_DIR" || true
|
29
29
|
|
30
|
+
# Whether to tail from the end instead of from the first line when there's record
|
31
|
+
# of the file in SINCEDB.
|
32
|
+
SINCE_EOF=${SINCE_EOF:-""}
|
30
33
|
|
31
34
|
# Helper to build the arguments to tail.
|
32
35
|
# Specifically, we expect the use of GNU tail as found in GNU coreutils.
|
@@ -51,11 +54,13 @@ build_tail_args() {
|
|
51
54
|
continue
|
52
55
|
fi
|
53
56
|
fi
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
57
|
+
if [ ! "$SINCE_EOF" ]; then
|
58
|
+
TAIL_ARGS[$((i++))]="-n+$(($(wc -l "$fpath" | cut -d' ' -f1) + 1))"
|
59
|
+
# Note: we can't just ask tail to seek to the end here(ie, with -n0) since
|
60
|
+
# then we'd lose track of the line count.
|
61
|
+
# Note: if fpath doesn't exist yet, then the above evaluates to "-n+1", which
|
62
|
+
# is fine.
|
63
|
+
fi
|
59
64
|
TAIL_ARGS[$((i++))]=$fpath
|
60
65
|
done
|
61
66
|
}
|
data/log2json.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'log2json'
|
3
|
-
s.version = '0.1.
|
3
|
+
s.version = '0.1.6'
|
4
4
|
s.summary = "Read, filter and ship logs. ie, poor man's roll-your-own, light-weight logstash replacement."
|
5
5
|
s.description = IO.read(File.join(File.dirname(__FILE__), 'README'))
|
6
6
|
s.authors = ['Jack Kuan']
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 6
|
9
|
+
version: 0.1.6
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Jack Kuan
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2013-09-
|
17
|
+
date: 2013-09-17 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|