database_stalker 0.1.2 → 0.1.3
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 +4 -4
- data/lib/database_stalker/log_stalker.rb +46 -0
- data/lib/database_stalker/parser.rb +5 -7
- data/lib/database_stalker/util.rb +18 -0
- data/lib/database_stalker/version.rb +1 -1
- data/lib/database_stalker.rb +62 -19
- data/rails_test/spec/database_stalker_usage_spec.rb +6 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7971413c47361657c7bf2e049c210f4308af2e0c
|
4
|
+
data.tar.gz: 346327937f09e485bcb5ce0610a9e67fab735cb3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b54cde30f9f7842f90a5134efb81a6719cc1df5a8d9807bb6298833bcfd63aeddc01f52f4b0dff311ee59a589b369a916bc80de295429e1d548398f01e25df06
|
7
|
+
data.tar.gz: 9c506778ac4f519d1519512aa2fb3480ae79b248661e7a4a2c845fc8d7cab0c065106c609ed391783c5b0c65612229520272334f50748ee495521591c697f1d9
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'database_stalker/util'
|
2
|
+
|
3
|
+
module DatabaseStalker
|
4
|
+
class LogStalker
|
5
|
+
|
6
|
+
def initialize(stalked_file_path, stalking_result_path)
|
7
|
+
@stalked_file_path = stalked_file_path
|
8
|
+
@stalking_result_path = stalking_result_path
|
9
|
+
end
|
10
|
+
|
11
|
+
def run
|
12
|
+
@runned_tails = Util.runned_tail_pids
|
13
|
+
spawn("tail -f -n 0 #{@stalked_file_path} > #{@stalking_result_path}")
|
14
|
+
wait_for_tail_process_runninng
|
15
|
+
end
|
16
|
+
|
17
|
+
def stop
|
18
|
+
wait_for_tail_process_output
|
19
|
+
current_runned_tails = Util.runned_tail_pids
|
20
|
+
(current_runned_tails - @runned_tails).each do |pid|
|
21
|
+
Process.kill('KILL', pid)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def result
|
26
|
+
result = []
|
27
|
+
File.open(@stalking_result_path) do |file|
|
28
|
+
file.each_line do |line|
|
29
|
+
result << line
|
30
|
+
end
|
31
|
+
end
|
32
|
+
result
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def wait_for_tail_process_runninng
|
39
|
+
sleep(0.01)
|
40
|
+
end
|
41
|
+
|
42
|
+
def wait_for_tail_process_output
|
43
|
+
sleep(0.01)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -1,15 +1,13 @@
|
|
1
1
|
class DatabaseStalker::Parser
|
2
|
-
def initialize(
|
3
|
-
@
|
2
|
+
def initialize(log)
|
3
|
+
@log = log
|
4
4
|
end
|
5
5
|
|
6
6
|
def table_names
|
7
7
|
tables = []
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
tables << matched[1] unless matched.nil?
|
12
|
-
end
|
8
|
+
@log.each do |line|
|
9
|
+
matched = line.match(/INSERT\ INTO\ `(.+)` \(/)
|
10
|
+
tables << matched[1] unless matched.nil?
|
13
11
|
end
|
14
12
|
tables.uniq
|
15
13
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module DatabaseStalker::Util
|
2
|
+
|
3
|
+
module_function
|
4
|
+
|
5
|
+
def runned_tail_pids
|
6
|
+
pids = ''
|
7
|
+
IO.popen("ps x | grep 'tail -f -n 0' | grep -v grep | awk '{print $1}'") do |io|
|
8
|
+
while true
|
9
|
+
buffer = io.gets
|
10
|
+
break if buffer.nil?
|
11
|
+
pids += buffer
|
12
|
+
end
|
13
|
+
end
|
14
|
+
pids.split("\n").map do |pid|
|
15
|
+
pid.to_i
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/database_stalker.rb
CHANGED
@@ -1,25 +1,62 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'database_stalker/version'
|
2
|
+
require 'database_stalker/parser'
|
3
|
+
require 'database_stalker/log_stalker'
|
3
4
|
|
4
5
|
module DatabaseStalker
|
5
6
|
|
6
7
|
DEFAULT_LOG_FILE = 'log/test.log'
|
7
8
|
DEFAULT_TABLE_LOG_FILE = 'log/table_names.log'
|
9
|
+
DEFAULT_STALKING_LOG_FILE = 'log/stalking_log.log'
|
10
|
+
DEFAULT_STALKING_LOG_PER_TEST_FILE = 'log/stalking_log_per_test.log'
|
11
|
+
DEFAULT_STALKING_LOG_PER_TEST_TEMPORARY_FILE = 'log/stalking_log_per_test_temporary.log'
|
8
12
|
|
9
13
|
class << self
|
10
14
|
|
11
|
-
def
|
12
|
-
|
13
|
-
|
15
|
+
def set_up(
|
16
|
+
test_log: DEFAULT_LOG_FILE,
|
17
|
+
table_log: DEFAULT_TABLE_LOG_FILE,
|
18
|
+
stalking_log: DEFAULT_STALKING_LOG_FILE,
|
19
|
+
stalking_log_per_test: DEFAULT_STALKING_LOG_PER_TEST_FILE,
|
20
|
+
stalking_log_per_test_temporary: DEFAULT_STALKING_LOG_PER_TEST_TEMPORARY_FILE)
|
21
|
+
@test_log = test_log
|
22
|
+
@table_log = table_log
|
23
|
+
@stalking_log = stalking_log
|
24
|
+
@stalking_log_per_test = stalking_log_per_test
|
25
|
+
@stalking_log_per_test_temporary = stalking_log_per_test_temporary
|
26
|
+
File.delete(@stalking_log_per_test_temporary) if File.exist?(@stalking_log_per_test_temporary)
|
27
|
+
FileUtils.touch(@stalking_log_per_test_temporary)
|
28
|
+
end
|
29
|
+
|
30
|
+
def stalk
|
31
|
+
fork do
|
32
|
+
log_stalker = LogStalker.new(@test_log, @stalking_log)
|
33
|
+
log_stalker.run
|
14
34
|
watch_test_process
|
15
|
-
|
35
|
+
log_stalker.stop
|
36
|
+
used_log = []
|
37
|
+
File.open(@stalking_log_per_test_temporary, 'r') do |f|
|
38
|
+
f.each_line do |line|
|
39
|
+
used_log << line
|
40
|
+
end
|
41
|
+
end
|
42
|
+
all_log = log_stalker.result
|
43
|
+
parser = Parser.new(all_log.slice(used_log.size .. all_log.size - 1))
|
44
|
+
File.open(@table_log, 'w') do |file|
|
45
|
+
parser.table_names.each do |table_name|
|
46
|
+
file.write("#{table_name}\n")
|
47
|
+
end
|
48
|
+
end
|
16
49
|
end
|
50
|
+
wait_for_log_stalker
|
17
51
|
end
|
18
52
|
|
19
|
-
def
|
20
|
-
|
53
|
+
def wait_for_log_stalker
|
54
|
+
sleep(0.1)
|
55
|
+
end
|
56
|
+
|
57
|
+
def table_names
|
21
58
|
result = []
|
22
|
-
File.open(
|
59
|
+
File.open(@table_log, 'r') do |f|
|
23
60
|
f.each_line do |line|
|
24
61
|
result << line.strip
|
25
62
|
end
|
@@ -27,17 +64,23 @@ module DatabaseStalker
|
|
27
64
|
result
|
28
65
|
end
|
29
66
|
|
30
|
-
def
|
31
|
-
|
67
|
+
def stalk_per_test
|
68
|
+
@log_stalker = LogStalker.new(@test_log, @stalking_log_per_test)
|
69
|
+
@log_stalker.run
|
70
|
+
end
|
71
|
+
|
72
|
+
def table_names_per_test
|
73
|
+
@log_stalker.stop
|
74
|
+
appended_log = @log_stalker.result
|
75
|
+
parser = Parser.new(appended_log)
|
76
|
+
parser.table_names
|
32
77
|
end
|
33
78
|
|
34
|
-
def
|
35
|
-
File.open(
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
else
|
40
|
-
f = nil
|
79
|
+
def notify_table_deletion
|
80
|
+
File.open(@stalking_log_per_test_temporary, 'a') do |file|
|
81
|
+
appended_log = @log_stalker.result
|
82
|
+
appended_log.each do |line|
|
83
|
+
file.puts("#{line}")
|
41
84
|
end
|
42
85
|
end
|
43
86
|
end
|
@@ -49,5 +92,5 @@ module DatabaseStalker
|
|
49
92
|
end
|
50
93
|
end
|
51
94
|
|
52
|
-
private_class_method :
|
95
|
+
private_class_method :watch_test_process, :wait_for_log_stalker
|
53
96
|
end
|
@@ -2,10 +2,15 @@ require 'spec_helper'
|
|
2
2
|
require 'database_stalker'
|
3
3
|
|
4
4
|
describe 'use database_stakler' do
|
5
|
+
|
5
6
|
it do
|
6
|
-
DatabaseStalker.
|
7
|
+
DatabaseStalker.set_up
|
8
|
+
DatabaseStalker.stalk
|
9
|
+
DatabaseStalker.stalk_per_test
|
7
10
|
Sample1.create!
|
8
11
|
Sample2.create!
|
12
|
+
DatabaseStalker.table_names_per_test
|
13
|
+
DatabaseStalker.notify_table_deletion
|
9
14
|
Sample3.create!
|
10
15
|
end
|
11
16
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: database_stalker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tetsutaroendo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -73,7 +73,9 @@ files:
|
|
73
73
|
- bin/setup
|
74
74
|
- database_stalker.gemspec
|
75
75
|
- lib/database_stalker.rb
|
76
|
+
- lib/database_stalker/log_stalker.rb
|
76
77
|
- lib/database_stalker/parser.rb
|
78
|
+
- lib/database_stalker/util.rb
|
77
79
|
- lib/database_stalker/version.rb
|
78
80
|
- rails_test/.gitignore
|
79
81
|
- rails_test/.rspec
|