rss_observer 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +1 -1
- data/README.md +11 -6
- data/lib/rss_observer.rb +7 -0
- data/lib/rss_observer/logger_handler.rb +32 -0
- data/lib/rss_observer/middleware.rb +8 -8
- data/lib/rss_observer/version.rb +1 -1
- data/rss_observer.gemspec +1 -1
- metadata +3 -8
- data/.circleci/config.yml +0 -61
- data/.travis.yml +0 -7
- data/bin/console +0 -15
- data/bin/rubocop.sh +0 -41
- data/bin/setup +0 -8
- data/lib/rss_observer/logger.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 01b6866b2c0c8f0f076d7d829bd95e6677df5092c49be485ef593294bfb03f3f
|
4
|
+
data.tar.gz: 4eec4fb6c71ad0d12549e3e2f7ae421546300a5a710a72eddba9a15f4c0d8a12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e21876c184ce78bee4a43008bb3264e048b1d3ee0756a3e0ae8be70b47ab831014dfb8d2e4778e0212ec67c5919afc0afa377c126cb3965e96da99aa1e1ce869
|
7
|
+
data.tar.gz: 6833c9dd2f384bf7c1ca0d80744c25cd2994e000f9663d8b819de4e8cbbefa3a013eebbac16bbba99efdda536356add11e546ff40985e8551b05761cac6f0afd
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
# RssObserver
|
2
2
|
|
3
|
-
Rails middleware for observing of RSS changes around the request.
|
3
|
+
Rails middleware for observing of RSS memory changes around the request. Under the hood, it utilizes [the get_process_mem](https://github.com/schneems/get_process_mem) gem.
|
4
4
|
|
5
5
|
[![CircleCI](https://circleci.com/gh/irvingwashington/rss_observer.svg?style=svg)](https://circleci.com/gh/irvingwashington/rss_observer)
|
6
6
|
|
7
|
+
|
7
8
|
# Installation
|
8
9
|
|
9
10
|
Add the line
|
@@ -15,11 +16,11 @@ to your Gemfile and run bundle install.
|
|
15
16
|
To use this middleware in a Rails application, modify relevant environment file (or application.rb to log rss in all environments).
|
16
17
|
You can use the supplied STDOUT logger and insert the RssObserver middleware after `Rails::Rack::Logger`.
|
17
18
|
```ruby
|
18
|
-
require 'rss_observer/
|
19
|
+
require 'rss_observer/logger_handler'
|
19
20
|
module FooApp
|
20
21
|
class Application < Rails::Application
|
21
22
|
# ...
|
22
|
-
config.middleware.insert_after Rails::Rack::Logger, RssObserver::Middleware, RssObserver::
|
23
|
+
config.middleware.insert_after Rails::Rack::Logger, RssObserver::Middleware, RssObserver::LoggerHandler.new
|
23
24
|
end
|
24
25
|
end
|
25
26
|
```
|
@@ -31,8 +32,12 @@ the usage log with actual request logs.
|
|
31
32
|
```ruby
|
32
33
|
# lib/rails_logger_handler.rb
|
33
34
|
class RailsLoggerHandler
|
34
|
-
def
|
35
|
-
|
35
|
+
def initial_memory(kilobytes)
|
36
|
+
Thread.current[:_initial_memory] = kilobytes
|
37
|
+
end
|
38
|
+
|
39
|
+
def final_memory(kilobytes)
|
40
|
+
Rails.logger.info "Memory change: #{final_memory - Thread.current[:_initial_memory]} KB"
|
36
41
|
end
|
37
42
|
end
|
38
43
|
|
@@ -53,4 +58,4 @@ RssObserver vs Default Rails request logs
|
|
53
58
|
```
|
54
59
|
I, [2019-09-03T14:56:22.735264 #7290] INFO -- : [96956f1a-7f7f-4836-a8a1-bc3c05696433] Completed 200 OK in 47ms (Views: 29.7ms | ActiveRecord: 6.3ms | Allocations: 18614)
|
55
60
|
I, [2019-09-03T14:56:22.737113 #7290] INFO -- : [96956f1a-7f7f-4836-a8a1-bc3c05696433] Memory change: 264.0 KB
|
56
|
-
```
|
61
|
+
```
|
data/lib/rss_observer.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RssObserver
|
4
|
+
# Basic handler, outputting the memory change information to standard output
|
5
|
+
class LoggerHandler
|
6
|
+
KEY = :_rss_observer_initial_memory
|
7
|
+
|
8
|
+
# @param logger [Logger]
|
9
|
+
def initialize(logger = Logger.new(STDOUT))
|
10
|
+
@logger = logger
|
11
|
+
end
|
12
|
+
|
13
|
+
# @param kilobytes [Float]
|
14
|
+
def initial_memory(kilobytes)
|
15
|
+
Thread.current[KEY] = kilobytes
|
16
|
+
end
|
17
|
+
|
18
|
+
# @param kilobytes [Float]
|
19
|
+
def final_memory(kilobytes)
|
20
|
+
initial_memory = Thread.current[KEY]
|
21
|
+
return unless initial_memory
|
22
|
+
|
23
|
+
change = kilobytes - initial_memory
|
24
|
+
initial_memory(nil)
|
25
|
+
logger.info "Memory change: #{change} KB"
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
attr_reader :logger
|
31
|
+
end
|
32
|
+
end
|
@@ -11,8 +11,11 @@ module RssObserver
|
|
11
11
|
# @param handler [Object] Handler that accepts memory change updates
|
12
12
|
def initialize(app, handler)
|
13
13
|
@app = app
|
14
|
-
unless handler.respond_to?(:
|
15
|
-
raise UnsupportedHandlerError, 'Handler must respond to the #
|
14
|
+
unless handler.respond_to?(:initial_memory)
|
15
|
+
raise UnsupportedHandlerError, 'Handler must respond to the #initial_memory(kilobytes) method'
|
16
|
+
end
|
17
|
+
unless handler.respond_to?(:final_memory)
|
18
|
+
raise UnsupportedHandlerError, 'Handler must respond to the #final_memory(kilobytes) method'
|
16
19
|
end
|
17
20
|
|
18
21
|
@handler = handler
|
@@ -21,11 +24,9 @@ module RssObserver
|
|
21
24
|
# @param env [Hash] Full application environment hash
|
22
25
|
# @return [Array] Status code, hash of headers, response body
|
23
26
|
def call(env)
|
24
|
-
|
25
|
-
|
27
|
+
handler.initial_memory(current_memory)
|
26
28
|
app.call(env).tap do
|
27
|
-
|
28
|
-
handler.call(memory_change)
|
29
|
+
handler.final_memory(current_memory)
|
29
30
|
end
|
30
31
|
end
|
31
32
|
|
@@ -34,8 +35,7 @@ module RssObserver
|
|
34
35
|
attr_reader :app, :handler
|
35
36
|
|
36
37
|
def current_memory
|
37
|
-
|
38
|
-
@mem.kb
|
38
|
+
RssObserver.current_memory
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
data/lib/rss_observer/version.rb
CHANGED
data/rss_observer.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
# Specify which files should be added to the gem when it is released.
|
19
19
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
20
20
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
21
|
-
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
21
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|.circleci|bin)/}) }
|
22
22
|
end
|
23
23
|
spec.bindir = 'exe'
|
24
24
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rss_observer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maciek Dubiński
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-09-
|
11
|
+
date: 2019-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: get_process_mem
|
@@ -101,22 +101,17 @@ executables: []
|
|
101
101
|
extensions: []
|
102
102
|
extra_rdoc_files: []
|
103
103
|
files:
|
104
|
-
- ".circleci/config.yml"
|
105
104
|
- ".gitignore"
|
106
105
|
- ".rspec"
|
107
106
|
- ".rubocop.yml"
|
108
|
-
- ".travis.yml"
|
109
107
|
- CODE_OF_CONDUCT.md
|
110
108
|
- Gemfile
|
111
109
|
- Gemfile.lock
|
112
110
|
- LICENSE.txt
|
113
111
|
- README.md
|
114
112
|
- Rakefile
|
115
|
-
- bin/console
|
116
|
-
- bin/rubocop.sh
|
117
|
-
- bin/setup
|
118
113
|
- lib/rss_observer.rb
|
119
|
-
- lib/rss_observer/
|
114
|
+
- lib/rss_observer/logger_handler.rb
|
120
115
|
- lib/rss_observer/middleware.rb
|
121
116
|
- lib/rss_observer/version.rb
|
122
117
|
- rss_observer.gemspec
|
data/.circleci/config.yml
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
# Ruby CircleCI 2.0 configuration file
|
2
|
-
#
|
3
|
-
# Check https://circleci.com/docs/2.0/language-ruby/ for more details
|
4
|
-
#
|
5
|
-
version: 2
|
6
|
-
jobs:
|
7
|
-
build:
|
8
|
-
docker:
|
9
|
-
# specify the version you desire here
|
10
|
-
- image: circleci/ruby:2.4.1-node-browsers
|
11
|
-
|
12
|
-
# Specify service dependencies here if necessary
|
13
|
-
# CircleCI maintains a library of pre-built images
|
14
|
-
# documented at https://circleci.com/docs/2.0/circleci-images/
|
15
|
-
# - image: circleci/postgres:9.4
|
16
|
-
|
17
|
-
working_directory: ~/repo
|
18
|
-
|
19
|
-
steps:
|
20
|
-
- checkout
|
21
|
-
|
22
|
-
# Download and cache dependencies
|
23
|
-
- restore_cache:
|
24
|
-
keys:
|
25
|
-
- v1-dependencies-{{ checksum "Gemfile.lock" }}
|
26
|
-
# fallback to using the latest cache if no exact match is found
|
27
|
-
- v1-dependencies-
|
28
|
-
|
29
|
-
- run:
|
30
|
-
name: install dependencies
|
31
|
-
command: |
|
32
|
-
bundle install --jobs=4 --retry=3 --path vendor/bundle
|
33
|
-
|
34
|
-
- save_cache:
|
35
|
-
paths:
|
36
|
-
- ./vendor/bundle
|
37
|
-
key: v1-dependencies-{{ checksum "Gemfile.lock" }}
|
38
|
-
|
39
|
-
# run tests!
|
40
|
-
- run:
|
41
|
-
name: run tests
|
42
|
-
command: |
|
43
|
-
mkdir /tmp/test-results
|
44
|
-
TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | \
|
45
|
-
circleci tests split --split-by=timings)"
|
46
|
-
|
47
|
-
bundle exec rspec \
|
48
|
-
--format progress \
|
49
|
-
--format RspecJunitFormatter \
|
50
|
-
--out /tmp/test-results/rspec.xml \
|
51
|
-
--format progress \
|
52
|
-
$TEST_FILES
|
53
|
-
- run:
|
54
|
-
name: run rubocop
|
55
|
-
command: bash bin/rubocop.sh
|
56
|
-
# collect reports
|
57
|
-
- store_test_results:
|
58
|
-
path: /tmp/test-results
|
59
|
-
- store_artifacts:
|
60
|
-
path: /tmp/test-results
|
61
|
-
destination: test-results
|
data/.travis.yml
DELETED
data/bin/console
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'rss_observer'
|
6
|
-
|
7
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
8
|
-
# with your gem easier. You can also use a different console, if you like.
|
9
|
-
|
10
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
11
|
-
# require "pry"
|
12
|
-
# Pry.start
|
13
|
-
|
14
|
-
require 'irb'
|
15
|
-
IRB.start(__FILE__)
|
data/bin/rubocop.sh
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
#!/usr/bin/env bash
|
2
|
-
|
3
|
-
# Inspired by http://takemikami.com/2018/01/30/RubocopPullRequestCI.html
|
4
|
-
|
5
|
-
BASE_REMOTE=origin
|
6
|
-
BASE_BRANCH=master
|
7
|
-
|
8
|
-
git fetch $BASE_REMOTE $BASE_BRANCH
|
9
|
-
|
10
|
-
diff_list=()
|
11
|
-
commit_list=`git --no-pager log --no-merges $BASE_REMOTE/$BASE_BRANCH...HEAD | grep -e '^commit' | sed -e "s/^commit \(.\{8\}\).*/\1/"`
|
12
|
-
|
13
|
-
for f in `git --no-pager diff $BASE_REMOTE/$BASE_BRANCH...HEAD --name-only`; do
|
14
|
-
for c in $commit_list; do
|
15
|
-
diffs=`git --no-pager blame --follow --show-name -s $f | grep $c | sed -e "s/^[^ ]* *\([^ ]*\) *\([0-9]*\)*).*$/\1:\2/"`
|
16
|
-
for ln in $diffs; do
|
17
|
-
diff_list+=("$ln")
|
18
|
-
done
|
19
|
-
done
|
20
|
-
done
|
21
|
-
|
22
|
-
err_count=0
|
23
|
-
err_lines=()
|
24
|
-
|
25
|
-
while read line; do
|
26
|
-
for m in ${diff_list[@]}; do
|
27
|
-
if [[ "$line" =~ "$m" ]]; then
|
28
|
-
err_count=$(($err_count + 1))
|
29
|
-
err_lines+=("$line")
|
30
|
-
break
|
31
|
-
fi
|
32
|
-
done
|
33
|
-
done < <(bundle exec rubocop --format emacs)
|
34
|
-
|
35
|
-
if [ $err_count -ne 0 ]; then
|
36
|
-
echo -e "\033[31m$err_count Lint Errors\033[0;39m"
|
37
|
-
echo -e "\033[31m-----------------------------------\033[0;39m\n"
|
38
|
-
printf '\033[31m%s\n' "${err_lines[@]}"
|
39
|
-
echo -e "\033[31mPlease resolve them before merging.\033[0;39m"
|
40
|
-
exit 1
|
41
|
-
fi
|
data/bin/setup
DELETED
data/lib/rss_observer/logger.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RssObserver
|
4
|
-
# Basic handler, outputting the memory change information to standard output
|
5
|
-
class Logger
|
6
|
-
# @param logger [Logger]
|
7
|
-
def initialize(logger = Logger.new(STDOUT))
|
8
|
-
@logger = logger
|
9
|
-
end
|
10
|
-
|
11
|
-
# @param kilobytes [Float]
|
12
|
-
def call(kilobytes)
|
13
|
-
logger.info "Memory change: #{kilobytes} KB"
|
14
|
-
end
|
15
|
-
|
16
|
-
private
|
17
|
-
|
18
|
-
attr_reader :logger
|
19
|
-
end
|
20
|
-
end
|