schwad_performance_logger 0.3.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CODE_OF_CONDUCT.md +1 -1
- data/LICENSE.txt +1 -1
- data/README.md +135 -6
- data/lib/schwad_performance_logger.rb +1 -1
- data/lib/schwad_performance_logger/version.rb +1 -1
- metadata +4 -5
- data/schwad_performance_logger-0.2.0.gem +0 -0
- data/schwad_performance_logger-0.3.0.gem +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae71b883d6ce1e62e230e41a71b01c1f5b7c1e5e5c45992478c575e09a7dfb57
|
4
|
+
data.tar.gz: 5a16178772f46465ad4af1d938ed19f3950090026b1e2730c41ae1718828027e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3812e45de8ca0808bdfe89569a7091e7146ed387c9f661c1d2fd8e8f6cf76c2170ba1a625df9631c2927f18f947b16e8f62b1f8af74058dc404350ecafdb7861
|
7
|
+
data.tar.gz: a4ae0ada2de63085af0ba737dcd426f404b3b0c69032069d47058ea76f89bc49054eafacd26c969da1b6ddb1bd953065cd7598456204a9117300740da6bb8e7b
|
data/CODE_OF_CONDUCT.md
CHANGED
@@ -55,7 +55,7 @@ further defined and clarified by project maintainers.
|
|
55
55
|
## Enforcement
|
56
56
|
|
57
57
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
58
|
-
reported by contacting the project team at nick.schwaderer@
|
58
|
+
reported by contacting the project team at nick.schwaderer@gmail.com. All
|
59
59
|
complaints will be reviewed and investigated and will result in a response that
|
60
60
|
is deemed necessary and appropriate to the circumstances. The project team is
|
61
61
|
obligated to maintain confidentiality with regard to the reporter of an incident.
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# SchwadPerformanceLogger
|
2
2
|
|
3
3
|
This gem allows you to track memory usage and time passage during the life of
|
4
|
-
the
|
4
|
+
the SPL object, as well as deltas between each check. The output
|
5
5
|
is `puts`'d to the console, and it also writes to a long-running CSV and per-object
|
6
6
|
log file in `logs/schwad_performance_logger`
|
7
7
|
|
@@ -23,7 +23,7 @@ Or install it yourself as:
|
|
23
23
|
|
24
24
|
## Usage
|
25
25
|
|
26
|
-
`pl =
|
26
|
+
`pl = SPL.new({full_memo: 'Check extract method refactoring'})`
|
27
27
|
|
28
28
|
```
|
29
29
|
**********************************************************************
|
@@ -47,17 +47,17 @@ Starting Test memo. Current memory: 12(Mb), difference of 0 (mb) since beginning
|
|
47
47
|
|
48
48
|
To disable any of the outputs:
|
49
49
|
|
50
|
-
`
|
50
|
+
`SPL.new({puts: false, log: false, csv: false})`
|
51
51
|
|
52
52
|
To have the logger 'pause' a number of seconds during the `puts` logging so that
|
53
53
|
you can actually see the log as it goes by. This does not affect the 'time' measurement:
|
54
54
|
|
55
|
-
`
|
55
|
+
`SPL.new({pause: 8})`
|
56
56
|
|
57
57
|
## Usage example:
|
58
58
|
|
59
59
|
```
|
60
|
-
pl =
|
60
|
+
pl = SPL.new({pause: 3, full_memo: 'Retry object-oriented approach.', log: false})
|
61
61
|
pl.log_performance('check status before writing to database')
|
62
62
|
|
63
63
|
# code here
|
@@ -69,6 +69,135 @@ pl.log_performance('check status after writing to database')
|
|
69
69
|
pl.log_performance('inspect final performance after executing service')
|
70
70
|
```
|
71
71
|
|
72
|
+
## Further Profiling Tools
|
73
|
+
|
74
|
+
As well as logging memory and time throughout your code, SPL gives you easy access to frequently used popular profiling tools to inspect your code blocks.
|
75
|
+
|
76
|
+
### IPS
|
77
|
+
|
78
|
+
Handy access to [Benchmark-ips](https://github.com/evanphx/benchmark-ips) measurements, just pass a block to ips:
|
79
|
+
|
80
|
+
```ruby
|
81
|
+
SPL.ips do
|
82
|
+
ary = []
|
83
|
+
35.times do
|
84
|
+
ary << (1..99).to_a.sample
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
#=> #<Benchmark::IPS::Report:0x00007fbc7f91df50 @entries=[#<Benchmark::IPS::Report::Entry:0x00007fbc7e0c3bd0 @label="PerformanceLogMethod", @microseconds=5002798.0, @iterations=34020, @stats=#<Benchmark::IPS::Stats::SD:0x00007fbc7e0c3c48 @mean=6805.780564500376, @error=195>, @measurement_cycle=630, @show_total_time=true>], @data=nil>
|
89
|
+
```
|
90
|
+
|
91
|
+
### Time
|
92
|
+
|
93
|
+
Same flow as above. Tired of writing out `start_time` and `Time.now - start_time` and also needing to 'puts' it out? Pass a block to `#time`. Runs ten times and spits out an average as well.
|
94
|
+
|
95
|
+
```ruby
|
96
|
+
SPL.time do
|
97
|
+
ary = []
|
98
|
+
35.times do
|
99
|
+
ary << (1..99).to_a.sample
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
#=> Average runtime 0.0002649 seconds. Max time 0.000508.seconds
|
104
|
+
```
|
105
|
+
|
106
|
+
### Allocate Count
|
107
|
+
|
108
|
+
Before, you would have to enable the `GC` before your code, use `ObjectSpace` to count objects before your code, then use it again after your code to compare allocated objects during your block of code. You'd also have to re-enable the `GC`! Gosh, that sure is a lot of work if you want to do this frequently. We make it simple.
|
109
|
+
|
110
|
+
```ruby
|
111
|
+
SPL.allocate_count do
|
112
|
+
ary = []
|
113
|
+
35.times do
|
114
|
+
ary << (1..99).to_a.sample
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
#=> {:FREE=>-121, :T_STRING=>50, :T_ARRAY=>36, :T_IMEMO=>35}
|
119
|
+
```
|
120
|
+
|
121
|
+
### Profile Memory
|
122
|
+
|
123
|
+
Gives you quick access to the amazing [memory_profiler](https://github.com/SamSaffron/memory_profiler) gem.
|
124
|
+
|
125
|
+
```ruby
|
126
|
+
SPL.profile_memory do
|
127
|
+
ary = []
|
128
|
+
35.times do
|
129
|
+
ary << (1..99).to_a.sample
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
# Total allocated: 37576 bytes (36 objects)
|
134
|
+
# Total retained: 0 bytes (0 objects)
|
135
|
+
#
|
136
|
+
# allocated memory by gem
|
137
|
+
# -----------------------------------
|
138
|
+
# 37576 other
|
139
|
+
#
|
140
|
+
# allocated memory by file
|
141
|
+
# -----------------------------------
|
142
|
+
# 37576 (irb)
|
143
|
+
#
|
144
|
+
# allocated memory by location
|
145
|
+
# -----------------------------------
|
146
|
+
# 37240 (irb):37
|
147
|
+
# 336 (irb):35
|
148
|
+
#
|
149
|
+
# allocated memory by class
|
150
|
+
# -----------------------------------
|
151
|
+
# 37576 Array
|
152
|
+
#
|
153
|
+
# allocated objects by gem
|
154
|
+
# -----------------------------------
|
155
|
+
# 36 other
|
156
|
+
#
|
157
|
+
# allocated objects by file
|
158
|
+
# -----------------------------------
|
159
|
+
# 36 (irb)
|
160
|
+
#
|
161
|
+
# allocated objects by location
|
162
|
+
# -----------------------------------
|
163
|
+
# 35 (irb):37
|
164
|
+
# 1 (irb):35
|
165
|
+
#
|
166
|
+
# allocated objects by class
|
167
|
+
# -----------------------------------
|
168
|
+
# 36 Array
|
169
|
+
```
|
170
|
+
|
171
|
+
### All Objects
|
172
|
+
|
173
|
+
Similarly, it's nice to get a rundown of all objects, in hash format, instead of goofing around with `ObjectSpace` manually we offer that up for you as well.
|
174
|
+
|
175
|
+
```ruby
|
176
|
+
SPL.all_objects do
|
177
|
+
ary = []
|
178
|
+
35.times do
|
179
|
+
ary << (1..99).to_a.sample
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
#=> [[Benchmark::IPS::Job, 1], [Rational, 1], [Benchmark::IPS::Report::Entry, 1], [Benchmark::IPS::Stats::SD, 1], [FFI::DynamicLibrary, 1], [DidYouMean::ClassNameChecker, 1], [Thread::Backtrace, 1], [NameError::message, 1], [NameError, 1], [#<Class:0x00007fbc7e816478>, 1], [Gem::Platform, 1], [IRB::Notifier::CompositeNotifier, 1], [IRB::Notifier::NoMsgNotifier, 1], [Enumerator, 1], [RubyToken::TkSPACE, 1], [FFI::Type::Mapped, 1], [IRB::ReadlineInputMethod, 1], [IRB::WorkSpace, 1], [IRB::Context, 1], [IRB::Irb, 1], [Gem::PathSupport, 1], [Monitor, 1], [IRB::Locale, 1], [DidYouMean::PlainFormatter, 1], [DidYouMean::DeprecatedIgnoredCallers, 1], [IRB::SLex, 1], [RubyLex, 1], [DidYouMean::ClassNameChecker::ClassName, 1], [URI::RFC2396_Parser, 1], [URI::RFC3986_Parser, 1], [Complex, 1], [ThreadGroup, 1], [IOError, 1], [Thread, 1], [RubyVM, 1], [NoMemoryError, 1], [SystemStackError, 1], [Random, 1], [ARGF.class, 1], [Benchmark::IPS::Job::Entry, 1], [Benchmark::IPS::Report, 1], [Benchmark::IPS::Job::StdoutReport, 1], [#<Class:0x00007fbc7e023e50>, 1], [FFI::Pointer, 1], [FFI::FunctionType, 2], [Integer, 2], [IRB::StdioOutputMethod, 2], [Binding, 2], [RubyToken::TkDOT, 2], [RubyToken::TkIDENTIFIER, 2], [FFI::StructLayout, 2], [UnboundMethod, 2], [RubyToken::TkEND, 2], [FFI::DynamicLibrary::Symbol, 2], [FFI::Function, 2], [fatal, 2], [RubyToken::TkNL, 3], [Thread::Mutex, 3], [IRB::Notifier::LeveledNotifier, 3], [IO, 5], [IRB::Inspector, 5], [BigDecimal, 6], [Float, 6], [FFI::StructLayout::Number, 7], [Object, 9], [Range, 17], [FFI::Type::Builtin, 21], [MatchData, 27], [Gem::Specification, 30], [Time, 31], [Module, 71], [IRB::SLex::Node, 78], [Gem::Dependency, 89], [Proc, 91], [Encoding, 101], [Symbol, 127], [Gem::Requirement, 159], [Hash, 188], [Gem::Version, 209], [Gem::StubSpecification, 252], [Gem::StubSpecification::StubLine, 252], [Regexp, 279], [Class, 633], [Array, 1838], [String, 15818]]
|
184
|
+
```
|
185
|
+
|
186
|
+
### Objects by Size
|
187
|
+
|
188
|
+
You can break down your objects by size as well, useful for debugging.
|
189
|
+
|
190
|
+
```ruby
|
191
|
+
SPL.objects_by_size do
|
192
|
+
ary = []
|
193
|
+
35.times do
|
194
|
+
ary << (1..99).to_a.sample
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
#=> {:T_OBJECT=>101848, :T_CLASS=>730344, :T_MODULE=>76808, :T_FLOAT=>240, :T_STRING=>882168, :T_REGEXP=>200350, :T_ARRAY=>714384, :T_HASH=>150408, :T_STRUCT=>800, :T_BIGNUM=>80, :T_FILE=>1160, :T_DATA=>1074338, :T_MATCH=>28280, :T_COMPLEX=>40, :T_RATIONAL=>40, :T_SYMBOL=>5080, :T_IMEMO=>325040, :T_ICLASS=>3280, :TOTAL=>4294688}
|
199
|
+
```
|
200
|
+
|
72
201
|
## Development
|
73
202
|
|
74
203
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -85,4 +214,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
85
214
|
|
86
215
|
## Code of Conduct
|
87
216
|
|
88
|
-
Everyone interacting in the
|
217
|
+
Everyone interacting in the SPL project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/schwad_performance_logger/blob/master/CODE_OF_CONDUCT.md).
|
@@ -12,7 +12,7 @@ module SchwadPerformanceLogger
|
|
12
12
|
if opts.is_a?(Hash)
|
13
13
|
PLogger.new(opts)
|
14
14
|
else
|
15
|
-
puts "I'm sorry, I don't know what you're trying to pass here!\n\n Please refer to the docs or pass an options hash https://github.com/
|
15
|
+
puts "I'm sorry, I don't know what you're trying to pass here!\n\n Please refer to the docs or pass an options hash https://github.com/schwad/schwad_performance_logger"
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schwad_performance_logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Schwaderer
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: get_process_mem
|
@@ -115,8 +115,6 @@ files:
|
|
115
115
|
- lib/schwad_performance_logger.rb
|
116
116
|
- lib/schwad_performance_logger/schwad_performance_logger.rb
|
117
117
|
- lib/schwad_performance_logger/version.rb
|
118
|
-
- schwad_performance_logger-0.2.0.gem
|
119
|
-
- schwad_performance_logger-0.3.0.gem
|
120
118
|
- schwad_performance_logger.gemspec
|
121
119
|
homepage: https://schwad.github.io
|
122
120
|
licenses:
|
@@ -137,7 +135,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
135
|
- !ruby/object:Gem::Version
|
138
136
|
version: '0'
|
139
137
|
requirements: []
|
140
|
-
|
138
|
+
rubyforge_project:
|
139
|
+
rubygems_version: 2.7.8
|
141
140
|
signing_key:
|
142
141
|
specification_version: 4
|
143
142
|
summary: Track your memory and time performance in console, csv and/or logs.
|
Binary file
|
Binary file
|