nginx_utils 0.0.4 → 0.0.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/README.md +86 -13
- data/bin/nginx_logrotate +29 -0
- data/bin/nginx_status +35 -0
- data/lib/nginx_utils/status.rb +7 -4
- data/lib/nginx_utils/version.rb +1 -1
- data/spec/nginx_utils/status_spec.rb +1 -1
- metadata +9 -5
data/README.md
CHANGED
@@ -8,7 +8,9 @@ Nginx utilities.
|
|
8
8
|
|
9
9
|
Add this line to your application's Gemfile:
|
10
10
|
|
11
|
-
|
11
|
+
```ruby
|
12
|
+
gem 'nginx_utils'
|
13
|
+
```
|
12
14
|
|
13
15
|
And then execute:
|
14
16
|
|
@@ -20,13 +22,34 @@ Or install it yourself as:
|
|
20
22
|
|
21
23
|
## Usage
|
22
24
|
|
23
|
-
|
25
|
+
From console:
|
26
|
+
|
27
|
+
$ nginx_logrotate -h
|
28
|
+
Usage: nginx_logrotate [options]
|
29
|
+
-d, --[no-]debug Debug mode. Run only log output to STDOUT.
|
30
|
+
--script_log=VAL Log file for script.
|
31
|
+
--log_level=VAL Log level of script log.
|
32
|
+
--root_dir=VAL Root directory of Nginx.
|
33
|
+
--target_logs=VAL Specify logs of target.
|
34
|
+
--retention=VAL Specify in days the retention period of log.
|
35
|
+
--pid_file=VAL PID file of Nginx
|
36
|
+
$ nginx_status -h
|
37
|
+
Usage: nginx_status [options]
|
38
|
+
--only-value The output only the value.
|
39
|
+
|
40
|
+
From ruby:
|
41
|
+
|
42
|
+
```ruby
|
24
43
|
require 'nginx_utils'
|
25
44
|
```
|
26
45
|
|
27
|
-
Logrotate
|
46
|
+
### Logrotate
|
28
47
|
|
29
|
-
|
48
|
+
Logs of rename target: `Dir.glob "#{root_dir}/**/#{target_logs}"`
|
49
|
+
Logs of delete target: `Dir.glob "#{root_dir}/**/#{target_logs}.*"`
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
# Following parameters are default.
|
30
53
|
params = {
|
31
54
|
debug: false,
|
32
55
|
script_log: "/tmp/nginx_rotate.log",
|
@@ -39,28 +62,78 @@ params = {
|
|
39
62
|
}
|
40
63
|
|
41
64
|
rotate = NginxUtils::Logrotate.new(params)
|
65
|
+
# == Configure
|
66
|
+
# rotate.config log_level: :worn
|
67
|
+
|
68
|
+
# == Accessor
|
69
|
+
# rotate.logger.formatter = proc { |severity, datetime, progname, msg|
|
70
|
+
# "#{datetime}: #{msg}\n"
|
71
|
+
# }
|
72
|
+
# rotate.rename_logs << add_rename_log
|
73
|
+
# rotate.delete_logs << add_delete_log
|
74
|
+
|
42
75
|
rotate.execute
|
43
76
|
```
|
44
77
|
|
45
|
-
|
78
|
+
Options that can be specified:
|
46
79
|
|
47
|
-
|
48
|
-
|
49
|
-
|
80
|
+
* `:debug` => `true` or `false`. If `:debug` is true, it is not execute.
|
81
|
+
* `:script_log` => `"/path/to/nginx_rotate.log"`. If `:script` is false, do not output logs.
|
82
|
+
* `:log_level` => `:debug` or `:info` or `:warn` or `:error` or `:fatal`.
|
83
|
+
* `:root_dir` => `"/path/to/nginx"`. Root directory of Nginx.
|
84
|
+
* `:target_logs` => `"*.log"`. Specify logs of target.
|
85
|
+
* `:prefix` => `Time.now.strftime("%Y%m%d%H%M%S")`. Prefix use to rename.
|
86
|
+
* `:retention` => `90`. Specify in days the retention period of log.
|
87
|
+
* `:pid_file` => `"/path/to/nginx.pid"`. Use to restart Nginx.
|
50
88
|
|
51
|
-
|
89
|
+
### Status
|
52
90
|
|
91
|
+
Require **HttpStubStatusModule**.
|
92
|
+
|
93
|
+
```ruby
|
94
|
+
# http://localhost/nginx_status
|
95
|
+
NginxUtils::Status.get # => {active_connection: 1, accepts: 4, handled: 5, requests: 51, reading: 1, writing: 3, waiting: 2}
|
96
|
+
|
97
|
+
# Apache like
|
98
|
+
# http://example.com/server-status
|
99
|
+
NginxUtils::Status.get(host: "example.com", path: "/server-status")
|
53
100
|
```
|
54
|
-
|
101
|
+
|
102
|
+
### Logreader
|
103
|
+
|
104
|
+
LTSV:
|
105
|
+
|
106
|
+
The default format is `:ltsv`.
|
107
|
+
|
108
|
+
```ruby
|
109
|
+
log_file = "/path/to/nginx/logs/access.log.ltsv"
|
110
|
+
reader = NginxUtils::Logreader.new(log_file)
|
55
111
|
reader.each do |line|
|
56
112
|
p line # => {time: "2013-05-19T08:13:14+00:00", host: "192.168.1.10", ...}
|
57
113
|
end
|
58
114
|
```
|
59
115
|
|
116
|
+
Combined:
|
117
|
+
|
118
|
+
```ruby
|
119
|
+
log_file = "/path/to/nginx/logs/access.log.combined"
|
120
|
+
reader = NginxUtils::Logreader.new(log_file, format: :combined)
|
121
|
+
reader.each {|line| p line} # => {:remote_addr=>"x.x.x.x", :remote_user=>"-", :time_local=>"19/May/2013:23:14:04 +0900", :request=>"GET / HTTP/1.1", :status=>"200", :body_bytes_sent=>"564", :http_referer=>"-", :http_user_agent=>"-"}
|
122
|
+
```
|
123
|
+
|
124
|
+
Custom:
|
125
|
+
|
126
|
+
```ruby
|
127
|
+
log_file = "/path/to/nginx/logs/access.log.combined"
|
128
|
+
parser = /\[(.*)\]\s"(.*?)"/
|
129
|
+
reader = NginxUtils::Logreader.new(log_file, parser: parser)
|
130
|
+
reader.each {|line| p line.first} #=> ["19/May/2013:23:13:52 +0900", "GET / HTTP/1.1"]
|
131
|
+
```
|
132
|
+
|
60
133
|
Options that can be specified:
|
61
134
|
|
62
|
-
*
|
63
|
-
*
|
135
|
+
* `:format` => `:ltsv` or `:combined`. If parser is specified, format is automatically `:custom`.
|
136
|
+
* `:parser` => Parse with `String#scan`. Specified in Regexp.
|
64
137
|
|
65
138
|
## Contributing
|
66
139
|
|
@@ -68,4 +141,4 @@ Options that can be specified:
|
|
68
141
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
69
142
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
70
143
|
4. Push to the branch (`git push origin my-new-feature`)
|
71
|
-
5. Create new Pull Request
|
144
|
+
5. Create new Pull Request
|
data/bin/nginx_logrotate
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
3
|
+
|
4
|
+
require "optparse"
|
5
|
+
|
6
|
+
begin
|
7
|
+
require "nginx_utils"
|
8
|
+
rescue LoadError => e
|
9
|
+
puts e
|
10
|
+
exit 1
|
11
|
+
end
|
12
|
+
|
13
|
+
# Option parse
|
14
|
+
options = {}
|
15
|
+
|
16
|
+
opt = OptionParser.new
|
17
|
+
Version = "0.0.1"
|
18
|
+
opt.on("-d", "--[no-]debug", "Debug mode. Run only log output to STDOUT.") {|v| options[:debug] = v}
|
19
|
+
opt.on("--script_log=VAL", "Log file for script.") {|v| options[:script_log] = v}
|
20
|
+
opt.on("--log_level=VAL", "Log level of script log.") {|v| options[:log_level] = v.to_sym}
|
21
|
+
opt.on("--root_dir=VAL", "Root directory of Nginx.") {|v| options[:root_dir] = v}
|
22
|
+
opt.on("--target_logs=VAL", "Specify logs of target.") {|v| options[:target_logs] = v}
|
23
|
+
opt.on("--retention=VAL", "Specify in days the retention period of log.") {|v| options[:retention] = v.to_i}
|
24
|
+
opt.on("--pid_file=VAL", "PID file of Nginx") {|v| options[:pid_file] = v}
|
25
|
+
|
26
|
+
opt.parse! ARGV
|
27
|
+
|
28
|
+
rotate = NginxUtils::Logrotate.new(options)
|
29
|
+
rotate.execute
|
data/bin/nginx_status
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
3
|
+
|
4
|
+
require "optparse"
|
5
|
+
|
6
|
+
begin
|
7
|
+
require "nginx_utils"
|
8
|
+
rescue LoadError => e
|
9
|
+
puts e
|
10
|
+
exit 1
|
11
|
+
end
|
12
|
+
|
13
|
+
# Option parse
|
14
|
+
options = {}
|
15
|
+
|
16
|
+
opt = OptionParser.new
|
17
|
+
Version = "0.0.1"
|
18
|
+
opt.on("--only-value", "The output only the value.") {|v| options[:only_value] = v}
|
19
|
+
|
20
|
+
opt.parse! ARGV
|
21
|
+
|
22
|
+
if ARGV.size > 0
|
23
|
+
host = ARGV.shift
|
24
|
+
result = NginxUtils::Status.get host: host
|
25
|
+
else
|
26
|
+
result = NginxUtils::Status.get
|
27
|
+
end
|
28
|
+
|
29
|
+
if options[:only_value]
|
30
|
+
puts result.values.join("\t")
|
31
|
+
else
|
32
|
+
puts "Active Connections: #{result[:active_connection]}"
|
33
|
+
puts "Accepts: #{result[:accepts]} Handled: #{result[:handled]} Requests: #{result[:requests]}"
|
34
|
+
puts "Reading: #{result[:reading]} Writing: #{result[:writing]} Waiting: #{result[:waiting]}"
|
35
|
+
end
|
data/lib/nginx_utils/status.rb
CHANGED
@@ -3,15 +3,18 @@
|
|
3
3
|
module NginxUtils
|
4
4
|
module Status
|
5
5
|
class << self
|
6
|
-
def get(options={
|
6
|
+
def get(options={})
|
7
|
+
host = options[:host] || "localhost"
|
8
|
+
port = options[:port] || 80
|
9
|
+
path = options[:path] || "/nginx_status"
|
7
10
|
begin
|
8
|
-
req = Net::HTTP::Get.new(
|
9
|
-
res = Net::HTTP.start(
|
11
|
+
req = Net::HTTP::Get.new(path)
|
12
|
+
res = Net::HTTP.start(host, port){|http| http.request(req)}
|
10
13
|
status = res.body.split("\n")
|
11
14
|
server = status[2].split.map{|i| i.to_i}
|
12
15
|
rww = status[3].split.select{|i| /^[0-9]+$/ =~ i}.map{|i| i.to_i}
|
13
16
|
{
|
14
|
-
|
17
|
+
active_connections: status[0].split(":").last.gsub(/\s/, "").to_i,
|
15
18
|
accepts: server[0],
|
16
19
|
handled: server[1],
|
17
20
|
requests: server[2],
|
data/lib/nginx_utils/version.rb
CHANGED
@@ -7,7 +7,7 @@ describe NginxUtils do
|
|
7
7
|
describe ".get" do
|
8
8
|
it "should get status" do
|
9
9
|
body = "Active connections: 1 \nserver accepts handled requests\n 4 5 51 \nReading: 1 Writing: 3 Waiting: 2 \n"
|
10
|
-
status = {
|
10
|
+
status = {active_connections: 1, accepts: 4, handled: 5, requests: 51, reading: 1, writing: 3, waiting: 2}
|
11
11
|
response = double("http response mock", body: body)
|
12
12
|
Net::HTTP.should_receive(:start).and_return(response)
|
13
13
|
expect(NginxUtils::Status.get).to eq(status)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nginx_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -78,7 +78,9 @@ dependencies:
|
|
78
78
|
description: The various utilities on nginx
|
79
79
|
email:
|
80
80
|
- i2bskn@gmail.com
|
81
|
-
executables:
|
81
|
+
executables:
|
82
|
+
- nginx_logrotate
|
83
|
+
- nginx_status
|
82
84
|
extensions: []
|
83
85
|
extra_rdoc_files: []
|
84
86
|
files:
|
@@ -88,6 +90,8 @@ files:
|
|
88
90
|
- LICENSE.txt
|
89
91
|
- README.md
|
90
92
|
- Rakefile
|
93
|
+
- bin/nginx_logrotate
|
94
|
+
- bin/nginx_status
|
91
95
|
- lib/nginx_utils.rb
|
92
96
|
- lib/nginx_utils/logreader.rb
|
93
97
|
- lib/nginx_utils/logrotate.rb
|
@@ -113,7 +117,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
113
117
|
version: '0'
|
114
118
|
segments:
|
115
119
|
- 0
|
116
|
-
hash: -
|
120
|
+
hash: -837549919504176739
|
117
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
122
|
none: false
|
119
123
|
requirements:
|
@@ -122,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
126
|
version: '0'
|
123
127
|
segments:
|
124
128
|
- 0
|
125
|
-
hash: -
|
129
|
+
hash: -837549919504176739
|
126
130
|
requirements: []
|
127
131
|
rubyforge_project:
|
128
132
|
rubygems_version: 1.8.25
|