ractor-tail 0.1.0
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.
- checksums.yaml +7 -0
- data/lib/ractor_tail/tailer.rb +45 -0
- data/lib/ractor_tail.rb +6 -0
- metadata +60 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 44c238d9e51692f198d55008d9c0e238562d041ffc90696d23c17934df991fa4
|
4
|
+
data.tar.gz: 12980816e942cd47fe8365d55646316947fd591c450dc213b24bc9770d8a8f8b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8fb31aa75301ec2395f59b632091e50b8cb654ad69180f71ffa7460e14f6395fed7c42603407558b1b0487971d456b99d91269208b8adc073313e122ab6a61c7
|
7
|
+
data.tar.gz: d5bb4dd2dc5fd10dad6e4015d6a86c46849f069ae2174de106d6faeef87edf8ade6064f6b6f0f330789b1e75cb4e0967c837a4dcbe7a57aa2c235cea5d7afb36
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RactorTail
|
4
|
+
class Tailer
|
5
|
+
def initialize(path, logger: nil, &block)
|
6
|
+
@path = path
|
7
|
+
@callback = block
|
8
|
+
@logger = logger
|
9
|
+
end
|
10
|
+
|
11
|
+
def run
|
12
|
+
loop do
|
13
|
+
begin
|
14
|
+
File.open(@path, "r") do |file|
|
15
|
+
file.seek(0, IO::SEEK_END)
|
16
|
+
current_inode = file.stat.ino
|
17
|
+
|
18
|
+
loop do
|
19
|
+
if (line = file.gets)
|
20
|
+
@callback.call(line)
|
21
|
+
else
|
22
|
+
sleep 0.5
|
23
|
+
end
|
24
|
+
|
25
|
+
if File.exist?(@path) && File.stat(@path).ino != current_inode
|
26
|
+
log "Detected logrotate for #{@path}"
|
27
|
+
break
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
rescue => e
|
32
|
+
log "Error reading #{@path}: #{e.message}"
|
33
|
+
sleep 2
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def log(msg)
|
41
|
+
return unless @logger
|
42
|
+
@logger.info(msg)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/ractor_tail.rb
ADDED
metadata
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ractor-tail
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Krzysztof Tomczyk
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2025-05-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: minitest
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: Watch files safely from within Ractors with support for rotation (inode
|
28
|
+
detection).
|
29
|
+
email:
|
30
|
+
- czytom@gmail.com
|
31
|
+
executables: []
|
32
|
+
extensions: []
|
33
|
+
extra_rdoc_files: []
|
34
|
+
files:
|
35
|
+
- lib/ractor_tail.rb
|
36
|
+
- lib/ractor_tail/tailer.rb
|
37
|
+
homepage: ''
|
38
|
+
licenses:
|
39
|
+
- MIT
|
40
|
+
metadata: {}
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options: []
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
requirements: []
|
56
|
+
rubygems_version: 3.0.3.1
|
57
|
+
signing_key:
|
58
|
+
specification_version: 4
|
59
|
+
summary: Ractor-safe file tailing library with logrotate support
|
60
|
+
test_files: []
|