request_response_stats 0.1.1
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.
- checksums.yaml +7 -0
- data/.gitignore +16 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +43 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/req_res_stat_controller.rb +65 -0
- data/lib/request_response_stats/controller_concern.rb +35 -0
- data/lib/request_response_stats/custom_client.rb +76 -0
- data/lib/request_response_stats/dummy_request.rb +6 -0
- data/lib/request_response_stats/dummy_response.rb +15 -0
- data/lib/request_response_stats/redis_record.rb +226 -0
- data/lib/request_response_stats/req_res_stat.rb +170 -0
- data/lib/request_response_stats/request_response.rb +259 -0
- data/lib/request_response_stats/version.rb +5 -0
- data/lib/request_response_stats.rb +62 -0
- data/lib/request_response_stats_config.rb +64 -0
- data/lib/tasks/move_req_res_cycle_data_from_redis_to_mongo.rake +18 -0
- data/request_response_stats.gemspec +41 -0
- metadata +166 -0
@@ -0,0 +1,64 @@
|
|
1
|
+
# File: config/initializers/request_response_stat_config.rb
|
2
|
+
|
3
|
+
require 'request_response_stats'
|
4
|
+
include RequestResponseStats
|
5
|
+
|
6
|
+
# Note: The namespace `RequestResponseStats` is requried if you are not including `RequestResponseStats` module
|
7
|
+
# Set `RR_INBOUD_STATS` to false (default is `true`) to not capture inbound request stats
|
8
|
+
# RequestResponseStats::RR_INBOUND_STATS = true
|
9
|
+
# Set `RR_OUTBOUND_STATS` to false (default is `true`) to not capture inbound request stats
|
10
|
+
# RequestResponseStats::RR_OUTBOUND_STATS = true
|
11
|
+
|
12
|
+
# Configure custom alert code
|
13
|
+
# Note: Ideally we should pass below custom code as block while we instantiate `RequestResponse`. But,
|
14
|
+
# as we are using the same setting for outbound calls as well.
|
15
|
+
module RequestResponseStats
|
16
|
+
def self.custom_alert_code(data)
|
17
|
+
# Custom alert code
|
18
|
+
# current_time = Time.now.utc
|
19
|
+
# service = NotificationService.new(activity: "request_response_alert", uuid: "ReqResNotification-#{current_time.to_s}-#{current_time.nsec}".gsub(" ", "_"))
|
20
|
+
# service.send_req_res_threshold_crossed_alarm_email(data)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Enable incoming requests to be captured
|
25
|
+
# Add `include RequestResponseStats::ControllerConcern` to the controller whose actions and actions in sub-classes are to be logged for request response stats
|
26
|
+
# Example:
|
27
|
+
# module Api
|
28
|
+
# class ApiController < ActionController::Base
|
29
|
+
# include RequestResponseStats::ControllerConcern
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
|
33
|
+
# Configure popular REST and SOAP libraries
|
34
|
+
# Client libraries
|
35
|
+
require 'rest-client'
|
36
|
+
require 'httparty'
|
37
|
+
require 'savon'
|
38
|
+
|
39
|
+
# Enable outbound requests to be capture
|
40
|
+
module RestClient
|
41
|
+
include CustomClient
|
42
|
+
end
|
43
|
+
|
44
|
+
module HTTParty
|
45
|
+
include CustomClient
|
46
|
+
end
|
47
|
+
|
48
|
+
module Savon
|
49
|
+
include CustomClient
|
50
|
+
|
51
|
+
def self.custom_uri_key
|
52
|
+
:wsdl
|
53
|
+
end
|
54
|
+
|
55
|
+
class Client
|
56
|
+
alias_method("#{Savon::RENAME_NAMESPACE}call".to_sym, :call)
|
57
|
+
|
58
|
+
def call(operation_name, locals={}, &block)
|
59
|
+
Savon.log_request_response_stats(operation_name, "locals") do
|
60
|
+
public_send("#{Savon::RENAME_NAMESPACE}call".to_sym, operation_name, locals, &block)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# File: lib/tasks/move_req_res_cycle_data_from_redis_to_mongo.rake
|
2
|
+
|
3
|
+
require 'request_response_stats'
|
4
|
+
include RequestResponseStats
|
5
|
+
|
6
|
+
desc 'Send request response cycle data from redis to mongo'
|
7
|
+
namespace :request_response do
|
8
|
+
task :move_from_redis_to_mongo => :environment do
|
9
|
+
Rails.logger.info "RequestResponseStats: Moving stats data from Redis to Mongo at #{Time.now}."
|
10
|
+
rrs = RequestResponse.new(nil, nil)
|
11
|
+
count = rrs.move_data_from_redis_to_mongo
|
12
|
+
Rails.logger.info "RequestResponseStats: Moved #{count} keys."
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# Cron example
|
17
|
+
# Moving data from Redis to Mongo at interval of 15 mins
|
18
|
+
# 0,15,30,45 * * * * /bin/bash -l -c 'cd /<project_dir> && RAILS_ENV=production bundle exec rake request_response:move_from_redis_to_mongo'
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "request_response_stats/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "request_response_stats"
|
8
|
+
spec.version = RequestResponseStats::VERSION
|
9
|
+
spec.authors = ["Munish Goyal"]
|
10
|
+
spec.email = ["munishapc@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Captures request response statistics}
|
13
|
+
spec.description = %q{Captures request response statistics such as cycle time, memory allocation, etc. for each request response cycle grouped in configurable granularity level}
|
14
|
+
spec.homepage = "https://github.com/goyalmunish/request_response_stats"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
18
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
19
|
+
# if spec.respond_to?(:metadata)
|
20
|
+
# spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
|
21
|
+
# else
|
22
|
+
# raise "RubyGems 2.0 or newer is required to protect against " \
|
23
|
+
# "public gem pushes."
|
24
|
+
# end
|
25
|
+
|
26
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
27
|
+
f.match(%r{^(test|spec|features)/})
|
28
|
+
end
|
29
|
+
spec.bindir = "exe"
|
30
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
31
|
+
spec.require_paths = ["lib"]
|
32
|
+
|
33
|
+
spec.add_dependency "activesupport", "~> 4.0"
|
34
|
+
spec.add_dependency "mongoid"
|
35
|
+
|
36
|
+
spec.add_development_dependency "bundler", "~> 1.15"
|
37
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
38
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
39
|
+
spec.add_development_dependency "rspec-mocks", "~> 3.0"
|
40
|
+
spec.add_development_dependency "byebug"
|
41
|
+
end
|
metadata
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: request_response_stats
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Munish Goyal
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-12-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: mongoid
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.15'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.15'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec-mocks
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: byebug
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: Captures request response statistics such as cycle time, memory allocation,
|
112
|
+
etc. for each request response cycle grouped in configurable granularity level
|
113
|
+
email:
|
114
|
+
- munishapc@gmail.com
|
115
|
+
executables: []
|
116
|
+
extensions: []
|
117
|
+
extra_rdoc_files: []
|
118
|
+
files:
|
119
|
+
- ".gitignore"
|
120
|
+
- ".rspec"
|
121
|
+
- ".travis.yml"
|
122
|
+
- CODE_OF_CONDUCT.md
|
123
|
+
- Gemfile
|
124
|
+
- LICENSE.txt
|
125
|
+
- README.md
|
126
|
+
- Rakefile
|
127
|
+
- bin/console
|
128
|
+
- bin/setup
|
129
|
+
- lib/req_res_stat_controller.rb
|
130
|
+
- lib/request_response_stats.rb
|
131
|
+
- lib/request_response_stats/controller_concern.rb
|
132
|
+
- lib/request_response_stats/custom_client.rb
|
133
|
+
- lib/request_response_stats/dummy_request.rb
|
134
|
+
- lib/request_response_stats/dummy_response.rb
|
135
|
+
- lib/request_response_stats/redis_record.rb
|
136
|
+
- lib/request_response_stats/req_res_stat.rb
|
137
|
+
- lib/request_response_stats/request_response.rb
|
138
|
+
- lib/request_response_stats/version.rb
|
139
|
+
- lib/request_response_stats_config.rb
|
140
|
+
- lib/tasks/move_req_res_cycle_data_from_redis_to_mongo.rake
|
141
|
+
- request_response_stats.gemspec
|
142
|
+
homepage: https://github.com/goyalmunish/request_response_stats
|
143
|
+
licenses:
|
144
|
+
- MIT
|
145
|
+
metadata: {}
|
146
|
+
post_install_message:
|
147
|
+
rdoc_options: []
|
148
|
+
require_paths:
|
149
|
+
- lib
|
150
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - ">="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: '0'
|
155
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
requirements: []
|
161
|
+
rubyforge_project:
|
162
|
+
rubygems_version: 2.6.14
|
163
|
+
signing_key:
|
164
|
+
specification_version: 4
|
165
|
+
summary: Captures request response statistics
|
166
|
+
test_files: []
|