snoopit 0.0.1
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/.coveralls.yml +1 -0
- data/.gitignore +39 -0
- data/.idea/.name +1 -0
- data/.idea/.rakeTasks +7 -0
- data/.idea/dictionaries/rbirch.xml +9 -0
- data/.idea/encodings.xml +5 -0
- data/.idea/misc.xml +5 -0
- data/.idea/modules.xml +9 -0
- data/.idea/scopes/scope_settings.xml +5 -0
- data/.idea/snoopit.iml +233 -0
- data/.idea/vcs.xml +7 -0
- data/.rspec +2 -0
- data/.travis.yml +7 -0
- data/Gemfile +15 -0
- data/LICENSE.txt +22 -0
- data/README.md +411 -0
- data/Rakefile +1 -0
- data/bin/snoopit +173 -0
- data/lib/snoopit.rb +22 -0
- data/lib/snoopit/detected.rb +50 -0
- data/lib/snoopit/file_info.rb +104 -0
- data/lib/snoopit/file_tracker.rb +83 -0
- data/lib/snoopit/logger.rb +30 -0
- data/lib/snoopit/notification_manager.rb +123 -0
- data/lib/snoopit/notifier.rb +25 -0
- data/lib/snoopit/notifiers/email.rb +61 -0
- data/lib/snoopit/notifiers/http.rb +85 -0
- data/lib/snoopit/notifiers/https.rb +21 -0
- data/lib/snoopit/notifiers/stomp.rb +59 -0
- data/lib/snoopit/register.rb +69 -0
- data/lib/snoopit/sniffer.rb +51 -0
- data/lib/snoopit/snooper.rb +149 -0
- data/lib/snoopit/snoopy.rb +67 -0
- data/lib/snoopit/version.rb +3 -0
- data/snoopit.gemspec +27 -0
- data/spec/bin/snoopit_spec.rb +258 -0
- data/spec/file_info_spec.rb +131 -0
- data/spec/file_tracker_spec.rb +172 -0
- data/spec/notification_manager_spec.rb +103 -0
- data/spec/notifiers/email_spec.rb +36 -0
- data/spec/notifiers/http_spec.rb +37 -0
- data/spec/notifiers/https_spec.rb +38 -0
- data/spec/notifiers/stomp_spec.rb +34 -0
- data/spec/register_spec.rb +105 -0
- data/spec/snooper_spec.rb +538 -0
- data/spec/spec_helper.rb +24 -0
- data/spec/support/log/snoop_log.test +593 -0
- data/spec/support/log/snoop_log_2.test +593 -0
- data/spec/support/multiple_snoopies.json +82 -0
- data/spec/support/regexp_tester.rb +10 -0
- data/spec/support/snoopies.json +93 -0
- data/spec/support/snoopies_notifiers.json +66 -0
- data/spec/support/test_notifier.rb +18 -0
- data/spec/support/test_notifier_load.rb +18 -0
- data/support/snoopies.json +110 -0
- metadata +190 -0
@@ -0,0 +1,51 @@
|
|
1
|
+
module Snoopit
|
2
|
+
class Sniffer
|
3
|
+
|
4
|
+
attr :pre_before, :before, :after, :comment, :regexp, :sniffed, :notifiers
|
5
|
+
|
6
|
+
def initialize(sniffer_params)
|
7
|
+
@before = sniffer_params['lines']['before'].nil? ? 2 : sniffer_params['lines']['before']
|
8
|
+
@pre_before = Register.new @before
|
9
|
+
@after = sniffer_params['lines']['after'].nil? ? 2 : sniffer_params['lines']['after']
|
10
|
+
@comment = sniffer_params['comment']
|
11
|
+
@regexp = Regexp.new sniffer_params['regexp']
|
12
|
+
@notifiers = {}
|
13
|
+
setup_notifiers sniffer_params
|
14
|
+
@sniffed = []
|
15
|
+
end
|
16
|
+
|
17
|
+
def setup_notifiers(params)
|
18
|
+
@notifiers = params['notify'] unless params['notify'].nil?
|
19
|
+
end
|
20
|
+
|
21
|
+
def track(file, line_no, line)
|
22
|
+
matched = @regexp.match(line) do |m|
|
23
|
+
@sniffed << Detected.new(@comment, @pre_before, @after, line, file, line_no)
|
24
|
+
end
|
25
|
+
@pre_before.push_front line if matched.nil?
|
26
|
+
tracking line
|
27
|
+
end
|
28
|
+
|
29
|
+
def tracking(line)
|
30
|
+
@sniffed.each do |detected|
|
31
|
+
detected.track line unless detected.finished?
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def as_json(options=nil)
|
36
|
+
{
|
37
|
+
before: @before,
|
38
|
+
after: @after,
|
39
|
+
comment: @comment,
|
40
|
+
regexp: @regexp.to_json,
|
41
|
+
sniffed: @sniffed,
|
42
|
+
notifiers: @notifiers
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
def to_json(*a)
|
47
|
+
as_json.to_json(*a)
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
require 'json'
|
2
|
+
module Snoopit
|
3
|
+
class Snooper
|
4
|
+
|
5
|
+
attr_accessor :snoopies, :notifier, :file_tracker
|
6
|
+
|
7
|
+
# Snoopies are the list of available named snoopers
|
8
|
+
# Snoopers are the current active invocations of selected snoopies
|
9
|
+
def initialize(notifications=true, db_file=nil, logger=nil, log_level=::Logger::INFO)
|
10
|
+
@snoopies = { }
|
11
|
+
@file_tracker = FileTracker.new db_file unless db_file.nil?
|
12
|
+
@notifier = NotificationManager.new if notifications
|
13
|
+
Snoopit::Logging.create_logger(logger) unless logger.nil?
|
14
|
+
Snoopit.logger.level = log_level
|
15
|
+
end
|
16
|
+
|
17
|
+
# Load the configuration from a file
|
18
|
+
# Calls <code>load_snoopers(json_hash)</code> and <code>load_notifiers(json_hash)</code> and
|
19
|
+
# @param snoopies_file [String] path to file
|
20
|
+
def load_file(snoopies_file)
|
21
|
+
raise ArgumentError.new "Invalid Snooper JSON File: #{snoopies_file}" if (snoopies_file.nil?) || (! File.exist? snoopies_file)
|
22
|
+
json_hash = JSON.parse(IO.read(snoopies_file))
|
23
|
+
load_snoopers json_hash
|
24
|
+
load_notifiers json_hash
|
25
|
+
end
|
26
|
+
|
27
|
+
# Load the configuration from a file
|
28
|
+
# @param json [String] json string
|
29
|
+
def load_json(json)
|
30
|
+
json_hash = JSON.parse(json)
|
31
|
+
load_snoopers json_hash
|
32
|
+
load_notifiers json_hash
|
33
|
+
end
|
34
|
+
|
35
|
+
# Load the configuration from a file
|
36
|
+
# @param json_hash [Hash]
|
37
|
+
def load_snoopers(json_hash)
|
38
|
+
snoopies_json = json_hash['snoopers']
|
39
|
+
snoopies_json.each do |name, snooper|
|
40
|
+
@snoopies[name] = Snoopy.new(name, snooper)
|
41
|
+
end
|
42
|
+
raise ArgumentError.new 'There are no Snoopies in the JSON Snooper ' if @snoopies.size == 0
|
43
|
+
end
|
44
|
+
|
45
|
+
def load_notifiers(json_hash)
|
46
|
+
@notifier.load_notifier_config json_hash['notifiers'] unless @notifier.nil?
|
47
|
+
end
|
48
|
+
|
49
|
+
def register_notifier(notifier)
|
50
|
+
@notifier.register notifier
|
51
|
+
end
|
52
|
+
|
53
|
+
def unregister_notifier(notifier)
|
54
|
+
@notifier.unregister notifier
|
55
|
+
end
|
56
|
+
|
57
|
+
# Use the snoopies and start snooping
|
58
|
+
def snoop(names=[])
|
59
|
+
snoopers = get_snoopers names
|
60
|
+
snoopers.each do |snoopy|
|
61
|
+
if (!snoopy.dir.nil?) && (snoopy.dir?)
|
62
|
+
snoop_dir snoopy
|
63
|
+
else
|
64
|
+
snoop_file snoopy
|
65
|
+
end
|
66
|
+
end
|
67
|
+
@notifier.notify snoopers unless @notifier.nil?
|
68
|
+
snoopers
|
69
|
+
end
|
70
|
+
|
71
|
+
def get_snoopers(names=[])
|
72
|
+
snoopers = []
|
73
|
+
use_names = (names.size == 0 ? false : true)
|
74
|
+
snoopies.each do |key, snooper|
|
75
|
+
if use_names
|
76
|
+
snoopers << snooper if names.include? key
|
77
|
+
else
|
78
|
+
snoopers << snooper
|
79
|
+
end
|
80
|
+
end
|
81
|
+
snoopers
|
82
|
+
end
|
83
|
+
|
84
|
+
def snoop_dir(snoopy)
|
85
|
+
Snoopit.logger.debug "Snooping directory: #{snoopy.dir}"
|
86
|
+
get_files(snoopy).each do |file|
|
87
|
+
next if File.directory? file
|
88
|
+
sniff_it snoopy, "#{snoopy.dir}/#{file}"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def get_files(snoopy)
|
93
|
+
if snoopy.glob?
|
94
|
+
files = get_glob_list snoopy
|
95
|
+
else
|
96
|
+
files = get_file_list snoopy
|
97
|
+
end
|
98
|
+
files
|
99
|
+
end
|
100
|
+
|
101
|
+
def get_glob_list(snoopy)
|
102
|
+
Snoopit.logger.debug "Snooping glob: #{snoopy.glob}"
|
103
|
+
cwd = Dir.getwd
|
104
|
+
begin
|
105
|
+
Dir.chdir snoopy.dir
|
106
|
+
files = Dir.glob snoopy.glob
|
107
|
+
ensure
|
108
|
+
Dir.chdir cwd
|
109
|
+
end
|
110
|
+
files
|
111
|
+
end
|
112
|
+
|
113
|
+
def get_file_list(snoopy)
|
114
|
+
Snoopit.logger.debug "Snooper directory: #{snoopy.dir}"
|
115
|
+
Dir.entries snoopy.dir
|
116
|
+
end
|
117
|
+
|
118
|
+
def snoop_file(snoopy)
|
119
|
+
raise ArgumentError.new "Could find file #{snoopy.input}" unless File.exist? snoopy.input
|
120
|
+
Snoopit.logger.debug "Snooping file: #{snoopy.input} with snoopy: #{snoopy.name}"
|
121
|
+
sniff_it snoopy, snoopy.input
|
122
|
+
end
|
123
|
+
|
124
|
+
def sniff_it(snoopy, file_name)
|
125
|
+
Snoopit.logger.debug "Sniffing file: #{file_name} with snoopy: #{snoopy.name}"
|
126
|
+
unless @file_tracker.nil?
|
127
|
+
file_track_read(snoopy, file_name)
|
128
|
+
else
|
129
|
+
file_read(snoopy, file_name)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def file_track_read(snoopy, file_name)
|
134
|
+
@file_tracker.foreach file_name do |line, line_no|
|
135
|
+
snoopy.sniff snoopy.input, line_no, line
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def file_read(snoopy, file_name)
|
140
|
+
line_no = 0
|
141
|
+
File.foreach file_name do |line|
|
142
|
+
snoopy.sniff snoopy.input, line_no, line
|
143
|
+
line_no += 1
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
148
|
+
|
149
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Snoopit
|
2
|
+
class Snoopy
|
3
|
+
|
4
|
+
attr :name, :input, :output, :dir, :glob, :sniffers
|
5
|
+
|
6
|
+
def initialize(name, params)
|
7
|
+
@name = name
|
8
|
+
@output = params['output']
|
9
|
+
setup_input params
|
10
|
+
setup_dir params unless params['dir'].nil?
|
11
|
+
input_check?
|
12
|
+
setup_sniffers params
|
13
|
+
end
|
14
|
+
|
15
|
+
def setup_input(params)
|
16
|
+
@input = params['snoop']
|
17
|
+
end
|
18
|
+
|
19
|
+
def setup_dir(params)
|
20
|
+
@dir = params['dir']['path']
|
21
|
+
@glob = params['dir']['glob']
|
22
|
+
end
|
23
|
+
|
24
|
+
def input_check?
|
25
|
+
return true unless @input.nil?
|
26
|
+
return true unless @dir.nil?
|
27
|
+
raise ArgumentError.new('Snooper JSON must contain either an input or dir parameter')
|
28
|
+
end
|
29
|
+
|
30
|
+
def setup_sniffers(params)
|
31
|
+
raise ArgumentError.new('Snooper JSON missing sniffers array') if params['sniffers'].nil?
|
32
|
+
@sniffers = []
|
33
|
+
params['sniffers'].each do |sniffer|
|
34
|
+
@sniffers << Sniffer.new(sniffer)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def dir?
|
39
|
+
! @dir.nil?
|
40
|
+
end
|
41
|
+
|
42
|
+
def glob?
|
43
|
+
! @glob.nil?
|
44
|
+
end
|
45
|
+
|
46
|
+
def sniff(file, line_no, line)
|
47
|
+
@sniffers.each do |sniffer|
|
48
|
+
sniffer.track file, line_no, line
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def as_json(options=nil)
|
53
|
+
{
|
54
|
+
name: @name,
|
55
|
+
input: @input,
|
56
|
+
dir: @dir,
|
57
|
+
glob: @glob,
|
58
|
+
sniffers: @sniffers
|
59
|
+
}
|
60
|
+
end
|
61
|
+
|
62
|
+
def to_json(*a)
|
63
|
+
as_json.to_json(*a)
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
data/snoopit.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'snoopit/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'snoopit'
|
8
|
+
spec.version = Snoopit::VERSION
|
9
|
+
spec.authors = ['Robert Birch']
|
10
|
+
spec.email = ['robdbirch@gmail.com']
|
11
|
+
spec.description = %q{Snoops files for specified information via a simple configuration file}
|
12
|
+
spec.summary = %q{Using regular expressions snoops files or directories for specific information. Sends events and tracks repeated invocations as not to send repeat events}
|
13
|
+
spec.homepage = 'https://github.com/robdbirch/snoopit/blob/master/README.md'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_runtime_dependency 'awesome_print', '~> 1.2'
|
22
|
+
spec.add_runtime_dependency 'stomp', '~> 1.3'
|
23
|
+
|
24
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
25
|
+
spec.add_development_dependency 'rake', '10.1'
|
26
|
+
spec.add_development_dependency 'rspec', '2.14'
|
27
|
+
end
|
@@ -0,0 +1,258 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Snoopit' do
|
4
|
+
|
5
|
+
# *** Note ***
|
6
|
+
# used :skip on some tests due to captured stdout during coverage showing rvm environment only in the ide,
|
7
|
+
def capture_stdout(cmd)
|
8
|
+
IO.popen cmd, 'r+' do |pipe|
|
9
|
+
pipe.close_write
|
10
|
+
output = pipe.read
|
11
|
+
pipe.close_read
|
12
|
+
output
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def cmd
|
17
|
+
lib = File.expand_path '../../../lib', __FILE__
|
18
|
+
'ruby -I ' + lib + ' ' + File.expand_path('../../../bin/snoopit', __FILE__)
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'command line options' do
|
22
|
+
|
23
|
+
it '--help' do
|
24
|
+
output = capture_stdout cmd + ' --help'
|
25
|
+
expect(output).to match(/Usage: snoopit \[options\]/)
|
26
|
+
expect(output).to match(/--help/)
|
27
|
+
expect(output).to match(/-h/)
|
28
|
+
expect(output).to match(/-v/)
|
29
|
+
expect(output).to match(/-verbose/)
|
30
|
+
end
|
31
|
+
|
32
|
+
it '-h print help message' do
|
33
|
+
output = capture_stdout cmd + ' --help'
|
34
|
+
expect(output).to match(/Usage: snoopit \[options\]/)
|
35
|
+
expect(output).to match(/--help/)
|
36
|
+
expect(output).to match(/-h/)
|
37
|
+
expect(output).to match(/-v/)
|
38
|
+
expect(output).to match(/-verbose/)
|
39
|
+
end
|
40
|
+
|
41
|
+
# use :skip with coverage
|
42
|
+
it '-t print a snoopers template to standard out' do
|
43
|
+
output = capture_stdout cmd + ' -t'
|
44
|
+
jo = JSON.parse output
|
45
|
+
notifiers = jo['notifiers']
|
46
|
+
expect(notifiers['load'].size).to eq 1
|
47
|
+
expect(notifiers['load']['Notifier Identifier']['file']).to eq '/path/to/mynotifier'
|
48
|
+
expect(notifiers).to include 'email'
|
49
|
+
expect(notifiers).to include 'stomp'
|
50
|
+
expect(notifiers).to include 'http'
|
51
|
+
expect(notifiers).to include 'https'
|
52
|
+
end
|
53
|
+
|
54
|
+
it '--snoopers file.json load specified snoopers file' do
|
55
|
+
file = File.expand_path '../../support/snoopies.json', __FILE__
|
56
|
+
output = capture_stdout cmd + ' --snoopers ' + file
|
57
|
+
expect(output).to match /Reading from queue: scores\:\/queue\/scores/
|
58
|
+
expect(output).to match /Prediction loader waiting for scores \.\.\./
|
59
|
+
expect(output).to include 'Non OK Status'
|
60
|
+
expect(output).to include 'Total Number of records'
|
61
|
+
end
|
62
|
+
|
63
|
+
it '-s file.json load specified snoopers file' do
|
64
|
+
file = File.expand_path '../../support/snoopies.json', __FILE__
|
65
|
+
output = capture_stdout cmd + ' -s ' + file
|
66
|
+
expect(output).to match /Reading from queue: scores\:\/queue\/scores/
|
67
|
+
expect(output).to match /Prediction loader waiting for scores \.\.\./
|
68
|
+
expect(output).to match /Non OK Status from AI Core\:/
|
69
|
+
expect(output).to include 'Non OK Status'
|
70
|
+
expect(output).to include 'Total Number of records'
|
71
|
+
expect(output).to include 'Failed to bulk load'
|
72
|
+
end
|
73
|
+
|
74
|
+
it '-S snooper only use the specified snooper from the snoopers file' do
|
75
|
+
file = File.expand_path '../../support/snoopies.json', __FILE__
|
76
|
+
output = capture_stdout cmd + ' -s ' + file + ' -S AppServer2'
|
77
|
+
expect(output).to match /Reading from queue: scores\:\/queue\/scores/
|
78
|
+
expect(output).to match /Prediction loader waiting for scores \.\.\./
|
79
|
+
expect(output).to match /Non OK Status from AI Core:/
|
80
|
+
expect(output).to include 'Non OK Status'
|
81
|
+
expect(output).not_to include 'Total Number of records'
|
82
|
+
expect(output).not_to include 'Failed to bulk load'
|
83
|
+
end
|
84
|
+
|
85
|
+
it '--snooper snooper only user the specified snooper from the snoopers file' do
|
86
|
+
file = File.expand_path '../../support/snoopies.json', __FILE__
|
87
|
+
output = capture_stdout cmd + ' -s ' + file + ' --snooper AppServer2'
|
88
|
+
expect(output).to match /Reading from queue: scores\:\/queue\/scores/
|
89
|
+
expect(output).to match /Prediction loader waiting for scores \.\.\./
|
90
|
+
expect(output).to match /Non OK Status from AI Core:/
|
91
|
+
expect(output).to include 'Non OK Status'
|
92
|
+
expect(output).not_to include 'Total Number of records'
|
93
|
+
expect(output).not_to include 'Failed to bulk load'
|
94
|
+
end
|
95
|
+
|
96
|
+
# use :skip with coverage
|
97
|
+
it '--json generate json output' do
|
98
|
+
file = File.expand_path '../../support/snoopies.json', __FILE__
|
99
|
+
output = capture_stdout cmd + ' -s ' + file + ' --snooper AppServer2 --json'
|
100
|
+
expect(output).to match /Reading from queue: scores\:\/queue\/scores/
|
101
|
+
expect(output).to match /Prediction loader waiting for scores \.\.\./
|
102
|
+
expect(output).to match /Non OK Status from AI Core:/
|
103
|
+
expect(output).to include 'Non OK Status'
|
104
|
+
expect(output).not_to include 'Total Number of records'
|
105
|
+
expect(output).not_to include 'Failed to bulk load'
|
106
|
+
jo = JSON.parse output
|
107
|
+
expect(jo.size).to eq 1
|
108
|
+
app2 = jo[0]
|
109
|
+
expect(app2['name']).to eq 'AppServer2'
|
110
|
+
sniffers = app2['sniffers'][0]
|
111
|
+
expect(sniffers['before']).to eq 2
|
112
|
+
expect(sniffers['after']).to eq 2
|
113
|
+
sniffed = sniffers['sniffed']
|
114
|
+
expect(sniffed.size).to eq 120
|
115
|
+
end
|
116
|
+
|
117
|
+
# use :skip with coverage
|
118
|
+
it '-j generate json output' do
|
119
|
+
file = File.expand_path '../../support/snoopies.json', __FILE__
|
120
|
+
output = capture_stdout cmd + ' -s ' + file + ' --snooper AppServer2 -j'
|
121
|
+
expect(output).to match /Reading from queue: scores\:\/queue\/scores/
|
122
|
+
expect(output).to match /Prediction loader waiting for scores \.\.\./
|
123
|
+
expect(output).to match /Non OK Status from AI Core:/
|
124
|
+
expect(output).to include 'Non OK Status'
|
125
|
+
expect(output).not_to include 'Total Number of records'
|
126
|
+
expect(output).not_to include 'Failed to bulk load'
|
127
|
+
jo = JSON.parse output
|
128
|
+
expect(jo.size).to eq 1
|
129
|
+
app2 = jo[0]
|
130
|
+
expect(app2['name']).to eq 'AppServer2'
|
131
|
+
sniffers = app2['sniffers'][0]
|
132
|
+
expect(sniffers['before']).to eq 2
|
133
|
+
expect(sniffers['after']).to eq 2
|
134
|
+
sniffed = sniffers['sniffed']
|
135
|
+
expect(sniffed.size).to eq 120
|
136
|
+
end
|
137
|
+
|
138
|
+
# use :skip with coverage
|
139
|
+
it '2 snoopers' do
|
140
|
+
file = File.expand_path '../../support/snoopies.json', __FILE__
|
141
|
+
ap file
|
142
|
+
output = capture_stdout cmd + ' -s ' + file + ' -S AppServer2 -S SnoopTest -j'
|
143
|
+
expect(output).to match /Reading from queue: scores\:\/queue\/scores/
|
144
|
+
expect(output).to match /Prediction loader waiting for scores \.\.\./
|
145
|
+
expect(output).to include 'Non OK Status'
|
146
|
+
expect(output).to include 'Total Number of records'
|
147
|
+
expect(output).to include 'Failed to bulk load'
|
148
|
+
jo = JSON.parse output
|
149
|
+
expect(jo.size).to eq 2
|
150
|
+
app = jo[0]
|
151
|
+
names = []
|
152
|
+
names << app['name']
|
153
|
+
sniffers = app['sniffers'][0]
|
154
|
+
expect(sniffers['before']).to eq 2
|
155
|
+
expect(sniffers['after']).to eq 2
|
156
|
+
sniffed = sniffers['sniffed']
|
157
|
+
expect(sniffed.size).to eq 120
|
158
|
+
app2 = jo[1]
|
159
|
+
names << app2['name']
|
160
|
+
expect(names.size).to eq 2
|
161
|
+
expect(names).to include 'SnoopTest'
|
162
|
+
expect(names).to include 'AppServer2'
|
163
|
+
sniffers = app2['sniffers'][0]
|
164
|
+
expect(sniffers['before']).to eq 2
|
165
|
+
expect(sniffers['after']).to eq 2
|
166
|
+
sniffed = sniffers['sniffed']
|
167
|
+
expect(sniffed.size).to eq 120
|
168
|
+
end
|
169
|
+
|
170
|
+
it '-T enable file tracking' do
|
171
|
+
db_file = File.expand_path '../../../snoopit_db.json', __FILE__
|
172
|
+
File.delete db_file if File.exist? db_file
|
173
|
+
file = File.expand_path '../../support/snoopies.json', __FILE__
|
174
|
+
output = capture_stdout cmd + ' -s ' + file + ' --snooper AppServer2 -T'
|
175
|
+
expect(output).to match /Reading from queue: scores\:\/queue\/scores/
|
176
|
+
expect(output).to match /Prediction loader waiting for scores \.\.\./
|
177
|
+
expect(output).to match /Non OK Status from AI Core:/
|
178
|
+
expect(output).to include 'Non OK Status'
|
179
|
+
expect(output).not_to include 'Total Number of records'
|
180
|
+
expect(output).not_to include 'Failed to bulk load'
|
181
|
+
expect(File.exist?(db_file)).to eq true
|
182
|
+
expect(File.size(db_file)).to be > 0
|
183
|
+
tracked = File.read db_file
|
184
|
+
expect(tracked).to include './spec/support/log/snoop_log.test'
|
185
|
+
expect(tracked).to include './spec/support/log/snoop_log_2.test'
|
186
|
+
#ap JSON.parse tracked
|
187
|
+
File.delete db_file if File.exist? db_file
|
188
|
+
end
|
189
|
+
|
190
|
+
it '--tracking enable file tracking' do
|
191
|
+
db_file = File.expand_path '../../../snoopit_db.json', __FILE__
|
192
|
+
ap db_file
|
193
|
+
File.delete db_file if File.exist? db_file
|
194
|
+
file = File.expand_path '../../support/snoopies.json', __FILE__
|
195
|
+
output = capture_stdout cmd + ' -s ' + file + ' --snooper AppServer2 --tracking'
|
196
|
+
expect(output).to match /Reading from queue: scores\:\/queue\/scores/
|
197
|
+
expect(output).to match /Prediction loader waiting for scores \.\.\./
|
198
|
+
expect(output).to match /Non OK Status from AI Core:/
|
199
|
+
expect(output).to include 'Non OK Status'
|
200
|
+
expect(output).not_to include 'Total Number of records'
|
201
|
+
expect(output).not_to include 'Failed to bulk load'
|
202
|
+
expect(File.exist?(db_file)).to eq true
|
203
|
+
expect(File.size(db_file)).to be > 0
|
204
|
+
tracked = File.read db_file
|
205
|
+
expect(tracked).to include './spec/support/log/snoop_log.test'
|
206
|
+
expect(tracked).to include './spec/support/log/snoop_log_2.test'
|
207
|
+
#ap JSON.parse tracked
|
208
|
+
File.delete db_file if File.exist? db_file
|
209
|
+
end
|
210
|
+
|
211
|
+
it '-f filename use a different named tracking file' do
|
212
|
+
tmp_dir = File.expand_path '../../../tmp', __FILE__
|
213
|
+
Dir.mkdir tmp_dir unless Dir.exist?(tmp_dir)
|
214
|
+
db_file = File.expand_path '../../../tmp/snoopit_db.json', __FILE__
|
215
|
+
File.delete db_file if File.exist? db_file
|
216
|
+
file = File.expand_path '../../support/snoopies.json', __FILE__
|
217
|
+
output = capture_stdout cmd + ' -s ' + file + ' --snooper AppServer2 -f ' + db_file
|
218
|
+
expect(output).to match /Reading from queue: scores\:\/queue\/scores/
|
219
|
+
expect(output).to match /Prediction loader waiting for scores \.\.\./
|
220
|
+
expect(output).to match /Non OK Status from AI Core:/
|
221
|
+
expect(output).to include 'Non OK Status'
|
222
|
+
expect(output).not_to include 'Total Number of records'
|
223
|
+
expect(output).not_to include 'Failed to bulk load'
|
224
|
+
expect(File.exist?(db_file)).to eq true
|
225
|
+
expect(File.size(db_file)).to be > 0
|
226
|
+
tracked = File.read db_file
|
227
|
+
expect(tracked).to include './spec/support/log/snoop_log.test'
|
228
|
+
expect(tracked).to include './spec/support/log/snoop_log_2.test'
|
229
|
+
#ap JSON.parse tracked
|
230
|
+
File.delete db_file if File.exist? db_file
|
231
|
+
end
|
232
|
+
|
233
|
+
it '--tracking-file filename use a different named tracking file' do
|
234
|
+
tmp_dir = File.expand_path '../../../tmp', __FILE__
|
235
|
+
Dir.mkdir tmp_dir unless Dir.exist?(tmp_dir)
|
236
|
+
db_file = File.expand_path '../../../tmp/snoopit_db.json', __FILE__
|
237
|
+
File.delete db_file if File.exist? db_file
|
238
|
+
file = File.expand_path '../../support/snoopies.json', __FILE__
|
239
|
+
output = capture_stdout cmd + ' -s ' + file + ' --snooper AppServer2 --tracking-file ' + db_file
|
240
|
+
expect(output).to match /Reading from queue: scores\:\/queue\/scores/
|
241
|
+
expect(output).to match /Prediction loader waiting for scores \.\.\./
|
242
|
+
expect(output).to match /Non OK Status from AI Core:/
|
243
|
+
expect(output).to include 'Non OK Status'
|
244
|
+
expect(output).not_to include 'Total Number of records'
|
245
|
+
expect(output).not_to include 'Failed to bulk load'
|
246
|
+
expect(File.exist?(db_file)).to eq true
|
247
|
+
expect(File.size(db_file)).to be > 0
|
248
|
+
tracked = File.read db_file
|
249
|
+
expect(tracked).to include './spec/support/log/snoop_log.test'
|
250
|
+
expect(tracked).to include './spec/support/log/snoop_log_2.test'
|
251
|
+
#ap JSON.parse tracked
|
252
|
+
File.delete db_file if File.exist? db_file
|
253
|
+
end
|
254
|
+
|
255
|
+
end
|
256
|
+
|
257
|
+
|
258
|
+
end
|