chef-deployment-monitor 0.1.6 → 0.2.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 CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: a97d20f6c294a70850ba7e1a465e6a701b218dbb
4
- data.tar.gz: af54833c10acbbb6f1ebad76e5eaff0e717ebd9b
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YWM1YmNlNWJhNjc3NGNmYWVmNDVmZDBmZDgyZDgwOWQ2MmIxNTI2Nw==
5
+ data.tar.gz: !binary |-
6
+ Y2FlNDY2ZTQ2YTJmNzZhMDNhYWNjYzAxM2JmZmY3ZTY2MGJmNGUyYg==
5
7
  SHA512:
6
- metadata.gz: 58f375bae12d0af850d9ef085be6c853957b4fddc6292e1b9a39369633609b3ab84d8269b09ad79ba4d38eff72e38a1e70b94cc55e96d6d256fde9cdd92ca65a
7
- data.tar.gz: ceb79408bd8fcad581350d861f6036af7fd9a9e18051ea6b4854f1dd452eda5420de2c87c10b6bee740e7c9ec15636b7d97416c4bbb0ad9ebff5cfe197c47da2
8
+ metadata.gz: !binary |-
9
+ NTEzM2E2YzRlNzQwZjJiMjNiYWIzNjRkOTVkOTI0ZWFjOTMzOGI5OTZhNTYy
10
+ Mjk1ZWU0MGY4YzJkMTNjZDhjNDI2NzkyZDQ1OGRmNjMyNzdiYWMyNTJlMDUw
11
+ MDRkN2IyMDNhZGRkYmFmN2FhNWE2NzFhNTZjZDVlZDdlZDRmYzc=
12
+ data.tar.gz: !binary |-
13
+ ZDE0NTAwNGExZjk4NzY2YmM3NTJmN2Q1NWQ1MDQwMmU3ZDM5MTBmODg2NzEz
14
+ MGM2NDE2N2QxN2I1M2UxYjU3NTJjMDg1ZDczNmViMDBlNzcxNDA1YzhjZmVi
15
+ MjQ3MjZjZDRhNDYzNmFmMDgzYTE4YjgwZTA4ZGU5ZDZlZjYzNTk=
@@ -0,0 +1,2 @@
1
+ *.gem
2
+ Gemfile.lock
@@ -0,0 +1,12 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.2.0
5
+ deploy:
6
+ provider: rubygems
7
+ api_key:
8
+ secure: mqUOkyrmNz2gB58ejdwW25+7XWDm9e2GdiuogdmJ/RcfhyPOjhUqf7DtJIeeNt8MZ21JGZNr079sR7wLHHBFhPAVLI0jxUwyWe9Z20p2OJydqS/gYaAiZykWp8sPbfbwKvmdMNiVPTMmscz/27NALROjpQvKS7t/yhCirBrOVPNsh/8YS94bQbOK6NsxN0l9Xig2Ltq68nDjezCR0fgpGaNnu6XMAz8+uw9H9T20ZeTUhLBKYxx7zgDg56v/GwUW5LD9b/4h/YBF9kqCKiTxZ1xx1sPU+cGXqpKZxGzOzXwCr2OFPD/6d12aMfcQaCIML1AWIrgIR0pYZnzf7Qz4ZkMJv27ZF0RSqG0Asyg41z+pf5EMxHTw43ARnk9f7+TX/LXEIP7LexevGPq6dAOcGYjQtutq5V6iMyU7V2uSDsHX2fAPOI/75IiXDw8l4EedXraFcf0NpfBV0vf0pdePMThjF8dy0BbBbNPZ+ioq6RiMyppJdFtTyViZylOSbNvl6GXBRj9SEYje5cvjTzuXE7YmpCUtPiA46HqEEXqBerlkxHRAZLWZxMKnVD6STCZxkwgH9agJyD0dOaWqnUAkQ23YUa3hjePpp7Fd7PUjK58uxy0C+usZK6GhDa0IfX/Yi3XoWbQOO9jK1bwv2uAGSG0tqFZKcnhBgiFa4b3t1Hc=
9
+ gem: chef-deployment-monitor
10
+ on:
11
+ tags: true
12
+ repo: kamaradclimber/chef-deployment-monitor
data/Rakefile CHANGED
@@ -1 +1,11 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
+ require 'rubocop/rake_task'
3
+
4
+ RuboCop::RakeTask.new do |t|
5
+ t.options << '--lint'
6
+ end
7
+
8
+ task default: :rubocop
9
+
10
+ task :test do
11
+ end
@@ -17,47 +17,46 @@
17
17
  # limitations under the License.
18
18
  #
19
19
 
20
- require "chef_logmon"
20
+ require 'chef_logmon'
21
21
  require 'rubygems'
22
22
  require 'file-tail'
23
23
  require 'json'
24
24
  require 'daemons'
25
25
 
26
- config=nil
27
- debug=false
26
+ config = nil
27
+ debug = false
28
28
 
29
- opt=0
29
+ opt = 0
30
30
  ARGV.each do |arg|
31
- config = ARGV[opt+1] if arg == "-C" || arg == "--config"
32
- debug = true if arg == "--debug"
33
- opt+=1
31
+ config = ARGV[opt + 1] if arg == '-C' || arg == '--config'
32
+ debug = true if arg == '--debug'
33
+ opt += 1
34
34
  end
35
35
 
36
36
  if config.nil?
37
- puts "Please enter the configuration file with the option -C or --config"
37
+ puts 'Please enter the configuration file with the option -C or --config'
38
38
  exit 1
39
39
  else
40
- Monitor::Config.from_file(config)
41
- [ "mon_file", "chef_url", "pid_dir", "log_dir" ].each do |item|
42
- if Monitor::Config[item.to_sym].empty?
40
+ Chef::Deployment::Monitor::Config.from_file(config)
41
+ %w(mon_file pid_dir log_dir).each do |item|
42
+ if (Chef::Deployment::Monitor::Config[item.to_sym] || '').empty?
43
43
  puts "Missing item: #{item} within the configuration file!"
44
44
  exit 1
45
45
  end
46
46
  end
47
- end
47
+ end
48
48
 
49
- LOGMONNAME = %x[hostname]
49
+ LOGMONNAME = `hostname`
50
50
  DEBUG = debug
51
51
 
52
52
  @options = {
53
- :log_output => true,
54
- :dir_mode => :normal,
55
- :dir => Monitor::Config[:pid_dir],
56
- :log_dir => Monitor::Config[:log_dir]
53
+ log_output: true,
54
+ dir_mode: :normal,
55
+ dir: Chef::Deployment::Monitor::Config[:pid_dir],
56
+ log_dir: Chef::Deployment::Monitor::Config[:log_dir]
57
57
  }
58
58
 
59
59
  Daemons.run_proc('chef-logmon', @options) do
60
- logmon = Monitor::Logmon.new
61
- logmon.run()
60
+ logmon = Chef::Deployment::Monitor::Logmon.new
61
+ logmon.run
62
62
  end
63
-
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $LOAD_PATH.push File.expand_path('../lib', __FILE__)
3
+ require 'chef_deployment_monitor/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'chef-deployment-monitor'
7
+ s.version = Chef::Deployment::Monitor::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.has_rdoc = false
10
+ s.extra_rdoc_files = ['LICENSE']
11
+ s.authors = ['Sander Botman', 'Grégoire Seux']
12
+ s.email = ['g.seux@criteo.com']
13
+ s.homepage = 'https://github.com/kamaradclimber/chef-deployment-monitor'
14
+ s.summary = 'Chef Monitoring tool to monitor all changes made'
15
+ s.description = s.summary
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
19
+ s.require_paths = ['lib']
20
+ s.license = 'Apache 2.0'
21
+ s.add_dependency 'file-tail', '>= 1.0.12'
22
+ s.add_dependency 'daemons', '>= 1.1.9'
23
+ s.add_dependency 'mixlib-config'
24
+
25
+ s.add_development_dependency 'rake'
26
+ s.add_development_dependency 'rubocop'
27
+ end
@@ -17,15 +17,22 @@
17
17
 
18
18
  require 'mixlib/config'
19
19
 
20
- class Monitor
21
- class Config
22
-
23
- extend Mixlib::Config
24
- config_strict_mode true
25
-
26
- default :marker_file, '/tmp/last_chef_deployment'
27
- %w(user_blacklist mon_file log_dir pid_dir).each { |o| configurable o.to_sym }
20
+ class Chef
21
+ class Deployment
22
+ class Monitor
23
+ class Config
24
+ extend Mixlib::Config
25
+ config_strict_mode true
28
26
 
27
+ default :marker_file, '/tmp/last_chef_deployment'
28
+ default :action_blacklist, /GET/
29
+ %w(
30
+ user_blacklist
31
+ mon_file
32
+ log_dir
33
+ pid_dir
34
+ ).each { |o| configurable o.to_sym }
35
+ end
36
+ end
29
37
  end
30
38
  end
31
-
@@ -15,23 +15,25 @@
15
15
  # See the License for the specific language governing permissions and
16
16
  # limitations under the License.
17
17
 
18
- class Monitor
19
- class Log
20
-
21
- def initialize(text, type='INFO')
22
- case type.downcase
23
- when "INFO".downcase
24
- puts "[" + Time.now.iso8601 + "] INFO: " + text
25
- when "WARN".downcase
26
- puts "[" + Time.now.iso8601 + "] WARN: " + text
27
- when "ERROR".downcase
28
- puts "[" + Time.now.iso8601 + "] ERROR: " + text
29
- when "DEBUG".downcase
30
- puts "[" + Time.now.iso8601 + "] DEBUG: " + text if DEBUG
31
- else
32
- puts "[" + Time.now.iso8601 + "] UNKNOWN: " + text
18
+ class Chef
19
+ class Deployment
20
+ class Monitor
21
+ class Log
22
+ def initialize(text, type = 'INFO')
23
+ case type.downcase
24
+ when 'INFO'.downcase
25
+ puts '[' + Time.now.iso8601 + '] INFO: ' + text
26
+ when 'WARN'.downcase
27
+ puts '[' + Time.now.iso8601 + '] WARN: ' + text
28
+ when 'ERROR'.downcase
29
+ puts '[' + Time.now.iso8601 + '] ERROR: ' + text
30
+ when 'DEBUG'.downcase
31
+ puts '[' + Time.now.iso8601 + '] DEBUG: ' + text if DEBUG
32
+ else
33
+ puts '[' + Time.now.iso8601 + '] UNKNOWN: ' + text
34
+ end
35
+ end
33
36
  end
34
37
  end
35
-
36
38
  end
37
39
  end
@@ -0,0 +1,77 @@
1
+ #
2
+ # Author:: Sander Botman (<sander.botman@gmail.com>)
3
+ # Copyright:: Copyright (c) 2014 Sander Botman.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ class Chef
19
+ class Deployment
20
+ class Monitor
21
+ class Logmon
22
+ def run
23
+ sink = MarkerFileSink.new
24
+
25
+ begin
26
+ File.open(Monitor::Config[:mon_file]) do |mon|
27
+ mon.extend(File::Tail)
28
+ mon.interval = 5
29
+ mon.backward(1)
30
+ mon.tail do |line|
31
+ data = scan(line)
32
+ # skipping the objects 'checksum-.*' and 'reports'
33
+ unless data.nil? || data['org'].nil? || data['object'] =~ /(^checksum-.*$|^reports$)/
34
+ unless filter(data)
35
+ Monitor::Log.new(data.to_json, 'INFO')
36
+ sink.receive(data)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ def filter(data)
45
+ filter_user(data) || filter_action(data)
46
+ end
47
+
48
+ def filter_user(data)
49
+ user_blacklist = Monitor::Config[:user_blacklist]
50
+ user_blacklist && (data['user'] =~ user_blacklist)
51
+ end
52
+
53
+ def filter_action(data)
54
+ action_blacklist = Monitor::Config[:action_blacklist]
55
+ action_blacklist && (data['action'] =~ action_blacklist)
56
+ end
57
+
58
+ def scan(line)
59
+ @regex = /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) - (.{0})- \[([^\]]+?)\] "(\w+) ([^\s]+?) (HTTP\/1\.1)" (\d+) "(.*)" (\d+) "-" "(.*)" "(.*)" "(.*)" "(.*)" "(.*)" "(.*)" "(.*)" "(.*)" "(.*)"/
60
+ if line =~ @regex
61
+ data = {}
62
+ data['time'] = Regexp.last_match(3)
63
+ data['user'] = Regexp.last_match(16)
64
+ data['server'] = LOGMONNAME
65
+ data['org'] = Regexp.last_match(5).split('/')[2] unless Regexp.last_match(5).split('/')[2].nil?
66
+ data['object'] = Regexp.last_match(5).split('/')[3] unless Regexp.last_match(5).split('/')[3].nil?
67
+ data['name'] = Regexp.last_match(5).split('/')[4] unless Regexp.last_match(5).split('/')[4].nil?
68
+ data['version'] = Regexp.last_match(5).split('/')[5] unless Regexp.last_match(5).split('/')[5].nil?
69
+ data['action'] = Regexp.last_match(4)
70
+ return data
71
+ end
72
+ nil
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,37 @@
1
+
2
+ class Chef
3
+ class Deployment
4
+ class Monitor
5
+ class Sink
6
+ def receive(_data)
7
+ fail 'must be implemented by subclass'
8
+ end
9
+ end
10
+
11
+ class RmqSink < Sink
12
+ def initialize
13
+ @conn = Bunny.new(hostname: Monitor::Config[:mq_server])
14
+ @conn.start
15
+
16
+ @ch = @conn.create_channel
17
+ @q = @ch.queue(Monitor::Config[:mq_queue], durable: true)
18
+ end
19
+
20
+ def receive(data)
21
+ @q.publish(data, persistent: true, content_type: 'application/json')
22
+ end
23
+ end
24
+
25
+ class MarkerFileSink < Sink
26
+ # will modify the marker file
27
+ # last write data of marker file will be within 5 seconds
28
+ # of last deployement
29
+ def receive(data)
30
+ File.open(Monitor::Config[:marker_file], 'w+') do |f|
31
+ f.write(data['user'])
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -15,7 +15,11 @@
15
15
  # See the License for the specific language governing permissions and
16
16
  # limitations under the License.
17
17
 
18
- class Monitor
19
- VERSION = "0.1.6"
20
- MAJOR, MINOR, TINY = VERSION.split('.')
18
+ class Chef
19
+ class Deployment
20
+ class Monitor
21
+ VERSION = '0.2.0'
22
+ MAJOR, MINOR, TINY = VERSION.split('.')
23
+ end
24
+ end
21
25
  end
@@ -15,7 +15,7 @@
15
15
  # See the License for the specific language governing permissions and
16
16
  # limitations under the License.
17
17
 
18
- require "chef_monitor/log"
19
- require "chef_monitor/config"
20
- require "chef_monitor/sinks"
21
- require "chef_monitor/logmon"
18
+ require 'chef_deployment_monitor/log'
19
+ require 'chef_deployment_monitor/config'
20
+ require 'chef_deployment_monitor/sinks'
21
+ require 'chef_deployment_monitor/logmon'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-deployment-monitor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sander Botman
@@ -15,42 +15,70 @@ dependencies:
15
15
  name: file-tail
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ">="
18
+ - - ! '>='
19
19
  - !ruby/object:Gem::Version
20
20
  version: 1.0.12
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ">="
25
+ - - ! '>='
26
26
  - !ruby/object:Gem::Version
27
27
  version: 1.0.12
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: daemons
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - ">="
32
+ - - ! '>='
33
33
  - !ruby/object:Gem::Version
34
34
  version: 1.1.9
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ">="
39
+ - - ! '>='
40
40
  - !ruby/object:Gem::Version
41
41
  version: 1.1.9
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: mixlib-config
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ">="
46
+ - - ! '>='
47
47
  - !ruby/object:Gem::Version
48
48
  version: '0'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ">="
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rake
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rubocop
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ! '>='
54
82
  - !ruby/object:Gem::Version
55
83
  version: '0'
56
84
  description: Chef Monitoring tool to monitor all changes made
@@ -62,18 +90,20 @@ extensions: []
62
90
  extra_rdoc_files:
63
91
  - LICENSE
64
92
  files:
93
+ - .gitignore
94
+ - .travis.yml
65
95
  - Gemfile
66
96
  - LICENSE
67
97
  - README.md
68
98
  - Rakefile
69
99
  - bin/chef-logmon
70
- - chef-monitor.gemspec
100
+ - chef-deployment-monitor.gemspec
101
+ - lib/chef_deployment_monitor/config.rb
102
+ - lib/chef_deployment_monitor/log.rb
103
+ - lib/chef_deployment_monitor/logmon.rb
104
+ - lib/chef_deployment_monitor/sinks.rb
105
+ - lib/chef_deployment_monitor/version.rb
71
106
  - lib/chef_logmon.rb
72
- - lib/chef_monitor/config.rb
73
- - lib/chef_monitor/log.rb
74
- - lib/chef_monitor/logmon.rb
75
- - lib/chef_monitor/sinks.rb
76
- - lib/chef_monitor/version.rb
77
107
  homepage: https://github.com/kamaradclimber/chef-deployment-monitor
78
108
  licenses:
79
109
  - Apache 2.0
@@ -84,12 +114,12 @@ require_paths:
84
114
  - lib
85
115
  required_ruby_version: !ruby/object:Gem::Requirement
86
116
  requirements:
87
- - - ">="
117
+ - - ! '>='
88
118
  - !ruby/object:Gem::Version
89
119
  version: '0'
90
120
  required_rubygems_version: !ruby/object:Gem::Requirement
91
121
  requirements:
92
- - - ">="
122
+ - - ! '>='
93
123
  - !ruby/object:Gem::Version
94
124
  version: '0'
95
125
  requirements: []
@@ -1,24 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "chef_monitor/version"
4
-
5
- Gem::Specification.new do |s|
6
- s.name = "chef-deployment-monitor"
7
- s.version = Monitor::VERSION
8
- s.platform = Gem::Platform::RUBY
9
- s.has_rdoc = false
10
- s.extra_rdoc_files = ["LICENSE"]
11
- s.authors = ["Sander Botman", 'Grégoire Seux']
12
- s.email = ["g.seux@criteo.com"]
13
- s.homepage = "https://github.com/kamaradclimber/chef-deployment-monitor"
14
- s.summary = %q{Chef Monitoring tool to monitor all changes made}
15
- s.description = s.summary
16
- s.files = `git ls-files`.split("\n")
17
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
- s.require_paths = ["lib"]
20
- s.license = 'Apache 2.0'
21
- s.add_dependency "file-tail", ">= 1.0.12"
22
- s.add_dependency "daemons", ">= 1.1.9"
23
- s.add_dependency 'mixlib-config'
24
- end
@@ -1,71 +0,0 @@
1
- #
2
- # Author:: Sander Botman (<sander.botman@gmail.com>)
3
- # Copyright:: Copyright (c) 2014 Sander Botman.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
-
18
- class Monitor
19
- class Logmon
20
-
21
- def initialize(config)
22
- @config = config
23
- end
24
-
25
- def run
26
-
27
- sink = MarkerFileSink.new
28
-
29
- begin
30
- File.open(Monitor::Config[:mon_file]) do |mon|
31
- mon.extend(File::Tail)
32
- mon.interval = 5
33
- mon.backward(1)
34
- mon.tail { |line|
35
- data = scan(line)
36
- # skipping the objects 'checksum-.*' and 'reports'
37
- unless data.nil? || data['org'].nil? || data['object'] =~ /(^checksum-.*$|^reports$)/
38
- unless filter(data)
39
- Monitor::Log.new(data.to_json, "INFO")
40
- sink.receive(data)
41
- end
42
- end
43
- }
44
- end
45
- end
46
- end
47
-
48
- def filter(data)
49
- user_blacklist = Monitor::Config[:user_blacklist]
50
- user_blacklist && (data['user'] =~ user_blacklist)
51
- end
52
-
53
- def scan(line)
54
- @regex = /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) - (.{0})- \[([^\]]+?)\] "(PUT|DELETE|POST) ([^\s]+?) (HTTP\/1\.1)" (\d+) "(.*)" (\d+) "-" "(.*)" "(.*)" "(.*)" "(.*)" "(.*)" "(.*)" "(.*)" "(.*)" "(.*)"/
55
- if line =~ @regex
56
- data = {}
57
- data['time'] = $3
58
- data['user'] = $16
59
- data['server'] = LOGMONNAME
60
- data['org'] = $5.split('/')[2] unless $5.split('/')[2].nil?
61
- data['object'] = $5.split('/')[3] unless $5.split('/')[3].nil?
62
- data['name'] = $5.split('/')[4] unless $5.split('/')[4].nil?
63
- data['version'] = $5.split('/')[5] unless $5.split('/')[5].nil?
64
- data['action'] = $4
65
- return data
66
- end
67
- return nil
68
- end
69
-
70
- end
71
- end
@@ -1,33 +0,0 @@
1
-
2
- class Monitor
3
- class Sink
4
- def receive(data)
5
- raise "must be implemented by subclass"
6
- end
7
- end
8
-
9
- class RmqSink < Sink
10
- def initialize
11
- @conn = Bunny.new(:hostname => Monitor::Config[:mq_server])
12
- @conn.start
13
-
14
- @ch = @conn.create_channel
15
- @q = @ch.queue(Monitor::Config[:mq_queue], :durable => true)
16
- end
17
-
18
- def receive(data)
19
- @q.publish(data, :persistent => true, :content_type => "application/json")
20
- end
21
- end
22
-
23
- class MarkerFileSink < Sink
24
- # will modify the marker file
25
- # last write data of marker file will be within 5 seconds
26
- # of last deployement
27
- def receive(data)
28
- File.open(Monitor::Config[:marker_file], 'w+') do |f|
29
- f.write(data['user'])
30
- end
31
- end
32
- end
33
- end