perfmonger 0.7.1 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/NEWS +11 -0
- data/Rakefile +1 -0
- data/core/Makefile +43 -15
- data/core/build.sh +43 -7
- data/core/perfmonger-player.go +1 -2
- data/core/perfmonger-recorder.go +54 -0
- data/core/perfmonger-summarizer.go +18 -5
- data/core/subsystem/usage.go +11 -0
- data/lib/perfmonger/command/plot.rb +10 -0
- data/lib/perfmonger/command/record.rb +13 -3
- data/lib/perfmonger/command/record_option.rb +12 -0
- data/lib/perfmonger/command/summary.rb +10 -0
- data/lib/perfmonger/version.rb +1 -1
- data/perfmonger.gemspec +4 -2
- metadata +5 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b02aaea69043dcf1560fd042e2af5f571c88e06
|
4
|
+
data.tar.gz: 07081ebc86aa30f921b360cc0c2d82fd958d3c7f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d4c1d36d69a8d010574985ef3ca8e1760c715b9eb079d87cc4eab5de9adf6a05373a01d351e5286e8000f7fe90148e2af7ac3036abc9eab3bc9a0c329bd18d0
|
7
|
+
data.tar.gz: 98347d85d24cdbd38ee6cf39cf1a6961a957a56da0d4c17700a2a8dfeb93c2e9438c9953f9bcd5233644249c2f659f1f6c4e4ec9c785bc3cb3835051efa04f98
|
data/NEWS
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
## XXXX-XX-XX: PerfMonger 0.9.0
|
2
|
+
* ...
|
3
|
+
|
4
|
+
## 2016-11-22: PerfMonger 0.8.0
|
5
|
+
* New features
|
6
|
+
* [record] subcommand:
|
7
|
+
* Implemented "session" for preventing double start
|
8
|
+
* Add --background and --kill option for running perfmonger in background (useful for scripting)
|
9
|
+
* [summary] subcommand:
|
10
|
+
* Add --disk-only option to filter results of not interesting disks
|
11
|
+
|
1
12
|
## 2016-10-02: PerfMonger 0.7.1 released
|
2
13
|
|
3
14
|
* Bug fix
|
data/Rakefile
CHANGED
data/core/Makefile
CHANGED
@@ -1,23 +1,51 @@
|
|
1
|
+
# DO NOT EDIT MANUALLY
|
2
|
+
# generated by build.sh
|
1
3
|
|
2
|
-
GOSRC :=
|
3
|
-
subsystem/perfmonger.go \
|
4
|
-
subsystem/perfmonger_linux.go \
|
5
|
-
subsystem/stat.go \
|
6
|
-
subsystem/usage.go
|
4
|
+
GOSRC := subsystem/perfmonger_darwin.go subsystem/perfmonger.go subsystem/perfmonger_linux.go subsystem/perfmonger_linux_test.go subsystem/stat.go subsystem/stat_test.go subsystem/usage.go subsystem/usage_test.go
|
7
5
|
|
8
|
-
.PHONY: all clean
|
6
|
+
.PHONY: all build clean
|
9
7
|
|
10
|
-
all:
|
8
|
+
all: build
|
11
9
|
|
12
|
-
clean:
|
13
|
-
rm -f perfmonger-recorder perfmonger-player perfmonger-summarizer
|
14
10
|
|
15
|
-
perfmonger-
|
16
|
-
go build
|
11
|
+
../lib/exec/perfmonger-recorder_linux_386: perfmonger-recorder.go $(GOSRC)
|
12
|
+
go build -o $@ perfmonger-recorder.go
|
13
|
+
|
14
|
+
|
15
|
+
../lib/exec/perfmonger-player_linux_386: perfmonger-player.go $(GOSRC)
|
16
|
+
go build -o $@ perfmonger-player.go
|
17
|
+
|
18
|
+
|
19
|
+
../lib/exec/perfmonger-summarizer_linux_386: perfmonger-summarizer.go $(GOSRC)
|
20
|
+
go build -o $@ perfmonger-summarizer.go
|
21
|
+
|
22
|
+
|
23
|
+
../lib/exec/perfmonger-recorder_linux_amd64: perfmonger-recorder.go $(GOSRC)
|
24
|
+
go build -o $@ perfmonger-recorder.go
|
25
|
+
|
26
|
+
|
27
|
+
../lib/exec/perfmonger-player_linux_amd64: perfmonger-player.go $(GOSRC)
|
28
|
+
go build -o $@ perfmonger-player.go
|
29
|
+
|
17
30
|
|
18
|
-
perfmonger-
|
19
|
-
go build
|
31
|
+
../lib/exec/perfmonger-summarizer_linux_amd64: perfmonger-summarizer.go $(GOSRC)
|
32
|
+
go build -o $@ perfmonger-summarizer.go
|
20
33
|
|
21
|
-
|
22
|
-
|
34
|
+
|
35
|
+
../lib/exec/perfmonger-recorder_darwin_amd64: perfmonger-recorder.go $(GOSRC)
|
36
|
+
go build -o $@ perfmonger-recorder.go
|
37
|
+
|
38
|
+
|
39
|
+
../lib/exec/perfmonger-player_darwin_amd64: perfmonger-player.go $(GOSRC)
|
40
|
+
go build -o $@ perfmonger-player.go
|
41
|
+
|
42
|
+
|
43
|
+
../lib/exec/perfmonger-summarizer_darwin_amd64: perfmonger-summarizer.go $(GOSRC)
|
44
|
+
go build -o $@ perfmonger-summarizer.go
|
45
|
+
|
46
|
+
|
47
|
+
build: ../lib/exec/perfmonger-recorder_linux_386 ../lib/exec/perfmonger-player_linux_386 ../lib/exec/perfmonger-summarizer_linux_386 ../lib/exec/perfmonger-recorder_linux_amd64 ../lib/exec/perfmonger-player_linux_amd64 ../lib/exec/perfmonger-summarizer_linux_amd64 ../lib/exec/perfmonger-recorder_darwin_amd64 ../lib/exec/perfmonger-player_darwin_amd64 ../lib/exec/perfmonger-summarizer_darwin_amd64
|
48
|
+
|
49
|
+
clean:
|
50
|
+
rm -f ../lib/exec/perfmonger-recorder_linux_386 ../lib/exec/perfmonger-player_linux_386 ../lib/exec/perfmonger-summarizer_linux_386 ../lib/exec/perfmonger-recorder_linux_amd64 ../lib/exec/perfmonger-player_linux_amd64 ../lib/exec/perfmonger-summarizer_linux_amd64 ../lib/exec/perfmonger-recorder_darwin_amd64 ../lib/exec/perfmonger-player_darwin_amd64 ../lib/exec/perfmonger-summarizer_darwin_amd64
|
23
51
|
|
data/core/build.sh
CHANGED
@@ -31,18 +31,54 @@ else
|
|
31
31
|
TARGET=("linux 386" "linux amd64" "darwin amd64")
|
32
32
|
fi
|
33
33
|
|
34
|
-
set -
|
34
|
+
set -e
|
35
|
+
|
36
|
+
GO_FILES=$(ls subsystem/*.go)
|
37
|
+
|
38
|
+
cat <<EOF > Makefile
|
39
|
+
# DO NOT EDIT MANUALLY
|
40
|
+
# generated by build.sh
|
41
|
+
|
42
|
+
GOSRC := $(echo ${GO_FILES})
|
43
|
+
|
44
|
+
.PHONY: all build clean
|
45
|
+
|
46
|
+
all: build
|
47
|
+
|
48
|
+
EOF
|
49
|
+
|
50
|
+
TARGETS=()
|
35
51
|
|
36
52
|
for idx in $(seq 0 $((${#TARGET[@]}-1))); do
|
37
53
|
set -- ${TARGET[$idx]}
|
38
54
|
export GOOS=$1
|
39
55
|
export GOARCH=$2
|
40
56
|
|
41
|
-
|
42
|
-
perfmonger
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
57
|
+
for subcmd in recorder player summarizer; do
|
58
|
+
TARGETS+=(../lib/exec/perfmonger-${subcmd}_${GOOS}_${GOARCH})
|
59
|
+
|
60
|
+
cat <<EOF >> Makefile
|
61
|
+
|
62
|
+
../lib/exec/perfmonger-${subcmd}_${GOOS}_${GOARCH}: perfmonger-${subcmd}.go \$(GOSRC)
|
63
|
+
go build -o \$@ perfmonger-$subcmd.go
|
64
|
+
|
65
|
+
EOF
|
66
|
+
done
|
67
|
+
|
68
|
+
# go build -o ../lib/exec/perfmonger-recorder_${GOOS}_${GOARCH} \
|
69
|
+
# perfmonger-recorder.go &
|
70
|
+
# go build -o ../lib/exec/perfmonger-player_${GOOS}_${GOARCH} \
|
71
|
+
# perfmonger-player.go &
|
72
|
+
# go build -o ../lib/exec/perfmonger-summarizer_${GOOS}_${GOARCH} \
|
73
|
+
# perfmonger-summarizer.go &
|
74
|
+
|
47
75
|
done
|
48
76
|
|
77
|
+
cat <<EOF >> Makefile
|
78
|
+
|
79
|
+
build: ${TARGETS[*]}
|
80
|
+
|
81
|
+
clean:
|
82
|
+
rm -f ${TARGETS[*]}
|
83
|
+
|
84
|
+
EOF
|
data/core/perfmonger-player.go
CHANGED
@@ -27,8 +27,7 @@ func showCpuStat(buffer *bytes.Buffer, prev_rec *ss.StatRecord, cur_rec *ss.Stat
|
|
27
27
|
func showDiskStat(buffer *bytes.Buffer, prev_rec *ss.StatRecord, cur_rec *ss.StatRecord) error {
|
28
28
|
dusage, err := ss.GetDiskUsage(
|
29
29
|
prev_rec.Time, prev_rec.Disk,
|
30
|
-
cur_rec.Time, cur_rec.Disk
|
31
|
-
)
|
30
|
+
cur_rec.Time, cur_rec.Disk)
|
32
31
|
if err != nil {
|
33
32
|
return err
|
34
33
|
}
|
data/core/perfmonger-recorder.go
CHANGED
@@ -8,10 +8,15 @@ import (
|
|
8
8
|
"flag"
|
9
9
|
"fmt"
|
10
10
|
"io"
|
11
|
+
"io/ioutil"
|
11
12
|
"os"
|
12
13
|
"os/exec"
|
13
14
|
"os/signal"
|
15
|
+
"os/user"
|
16
|
+
"path"
|
17
|
+
"strconv"
|
14
18
|
"strings"
|
19
|
+
"syscall"
|
15
20
|
"time"
|
16
21
|
|
17
22
|
"golang.org/x/crypto/ssh/terminal"
|
@@ -111,6 +116,55 @@ func main() {
|
|
111
116
|
var out *bufio.Writer
|
112
117
|
var err error
|
113
118
|
|
119
|
+
// Find existing session, or create new one
|
120
|
+
user, err := user.Current()
|
121
|
+
if err != nil {
|
122
|
+
panic(err)
|
123
|
+
}
|
124
|
+
session_file := path.Join(os.TempDir(),
|
125
|
+
fmt.Sprintf("perfmonger-%s-session.pid", user.Username))
|
126
|
+
|
127
|
+
lockfile := path.Join(os.TempDir(), ".perfmonger.lock")
|
128
|
+
|
129
|
+
// make lock file if not exists
|
130
|
+
session_exists := false
|
131
|
+
|
132
|
+
if _, err := os.Stat(lockfile); err != nil {
|
133
|
+
ioutil.WriteFile(lockfile, []byte(""), 0644)
|
134
|
+
}
|
135
|
+
fd, _ := syscall.Open("lock", syscall.O_RDONLY, 0000)
|
136
|
+
defer syscall.Close(fd)
|
137
|
+
syscall.Flock(fd, syscall.LOCK_EX)
|
138
|
+
|
139
|
+
if _, err := os.Stat(session_file); err == nil {
|
140
|
+
pidstr, err := ioutil.ReadFile(session_file)
|
141
|
+
pid, err := strconv.Atoi(string(pidstr))
|
142
|
+
if err != nil {
|
143
|
+
goto MakeNewSession
|
144
|
+
}
|
145
|
+
|
146
|
+
proc, err := os.FindProcess(pid)
|
147
|
+
err = proc.Signal(syscall.Signal(0))
|
148
|
+
|
149
|
+
if err == nil {
|
150
|
+
session_exists = true
|
151
|
+
goto Unlock
|
152
|
+
}
|
153
|
+
}
|
154
|
+
MakeNewSession:
|
155
|
+
err = ioutil.WriteFile(session_file, []byte(strconv.Itoa(os.Getpid())), 0644)
|
156
|
+
if err != nil {
|
157
|
+
panic(err)
|
158
|
+
}
|
159
|
+
|
160
|
+
Unlock:
|
161
|
+
syscall.Flock(fd, syscall.LOCK_UN)
|
162
|
+
|
163
|
+
if session_exists {
|
164
|
+
fmt.Fprintf(os.Stderr, "[ERROR] another perfmonger is already running.\n")
|
165
|
+
return
|
166
|
+
}
|
167
|
+
|
114
168
|
parseArgs()
|
115
169
|
|
116
170
|
hostname, _ := os.Hostname()
|
@@ -9,24 +9,31 @@ import (
|
|
9
9
|
"fmt"
|
10
10
|
"io"
|
11
11
|
"os"
|
12
|
+
"regexp"
|
12
13
|
"sort"
|
13
14
|
|
14
15
|
ss "github.com/hayamiz/perfmonger/core/subsystem"
|
15
16
|
)
|
16
17
|
|
17
18
|
type SummaryOption struct {
|
18
|
-
logfile
|
19
|
-
title
|
20
|
-
json
|
19
|
+
logfile string
|
20
|
+
title string
|
21
|
+
json bool
|
22
|
+
disk_only string
|
23
|
+
disk_only_regex *regexp.Regexp
|
21
24
|
}
|
22
25
|
|
23
26
|
var option SummaryOption
|
24
27
|
|
25
28
|
func parseArgs() {
|
29
|
+
var err error
|
30
|
+
|
26
31
|
flag.BoolVar(&option.json, "json",
|
27
32
|
false, "Show summary in JSON")
|
28
33
|
flag.StringVar(&option.title, "title",
|
29
34
|
"", "Title of summary")
|
35
|
+
flag.StringVar(&option.disk_only, "disk-only",
|
36
|
+
"", "Select disk devices by regex")
|
30
37
|
|
31
38
|
flag.Parse()
|
32
39
|
|
@@ -34,6 +41,11 @@ func parseArgs() {
|
|
34
41
|
os.Exit(1)
|
35
42
|
}
|
36
43
|
|
44
|
+
option.disk_only_regex, err = regexp.Compile(option.disk_only)
|
45
|
+
if err != nil {
|
46
|
+
panic(err)
|
47
|
+
}
|
48
|
+
|
37
49
|
option.logfile = flag.Args()[0]
|
38
50
|
}
|
39
51
|
|
@@ -99,9 +111,10 @@ func main() {
|
|
99
111
|
}
|
100
112
|
|
101
113
|
if fst_record.Disk != nil && lst_record.Disk != nil {
|
102
|
-
disk_usage, err = ss.
|
114
|
+
disk_usage, err = ss.GetDiskUsage1(
|
103
115
|
fst_record.Time, fst_record.Disk,
|
104
|
-
lst_record.Time, lst_record.Disk
|
116
|
+
lst_record.Time, lst_record.Disk,
|
117
|
+
option.disk_only_regex)
|
105
118
|
}
|
106
119
|
|
107
120
|
if fst_record.Disk != nil && lst_record.Disk != nil {
|
data/core/subsystem/usage.go
CHANGED
@@ -5,6 +5,7 @@ import (
|
|
5
5
|
"encoding/json"
|
6
6
|
"errors"
|
7
7
|
"fmt"
|
8
|
+
"regexp"
|
8
9
|
"sort"
|
9
10
|
"time"
|
10
11
|
)
|
@@ -199,6 +200,11 @@ func avgDelta(v int64, w int64, interval float64) float64 {
|
|
199
200
|
}
|
200
201
|
|
201
202
|
func GetDiskUsage(t1 time.Time, d1 *DiskStat, t2 time.Time, d2 *DiskStat) (*DiskUsage, error) {
|
203
|
+
return GetDiskUsage1(t1, d1, t2, d2, nil)
|
204
|
+
}
|
205
|
+
|
206
|
+
func GetDiskUsage1(t1 time.Time, d1 *DiskStat, t2 time.Time, d2 *DiskStat,
|
207
|
+
filter *regexp.Regexp) (*DiskUsage, error) {
|
202
208
|
interval := t2.Sub(t1)
|
203
209
|
itv := interval.Seconds()
|
204
210
|
|
@@ -219,6 +225,11 @@ func GetDiskUsage(t1 time.Time, d1 *DiskStat, t2 time.Time, d2 *DiskStat) (*Disk
|
|
219
225
|
|
220
226
|
for _, entry1 := range d1.Entries {
|
221
227
|
name := entry1.Name
|
228
|
+
if filter != nil {
|
229
|
+
if !filter.MatchString(name) {
|
230
|
+
continue
|
231
|
+
}
|
232
|
+
}
|
222
233
|
var entry2 *DiskStatEntry = nil
|
223
234
|
for _, e := range d2.Entries {
|
224
235
|
if e.Name == entry1.Name {
|
@@ -24,6 +24,7 @@ EOS
|
|
24
24
|
@output_type = 'pdf'
|
25
25
|
@output_prefix = ''
|
26
26
|
@save_gpfiles = false
|
27
|
+
@disk_only_regex = nil
|
27
28
|
end
|
28
29
|
|
29
30
|
def parse_args(argv)
|
@@ -72,6 +73,9 @@ EOS
|
|
72
73
|
@save_gpfiles = true
|
73
74
|
end
|
74
75
|
|
76
|
+
@parser.on('--disk-only REGEX', "Select disk devices that matches REGEX") do |regex|
|
77
|
+
@disk_only_regex = Regexp.compile(regex)
|
78
|
+
end
|
75
79
|
|
76
80
|
@parser.parse!(argv)
|
77
81
|
|
@@ -143,6 +147,12 @@ EOS
|
|
143
147
|
start_time ||= time
|
144
148
|
devices ||= diskinfo["devices"]
|
145
149
|
|
150
|
+
if @disk_only_regex
|
151
|
+
devices = devices.select do |devname|
|
152
|
+
devname =~ @disk_only_regex
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
146
156
|
datafile.puts([time - start_time,
|
147
157
|
devices.map{|device|
|
148
158
|
[diskinfo[device]["riops"], diskinfo[device]["wiops"],
|
@@ -2,6 +2,7 @@ require 'optparse'
|
|
2
2
|
require 'tempfile'
|
3
3
|
require 'tmpdir'
|
4
4
|
require 'json'
|
5
|
+
require 'etc'
|
5
6
|
|
6
7
|
module PerfMonger
|
7
8
|
module Command
|
@@ -16,15 +17,24 @@ class RecordCommand < BaseCommand
|
|
16
17
|
def run(argv)
|
17
18
|
@argv, @option = PerfMonger::Command::RecordOption.parse(argv)
|
18
19
|
|
19
|
-
|
20
|
+
if @option.kill
|
21
|
+
session_file = File.expand_path(sprintf("perfmonger-%s-session.pid", Etc.getlogin),
|
22
|
+
Dir.tmpdir)
|
23
|
+
Process.kill(:INT, File.read(session_file).to_i)
|
24
|
+
else
|
25
|
+
exec_record_cmd()
|
26
|
+
end
|
20
27
|
end
|
21
28
|
|
22
29
|
private
|
23
30
|
def exec_record_cmd()
|
24
31
|
cmd = @option.make_command
|
25
32
|
|
26
|
-
|
27
|
-
|
33
|
+
if @option.background
|
34
|
+
Process.daemon(true)
|
35
|
+
else
|
36
|
+
$stdout.puts("[recording to #{@option.logfile}]")
|
37
|
+
end
|
28
38
|
Process.exec(*cmd)
|
29
39
|
end
|
30
40
|
end
|
@@ -9,6 +9,8 @@ class RecordOption
|
|
9
9
|
attr_reader :report_cpu
|
10
10
|
attr_reader :no_disk
|
11
11
|
attr_reader :logfile
|
12
|
+
attr_reader :background
|
13
|
+
attr_reader :kill
|
12
14
|
|
13
15
|
attr_reader :parser
|
14
16
|
attr_accessor :record_bin
|
@@ -83,6 +85,8 @@ class RecordOption
|
|
83
85
|
@no_disk = false
|
84
86
|
@devices = []
|
85
87
|
@logfile = "perfmonger.pgr"
|
88
|
+
@background = false
|
89
|
+
@kill = false
|
86
90
|
|
87
91
|
@parser = OptionParser.new
|
88
92
|
|
@@ -120,6 +124,14 @@ class RecordOption
|
|
120
124
|
@logfile = file
|
121
125
|
end
|
122
126
|
|
127
|
+
@parser.on('--background', 'Run in background') do
|
128
|
+
@background = true
|
129
|
+
end
|
130
|
+
|
131
|
+
@parser.on('--kill', 'Stop currently running perfmonger-reocrd') do
|
132
|
+
@kill = true
|
133
|
+
end
|
134
|
+
|
123
135
|
@parser.on('-v', '--verbose') do
|
124
136
|
@verbose = true
|
125
137
|
end
|
@@ -18,6 +18,7 @@ EOS
|
|
18
18
|
|
19
19
|
@json = false
|
20
20
|
@pager = nil
|
21
|
+
@disk_only_regex = nil
|
21
22
|
|
22
23
|
@parser.on('--json', "Output summary in JSON") do
|
23
24
|
@json = true
|
@@ -37,6 +38,10 @@ EOS
|
|
37
38
|
@pager = pager
|
38
39
|
end
|
39
40
|
end
|
41
|
+
|
42
|
+
@parser.on('--disk-only REGEX', "Select disk devices that matches REGEX") do |regex|
|
43
|
+
@disk_only_regex = regex
|
44
|
+
end
|
40
45
|
end
|
41
46
|
|
42
47
|
def parse_args(argv)
|
@@ -74,6 +79,11 @@ EOS
|
|
74
79
|
cmd << "-json"
|
75
80
|
end
|
76
81
|
|
82
|
+
if @disk_only_regex
|
83
|
+
cmd << "-disk-only"
|
84
|
+
cmd << @disk_only_regex
|
85
|
+
end
|
86
|
+
|
77
87
|
cmd << "-title"
|
78
88
|
cmd << summary_title
|
79
89
|
|
data/lib/perfmonger/version.rb
CHANGED
data/perfmonger.gemspec
CHANGED
@@ -22,7 +22,9 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.add_development_dependency "guard-rspec"
|
23
23
|
s.add_development_dependency "aruba"
|
24
24
|
|
25
|
-
s.files = `git ls-files`.split("\n")
|
25
|
+
s.files = `git ls-files`.split("\n").select do |file|
|
26
|
+
! (file =~ /^dbg\//)
|
27
|
+
end
|
26
28
|
s.files += Dir.glob("lib/exec/*")
|
27
29
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
28
30
|
s.executables = `git ls-files -- bin/*`.split("\n").map{|f| File.basename(f)}
|
@@ -34,7 +36,7 @@ Gem::Specification.new do |s|
|
|
34
36
|
Thank you for installing perfmonger.
|
35
37
|
Try to start performance monitoring with:
|
36
38
|
|
37
|
-
perfmonger
|
39
|
+
perfmonger live
|
38
40
|
|
39
41
|
Enjoy.
|
40
42
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: perfmonger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuto HAYAMIZU
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -195,7 +195,7 @@ post_install_message: |2+
|
|
195
195
|
Thank you for installing perfmonger.
|
196
196
|
Try to start performance monitoring with:
|
197
197
|
|
198
|
-
perfmonger
|
198
|
+
perfmonger live
|
199
199
|
|
200
200
|
Enjoy.
|
201
201
|
|
@@ -216,19 +216,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
216
216
|
version: '0'
|
217
217
|
requirements: []
|
218
218
|
rubyforge_project:
|
219
|
-
rubygems_version: 2.
|
219
|
+
rubygems_version: 2.5.1
|
220
220
|
signing_key:
|
221
221
|
specification_version: 4
|
222
222
|
summary: yet anothor performance measurement/monitoring tool
|
223
|
-
test_files:
|
224
|
-
- spec/data/busy100.pgr
|
225
|
-
- spec/fingerprint_spec.rb
|
226
|
-
- spec/live_spec.rb
|
227
|
-
- spec/perfmonger_spec.rb
|
228
|
-
- spec/play_spec.rb
|
229
|
-
- spec/plot_spec.rb
|
230
|
-
- spec/record_spec.rb
|
231
|
-
- spec/spec_helper.rb
|
232
|
-
- spec/stat_spec.rb
|
233
|
-
- spec/summary_spec.rb
|
234
|
-
- spec/support/aruba.rb
|
223
|
+
test_files: []
|