apptuit-fluent-plugin 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml 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