blooper 1.5
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.
- data/COPYING +30 -0
- data/README.rdoc +32 -0
- data/bin/blooper +9 -0
- data/lib/blooper.rb +64 -0
- data/lib/blooper/db.rb +26 -0
- data/lib/blooper/input.rb +16 -0
- data/lib/blooper/line.rb +19 -0
- data/lib/blooper/rows.rb +17 -0
- data/lib/blooper/version.rb +3 -0
- metadata +103 -0
data/COPYING
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
Copyright (c) 2012 paranormal <mbsd@isgroup.com.ua>
|
2
|
+
|
3
|
+
All rights reserved.
|
4
|
+
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
6
|
+
modification, are permitted provided that the following conditions are
|
7
|
+
met:
|
8
|
+
|
9
|
+
1. Redistributions of source code must retain the above copyright
|
10
|
+
notice, this list of conditions and the following disclaimer.
|
11
|
+
|
12
|
+
2. Redistributions in binary form must reproduce the above copyright
|
13
|
+
notice, this list of conditions and the following disclaimer in the
|
14
|
+
documentation and/or other materials provided with the distribution.
|
15
|
+
|
16
|
+
3. Neither the name of the organizations nor the names of its
|
17
|
+
contributors may be used to endorse or promote products derived
|
18
|
+
from this software without specific prior written permission.
|
19
|
+
|
20
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
24
|
+
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
25
|
+
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
26
|
+
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
27
|
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
28
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
29
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
30
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
== Welcome to blooper
|
2
|
+
|
3
|
+
{Blooper}[http://www.mariowiki.com/Blooper] is squid-like creatures that are found in the ocean.
|
4
|
+
It can also write squid access log into a database (I believe any sequel-support database).
|
5
|
+
Should you write a squid access log into a data base, you won't have to catch a blooper in the ocean of errors for that.
|
6
|
+
I have already tamed one, and you are free to use it.
|
7
|
+
|
8
|
+
The idea is shamelessly stolen from {logmysqldaemon}[http://sourceforge.net/projects/logmysqldaemon/] script.
|
9
|
+
|
10
|
+
== Installation
|
11
|
+
|
12
|
+
gem install (pg|mysql|oracle|sqlite|etc sequel database adapter)
|
13
|
+
gem install blooper
|
14
|
+
|
15
|
+
== Squid configuration
|
16
|
+
|
17
|
+
logformat squid_log time %ts.%03tu response_time %tr src_ip %>a squid_request_status %Ss http_status_code %03>Hs reply_size %<st request_method %rm request_url %ru username %un squid_hier_code %Sh dst_ip %<a mime_type %mt
|
18
|
+
access_log daemon:{adapter:postgres,database:squid,username:squid,password:squid,host:db} squid_log
|
19
|
+
logfile_daemon /usr/local/bin/blooper
|
20
|
+
|
21
|
+
1. The column names are dynamic, here time is a column name, %ts.%03tu is a value that will have been written into that column.
|
22
|
+
|
23
|
+
2. The second string contains database access information, the credential depends on {adapter}[http://sequel.rubyforge.org/rdoc/files/doc/opening_databases_rdoc.html], tested only with postgres.
|
24
|
+
|
25
|
+
3. The third string is a full path to the executable ($ which blooper).
|
26
|
+
|
27
|
+
== Database configuration
|
28
|
+
|
29
|
+
createdb squid
|
30
|
+
psql squid < pg.schema
|
31
|
+
|
32
|
+
Or use your own schema integration, just specify the proper format into the logformat variable in squid.conf.
|
data/bin/blooper
ADDED
data/lib/blooper.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
require_relative 'blooper/version.rb'
|
2
|
+
BLOOPER_VERSION = Blooper::VERSION
|
3
|
+
|
4
|
+
require_relative 'blooper/db.rb'
|
5
|
+
require_relative 'blooper/input.rb'
|
6
|
+
require_relative 'blooper/line.rb'
|
7
|
+
require_relative 'blooper/rows.rb'
|
8
|
+
|
9
|
+
module Blooper
|
10
|
+
|
11
|
+
class << self
|
12
|
+
# Current Blooper Application
|
13
|
+
def application
|
14
|
+
@application ||= Application.new
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
class Application < Logger::Application
|
20
|
+
|
21
|
+
DATE_FORMAT = '%Y/%m/%d %H:%M:%S'
|
22
|
+
LOGGER_LEVEL = Logger::INFO
|
23
|
+
|
24
|
+
def initialize
|
25
|
+
super('Blooper')
|
26
|
+
self.level = $VERBOSE && Logger::DEBUG || LOGGER_LEVEL
|
27
|
+
self.logger.formatter = formatter
|
28
|
+
@input = Input.new
|
29
|
+
end
|
30
|
+
|
31
|
+
def run
|
32
|
+
@log.info('Establishing the database connection')
|
33
|
+
DB.instance
|
34
|
+
@log.info('A database connection has been established')
|
35
|
+
@input.each do |rows|
|
36
|
+
begin
|
37
|
+
rows.save
|
38
|
+
@log.debug('Data was saved')
|
39
|
+
rescue Sequel::DatabaseDisconnectError
|
40
|
+
@log.warn('A database connection has been lost, reconnecting...')
|
41
|
+
DB.instance.connect
|
42
|
+
retry
|
43
|
+
rescue Sequel::DatabaseError
|
44
|
+
@log.error('Probably data doesn\'t fit for database')
|
45
|
+
next
|
46
|
+
rescue Sequel::Error => error
|
47
|
+
@log.error(error.message)
|
48
|
+
next
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def formatter
|
56
|
+
-> severity, datetime, appname, msg do
|
57
|
+
"#{datetime.strftime(DATE_FORMAT)} " +
|
58
|
+
"#{appname}(#{severity[0]})| " +
|
59
|
+
"#{msg}\n"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
data/lib/blooper/db.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module Blooper
|
2
|
+
class DB
|
3
|
+
|
4
|
+
include Singleton
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@credentials = credentials
|
8
|
+
@accesses = connect
|
9
|
+
end
|
10
|
+
|
11
|
+
def connect
|
12
|
+
Sequel.connect(@credentials)[:accesses]
|
13
|
+
end
|
14
|
+
|
15
|
+
def insert(params)
|
16
|
+
@accesses.insert(params)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def credentials
|
22
|
+
YAML.load(ARGV.join(" ").gsub(/:/, ': '))
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
data/lib/blooper/line.rb
ADDED
data/lib/blooper/rows.rb
ADDED
metadata
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: blooper
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '1.5'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- paranormal
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-01 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '2.0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '2.0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: sequel
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 3.38.0
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 3.38.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
description: work through squid access log daemon
|
63
|
+
email: mbsd@isgroup.com.ua
|
64
|
+
executables:
|
65
|
+
- blooper
|
66
|
+
extensions: []
|
67
|
+
extra_rdoc_files: []
|
68
|
+
files:
|
69
|
+
- bin/blooper
|
70
|
+
- lib/blooper.rb
|
71
|
+
- lib/blooper/input.rb
|
72
|
+
- lib/blooper/line.rb
|
73
|
+
- lib/blooper/rows.rb
|
74
|
+
- lib/blooper/db.rb
|
75
|
+
- lib/blooper/version.rb
|
76
|
+
- COPYING
|
77
|
+
- README.rdoc
|
78
|
+
homepage: https://github.com/paranormal/blooper
|
79
|
+
licenses:
|
80
|
+
- bsd
|
81
|
+
post_install_message:
|
82
|
+
rdoc_options: []
|
83
|
+
require_paths:
|
84
|
+
- lib
|
85
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ! '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 1.9.0
|
91
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.3.6
|
97
|
+
requirements: []
|
98
|
+
rubyforge_project:
|
99
|
+
rubygems_version: 1.8.24
|
100
|
+
signing_key:
|
101
|
+
specification_version: 3
|
102
|
+
summary: squid's access log collector — Read more
|
103
|
+
test_files: []
|