range_logger 1.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/Gemfile +6 -0
- data/Gemfile.lock +43 -0
- data/Rakefile +6 -0
- data/bin/range_logger +39 -0
- data/lib/range_logger/version.rb +3 -0
- data/lib/range_logger.rb +50 -0
- data/spec/files/test.log +5 -0
- data/spec/range_logger_spec.rb +24 -0
- data/spec/spec_helper.rb +14 -0
- metadata +124 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: cbc1ba25c348f23176b2541683229adc37ed7bb57f8b627a952c27586572d97b
|
4
|
+
data.tar.gz: 31d55198c43598889bbb7684563ceef9005f4cc06861bdde03ad062d8e478a9e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 69480d5774875fb1849d0edaa05bc15e61b888ebfb3e8fc048ca4b973b83b7b3e05aaec491fc9c71fe2d840962717c2d9774aac47f13623bde165f82d017012f
|
7
|
+
data.tar.gz: 51d239b0cf1d95d0ddfd4d2299004925a1bba810d81f3247e58ebc750c0dbacc330e62fd58bb02c5a121963158e494dba6090be0956eb0a97598f893b0fa36e3
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
range_logger (1.1.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
chronic (0.10.2)
|
10
|
+
coderay (1.1.3)
|
11
|
+
diff-lcs (1.4.4)
|
12
|
+
method_source (1.0.0)
|
13
|
+
pry (0.14.1)
|
14
|
+
coderay (~> 1.1)
|
15
|
+
method_source (~> 1.0)
|
16
|
+
rake (10.5.0)
|
17
|
+
rspec (3.10.0)
|
18
|
+
rspec-core (~> 3.10.0)
|
19
|
+
rspec-expectations (~> 3.10.0)
|
20
|
+
rspec-mocks (~> 3.10.0)
|
21
|
+
rspec-core (3.10.1)
|
22
|
+
rspec-support (~> 3.10.0)
|
23
|
+
rspec-expectations (3.10.1)
|
24
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
25
|
+
rspec-support (~> 3.10.0)
|
26
|
+
rspec-mocks (3.10.2)
|
27
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
28
|
+
rspec-support (~> 3.10.0)
|
29
|
+
rspec-support (3.10.2)
|
30
|
+
|
31
|
+
PLATFORMS
|
32
|
+
x86_64-linux
|
33
|
+
|
34
|
+
DEPENDENCIES
|
35
|
+
bundler (~> 2.2)
|
36
|
+
chronic
|
37
|
+
pry
|
38
|
+
rake (~> 10.0)
|
39
|
+
range_logger!
|
40
|
+
rspec (~> 3.0)
|
41
|
+
|
42
|
+
BUNDLED WITH
|
43
|
+
2.2.30
|
data/Rakefile
ADDED
data/bin/range_logger
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "range_logger"
|
3
|
+
require 'optparse'
|
4
|
+
require 'optparse/date'
|
5
|
+
require 'chronic'
|
6
|
+
|
7
|
+
options = {}
|
8
|
+
|
9
|
+
OptionParser.new do |parser|
|
10
|
+
parser.on('-f', '--from [String]', String) do |time|
|
11
|
+
options[:from] = Chronic.parse(time)
|
12
|
+
end
|
13
|
+
|
14
|
+
parser.on('-t', '--to [String]', String) do |time|
|
15
|
+
options[:to] = Chronic.parse(time)
|
16
|
+
end
|
17
|
+
|
18
|
+
parser.on_tail("-h", "--help", "Show this message") do
|
19
|
+
puts parser
|
20
|
+
exit
|
21
|
+
end
|
22
|
+
|
23
|
+
parser.on_tail("-v", "--version", "Show gem version") do
|
24
|
+
puts RangeLogger::VERSION
|
25
|
+
exit
|
26
|
+
end
|
27
|
+
end.parse!
|
28
|
+
|
29
|
+
arguments = ARGV
|
30
|
+
file_name = arguments[0]
|
31
|
+
|
32
|
+
if File.exist?(file_name)
|
33
|
+
options[:file] = file_name
|
34
|
+
|
35
|
+
RangeLogger::LogsParser.new(options).run!
|
36
|
+
else
|
37
|
+
puts "File #{file_name} does not exist"
|
38
|
+
end
|
39
|
+
|
data/lib/range_logger.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'time'
|
2
|
+
|
3
|
+
module RangeLogger
|
4
|
+
class LogsParser
|
5
|
+
attr_reader :from, :to, :file
|
6
|
+
|
7
|
+
TIME_REGEXP = /\[\d{4}\-\d{2}\-\w{3}\d{2}:\d{2}:\d{2}\.\d{6}\s#\d+\]/
|
8
|
+
|
9
|
+
def initialize(options={})
|
10
|
+
@file = File.open(options[:file])
|
11
|
+
@from = options[:from]
|
12
|
+
@to = options[:to] || Time.now
|
13
|
+
end
|
14
|
+
|
15
|
+
def run!
|
16
|
+
puts "Start date should be before end date" and return if from > to
|
17
|
+
|
18
|
+
logs = matched_logs
|
19
|
+
|
20
|
+
if logs.any?
|
21
|
+
file_name = "#{format_date(from)}_#{format_date(to)}.log"
|
22
|
+
File.write(file_name, logs.join)
|
23
|
+
file_size = "#{(File.size(file_name)/(1024.0 * 1024.0)).round(3)} MB"
|
24
|
+
|
25
|
+
puts "New log file #{file_name} with size #{file_size} has been successfully created"
|
26
|
+
else
|
27
|
+
puts "There are no mathes, try another date range"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def matched_logs
|
32
|
+
[].tap do |logs|
|
33
|
+
file.each_line do |line|
|
34
|
+
next unless timestamp = line.match(TIME_REGEXP)
|
35
|
+
|
36
|
+
current_time = Time.parse(timestamp[0])
|
37
|
+
if current_time <= to
|
38
|
+
logs << line if current_time >= from
|
39
|
+
else
|
40
|
+
break
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def format_date(date)
|
47
|
+
date.strftime("%Y_%m_%d_%H-%M-%S")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/spec/files/test.log
ADDED
@@ -0,0 +1,5 @@
|
|
1
|
+
I, [2021-10-26T16:41:56.979971 #218269] INFO -- : [] Line1
|
2
|
+
I, [2021-10-26T17:41:56.979971 #218269] INFO -- : [] Line2
|
3
|
+
I, [2021-10-27T18:41:56.979971 #218269] INFO -- : [] Line3
|
4
|
+
I, [2021-10-28T20:41:56.979971 #218269] INFO -- : [] Line4
|
5
|
+
I, [2021-10-28T21:41:56.979971 #218269] INFO -- : [] Line5
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'date'
|
3
|
+
|
4
|
+
RSpec.describe RangeLogger do
|
5
|
+
let(:parser) { RangeLogger::LogsParser.new({file: File.open('spec/files/test.log'), from: Time.new(2021,10,26,17,30,0), to: Time.new(2021,10,28,20,12,30)}) }
|
6
|
+
|
7
|
+
describe 'version number' do
|
8
|
+
it "returns correct version number" do
|
9
|
+
expect(RangeLogger::VERSION).to eq('1.1.0')
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe 'format_date' do
|
14
|
+
it "returns formatted date" do
|
15
|
+
expect(parser.format_date(DateTime.new(2021,11,26,17,30,15))).to eq("2021_11_26_17-30-15")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe 'matched_logs' do
|
20
|
+
it "returns matched logs" do
|
21
|
+
expect(parser.matched_logs).to eq(["I, [2021-10-26T17:41:56.979971 #218269] INFO -- : [] Line2\n", "I, [2021-10-27T18:41:56.979971 #218269] INFO -- : [] Line3\n"])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require "bundler/setup"
|
2
|
+
require "range_logger"
|
3
|
+
|
4
|
+
RSpec.configure do |config|
|
5
|
+
# Enable flags like --only-failures and --next-failure
|
6
|
+
config.example_status_persistence_file_path = ".rspec_status"
|
7
|
+
|
8
|
+
# Disable RSpec exposing methods globally on `Module` and `main`
|
9
|
+
config.disable_monkey_patching!
|
10
|
+
|
11
|
+
config.expect_with :rspec do |c|
|
12
|
+
c.syntax = :expect
|
13
|
+
end
|
14
|
+
end
|
metadata
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: range_logger
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Uliana Dzoba
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-11-23 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.2'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: chronic
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: Command line tool to download environment logs by date range.
|
84
|
+
email:
|
85
|
+
- ulianadzoba@gmail.com
|
86
|
+
executables:
|
87
|
+
- range_logger
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- Gemfile
|
92
|
+
- Gemfile.lock
|
93
|
+
- Rakefile
|
94
|
+
- bin/range_logger
|
95
|
+
- lib/range_logger.rb
|
96
|
+
- lib/range_logger/version.rb
|
97
|
+
- spec/files/test.log
|
98
|
+
- spec/range_logger_spec.rb
|
99
|
+
- spec/spec_helper.rb
|
100
|
+
homepage: https://github.com/ulianadzoba/range_logger
|
101
|
+
licenses:
|
102
|
+
- MIT
|
103
|
+
metadata: {}
|
104
|
+
post_install_message:
|
105
|
+
rdoc_options: []
|
106
|
+
require_paths:
|
107
|
+
- lib
|
108
|
+
- bin
|
109
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
requirements: []
|
120
|
+
rubygems_version: 3.1.4
|
121
|
+
signing_key:
|
122
|
+
specification_version: 4
|
123
|
+
summary: Command line tool to download environment logs by date range.
|
124
|
+
test_files: []
|