beaver 1.3.1 → 1.4.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.
- data/README.rdoc +17 -1
- data/lib/beaver/beaver.rb +36 -11
- data/lib/beaver/version.rb +1 -1
- metadata +22 -39
data/README.rdoc
CHANGED
@@ -8,7 +8,6 @@ Beaver is a light DSL and command line utility for parsing HTTP and Rails produc
|
|
8
8
|
* Did anyone submit a form with the words "kill them all"? Yikes.
|
9
9
|
* Rails 3.2 tagged logging is cool, but what's a good way to review them?
|
10
10
|
|
11
|
-
Read the full documentation at {jordanhollinger.com/docs/beaver/}[http://jordanhollinger.com/docs/beaver/].
|
12
11
|
For a full list of matchers available to "hit", see the Beaver::Dam class.
|
13
12
|
For a full list of methods available inside a "hit" block, or to members of the "hits" array in a "dam" block, see the Beaver::Request, Beaver::Parsers::Rails, and Beaver::Parsers::HTTP classes.
|
14
13
|
|
@@ -55,6 +54,15 @@ Run ''beaver'' from the command line, passing in your beaver file and some logs:
|
|
55
54
|
require 'rubygems'
|
56
55
|
require 'beaver'
|
57
56
|
|
57
|
+
Beaver.stream '/path/to/httpd/access_logs*' do
|
58
|
+
hit :failed_logins, :method => :post, :path => '/login', :status => 401
|
59
|
+
dam :failed_logins do
|
60
|
+
puts "#{hits.size} failed logins!"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
Or with even less DSL...
|
65
|
+
|
58
66
|
beaver = Beaver.new('/path/to/httpd/access_logs*')
|
59
67
|
beaver.hit :failed_logins, :method => :post, :path => '/login', :status => 401
|
60
68
|
beaver.dam :failed_logins do
|
@@ -62,6 +70,14 @@ Run ''beaver'' from the command line, passing in your beaver file and some logs:
|
|
62
70
|
end
|
63
71
|
beaver.stream
|
64
72
|
|
73
|
+
Or just to parse and return the matching requests...
|
74
|
+
|
75
|
+
requests = Beaver.dam('/path/to/rails/production.log*', :method => :put)
|
76
|
+
|
77
|
+
Or as just a parser (no filtering)...
|
78
|
+
|
79
|
+
requests = Beaver.parse('/path/to/rails/production.log*')
|
80
|
+
|
65
81
|
== Use beaver as part of the *nix toolchain
|
66
82
|
|
67
83
|
It's difficult to grep through a multi-line log format like Rails' and output each matching multi-line event (though I hear Google is working on a 'Context-Free Grep', which may help solve that). Until then, for Rails anyway, beaver is happy to step in.
|
data/lib/beaver/beaver.rb
CHANGED
@@ -1,7 +1,17 @@
|
|
1
|
-
#
|
2
|
-
# Rather, a DSL for finding out how people are using your Rails app (which could include performance).
|
1
|
+
# A DSL and library for finding out how people are using your Rails app.
|
3
2
|
# Can also be used to parse/analyze HTTP access logs (Apache, Nginx, etc.)
|
3
|
+
#
|
4
|
+
# # Parse and return the requests
|
5
|
+
# requests = Beaver.parse('/path/to/log/files')
|
6
|
+
#
|
7
|
+
# # Parse, filters, and returns the requests (all requests are always returned)
|
8
|
+
# requests = Beaver.filter('/path/to/log/files') do
|
9
|
+
# hit :error, :status => (400..505) do
|
10
|
+
# puts "#{status} on #{path} at #{time} from #{ip} with #{params_str}"
|
11
|
+
# end
|
12
|
+
# end
|
4
13
|
#
|
14
|
+
# # Parse and filters the requests, returns nil
|
5
15
|
# Beaver.stream('/path/to/log/files') do
|
6
16
|
# hit :error, :status => (400..505) do
|
7
17
|
# puts "#{status} on #{path} at #{time} from #{ip} with #{params_str}"
|
@@ -9,18 +19,33 @@
|
|
9
19
|
# end
|
10
20
|
#
|
11
21
|
module Beaver
|
12
|
-
#
|
13
|
-
|
22
|
+
# Parses the logs and returns the requests.
|
23
|
+
def self.parse(*args)
|
24
|
+
Beaver.new(*args).parse.requests
|
25
|
+
end
|
26
|
+
|
27
|
+
# Parses the logs and filters them through the given block. *All* parsed requests
|
28
|
+
# are returned, not just the ones that matched. This is useful for when you take your action(s) on the matching reqeusts *inside* the block, but you still want access to all the requsts afterwords.
|
29
|
+
def self.filter(*args, &blk)
|
30
|
+
Beaver.new(*args, &blk).parse.filter.requests
|
31
|
+
end
|
32
|
+
|
33
|
+
# Parses the logs and filters them through the (optional) block. Parsed requests are
|
34
|
+
# not retained, hence are not returned. Returns nil.
|
35
|
+
#
|
36
|
+
# In theory, this should be more memory efficient than Beaver#filter.
|
14
37
|
def self.stream(*args, &blk)
|
15
|
-
raise ArgumentError, 'You must pass a block to Beaver#stream' unless block_given?
|
16
38
|
Beaver.new(*args, &blk).stream
|
39
|
+
nil
|
17
40
|
end
|
18
41
|
|
19
|
-
#
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
42
|
+
# Parses the logs and filters them through the provided matcher options. Returns *only* the matching requests.
|
43
|
+
def self.dam(*args)
|
44
|
+
beaver = Beaver.new(*args)
|
45
|
+
dam = beaver.hit :hits
|
46
|
+
beaver.parse
|
47
|
+
beaver.filter
|
48
|
+
dam.hits
|
24
49
|
end
|
25
50
|
|
26
51
|
# Alias to Beaver::Beaver.new
|
@@ -84,7 +109,7 @@ module Beaver
|
|
84
109
|
end
|
85
110
|
|
86
111
|
# Parses the logs and immediately filters them through the dams. Requests are not retained,
|
87
|
-
# so this should scale
|
112
|
+
# so this should scale better to very large sets of logs.
|
88
113
|
def stream
|
89
114
|
# Match the request against each dam, and run the dam's callback
|
90
115
|
_parse do |request|
|
data/lib/beaver/version.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
1
|
module Beaver
|
2
|
-
MAJOR_VERSION, MINOR_VERSION, TINY_VERSION, PRE_VERSION = 1,
|
2
|
+
MAJOR_VERSION, MINOR_VERSION, TINY_VERSION, PRE_VERSION = 1, 4, 0, nil # :nodoc:
|
3
3
|
VERSION = [MAJOR_VERSION, MINOR_VERSION, TINY_VERSION, PRE_VERSION].compact.join '.' # :nodoc:
|
4
4
|
end
|
metadata
CHANGED
@@ -1,32 +1,24 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: beaver
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 1
|
7
|
-
- 3
|
8
|
-
- 1
|
9
|
-
version: 1.3.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.4.0
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Jordan Hollinger
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
date: 2012-06-30 00:00:00 -04:00
|
18
|
-
default_executable:
|
12
|
+
date: 2012-11-12 00:00:00.000000000 Z
|
19
13
|
dependencies: []
|
20
|
-
|
21
|
-
|
14
|
+
description: A simple DSL and command-line tool for discovering what people are up
|
15
|
+
to in your Rails app
|
22
16
|
email: jordan@jordanhollinger.com
|
23
|
-
executables:
|
17
|
+
executables:
|
24
18
|
- beaver
|
25
19
|
extensions: []
|
26
|
-
|
27
20
|
extra_rdoc_files: []
|
28
|
-
|
29
|
-
files:
|
21
|
+
files:
|
30
22
|
- lib/beaver.rb
|
31
23
|
- lib/beaver/dam.rb
|
32
24
|
- lib/beaver/beaver.rb
|
@@ -38,37 +30,28 @@ files:
|
|
38
30
|
- README.rdoc
|
39
31
|
- LICENSE
|
40
32
|
- bin/beaver
|
41
|
-
has_rdoc: true
|
42
33
|
homepage: http://github.com/jhollinger/beaver
|
43
34
|
licenses: []
|
44
|
-
|
45
35
|
post_install_message:
|
46
36
|
rdoc_options: []
|
47
|
-
|
48
|
-
require_paths:
|
37
|
+
require_paths:
|
49
38
|
- lib
|
50
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
39
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
40
|
none: false
|
52
|
-
requirements:
|
53
|
-
- -
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
|
56
|
-
|
57
|
-
version: "0"
|
58
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
46
|
none: false
|
60
|
-
requirements:
|
61
|
-
- -
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
|
64
|
-
- 0
|
65
|
-
version: "0"
|
47
|
+
requirements:
|
48
|
+
- - ! '>='
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '0'
|
66
51
|
requirements: []
|
67
|
-
|
68
52
|
rubyforge_project:
|
69
|
-
rubygems_version: 1.
|
53
|
+
rubygems_version: 1.8.23
|
70
54
|
signing_key:
|
71
55
|
specification_version: 3
|
72
56
|
summary: Rails log parser
|
73
57
|
test_files: []
|
74
|
-
|