apptuit-fluent-plugin 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +7 -0
- data/Gemfile.lock +1 -1
- data/README.md +14 -2
- data/apptuit-fluent-plugin.gemspec +1 -1
- data/lib/fluent/plugin/{filter_Apptuit.rb → filter_apptuit.rb} +19 -19
- data/lib/fluent/plugin/fingerprinter.rb +33 -45
- data/test/plugin/{test_filter_Apptuit.rb → test_filter_apptuit.rb} +59 -19
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a4f4ec20c78c76c4ed7e63a9dd3c9d1ea21f7b97a191bd9579a809d921033bf9
|
4
|
+
data.tar.gz: cf63ee09ba3dce61bd4552ced62436e981ae708768e01536b8097bce39b501cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 643bd6cea7b55195db893065266775fe5e5d25bf2411cbed21f907061560b2a314c946c5dc2815e0ace83c0b0f3bf06160118669f667334126bbb1864d61faec
|
7
|
+
data.tar.gz: 31c51647b43ac1f73b8d642a939b667a9654afb537d943722295c1829b0601a99ada667060ef992ad2d3086cd9022cdfbf14b770f44378f0c7c61b4064c737de
|
data/.travis.yml
CHANGED
@@ -15,6 +15,12 @@ script:
|
|
15
15
|
|
16
16
|
sudo: false
|
17
17
|
|
18
|
+
before_script:
|
19
|
+
- SEMVER_REGEX="^v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(\-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$"
|
20
|
+
- if [[ "$TRAVIS_TAG" =~ $SEMVER_REGEX ]]; then export PACKAGE_VERSION=${TRAVIS_TAG#v};
|
21
|
+
fi
|
22
|
+
|
23
|
+
|
18
24
|
deploy:
|
19
25
|
provider: rubygems
|
20
26
|
api_key:
|
@@ -22,4 +28,5 @@ deploy:
|
|
22
28
|
gem: apptuit-fluent-plugin
|
23
29
|
on:
|
24
30
|
tags: true
|
31
|
+
condition: $PACKAGE_VERSION != ""
|
25
32
|
repo: hari9973/apptuit-fluent-plugin
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -25,10 +25,12 @@ $ sudo td-agent-gem install apptuit-fluent-plugin
|
|
25
25
|
## Usage
|
26
26
|
```
|
27
27
|
<filter>
|
28
|
-
@type
|
28
|
+
@type apptuit
|
29
29
|
lang python
|
30
30
|
syslog true
|
31
31
|
error_msg_tag error_message
|
32
|
+
fingerprint_name fingerprint
|
33
|
+
exception_name error_exception
|
32
34
|
</filter>
|
33
35
|
```
|
34
36
|
|
@@ -56,11 +58,21 @@ $ sudo td-agent-gem install apptuit-fluent-plugin
|
|
56
58
|
* This config parameter is used to give the tag name of the error message.
|
57
59
|
|
58
60
|
Default value: `message`.
|
61
|
+
|
62
|
+
* **fingerprint_name (string) (optional)**
|
63
|
+
* This config parameter is used to give a custom name to he fingerprint tag.
|
64
|
+
|
65
|
+
Default value: `error_fingerprint`.
|
66
|
+
|
67
|
+
* **exception_name (string) (optional)**
|
68
|
+
* This config parameter is used to give a custom name to he exception tag.
|
69
|
+
|
70
|
+
Default value: `exception`.
|
59
71
|
|
60
72
|
## Result
|
61
73
|
If the provided message is valid then the record is added with an two new tags that is `error` and `error_hash` and the can be specified in labels section for exposing in metrics
|
62
74
|
```
|
63
|
-
demo_error_count{
|
75
|
+
demo_error_count{error_exception="NameError",fingerprint="d85a855fe660c936ea88492a6bd4c3d5f4a448cf"} 1.0
|
64
76
|
```
|
65
77
|
|
66
78
|
## LICENSE
|
@@ -20,19 +20,21 @@ require 'syslog/logger'
|
|
20
20
|
|
21
21
|
module Fluent::Plugin
|
22
22
|
class ApptuitFilter < Filter
|
23
|
-
Fluent::Plugin.register_filter("
|
24
|
-
|
25
|
-
log = Syslog::Logger.new 'finger_printer'
|
23
|
+
Fluent::Plugin.register_filter("apptuit", self)
|
26
24
|
|
27
25
|
config_param :lang, :string
|
28
26
|
config_param :syslog, :bool, default: false
|
29
|
-
config_param :error_msg_tag, :string
|
27
|
+
config_param :error_msg_tag, :string, default: 'message'
|
28
|
+
config_param :fingerprint_name, :string, default: 'error_fingerprint'
|
29
|
+
config_param :exception_name, :string, default: 'exception'
|
30
30
|
|
31
31
|
def get_decoded_message(message)
|
32
|
-
|
32
|
+
message = message.gsub(/#([0-9]{3})/) {$1.oct.chr}
|
33
|
+
return message
|
33
34
|
end
|
34
35
|
|
35
36
|
def filter(tag, time, record)
|
37
|
+
begin
|
36
38
|
fingerprint_object = FingerPrinter.new()
|
37
39
|
if @lang.downcase == 'java'
|
38
40
|
if record.key?(@error_msg_tag)
|
@@ -43,25 +45,21 @@ module Fluent::Plugin
|
|
43
45
|
end
|
44
46
|
err_name, fingerprint, essence, stack = fingerprint_object.fingerprint_java(message)
|
45
47
|
if err_name != nil
|
46
|
-
record[
|
47
|
-
record[
|
48
|
+
record[@exception_name] = err_name
|
49
|
+
record[@fingerprint_name] = fingerprint
|
48
50
|
end
|
49
51
|
end
|
50
52
|
elsif @lang.downcase == 'python'
|
51
|
-
log.error "entered"
|
52
53
|
if record.key?(@error_msg_tag)
|
53
|
-
log.error "entered_first_if"
|
54
54
|
if syslog
|
55
55
|
message = get_decoded_message(record[@error_msg_tag])
|
56
|
-
log.error "entered_syslog_if"
|
57
56
|
else
|
58
57
|
message = record[@error_msg_tag]
|
59
58
|
end
|
60
59
|
err_name, fingerprint, essence, stack = fingerprint_object.fingerprint_python(message)
|
61
|
-
log.error fingerprint
|
62
60
|
if err_name != nil
|
63
|
-
record[
|
64
|
-
record[
|
61
|
+
record[@exception_name] = err_name
|
62
|
+
record[@fingerprint_name] = fingerprint
|
65
63
|
end
|
66
64
|
end
|
67
65
|
elsif @lang.downcase == 'nodejs'
|
@@ -73,15 +71,17 @@ module Fluent::Plugin
|
|
73
71
|
end
|
74
72
|
err_name, fingerprint, essence, stack = fingerprint_object.fingerprint_nodejs(message)
|
75
73
|
if err_name != nil
|
76
|
-
record[
|
77
|
-
record[
|
74
|
+
record[@exception_name] = err_name
|
75
|
+
record[@fingerprint_name] = fingerprint
|
78
76
|
end
|
79
77
|
end
|
80
78
|
else
|
81
|
-
|
82
|
-
record["fingerprint"] = ""
|
79
|
+
return record
|
83
80
|
end
|
84
|
-
|
81
|
+
rescue
|
82
|
+
return record
|
83
|
+
end
|
84
|
+
record
|
85
85
|
end
|
86
|
-
|
86
|
+
end
|
87
87
|
end
|
@@ -36,7 +36,6 @@ class FingerPrinter
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def fingerprint_python(message)
|
39
|
-
begin
|
40
39
|
clean_message = message
|
41
40
|
idx = clean_message.index("Traceback (most recent call last)")
|
42
41
|
if idx == -1
|
@@ -73,53 +72,45 @@ class FingerPrinter
|
|
73
72
|
else
|
74
73
|
return fingerprint_error(LANG_PYTHON, REASON_MULTIPLE_EXCEPTION_NAMES, message)
|
75
74
|
end
|
76
|
-
rescue
|
77
|
-
return nil
|
78
|
-
end
|
79
75
|
end
|
80
76
|
|
81
77
|
def fingerprint_nodejs(message)
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
end
|
116
|
-
rescue
|
117
|
-
return
|
118
|
-
end
|
78
|
+
json_stack_matches = message.scan(/"stack"\s*:\s*"([^\"]*)"/)
|
79
|
+
if json_stack_matches.length > 0
|
80
|
+
clean_message = json_stack_matches[0].to_s
|
81
|
+
clean_message = clean_message[2..clean_message.length-3]
|
82
|
+
clean_message = clean_message.gsub(/\s+at\s+/, "\n--- at ")
|
83
|
+
else
|
84
|
+
clean_message = message.gsub('---', "\n---")
|
85
|
+
end
|
86
|
+
matches = clean_message.scan(/\s*at[^(]*([^)]*\.js:[0-9]+:[0-9]+)/)
|
87
|
+
if matches.length < 1
|
88
|
+
return fingerprint_error(LANG_NODEJS, REASON_NOT_A_STACKTRACE, clean_message)
|
89
|
+
end
|
90
|
+
matches = clean_message.scan(/\s*([a-zA-Z]+)(:\s|(\s*$))/)
|
91
|
+
if matches.length > 0
|
92
|
+
err_name = matches[0][0]
|
93
|
+
matches = clean_message.scan(/(^|\n)---\s*at\s*(.*)/)
|
94
|
+
lines = ""
|
95
|
+
for parts in matches do
|
96
|
+
frame = parts[1].strip
|
97
|
+
lines = "%sat %s\n" % [lines, frame]
|
98
|
+
end
|
99
|
+
clean_message = "%s\n%s" % [err_name,lines]
|
100
|
+
clean_message = clean_message.gsub(/:[0-9]+:[0-9]+/, ":*:*")
|
101
|
+
fingerprint = Digest::SHA1.hexdigest clean_message
|
102
|
+
stack = []
|
103
|
+
stack_matches = clean_message.scan(/at\s+((.+)\s+\()?([^:]*).*/)
|
104
|
+
for stack_match in stack_matches do
|
105
|
+
stack << [stack_match[1], stack_match[2]]
|
106
|
+
end
|
107
|
+
return err_name, fingerprint, clean_message, stack
|
108
|
+
else
|
109
|
+
return fingerprint_error(LANG_NODEJS, REASON_NO_EXCEPTION_NAME, message)
|
110
|
+
end
|
119
111
|
end
|
120
112
|
|
121
113
|
def fingerprint_java(message)
|
122
|
-
begin
|
123
114
|
message = message.gsub(/\\n/, "\n")
|
124
115
|
message = message.gsub(/\\t/, "\t")
|
125
116
|
matches = message.scan(/^[ \t]*([^ \t]+)[:\r\n]/)
|
@@ -164,9 +155,6 @@ class FingerPrinter
|
|
164
155
|
end
|
165
156
|
fingerprint = Digest::SHA1.hexdigest clean_message
|
166
157
|
return err_name, fingerprint, clean_message, stack
|
167
|
-
rescue
|
168
|
-
return
|
169
|
-
end
|
170
158
|
end
|
171
159
|
|
172
160
|
def heuristic_search_java_stack_trace(log_message)
|
@@ -14,7 +14,7 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
|
16
16
|
require "helper"
|
17
|
-
require "fluent/plugin/
|
17
|
+
require "fluent/plugin/filter_apptuit.rb"
|
18
18
|
require "test/plugin/java_fingerprint_tests.rb"
|
19
19
|
require "test/plugin/node_fingerprint_tests.rb"
|
20
20
|
require "test/plugin/python_fingerprint_tests.rb"
|
@@ -25,10 +25,11 @@ class ApptuitFilterTest < Test::Unit::TestCase
|
|
25
25
|
Fluent::Test.setup
|
26
26
|
end
|
27
27
|
|
28
|
-
def create_driver(
|
29
|
-
Fluent::Test::Driver::Filter.new(Fluent::Plugin::ApptuitFilter).configure(
|
28
|
+
def create_driver(config={})
|
29
|
+
Fluent::Test::Driver::Filter.new(Fluent::Plugin::ApptuitFilter).configure(config)
|
30
30
|
end
|
31
31
|
|
32
|
+
config = ""
|
32
33
|
python_conf = %[
|
33
34
|
lang python
|
34
35
|
]
|
@@ -138,6 +139,8 @@ AssertionError: Found different types with the same name in the schema: Employee
|
|
138
139
|
|
139
140
|
python_sys_msg = "Traceback (most recent call last):#012File \"./app.py\", line 7, in <module>#012 from schema import schema#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/schema.py\", line 60, in <module>#012 schema = graphene.Schema(query=Query, types=[Department, Employee, Role])#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/schema.py\", line 62, in __init__#012 self.build_typemap()#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/schema.py\", line 126, in build_typemap#012 initial_types, auto_camelcase=self.auto_camelcase, schema=self#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 80, in __init__#012 super(TypeMap, self).__init__(types)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py\", line 28, in __init__#012 self.update(reduce(self.reducer, types, OrderedDict())) # type: ignore#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 117, in graphene_reducer#012 return GraphQLTypeMap.reducer(map, internal_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py\", line 106, in reducer#012 field_map = type.fields#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py\", line 22, in __get__#012 value = obj.__dict__[self.func.__name__] = self.func(obj)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 221, in fields#012 return define_field_map(self, self._fields)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 235, in define_field_map#012 field_map = field_map()#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 274, in construct_fields_for_type#012 map = self.reducer(map, field.type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 117, in graphene_reducer#012 return GraphQLTypeMap.reducer(map, internal_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py\", line 106, in reducer#012 field_map = type.fields#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py\", line 22, in __get__#012 value = obj.__dict__[self.func.__name__] = self.func(obj)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 221, in fields#012 return define_field_map(self, self._fields)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 235, in define_field_map#012 field_map = field_map()#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 274, in construct_fields_for_type#012 map = self.reducer(map, field.type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 93, in graphene_reducer#012 return self.reducer(map, type.of_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 93, in graphene_reducer#012 return self.reducer(map, type.of_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 117, in graphene_reducer#012 return GraphQLTypeMap.reducer(map, internal_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py\", line 106, in reducer#012 field_map = type.fields#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py\", line 22, in __get__#012 value = obj.__dict__[self.func.__name__] = self.func(obj)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 221, in fields#012 return define_field_map(self, self._fields)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 235, in define_field_map#012 field_map = field_map()#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 274, in construct_fields_for_type#012 map = self.reducer(map, field.type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 117, in graphene_reducer#012 return GraphQLTypeMap.reducer(map, internal_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py\", line 106, in reducer#012 field_map = type.fields#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py\", line 22, in __get__#012 value = obj.__dict__[self.func.__name__] = self.func(obj)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 221, in fields#012 return define_field_map(self, self._fields)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 235, in define_field_map#012 field_map = field_map()#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 274, in construct_fields_for_type#012 map = self.reducer(map, field.type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 117, in graphene_reducer#012 return GraphQLTypeMap.reducer(map, internal_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py\", line 106, in reducer#012 field_map = type.fields#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py\", line 22, in __get__#012 value = obj.__dict__[self.func.__name__] = self.func(obj)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 221, in fields#012 return define_field_map(self, self._fields)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 235, in define_field_map#012 field_map = field_map()#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 274, in construct_fields_for_type#012 map = self.reducer(map, field.type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 99, in graphene_reducer#012 ).format(_type.graphene_type, type)#012AssertionError: Found different types with the same name in the schema: EmployeeConnection, EmployeeConnection"
|
140
141
|
|
142
|
+
python_error_msg = ":#012File \"./app.py\", line 7, in <module>#012 from schema import schema#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/schema.py\", line 60, in <module>#012 schema = graphene.Schema(query=Query, types=[Department, Employee, Role])#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/schema.py\", line 62, in __init__#012 self.build_typemap()#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/schema.py\", line 126, in build_typemap#012 initial_types, auto_camelcase=self.auto_camelcase, schema=self#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 80, in __init__#012 super(TypeMap, self).__init__(types)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py\", line 28, in __init__#012 self.update(reduce(self.reducer, types, OrderedDict())) # type: ignore#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 117, in graphene_reducer#012 return GraphQLTypeMap.reducer(map, internal_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py\", line 106, in reducer#012 field_map = type.fields#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py\", line 22, in __get__#012 value = obj.__dict__[self.func.__name__] = self.func(obj)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 221, in fields#012 return define_field_map(self, self._fields)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 235, in define_field_map#012 field_map = field_map()#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 274, in construct_fields_for_type#012 map = self.reducer(map, field.type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 117, in graphene_reducer#012 return GraphQLTypeMap.reducer(map, internal_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py\", line 106, in reducer#012 field_map = type.fields#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py\", line 22, in __get__#012 value = obj.__dict__[self.func.__name__] = self.func(obj)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 221, in fields#012 return define_field_map(self, self._fields)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 235, in define_field_map#012 field_map = field_map()#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 274, in construct_fields_for_type#012 map = self.reducer(map, field.type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 93, in graphene_reducer#012 return self.reducer(map, type.of_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 93, in graphene_reducer#012 return self.reducer(map, type.of_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 117, in graphene_reducer#012 return GraphQLTypeMap.reducer(map, internal_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py\", line 106, in reducer#012 field_map = type.fields#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py\", line 22, in __get__#012 value = obj.__dict__[self.func.__name__] = self.func(obj)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 221, in fields#012 return define_field_map(self, self._fields)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 235, in define_field_map#012 field_map = field_map()#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 274, in construct_fields_for_type#012 map = self.reducer(map, field.type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 117, in graphene_reducer#012 return GraphQLTypeMap.reducer(map, internal_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py\", line 106, in reducer#012 field_map = type.fields#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py\", line 22, in __get__#012 value = obj.__dict__[self.func.__name__] = self.func(obj)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 221, in fields#012 return define_field_map(self, self._fields)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 235, in define_field_map#012 field_map = field_map()#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 274, in construct_fields_for_type#012 map = self.reducer(map, field.type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 117, in graphene_reducer#012 return GraphQLTypeMap.reducer(map, internal_type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/typemap.py\", line 106, in reducer#012 field_map = type.fields#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/pyutils/cached_property.py\", line 22, in __get__#012 value = obj.__dict__[self.func.__name__] = self.func(obj)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 221, in fields#012 return define_field_map(self, self._fields)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphql/type/definition.py\", line 235, in define_field_map#012 field_map = field_map()#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 274, in construct_fields_for_type#012 map = self.reducer(map, field.type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 88, in reducer#012 return self.graphene_reducer(map, type)#012File \"/home/joseph/Documents/graphene-sqlalchemy/examples/flask_sqlalchemy/env/lib/python3.6/site-packages/graphene/types/typemap.py\", line 99, in graphene_reducer#012 ).format(_type.graphene_type, type)#012AssertionError: Found different types with the same name in the schema: EmployeeConnection, EmployeeConnection"
|
143
|
+
|
141
144
|
java_msg = 'SEVERE [http-nio-8080-exec-10] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [Testing] in context with path [/test] threw exception [GET method is not supported.] with root cause
|
142
145
|
javax.servlet.ServletException: GET method is not supported.
|
143
146
|
at TestingServlet.doGet(TestingServlet.java:18)
|
@@ -190,91 +193,127 @@ nodejs_error_msg = "Something unexpected has occurred.#012 at main (c:\\Users
|
|
190
193
|
d.run do
|
191
194
|
d.feed("filter.python", time, {'message' => python_msg})
|
192
195
|
end
|
193
|
-
assert_equal('6c4a36dfca6b751f16a4065d61ec0de3f96e7eb8', d.filtered_records[0]['
|
196
|
+
assert_equal('6c4a36dfca6b751f16a4065d61ec0de3f96e7eb8', d.filtered_records[0]['error_fingerprint'])
|
194
197
|
d = create_driver(python_conf+"syslog true")
|
195
198
|
time = event_time
|
196
199
|
d.run do
|
197
200
|
d.feed("filter.python",time, {'message' => python_sys_msg})
|
198
201
|
end
|
199
|
-
assert_equal('6c4a36dfca6b751f16a4065d61ec0de3f96e7eb8', d.filtered_records[0]['
|
202
|
+
assert_equal('6c4a36dfca6b751f16a4065d61ec0de3f96e7eb8', d.filtered_records[0]['error_fingerprint'])
|
200
203
|
d = create_driver(python_conf+"error_msg_tag error_message")
|
201
204
|
time = event_time
|
202
205
|
d.run do
|
203
206
|
d.feed("filter.python",time, {'error_message' => python_msg})
|
204
207
|
end
|
205
|
-
assert_equal('6c4a36dfca6b751f16a4065d61ec0de3f96e7eb8', d.filtered_records[0]['
|
208
|
+
assert_equal('6c4a36dfca6b751f16a4065d61ec0de3f96e7eb8', d.filtered_records[0]['error_fingerprint'])
|
209
|
+
d = create_driver(python_conf+"syslog true\n"+"error_msg_tag error_message")
|
210
|
+
time = event_time
|
211
|
+
d.run do
|
212
|
+
d.feed("filter.python",time, {'error_message' => python_sys_msg})
|
213
|
+
end
|
214
|
+
assert_equal('6c4a36dfca6b751f16a4065d61ec0de3f96e7eb8', d.filtered_records[0]['error_fingerprint'])
|
206
215
|
d = create_driver(python_conf+"error_msg_tag error_message")
|
207
216
|
time = event_time
|
208
217
|
d.run do
|
209
218
|
d.feed("filter.python",time, {'error_message' => python_sys_msg})
|
210
219
|
end
|
211
|
-
assert_equal(nil, d.filtered_records[0]['
|
212
|
-
d = create_driver(
|
220
|
+
assert_equal(nil, d.filtered_records[0]['error_fingerprint'])
|
221
|
+
d = create_driver(config+"lang php")
|
213
222
|
time = event_time
|
214
223
|
d.run do
|
215
224
|
d.feed("filter.python",time, {'error_message' => python_sys_msg})
|
216
225
|
end
|
217
|
-
assert_equal(
|
226
|
+
assert_equal(nil, d.filtered_records[0]['error_fingerprint'])
|
227
|
+
d = create_driver(python_conf+"syslog true"+"error_msg_tag error_message")
|
228
|
+
time = event_time
|
229
|
+
d.run do
|
230
|
+
d.feed("filter.python",time, {'error_message' => python_error_msg})
|
231
|
+
end
|
232
|
+
assert_equal(nil, d.filtered_records[0]['error_fingerprint'])
|
233
|
+
d = create_driver(python_conf+"error_msg_tag error_message")
|
234
|
+
time = event_time
|
235
|
+
d.run do
|
236
|
+
d.feed("filter.python",time, {'error_message' => python_error_msg})
|
237
|
+
end
|
238
|
+
assert_equal(nil, d.filtered_records[0]['error_fingerprint'])
|
239
|
+
d = create_driver(python_conf+"syslog true\n"+"error_msg_tag error_message")
|
240
|
+
time = event_time
|
241
|
+
d.run do
|
242
|
+
d.feed("filter.python",time, {'error_message' => python_error_msg})
|
243
|
+
end
|
244
|
+
assert_equal(nil, d.filtered_records[0]['error_fingerprint'])
|
218
245
|
d = create_driver(java_conf)
|
219
246
|
time = event_time
|
220
247
|
d.run do
|
221
248
|
d.feed("filter.java", time, {'message' => java_msg})
|
222
249
|
end
|
223
|
-
assert_equal('35005154c55de5f08021c04959646a00063a8a81', d.filtered_records[0]['
|
250
|
+
assert_equal('35005154c55de5f08021c04959646a00063a8a81', d.filtered_records[0]['error_fingerprint'])
|
224
251
|
d = create_driver(java_conf+"syslog true")
|
225
252
|
time = event_time
|
226
253
|
d.run do
|
227
254
|
d.feed("filter.java", time, {'message' => java_sys_msg})
|
228
255
|
end
|
229
|
-
assert_equal('35005154c55de5f08021c04959646a00063a8a81', d.filtered_records[0]['
|
256
|
+
assert_equal('35005154c55de5f08021c04959646a00063a8a81', d.filtered_records[0]['error_fingerprint'])
|
230
257
|
d = create_driver(java_conf+"error_msg_tag error_message")
|
231
258
|
time = event_time
|
232
259
|
d.run do
|
233
260
|
d.feed("filter.java", time, {'error_message' => java_msg})
|
234
261
|
end
|
235
|
-
assert_equal('35005154c55de5f08021c04959646a00063a8a81', d.filtered_records[0]['
|
262
|
+
assert_equal('35005154c55de5f08021c04959646a00063a8a81', d.filtered_records[0]['error_fingerprint'])
|
236
263
|
d = create_driver(java_conf+"syslog true\n"+"error_msg_tag error_message")
|
237
264
|
time = event_time
|
238
265
|
d.run do
|
239
266
|
d.feed("filter.java", time, {'error_message' => java_sys_msg})
|
240
267
|
end
|
241
|
-
assert_equal('35005154c55de5f08021c04959646a00063a8a81', d.filtered_records[0]['
|
268
|
+
assert_equal('35005154c55de5f08021c04959646a00063a8a81', d.filtered_records[0]['error_fingerprint'])
|
242
269
|
d = create_driver(java_conf+"error_msg_tag error_message")
|
243
270
|
time = event_time
|
244
271
|
d.run do
|
245
272
|
d.feed("filter.java", time, {'error_message' => java_sys_msg})
|
246
273
|
end
|
247
|
-
assert_equal(nil, d.filtered_records[0]['
|
274
|
+
assert_equal(nil, d.filtered_records[0]['error_fingerprint'])
|
275
|
+
d = create_driver(config+"lang ruby")
|
276
|
+
time = event_time
|
277
|
+
d.run do
|
278
|
+
d.feed("filter.java", time, {'error_message' => java_sys_msg})
|
279
|
+
end
|
280
|
+
assert_equal(nil, d.filtered_records[0]['error_fingerprint'])
|
248
281
|
d = create_driver(nodejs_conf)
|
249
282
|
time = event_time
|
250
283
|
d.run do
|
251
284
|
d.feed("filter.nodejs", time, {'message' => nodejs_msg})
|
252
285
|
end
|
253
|
-
assert_equal('24f271892eeaac14506e7ab563da0f03a19b0d84', d.filtered_records[0]['
|
286
|
+
assert_equal('24f271892eeaac14506e7ab563da0f03a19b0d84', d.filtered_records[0]['error_fingerprint'])
|
254
287
|
d = create_driver(nodejs_conf+"syslog true")
|
255
288
|
time = event_time
|
256
289
|
d.run do
|
257
290
|
d.feed("filter.nodejs", time, {'message' => nodejs_sys_msg})
|
258
291
|
end
|
259
|
-
assert_equal('24f271892eeaac14506e7ab563da0f03a19b0d84', d.filtered_records[0]['
|
292
|
+
assert_equal('24f271892eeaac14506e7ab563da0f03a19b0d84', d.filtered_records[0]['error_fingerprint'])
|
260
293
|
d = create_driver(nodejs_conf+"error_msg_tag error_message")
|
261
294
|
time = event_time
|
262
295
|
d.run do
|
263
296
|
d.feed("filter.nodejs", time, {'error_message' => nodejs_msg})
|
264
297
|
end
|
265
|
-
assert_equal('24f271892eeaac14506e7ab563da0f03a19b0d84', d.filtered_records[0]['
|
298
|
+
assert_equal('24f271892eeaac14506e7ab563da0f03a19b0d84', d.filtered_records[0]['error_fingerprint'])
|
266
299
|
d = create_driver(nodejs_conf+"syslog true\n"+"error_msg_tag error_message")
|
267
300
|
time = event_time
|
268
301
|
d.run do
|
269
302
|
d.feed("filter.nodejs", time, {'error_message' => nodejs_sys_msg})
|
270
303
|
end
|
271
|
-
assert_equal('24f271892eeaac14506e7ab563da0f03a19b0d84', d.filtered_records[0]['
|
304
|
+
assert_equal('24f271892eeaac14506e7ab563da0f03a19b0d84', d.filtered_records[0]['error_fingerprint'])
|
272
305
|
d = create_driver(nodejs_conf+"error_msg_tag error_message")
|
273
306
|
time = event_time
|
274
307
|
d.run do
|
275
308
|
d.feed("filter.nodejs", time, {'error_message' => nodejs_error_msg})
|
276
309
|
end
|
277
|
-
assert_equal(nil, d.filtered_records[0]['
|
310
|
+
assert_equal(nil, d.filtered_records[0]['error_fingerprint'])
|
311
|
+
d = create_driver(config+"lang go")
|
312
|
+
time = event_time
|
313
|
+
d.run do
|
314
|
+
d.feed("filter.nodejs", time, {'error_message' => nodejs_error_msg})
|
315
|
+
end
|
316
|
+
assert_equal(nil, d.filtered_records[0]['error_fingerprint'])
|
278
317
|
end
|
279
318
|
|
280
319
|
#Nodejs fingerprint tests
|
@@ -318,3 +357,4 @@ nodejs_error_msg = "Something unexpected has occurred.#012 at main (c:\\Users
|
|
318
357
|
testing_object.test_multi_line_message(fingerprint_object)
|
319
358
|
testing_object.test_heuristic_stacktrace_search(fingerprint_object)
|
320
359
|
end
|
360
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apptuit-fluent-plugin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- hari prasad
|
@@ -114,13 +114,13 @@ files:
|
|
114
114
|
- README.md
|
115
115
|
- Rakefile
|
116
116
|
- apptuit-fluent-plugin.gemspec
|
117
|
-
- lib/fluent/plugin/
|
117
|
+
- lib/fluent/plugin/filter_apptuit.rb
|
118
118
|
- lib/fluent/plugin/fingerprinter.rb
|
119
119
|
- test/helper.rb
|
120
120
|
- test/plugin/java_fingerprint_tests.rb
|
121
121
|
- test/plugin/node_fingerprint_tests.rb
|
122
122
|
- test/plugin/python_fingerprint_tests.rb
|
123
|
-
- test/plugin/
|
123
|
+
- test/plugin/test_filter_apptuit.rb
|
124
124
|
homepage: https://github.com/hari9973/apptuit-fluent-plugin
|
125
125
|
licenses:
|
126
126
|
- Apache-2.0
|
@@ -140,7 +140,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
140
140
|
- !ruby/object:Gem::Version
|
141
141
|
version: '0'
|
142
142
|
requirements: []
|
143
|
-
|
143
|
+
rubyforge_project:
|
144
|
+
rubygems_version: 2.7.7
|
144
145
|
signing_key:
|
145
146
|
specification_version: 4
|
146
147
|
summary: To find the fingerprints for errors
|
@@ -149,4 +150,4 @@ test_files:
|
|
149
150
|
- test/plugin/java_fingerprint_tests.rb
|
150
151
|
- test/plugin/node_fingerprint_tests.rb
|
151
152
|
- test/plugin/python_fingerprint_tests.rb
|
152
|
-
- test/plugin/
|
153
|
+
- test/plugin/test_filter_apptuit.rb
|