hoss-agent 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +7 -0
  2. data/.github/ISSUE_TEMPLATE/Bug_report.md +40 -0
  3. data/.github/ISSUE_TEMPLATE/Feature_request.md +17 -0
  4. data/.github/PULL_REQUEST_TEMPLATE.md +60 -0
  5. data/.gitignore +27 -0
  6. data/.rspec +2 -0
  7. data/Dockerfile +43 -0
  8. data/Gemfile +105 -0
  9. data/LICENSE +201 -0
  10. data/hoss-agent.gemspec +42 -0
  11. data/lib/hoss-agent.rb +210 -0
  12. data/lib/hoss.rb +21 -0
  13. data/lib/hoss/agent.rb +235 -0
  14. data/lib/hoss/central_config.rb +184 -0
  15. data/lib/hoss/central_config/cache_control.rb +51 -0
  16. data/lib/hoss/child_durations.rb +64 -0
  17. data/lib/hoss/config.rb +315 -0
  18. data/lib/hoss/config/bytes.rb +42 -0
  19. data/lib/hoss/config/duration.rb +40 -0
  20. data/lib/hoss/config/options.rb +154 -0
  21. data/lib/hoss/config/regexp_list.rb +30 -0
  22. data/lib/hoss/config/wildcard_pattern_list.rb +54 -0
  23. data/lib/hoss/context.rb +64 -0
  24. data/lib/hoss/context/request.rb +28 -0
  25. data/lib/hoss/context/request/socket.rb +36 -0
  26. data/lib/hoss/context/request/url.rb +59 -0
  27. data/lib/hoss/context/response.rb +47 -0
  28. data/lib/hoss/context/user.rb +59 -0
  29. data/lib/hoss/context_builder.rb +112 -0
  30. data/lib/hoss/deprecations.rb +39 -0
  31. data/lib/hoss/error.rb +49 -0
  32. data/lib/hoss/error/exception.rb +70 -0
  33. data/lib/hoss/error/log.rb +41 -0
  34. data/lib/hoss/error_builder.rb +90 -0
  35. data/lib/hoss/event.rb +131 -0
  36. data/lib/hoss/instrumenter.rb +107 -0
  37. data/lib/hoss/internal_error.rb +23 -0
  38. data/lib/hoss/logging.rb +70 -0
  39. data/lib/hoss/metadata.rb +36 -0
  40. data/lib/hoss/metadata/process_info.rb +35 -0
  41. data/lib/hoss/metadata/service_info.rb +76 -0
  42. data/lib/hoss/metadata/system_info.rb +47 -0
  43. data/lib/hoss/metadata/system_info/container_info.rb +136 -0
  44. data/lib/hoss/naively_hashable.rb +38 -0
  45. data/lib/hoss/rails.rb +68 -0
  46. data/lib/hoss/railtie.rb +42 -0
  47. data/lib/hoss/report.rb +9 -0
  48. data/lib/hoss/sinatra.rb +53 -0
  49. data/lib/hoss/spies.rb +104 -0
  50. data/lib/hoss/spies/faraday.rb +102 -0
  51. data/lib/hoss/spies/http.rb +81 -0
  52. data/lib/hoss/spies/net_http.rb +97 -0
  53. data/lib/hoss/stacktrace.rb +33 -0
  54. data/lib/hoss/stacktrace/frame.rb +66 -0
  55. data/lib/hoss/stacktrace_builder.rb +124 -0
  56. data/lib/hoss/transport/base.rb +191 -0
  57. data/lib/hoss/transport/connection.rb +55 -0
  58. data/lib/hoss/transport/connection/http.rb +139 -0
  59. data/lib/hoss/transport/connection/proxy_pipe.rb +94 -0
  60. data/lib/hoss/transport/filters.rb +60 -0
  61. data/lib/hoss/transport/filters/hash_sanitizer.rb +77 -0
  62. data/lib/hoss/transport/filters/secrets_filter.rb +48 -0
  63. data/lib/hoss/transport/headers.rb +74 -0
  64. data/lib/hoss/transport/serializers.rb +113 -0
  65. data/lib/hoss/transport/serializers/context_serializer.rb +112 -0
  66. data/lib/hoss/transport/serializers/error_serializer.rb +92 -0
  67. data/lib/hoss/transport/serializers/event_serializer.rb +73 -0
  68. data/lib/hoss/transport/serializers/metadata_serializer.rb +92 -0
  69. data/lib/hoss/transport/serializers/report_serializer.rb +33 -0
  70. data/lib/hoss/transport/user_agent.rb +48 -0
  71. data/lib/hoss/transport/worker.rb +330 -0
  72. data/lib/hoss/util.rb +54 -0
  73. data/lib/hoss/util/inflector.rb +110 -0
  74. data/lib/hoss/util/lru_cache.rb +65 -0
  75. data/lib/hoss/util/throttle.rb +52 -0
  76. data/lib/hoss/version.rb +22 -0
  77. metadata +147 -0
@@ -0,0 +1,110 @@
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ # frozen_string_literal: true
19
+
20
+ module Hoss
21
+ # rubocop:disable all
22
+ module Util
23
+ # From https://github.com/rails/rails/blob/v5.2.0/activesupport/lib/active_support/inflector/methods.rb#L254-L332
24
+ module Inflector
25
+ extend self
26
+
27
+ #
28
+ # Tries to find a constant with the name specified in the argument string.
29
+ #
30
+ # constantize('Module') # => Module
31
+ # constantize('Foo::Bar') # => Foo::Bar
32
+ #
33
+ # The name is assumed to be the one of a top-level constant, no matter
34
+ # whether it starts with "::" or not. No lexical context is taken into
35
+ # account:
36
+ #
37
+ # C = 'outside'
38
+ # module M
39
+ # C = 'inside'
40
+ # C # => 'inside'
41
+ # constantize('C') # => 'outside', same as ::C
42
+ # end
43
+ #
44
+ # NameError is raised when the name is not in CamelCase or the constant is
45
+ # unknown.
46
+ def constantize(camel_cased_word)
47
+ names = camel_cased_word.split("::".freeze)
48
+
49
+ # Trigger a built-in NameError exception including the ill-formed constant in the message.
50
+ Object.const_get(camel_cased_word) if names.empty?
51
+
52
+ # Remove the first blank element in case of '::ClassName' notation.
53
+ names.shift if names.size > 1 && names.first.empty?
54
+
55
+ names.inject(Object) do |constant, name|
56
+ if constant == Object
57
+ constant.const_get(name)
58
+ else
59
+ candidate = constant.const_get(name)
60
+ next candidate if constant.const_defined?(name, false)
61
+ next candidate unless Object.const_defined?(name)
62
+
63
+ # Go down the ancestors to check if it is owned directly. The check
64
+ # stops when we reach Object or the end of ancestors tree.
65
+ constant = constant.ancestors.inject(constant) do |const, ancestor|
66
+ break const if ancestor == Object
67
+ break ancestor if ancestor.const_defined?(name, false)
68
+ const
69
+ end
70
+
71
+ # owner is in Object, so raise
72
+ constant.const_get(name, false)
73
+ end
74
+ end
75
+ end
76
+
77
+ # Tries to find a constant with the name specified in the argument string.
78
+ #
79
+ # safe_constantize('Module') # => Module
80
+ # safe_constantize('Foo::Bar') # => Foo::Bar
81
+ #
82
+ # The name is assumed to be the one of a top-level constant, no matter
83
+ # whether it starts with "::" or not. No lexical context is taken into
84
+ # account:
85
+ #
86
+ # C = 'outside'
87
+ # module M
88
+ # C = 'inside'
89
+ # C # => 'inside'
90
+ # safe_constantize('C') # => 'outside', same as ::C
91
+ # end
92
+ #
93
+ # +nil+ is returned when the name is not in CamelCase or the constant (or
94
+ # part of it) is unknown.
95
+ #
96
+ # safe_constantize('blargle') # => nil
97
+ # safe_constantize('UnknownModule') # => nil
98
+ # safe_constantize('UnknownModule::Foo::Bar') # => nil
99
+ def safe_constantize(camel_cased_word)
100
+ constantize(camel_cased_word)
101
+ rescue NameError => e
102
+ raise if e.name && !(camel_cased_word.to_s.split("::").include?(e.name.to_s) ||
103
+ e.name.to_s == camel_cased_word.to_s)
104
+ rescue ArgumentError => e
105
+ raise unless /not missing constant #{const_regexp(camel_cased_word)}!$/.match(e.message)
106
+ end
107
+ end
108
+ end
109
+ # rubocop:enable all
110
+ end
@@ -0,0 +1,65 @@
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ # frozen_string_literal: true
19
+
20
+ module Hoss
21
+ module Util
22
+ # @api private
23
+ class LruCache
24
+ def initialize(max_size = 512, &block)
25
+ @max_size = max_size
26
+ @data = Hash.new(&block)
27
+ @mutex = Mutex.new
28
+ end
29
+
30
+ def [](key)
31
+ @mutex.synchronize do
32
+ val = @data[key]
33
+ return unless val
34
+ add(key, val)
35
+ val
36
+ end
37
+ end
38
+
39
+ def []=(key, val)
40
+ @mutex.synchronize do
41
+ add(key, val)
42
+ end
43
+ end
44
+
45
+ def length
46
+ @data.length
47
+ end
48
+
49
+ def to_a
50
+ @data.to_a
51
+ end
52
+
53
+ private
54
+
55
+ def add(key, val)
56
+ @data.delete(key)
57
+ @data[key] = val
58
+
59
+ return unless @data.length > @max_size
60
+
61
+ @data.delete(@data.first[0])
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,52 @@
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ # frozen_string_literal: true
19
+
20
+ module Hoss
21
+ module Util
22
+ # @api private
23
+
24
+ # Usage example:
25
+ # Throttle.new(5) { thing to only do once per 5 secs }
26
+ class Throttle
27
+ def initialize(buffer_secs, &block)
28
+ @buffer_secs = buffer_secs
29
+ @block = block
30
+ end
31
+
32
+ def call
33
+ if @last_call && seconds_since_last_call < @buffer_secs
34
+ return @last_result
35
+ end
36
+
37
+ @last_call = now
38
+ @last_result = @block.call
39
+ end
40
+
41
+ private
42
+
43
+ def now
44
+ Process.clock_gettime(Process::CLOCK_MONOTONIC)
45
+ end
46
+
47
+ def seconds_since_last_call
48
+ now - @last_call
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,22 @@
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ # frozen_string_literal: true
19
+
20
+ module Hoss
21
+ VERSION = '1.0.7'
22
+ end
metadata ADDED
@@ -0,0 +1,147 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hoss-agent
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.7
5
+ platform: ruby
6
+ authors:
7
+ - Cameron Cooper
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-07-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: concurrent-ruby
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: http
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ description:
42
+ email:
43
+ - cameron@hoss.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".github/ISSUE_TEMPLATE/Bug_report.md"
49
+ - ".github/ISSUE_TEMPLATE/Feature_request.md"
50
+ - ".github/PULL_REQUEST_TEMPLATE.md"
51
+ - ".gitignore"
52
+ - ".rspec"
53
+ - Dockerfile
54
+ - Gemfile
55
+ - LICENSE
56
+ - hoss-agent.gemspec
57
+ - lib/hoss-agent.rb
58
+ - lib/hoss.rb
59
+ - lib/hoss/agent.rb
60
+ - lib/hoss/central_config.rb
61
+ - lib/hoss/central_config/cache_control.rb
62
+ - lib/hoss/child_durations.rb
63
+ - lib/hoss/config.rb
64
+ - lib/hoss/config/bytes.rb
65
+ - lib/hoss/config/duration.rb
66
+ - lib/hoss/config/options.rb
67
+ - lib/hoss/config/regexp_list.rb
68
+ - lib/hoss/config/wildcard_pattern_list.rb
69
+ - lib/hoss/context.rb
70
+ - lib/hoss/context/request.rb
71
+ - lib/hoss/context/request/socket.rb
72
+ - lib/hoss/context/request/url.rb
73
+ - lib/hoss/context/response.rb
74
+ - lib/hoss/context/user.rb
75
+ - lib/hoss/context_builder.rb
76
+ - lib/hoss/deprecations.rb
77
+ - lib/hoss/error.rb
78
+ - lib/hoss/error/exception.rb
79
+ - lib/hoss/error/log.rb
80
+ - lib/hoss/error_builder.rb
81
+ - lib/hoss/event.rb
82
+ - lib/hoss/instrumenter.rb
83
+ - lib/hoss/internal_error.rb
84
+ - lib/hoss/logging.rb
85
+ - lib/hoss/metadata.rb
86
+ - lib/hoss/metadata/process_info.rb
87
+ - lib/hoss/metadata/service_info.rb
88
+ - lib/hoss/metadata/system_info.rb
89
+ - lib/hoss/metadata/system_info/container_info.rb
90
+ - lib/hoss/naively_hashable.rb
91
+ - lib/hoss/rails.rb
92
+ - lib/hoss/railtie.rb
93
+ - lib/hoss/report.rb
94
+ - lib/hoss/sinatra.rb
95
+ - lib/hoss/spies.rb
96
+ - lib/hoss/spies/faraday.rb
97
+ - lib/hoss/spies/http.rb
98
+ - lib/hoss/spies/net_http.rb
99
+ - lib/hoss/stacktrace.rb
100
+ - lib/hoss/stacktrace/frame.rb
101
+ - lib/hoss/stacktrace_builder.rb
102
+ - lib/hoss/transport/base.rb
103
+ - lib/hoss/transport/connection.rb
104
+ - lib/hoss/transport/connection/http.rb
105
+ - lib/hoss/transport/connection/proxy_pipe.rb
106
+ - lib/hoss/transport/filters.rb
107
+ - lib/hoss/transport/filters/hash_sanitizer.rb
108
+ - lib/hoss/transport/filters/secrets_filter.rb
109
+ - lib/hoss/transport/headers.rb
110
+ - lib/hoss/transport/serializers.rb
111
+ - lib/hoss/transport/serializers/context_serializer.rb
112
+ - lib/hoss/transport/serializers/error_serializer.rb
113
+ - lib/hoss/transport/serializers/event_serializer.rb
114
+ - lib/hoss/transport/serializers/metadata_serializer.rb
115
+ - lib/hoss/transport/serializers/report_serializer.rb
116
+ - lib/hoss/transport/user_agent.rb
117
+ - lib/hoss/transport/worker.rb
118
+ - lib/hoss/util.rb
119
+ - lib/hoss/util/inflector.rb
120
+ - lib/hoss/util/lru_cache.rb
121
+ - lib/hoss/util/throttle.rb
122
+ - lib/hoss/version.rb
123
+ homepage: https://hoss.com/
124
+ licenses:
125
+ - Apache-2.0
126
+ metadata:
127
+ source_code_uri: https://github.com/hossapp/ruby-agent
128
+ post_install_message:
129
+ rdoc_options: []
130
+ require_paths:
131
+ - lib
132
+ required_ruby_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: 2.3.0
137
+ required_rubygems_version: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ requirements: []
143
+ rubygems_version: 3.1.2
144
+ signing_key:
145
+ specification_version: 4
146
+ summary: The official Hoss SDK for Ruby
147
+ test_files: []