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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 59fc2f89282beb131f3be796659656fad9df029aa391d6e6534848a41a368d3e
4
- data.tar.gz: cce213087607f3422411ac09f93e8fc5e653756f5c855311981ca855a301282d
3
+ metadata.gz: a4f4ec20c78c76c4ed7e63a9dd3c9d1ea21f7b97a191bd9579a809d921033bf9
4
+ data.tar.gz: cf63ee09ba3dce61bd4552ced62436e981ae708768e01536b8097bce39b501cf
5
5
  SHA512:
6
- metadata.gz: bbda3b186e069aca3fb2f6bd2eaf26ab5c369c5a2c79b8faf681046fbc0080d9aa9a024a6ae18d7a52cf85be51efa9cd01d111644e3b355c57c50f47199bd2a5
7
- data.tar.gz: e9e948195aa14873060e531cc57f8247c6609477cc71fe0516646720d350ff3d04cc3d754ee3d3d2c2215d60601aedda43e87df25febc81580fb81760495f0aa
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
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- apptuit-fluent-plugin (0.1.0)
4
+ apptuit-fluent-plugin (0.1.2)
5
5
  fluentd (>= 0.14.10, < 2)
6
6
 
7
7
  GEM
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 Apptuit
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{log_level="ERROR",fingerprint="d85a855fe660c936ea88492a6bd4c3d5f4a448cf"} 1.0
75
+ demo_error_count{error_exception="NameError",fingerprint="d85a855fe660c936ea88492a6bd4c3d5f4a448cf"} 1.0
64
76
  ```
65
77
 
66
78
  ## LICENSE
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = "apptuit-fluent-plugin"
6
- spec.version = "0.1.1"
6
+ spec.version = "0.1.2"
7
7
  spec.authors = ["hari prasad"]
8
8
  spec.email = ["hariprasad.pothuri@agilitix.ai"]
9
9
 
@@ -20,19 +20,21 @@ require 'syslog/logger'
20
20
 
21
21
  module Fluent::Plugin
22
22
  class ApptuitFilter < Filter
23
- Fluent::Plugin.register_filter("Apptuit", self)
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 , default: 'message'
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
- return message.gsub(/#([0-9]{3})/) {$1.oct.chr}
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["error"] = err_name
47
- record["fingerprint"] = fingerprint
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["error"] = err_name
64
- record["fingerprint"] = fingerprint
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["error"] = err_name
77
- record["fingerprint"] = fingerprint
74
+ record[@exception_name] = err_name
75
+ record[@fingerprint_name] = fingerprint
78
76
  end
79
77
  end
80
78
  else
81
- record["error"] = ""
82
- record["fingerprint"] = ""
79
+ return record
83
80
  end
84
- record
81
+ rescue
82
+ return record
83
+ end
84
+ record
85
85
  end
86
- end
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
- begin
83
- json_stack_matches = message.scan(/"stack"\s*:\s*"([^\"]*)"/)
84
- if json_stack_matches.length > 0
85
- clean_message = json_stack_matches[0].to_s
86
- clean_message = clean_message[2..clean_message.length-3]
87
- clean_message = clean_message.gsub(/\s+at\s+/, "\n--- at ")
88
- else
89
- clean_message = message.gsub('---', "\n---")
90
- end
91
- matches = clean_message.scan(/\s*at[^(]*([^)]*\.js:[0-9]+:[0-9]+)/)
92
- if matches.length < 1
93
- return fingerprint_error(LANG_NODEJS, REASON_NOT_A_STACKTRACE, clean_message)
94
- end
95
- matches = clean_message.scan(/\s*([a-zA-Z]+)(:\s|(\s*$))/)
96
- if matches.length > 0
97
- err_name = matches[0][0]
98
- matches = clean_message.scan(/(^|\n)---\s*at\s*(.*)/)
99
- lines = ""
100
- for parts in matches do
101
- frame = parts[1].strip
102
- lines = "%sat %s\n" % [lines, frame]
103
- end
104
- clean_message = "%s\n%s" % [err_name,lines]
105
- clean_message = clean_message.gsub(/:[0-9]+:[0-9]+/, ":*:*")
106
- fingerprint = Digest::SHA1.hexdigest clean_message
107
- stack = []
108
- stack_matches = clean_message.scan(/at\s+((.+)\s+\()?([^:]*).*/)
109
- for stack_match in stack_matches do
110
- stack << [stack_match[1], stack_match[2]]
111
- end
112
- return err_name, fingerprint, clean_message, stack
113
- else
114
- return fingerprint_error(LANG_NODEJS, REASON_NO_EXCEPTION_NAME, message)
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/filter_Apptuit.rb"
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(conf)
29
- Fluent::Test::Driver::Filter.new(Fluent::Plugin::ApptuitFilter).configure(conf)
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]['fingerprint'])
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]['fingerprint'])
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]['fingerprint'])
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]['fingerprint'])
212
- d = create_driver(python_conf+"syslog true\n"+"error_msg_tag error_message")
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('6c4a36dfca6b751f16a4065d61ec0de3f96e7eb8', d.filtered_records[0]['fingerprint'])
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]['fingerprint'])
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]['fingerprint'])
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]['fingerprint'])
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]['fingerprint'])
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]['fingerprint'])
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]['fingerprint'])
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]['fingerprint'])
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]['fingerprint'])
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]['fingerprint'])
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]['fingerprint'])
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.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/filter_Apptuit.rb
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/test_filter_Apptuit.rb
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
- rubygems_version: 3.0.2
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/test_filter_Apptuit.rb
153
+ - test/plugin/test_filter_apptuit.rb