stackify-api-ruby 1.2.10 → 1.3.0.beta1
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 +4 -4
- data/Gemfile +8 -1
- data/Gemfile.lock +42 -4
- data/README.md +17 -0
- data/lib/stackify-api-ruby.rb +5 -0
- data/lib/stackify/rum.rb +72 -0
- data/lib/stackify/utils/configuration.rb +51 -1
- data/lib/stackify/version.rb +1 -1
- data/spec/rum_spec.rb +291 -0
- data/spec/spec_helper.rb +9 -0
- data/stackify-api-ruby.gemspec +6 -0
- metadata +21 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae96dffa800668cd0f8ab55fc62232c43951fbe5bf9700992698ece32bbbf006
|
4
|
+
data.tar.gz: 7e44e75717ecb342cdb632766708bb765793df1a92b534e689d59079c43d2bbd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 032502e0aff449fa9ad239f282751ee0699cffcca713f14dff414eaac255cbabba348bcbabc5f5800be8aadecd787c1a7ba9d92620a86cb41ee7f579a1f6d56b
|
7
|
+
data.tar.gz: 8e93149a91583a7f9accc6d6ba1e87767ea8daa96049fc25941b89b27f4a1c459e4d6cce050126306b8097d979b993b5ddfe0c984191b7f503a6bc3af50948a3
|
data/Gemfile
CHANGED
@@ -1,4 +1,11 @@
|
|
1
|
-
|
1
|
+
group :test do
|
2
|
+
if ENV['STACKIFY_RUBY_TEST']
|
3
|
+
gem 'stackify-ruby-apm', '~> 1.15', source: ENV['STACKIFY_RUBY_TEST_REPO']
|
4
|
+
else
|
5
|
+
gem 'stackify-ruby-apm', '~> 1.15'
|
6
|
+
end
|
7
|
+
end
|
2
8
|
|
9
|
+
source 'https://rubygems.org'
|
3
10
|
# Specify your gem's dependencies in stackify.gemspec
|
4
11
|
gemspec
|
data/Gemfile.lock
CHANGED
@@ -1,24 +1,62 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
stackify-api-ruby (1.
|
4
|
+
stackify-api-ruby (1.3.0.beta1)
|
5
5
|
faraday (~> 0.8)
|
6
|
+
net_http_unix (~> 0.2)
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: https://rubygems.org/
|
9
10
|
specs:
|
10
|
-
|
11
|
+
concurrent-ruby (1.1.9)
|
12
|
+
diff-lcs (1.4.4)
|
13
|
+
et-orbi (1.2.4)
|
14
|
+
tzinfo
|
15
|
+
faraday (0.17.4)
|
11
16
|
multipart-post (>= 1.2, < 3)
|
12
|
-
|
17
|
+
fugit (1.5.0)
|
18
|
+
et-orbi (~> 1.1, >= 1.1.8)
|
19
|
+
raabro (~> 1.4)
|
20
|
+
multipart-post (2.1.1)
|
21
|
+
net_http_unix (0.2.2)
|
22
|
+
raabro (1.4.0)
|
13
23
|
rake (0.9.6)
|
24
|
+
rspec (3.10.0)
|
25
|
+
rspec-core (~> 3.10.0)
|
26
|
+
rspec-expectations (~> 3.10.0)
|
27
|
+
rspec-mocks (~> 3.10.0)
|
28
|
+
rspec-core (3.10.1)
|
29
|
+
rspec-support (~> 3.10.0)
|
30
|
+
rspec-expectations (3.10.1)
|
31
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
32
|
+
rspec-support (~> 3.10.0)
|
33
|
+
rspec-mocks (3.10.2)
|
34
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
35
|
+
rspec-support (~> 3.10.0)
|
36
|
+
rspec-support (3.10.2)
|
37
|
+
rufus-scheduler (3.8.0)
|
38
|
+
fugit (~> 1.1, >= 1.1.6)
|
39
|
+
stackify-ruby-apm (1.15.1)
|
40
|
+
concurrent-ruby (~> 1.0)
|
41
|
+
faraday (~> 0.8)
|
42
|
+
net_http_unix (~> 0.2)
|
43
|
+
rufus-scheduler (~> 3.0)
|
44
|
+
tzinfo (2.0.4)
|
45
|
+
concurrent-ruby (~> 1.0)
|
46
|
+
tzinfo-data (1.2021.1)
|
47
|
+
tzinfo (>= 1.0.0)
|
14
48
|
|
15
49
|
PLATFORMS
|
16
50
|
ruby
|
51
|
+
x86-mingw32
|
17
52
|
|
18
53
|
DEPENDENCIES
|
19
54
|
bundler (~> 1.6)
|
20
55
|
rake (~> 0)
|
56
|
+
rspec (~> 3.0)
|
21
57
|
stackify-api-ruby!
|
58
|
+
stackify-ruby-apm (~> 1.15)
|
59
|
+
tzinfo-data
|
22
60
|
|
23
61
|
BUNDLED WITH
|
24
|
-
1.17.
|
62
|
+
1.17.13
|
data/README.md
CHANGED
@@ -124,6 +124,23 @@ We can configure every metric with settings:
|
|
124
124
|
|
125
125
|
Note, "autoreport_last_value_if_nothing_reported" property has influence only on "average" metric.
|
126
126
|
|
127
|
+
### **Real User Monitoring (RUM)**
|
128
|
+
|
129
|
+
Real user monitoring injects a script tag containing the [RUM JS](https://stackify.com/retrace-real-user-monitoring/) that is responsible for capturing information about the http requests on the browser. This approach is manual and needs to be configured.
|
130
|
+
|
131
|
+
#### RUM - Setup
|
132
|
+
|
133
|
+
```ruby
|
134
|
+
# Configuration - Standard API
|
135
|
+
Stackify.setup do |config|
|
136
|
+
...
|
137
|
+
config.rum_key = "YourRumKey"
|
138
|
+
end
|
139
|
+
|
140
|
+
# Use this to apply on views
|
141
|
+
Stackify.rum.insert_rum_script
|
142
|
+
```
|
143
|
+
|
127
144
|
## Troubleshooting
|
128
145
|
|
129
146
|
If there are problems, you can enable internal logging of the stackify-api-ruby project. Uncomment out the config.logger and config.logger.level lines in the 'config/initializers/stackify.rb' file:
|
data/lib/stackify-api-ruby.rb
CHANGED
@@ -37,6 +37,7 @@ module Stackify
|
|
37
37
|
autoload :StringException, 'stackify/error'
|
38
38
|
autoload :ErrorsGovernor, 'stackify/errors_governor'
|
39
39
|
autoload :Metrics, 'stackify/metrics/metrics'
|
40
|
+
autoload :Rum, 'stackify/rum'
|
40
41
|
|
41
42
|
include Authorizable
|
42
43
|
|
@@ -48,6 +49,10 @@ module Stackify
|
|
48
49
|
@config ||= Stackify::Configuration.new
|
49
50
|
end
|
50
51
|
|
52
|
+
def rum
|
53
|
+
@rum ||= Stackify::Rum.new(configuration)
|
54
|
+
end
|
55
|
+
|
51
56
|
def setup
|
52
57
|
@workers = []
|
53
58
|
yield(configuration) if block_given?
|
data/lib/stackify/rum.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
$apmLoaded = false
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'stackify-ruby-apm'
|
5
|
+
$apmLoaded = true
|
6
|
+
rescue LoadError
|
7
|
+
end
|
8
|
+
|
9
|
+
module Stackify
|
10
|
+
class Rum
|
11
|
+
def initialize(config)
|
12
|
+
@config = config
|
13
|
+
end
|
14
|
+
|
15
|
+
def insert_rum_script()
|
16
|
+
return StackifyRubyAPM.inject_rum_script if Rum.apm_loaded && defined?(StackifyRubyAPM) && StackifyRubyAPM.respond_to?(:inject_rum_script)
|
17
|
+
|
18
|
+
return '' unless @config
|
19
|
+
|
20
|
+
config = @config
|
21
|
+
|
22
|
+
return '' if config.rum_script_url.to_s.empty? || config.rum_key.to_s.empty?
|
23
|
+
|
24
|
+
transaction_id = get_transaction_id().to_s
|
25
|
+
return '' if transaction_id.empty?
|
26
|
+
|
27
|
+
reporting_url = get_reporting_url().to_s
|
28
|
+
return '' if reporting_url.empty?
|
29
|
+
|
30
|
+
environment_name = defined?(config.env) ? config.env.to_s : 'Development'
|
31
|
+
return '' if environment_name.empty?
|
32
|
+
|
33
|
+
application_name = defined?(config.app_name) ? config.app_name.to_s : ''
|
34
|
+
return '' if application_name.empty?
|
35
|
+
|
36
|
+
rum_settings = {
|
37
|
+
"ID" => transaction_id
|
38
|
+
}
|
39
|
+
|
40
|
+
if !environment_name.empty?
|
41
|
+
rum_settings["Env"] = Base64.strict_encode64(environment_name.encode('utf-8'))
|
42
|
+
end
|
43
|
+
|
44
|
+
if !application_name.empty?
|
45
|
+
rum_settings["Name"] = Base64.strict_encode64(application_name.strip.encode('utf-8'))
|
46
|
+
end
|
47
|
+
|
48
|
+
if !reporting_url.empty?
|
49
|
+
rum_settings["Trans"] = Base64.strict_encode64(reporting_url.encode('utf-8'))
|
50
|
+
end
|
51
|
+
|
52
|
+
rum_content = "<script type=\"text/javascript\">(window.StackifySettings || (window.StackifySettings = #{rum_settings.to_json}))</script><script src=\"#{config.rum_script_url}\" data-key=\"#{config.rum_key}\" async></script>"
|
53
|
+
if rum_content.respond_to?(:html_safe)
|
54
|
+
rum_content.html_safe
|
55
|
+
else
|
56
|
+
rum_content
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.apm_loaded
|
61
|
+
$apmLoaded
|
62
|
+
end
|
63
|
+
|
64
|
+
def get_reporting_url
|
65
|
+
''
|
66
|
+
end
|
67
|
+
|
68
|
+
def get_transaction_id
|
69
|
+
''
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -5,7 +5,8 @@ module Stackify
|
|
5
5
|
attr_accessor :api_key, :app_name, :app_location, :env, :log_level, :logger,
|
6
6
|
:proxy, :mode, :base_api_url, :api_enabled, :transport, :errors, :http_endpoint, :stdout_output, :buffered_logger
|
7
7
|
|
8
|
-
attr_reader :send_interval, :flood_limit, :queue_max_size, :agent_log_url, :unix_socket_path, :http_endpoint
|
8
|
+
attr_reader :send_interval, :flood_limit, :queue_max_size, :agent_log_url, :unix_socket_path, :http_endpoint,
|
9
|
+
:rum_key, :rum_script_url
|
9
10
|
|
10
11
|
def initialize
|
11
12
|
@base_api_url = 'https://api.stackify.com'
|
@@ -27,6 +28,11 @@ module Stackify
|
|
27
28
|
@http_endpoint = get_env 'STACKIFY_TRANSPORT_HTTP_ENDPOINT', 'https://localhost:10601'
|
28
29
|
@stdout_output = false
|
29
30
|
@buffered_logger = false
|
31
|
+
@default_rum_script_url = 'https://stckjs.stackify.com/stckjs.js'
|
32
|
+
@default_rum_key = ''
|
33
|
+
|
34
|
+
self.rum_key = get_env 'RETRACE_RUM_KEY', @default_rum_key
|
35
|
+
self.rum_script_url = get_env 'RETRACE_RUM_SCRIPT_URL', @default_rum_script_url
|
30
36
|
end
|
31
37
|
|
32
38
|
def get_env env_key, default
|
@@ -52,6 +58,28 @@ module Stackify
|
|
52
58
|
@errors << 'Transport should be one of these values: [agent_socket, agent_http, default]. Should be a String.'
|
53
59
|
end
|
54
60
|
|
61
|
+
def rum_script_url=(rum_script_url)
|
62
|
+
if rum_script_url.empty?
|
63
|
+
@rum_script_url = @default_rum_script_url
|
64
|
+
return
|
65
|
+
end
|
66
|
+
|
67
|
+
if validate_rum_script_url(rum_script_url)
|
68
|
+
@rum_script_url = rum_script_url
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def rum_key=(rum_key)
|
73
|
+
if rum_key.empty?
|
74
|
+
@rum_key = @default_rum_key
|
75
|
+
return
|
76
|
+
end
|
77
|
+
|
78
|
+
if validate_rum_key(rum_key)
|
79
|
+
@rum_key = rum_key
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
55
83
|
private
|
56
84
|
|
57
85
|
def validate_config_types
|
@@ -110,5 +138,27 @@ module Stackify
|
|
110
138
|
return true if MODES.has_value? @mode
|
111
139
|
@errors << 'Mode should be one of these values: [:both, :logging, :metrics]'
|
112
140
|
end
|
141
|
+
|
142
|
+
def validate_rum_script_url(rum_script_url)
|
143
|
+
result = false
|
144
|
+
if rum_script_url.is_a?(String) && !rum_script_url.empty?
|
145
|
+
result = rum_script_url =~ /^((((https?|ftps?|gopher|telnet|nntp):\/\/)|(mailto:|news:))(%[0-9A-Fa-f]{2}|[\-\(\)_\.!~*';\/?:@&=+$,A-Za-z0-9])+)([\)\.!';\/?:,][\[:blank:|:blank:\]])?$/
|
146
|
+
end
|
147
|
+
if !result
|
148
|
+
@errors << 'RUM Script URL is in invalid format.'
|
149
|
+
end
|
150
|
+
result
|
151
|
+
end
|
152
|
+
|
153
|
+
def validate_rum_key(rum_key)
|
154
|
+
result = false
|
155
|
+
if rum_key.is_a?(String) && !rum_key.empty?
|
156
|
+
result = rum_key =~ %r{^[A-Za-z0-9_-]+$}
|
157
|
+
end
|
158
|
+
if !result
|
159
|
+
@errors << 'RUM Key is in invalid format.'
|
160
|
+
end
|
161
|
+
result
|
162
|
+
end
|
113
163
|
end
|
114
164
|
end
|
data/lib/stackify/version.rb
CHANGED
data/spec/rum_spec.rb
ADDED
@@ -0,0 +1,291 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'stackify-api-ruby'
|
3
|
+
|
4
|
+
module Stackify
|
5
|
+
RSpec.describe 'Rum - APM not loaded - Normal' do
|
6
|
+
it 'returns rum script with complete information from ENV' do
|
7
|
+
ENV['RETRACE_RUM_KEY'] = 'test-key'
|
8
|
+
ENV['RETRACE_RUM_SCRIPT_URL'] = 'https://test.com/test.js'
|
9
|
+
|
10
|
+
config = Stackify::Configuration.new
|
11
|
+
config.app_name = 'test'
|
12
|
+
config.env = 'test-env'
|
13
|
+
|
14
|
+
rum = Stackify::Rum.new(config)
|
15
|
+
reporting_url = "test reporting url"
|
16
|
+
transaction_id = "123-id"
|
17
|
+
rum_script_url = 'https://test.com/test.js'
|
18
|
+
|
19
|
+
rum_settings = {
|
20
|
+
"ID" => '123-id',
|
21
|
+
"Env" => Base64.strict_encode64('test-env'.encode('utf-8')),
|
22
|
+
"Name" => Base64.strict_encode64('test'.strip.encode('utf-8')), # TODO: Add helper function
|
23
|
+
"Trans" => Base64.strict_encode64('test reporting url'.encode('utf-8'))
|
24
|
+
}
|
25
|
+
|
26
|
+
expected_rum_script = "<script type=\"text/javascript\">(window.StackifySettings || (window.StackifySettings = #{rum_settings.to_json()}))<\/script><script src=\"#{rum_script_url}\" data-key=\"#{config.rum_key}\" async></script>"
|
27
|
+
|
28
|
+
allow(rum).to receive(:get_reporting_url).and_return(reporting_url)
|
29
|
+
allow(rum).to receive(:get_transaction_id).and_return(transaction_id)
|
30
|
+
allow(Rum).to receive(:apm_loaded).and_return(false)
|
31
|
+
|
32
|
+
rum_script = rum.insert_rum_script
|
33
|
+
|
34
|
+
expect(rum.get_reporting_url).to eq reporting_url
|
35
|
+
expect(rum.get_transaction_id).to eq transaction_id
|
36
|
+
expect(rum_script.to_s).not_to be_empty
|
37
|
+
expect(rum_script).to eq expected_rum_script
|
38
|
+
|
39
|
+
ENV.delete('RETRACE_RUM_KEY')
|
40
|
+
ENV.delete('RETRACE_RUM_SCRIPT_URL')
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'returns rum script with complete information from Config' do
|
44
|
+
config = Stackify::Configuration.new
|
45
|
+
config.app_name = 'test'
|
46
|
+
config.env = 'test-env'
|
47
|
+
config.rum_script_url = 'https://test.com/test.js'
|
48
|
+
config.rum_key = 'asd'
|
49
|
+
|
50
|
+
rum = Stackify::Rum.new(config)
|
51
|
+
reporting_url = "test reporting url"
|
52
|
+
transaction_id = "123-id"
|
53
|
+
rum_script_url = 'https://test.com/test.js'
|
54
|
+
rum_key = 'asd'
|
55
|
+
|
56
|
+
rum_settings = {
|
57
|
+
"ID" => '123-id',
|
58
|
+
"Env" => Base64.strict_encode64('test-env'.encode('utf-8')),
|
59
|
+
"Name" => Base64.strict_encode64('test'.strip.encode('utf-8')), # TODO: Add helper function
|
60
|
+
"Trans" => Base64.strict_encode64('test reporting url'.encode('utf-8'))
|
61
|
+
}
|
62
|
+
|
63
|
+
expected_rum_script = "<script type=\"text/javascript\">(window.StackifySettings || (window.StackifySettings = #{rum_settings.to_json()}))<\/script><script src=\"#{rum_script_url}\" data-key=\"#{rum_key}\" async></script>"
|
64
|
+
|
65
|
+
allow(rum).to receive(:get_reporting_url).and_return(reporting_url)
|
66
|
+
allow(rum).to receive(:get_transaction_id).and_return(transaction_id)
|
67
|
+
allow(Rum).to receive(:apm_loaded).and_return(false)
|
68
|
+
|
69
|
+
rum_script = rum.insert_rum_script
|
70
|
+
|
71
|
+
expect(rum.get_reporting_url).to eq reporting_url
|
72
|
+
expect(rum.get_transaction_id).to eq transaction_id
|
73
|
+
expect(rum_script.to_s).not_to be_empty
|
74
|
+
expect(rum_script).to eq expected_rum_script
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
RSpec.describe 'Rum - APM not loaded - Invalid' do
|
79
|
+
it 'returns rum script with invalid rum script url from Config' do
|
80
|
+
config = Stackify::Configuration.new
|
81
|
+
config.app_name = 'test'
|
82
|
+
config.env = 'test-env'
|
83
|
+
config.rum_script_url = 'test.js'
|
84
|
+
config.rum_key = 'asd'
|
85
|
+
|
86
|
+
rum = Stackify::Rum.new(config)
|
87
|
+
reporting_url = "test reporting url"
|
88
|
+
transaction_id = "123-id"
|
89
|
+
rum_script_url = 'https://stckjs.stackify.com/stckjs.js'
|
90
|
+
rum_key = 'asd'
|
91
|
+
|
92
|
+
rum_settings = {
|
93
|
+
"ID" => '123-id',
|
94
|
+
"Env" => Base64.strict_encode64('test-env'.encode('utf-8')),
|
95
|
+
"Name" => Base64.strict_encode64('test'.strip.encode('utf-8')), # TODO: Add helper function
|
96
|
+
"Trans" => Base64.strict_encode64('test reporting url'.encode('utf-8'))
|
97
|
+
}
|
98
|
+
|
99
|
+
expected_rum_script = "<script type=\"text/javascript\">(window.StackifySettings || (window.StackifySettings = #{rum_settings.to_json()}))<\/script><script src=\"#{rum_script_url}\" data-key=\"#{rum_key}\" async></script>"
|
100
|
+
|
101
|
+
allow(rum).to receive(:get_reporting_url).and_return(reporting_url)
|
102
|
+
allow(rum).to receive(:get_transaction_id).and_return(transaction_id)
|
103
|
+
allow(Rum).to receive(:apm_loaded).and_return(false)
|
104
|
+
|
105
|
+
rum_script = rum.insert_rum_script
|
106
|
+
|
107
|
+
expect(rum.get_reporting_url).to eq reporting_url
|
108
|
+
expect(rum.get_transaction_id).to eq transaction_id
|
109
|
+
expect(rum_script.to_s).not_to be_empty
|
110
|
+
expect(rum_script).to eq expected_rum_script
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'returns rum script with invalid rum key from Config' do
|
114
|
+
config = Stackify::Configuration.new
|
115
|
+
config.app_name = 'test'
|
116
|
+
config.env = 'test-env'
|
117
|
+
config.rum_script_url = 'test.js'
|
118
|
+
config.rum_key = '`asd'
|
119
|
+
|
120
|
+
rum = Stackify::Rum.new(config)
|
121
|
+
reporting_url = "test reporting url"
|
122
|
+
transaction_id = "123-id"
|
123
|
+
rum_script_url = 'https://stckjs.stackify.com/stckjs.js'
|
124
|
+
rum_key = 'asd'
|
125
|
+
|
126
|
+
rum_settings = {
|
127
|
+
"ID" => '123-id',
|
128
|
+
"Env" => Base64.strict_encode64('test-env'.encode('utf-8')),
|
129
|
+
"Name" => Base64.strict_encode64('test'.strip.encode('utf-8')), # TODO: Add helper function
|
130
|
+
"Trans" => Base64.strict_encode64('test reporting url'.encode('utf-8'))
|
131
|
+
}
|
132
|
+
|
133
|
+
expected_rum_script = "<script type=\"text/javascript\">(window.StackifySettings || (window.StackifySettings = #{rum_settings.to_json()}))<\/script><script src=\"#{rum_script_url}\" data-key=\"#{rum_key}\" async></script>"
|
134
|
+
|
135
|
+
allow(rum).to receive(:get_reporting_url).and_return(reporting_url)
|
136
|
+
allow(rum).to receive(:get_transaction_id).and_return(transaction_id)
|
137
|
+
allow(Rum).to receive(:apm_loaded).and_return(false)
|
138
|
+
|
139
|
+
rum_script = rum.insert_rum_script
|
140
|
+
|
141
|
+
expect(rum.get_reporting_url).to eq reporting_url
|
142
|
+
expect(rum.get_transaction_id).to eq transaction_id
|
143
|
+
expect(rum_script.to_s).to be_empty
|
144
|
+
expect(rum_script).not_to eq expected_rum_script
|
145
|
+
expect(config.rum_key).to be_empty
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'returns rum script with no app name' do
|
149
|
+
config = Stackify::Configuration.new
|
150
|
+
config.app_name = ''
|
151
|
+
config.env = 'test-env'
|
152
|
+
config.rum_script_url = 'test.js'
|
153
|
+
config.rum_key = '`asd'
|
154
|
+
|
155
|
+
rum = Stackify::Rum.new(config)
|
156
|
+
|
157
|
+
reporting_url = "test reporting url"
|
158
|
+
transaction_id = "123-id"
|
159
|
+
|
160
|
+
allow(rum).to receive(:get_reporting_url).and_return(reporting_url)
|
161
|
+
allow(rum).to receive(:get_transaction_id).and_return(transaction_id)
|
162
|
+
allow(Rum).to receive(:apm_loaded).and_return(false)
|
163
|
+
|
164
|
+
rum_script = rum.insert_rum_script
|
165
|
+
|
166
|
+
expect(rum.get_reporting_url).to eq reporting_url
|
167
|
+
expect(rum.get_transaction_id).to eq transaction_id
|
168
|
+
expect(rum_script.to_s).to be_empty
|
169
|
+
expect(config.rum_key).to be_empty
|
170
|
+
expect(config.app_name).to be_empty
|
171
|
+
end
|
172
|
+
|
173
|
+
it 'returns rum script with no env' do
|
174
|
+
config = Stackify::Configuration.new
|
175
|
+
config.app_name = 'test'
|
176
|
+
config.rum_script_url = 'test.js'
|
177
|
+
config.rum_key = 'asd'
|
178
|
+
|
179
|
+
rum = Stackify::Rum.new(config)
|
180
|
+
reporting_url = "test reporting url"
|
181
|
+
transaction_id = "123-id"
|
182
|
+
rum_script_url = 'https://stckjs.stackify.com/stckjs.js'
|
183
|
+
rum_key = 'asd'
|
184
|
+
|
185
|
+
rum_settings = {
|
186
|
+
"ID" => '123-id',
|
187
|
+
"Env" => Base64.strict_encode64('production'.encode('utf-8')),
|
188
|
+
"Name" => Base64.strict_encode64('test'.strip.encode('utf-8')), # TODO: Add helper function
|
189
|
+
"Trans" => Base64.strict_encode64('test reporting url'.encode('utf-8'))
|
190
|
+
}
|
191
|
+
|
192
|
+
expected_rum_script = "<script type=\"text/javascript\">(window.StackifySettings || (window.StackifySettings = #{rum_settings.to_json()}))<\/script><script src=\"#{rum_script_url}\" data-key=\"#{rum_key}\" async></script>"
|
193
|
+
|
194
|
+
allow(rum).to receive(:get_reporting_url).and_return(reporting_url)
|
195
|
+
allow(rum).to receive(:get_transaction_id).and_return(transaction_id)
|
196
|
+
allow(Rum).to receive(:apm_loaded).and_return(false)
|
197
|
+
|
198
|
+
rum_script = rum.insert_rum_script
|
199
|
+
|
200
|
+
expect(rum.get_reporting_url).to eq reporting_url
|
201
|
+
expect(rum.get_transaction_id).to eq transaction_id
|
202
|
+
expect(rum_script.to_s).not_to be_empty
|
203
|
+
expect(rum_script).to eq expected_rum_script
|
204
|
+
expect(config.env).to eq :production
|
205
|
+
end
|
206
|
+
|
207
|
+
it 'returns rum script with no transaction id' do
|
208
|
+
config = Stackify::Configuration.new
|
209
|
+
config.app_name = 'test'
|
210
|
+
config.env = 'test-env'
|
211
|
+
config.rum_script_url = 'test.js'
|
212
|
+
config.rum_key = 'asd'
|
213
|
+
|
214
|
+
rum = Stackify::Rum.new(config)
|
215
|
+
|
216
|
+
reporting_url = "test reporting url"
|
217
|
+
transaction_id = ""
|
218
|
+
|
219
|
+
allow(rum).to receive(:get_reporting_url).and_return(reporting_url)
|
220
|
+
allow(rum).to receive(:get_transaction_id).and_return(transaction_id)
|
221
|
+
allow(Rum).to receive(:apm_loaded).and_return(false)
|
222
|
+
|
223
|
+
rum_script = rum.insert_rum_script
|
224
|
+
|
225
|
+
expect(rum.get_reporting_url).to eq reporting_url
|
226
|
+
expect(rum.get_transaction_id).to eq ""
|
227
|
+
expect(rum_script.to_s).to be_empty
|
228
|
+
end
|
229
|
+
|
230
|
+
it 'returns rum script with no reporting url' do
|
231
|
+
config = Stackify::Configuration.new
|
232
|
+
config.app_name = 'test'
|
233
|
+
config.env = 'test-env'
|
234
|
+
config.rum_script_url = 'test.js'
|
235
|
+
config.rum_key = 'asd'
|
236
|
+
|
237
|
+
rum = Stackify::Rum.new(config)
|
238
|
+
|
239
|
+
reporting_url = ""
|
240
|
+
transaction_id = "test-123"
|
241
|
+
|
242
|
+
allow(rum).to receive(:get_reporting_url).and_return(reporting_url)
|
243
|
+
allow(rum).to receive(:get_transaction_id).and_return(transaction_id)
|
244
|
+
allow(Rum).to receive(:apm_loaded).and_return(false)
|
245
|
+
|
246
|
+
rum_script = rum.insert_rum_script
|
247
|
+
|
248
|
+
expect(rum.get_reporting_url).to eq ""
|
249
|
+
expect(rum.get_transaction_id).to eq transaction_id
|
250
|
+
expect(rum_script.to_s).to be_empty
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
RSpec.describe 'Rum - APM loaded - Normal' do
|
255
|
+
it 'returns rum script with complete information from ENV' do
|
256
|
+
ENV['RETRACE_RUM_KEY'] = 'test-key'
|
257
|
+
ENV['RETRACE_RUM_SCRIPT_URL'] = 'https://test.com/test.js'
|
258
|
+
ENV['TZ'] = 'Europe/Paris' # For error
|
259
|
+
|
260
|
+
config = Stackify::Configuration.new
|
261
|
+
rum = Stackify::Rum.new(config)
|
262
|
+
reporting_url = "test reporting url"
|
263
|
+
transaction_id = "123-id"
|
264
|
+
rum_script_url = 'https://test.com/test.js'
|
265
|
+
rum_script = ""
|
266
|
+
|
267
|
+
StackifyRubyAPM.start
|
268
|
+
transaction = StackifyRubyAPM.transaction 'RUM Script Injection test' do
|
269
|
+
rum_script = rum.insert_rum_script
|
270
|
+
end.submit 200
|
271
|
+
StackifyRubyAPM.stop
|
272
|
+
|
273
|
+
rum_settings = {
|
274
|
+
"ID" => transaction.id(),
|
275
|
+
"Env" => Base64.strict_encode64('test'.encode('utf-8')),
|
276
|
+
"Name" => Base64.strict_encode64('Ruby Application'.strip.encode('utf-8')), # TODO: Add helper function
|
277
|
+
"Trans" => Base64.strict_encode64('RUM Script Injection test'.encode('utf-8'))
|
278
|
+
}
|
279
|
+
|
280
|
+
expected_rum_script = "<script type=\"text/javascript\">(window.StackifySettings || (window.StackifySettings = #{rum_settings.to_json()}))<\/script><script src=\"#{rum_script_url}\" data-key=\"#{config.rum_key}\" async></script>"
|
281
|
+
|
282
|
+
ENV.delete('TZ')
|
283
|
+
ENV.delete('RETRACE_RUM_KEY')
|
284
|
+
ENV.delete('RETRACE_RUM_SCRIPT_URL')
|
285
|
+
|
286
|
+
expect(rum_script.to_s).not_to be_empty
|
287
|
+
expect(rum_script).to eq expected_rum_script
|
288
|
+
end
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
ENV['RAILS_ENV'] = ENV['RACK_ENV'] = 'test'
|
2
|
+
require 'bundler/setup'
|
3
|
+
|
4
|
+
# auto-require default gems + gems under test
|
5
|
+
Bundler.require :default, 'test'
|
6
|
+
|
7
|
+
require 'logger'
|
8
|
+
require 'stackify_ruby_apm'
|
9
|
+
|
1
10
|
RSpec.configure do |config|
|
2
11
|
|
3
12
|
config.filter_run :focus
|
data/stackify-api-ruby.gemspec
CHANGED
@@ -21,6 +21,12 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
23
23
|
spec.add_development_dependency 'rake', '~> 0'
|
24
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
25
|
+
|
26
|
+
if RUBY_PLATFORM == 'i386-mingw32'
|
27
|
+
spec.add_development_dependency 'tzinfo-data'
|
28
|
+
end
|
29
|
+
|
24
30
|
spec.add_runtime_dependency 'faraday', '~> 0.8'
|
25
31
|
spec.add_runtime_dependency 'net_http_unix', '~> 0.2'
|
26
32
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stackify-api-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stackify
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: faraday
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +122,7 @@ files:
|
|
108
122
|
- lib/stackify/metrics/monitor.rb
|
109
123
|
- lib/stackify/msgs_queue.rb
|
110
124
|
- lib/stackify/rack/errors_catcher.rb
|
125
|
+
- lib/stackify/rum.rb
|
111
126
|
- lib/stackify/schedule_delay.rb
|
112
127
|
- lib/stackify/schedule_task.rb
|
113
128
|
- lib/stackify/scheduler.rb
|
@@ -124,6 +139,7 @@ files:
|
|
124
139
|
- lib/stackify/workers/logs_sender_worker.rb
|
125
140
|
- lib/stackify/workers/msgs_queue_worker.rb
|
126
141
|
- lib/stackify/workers/worker.rb
|
142
|
+
- spec/rum_spec.rb
|
127
143
|
- spec/spec_helper.rb
|
128
144
|
- stackify-api-ruby.gemspec
|
129
145
|
homepage: http://www.stackify.com/
|
@@ -141,13 +157,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
141
157
|
version: '1.9'
|
142
158
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
159
|
requirements:
|
144
|
-
- - "
|
160
|
+
- - ">"
|
145
161
|
- !ruby/object:Gem::Version
|
146
|
-
version:
|
162
|
+
version: 1.3.1
|
147
163
|
requirements: []
|
148
164
|
rubygems_version: 3.0.1
|
149
165
|
signing_key:
|
150
166
|
specification_version: 4
|
151
167
|
summary: Stackify API for Ruby
|
152
168
|
test_files:
|
169
|
+
- spec/rum_spec.rb
|
153
170
|
- spec/spec_helper.rb
|