microservice-harness 0.1.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/harness/configuration.rb +29 -0
- data/lib/harness/listener.rb +54 -0
- data/lib/harness/logger.rb +23 -0
- data/lib/harness/producer.rb +25 -0
- data/lib/harness/stdout_sync.rb +2 -0
- data/lib/microservice-harness.rb +8 -0
- metadata +61 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ab1cbbc130840039145fd672e25f2908fc2efadc858244100fda97f6e7aefa84
|
4
|
+
data.tar.gz: ab8e3355a4fdd944851859b68065015108ad4dac8cd070ac281fd912fda0fbc0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c8c0200cad6fe0d18d54f4554b6aad1c0ea5e26cb0f89194fae0a945c0f0350421bf4dfcb1665109f634e9fbde6e23a5476ff7900e65a0ad3f9493be1938c9fc
|
7
|
+
data.tar.gz: df4330fe2ece28178a3290d9366d628cd50a0828f911a1d602e7acd0dad0ec56c6afb7ca18295251ce737432a1d99e8ef0b6be08fdb2b363528797752043b088
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module MicroserviceHarness
|
2
|
+
|
3
|
+
class << self
|
4
|
+
attr_accessor :configuration
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.configure
|
8
|
+
self.configuration ||= Configuration.new
|
9
|
+
yield(configuration)
|
10
|
+
raise "ConsumerGroupIDNotSet" unless self.configuration.consumer_group_id
|
11
|
+
raise "ServiceNameNotSet" unless self.configuration.service_name
|
12
|
+
end
|
13
|
+
|
14
|
+
class Configuration
|
15
|
+
attr_accessor :kafka_hosts
|
16
|
+
attr_accessor :topic
|
17
|
+
attr_accessor :consumer_group_id
|
18
|
+
attr_accessor :log_level
|
19
|
+
attr_accessor :service_name
|
20
|
+
|
21
|
+
def initialize
|
22
|
+
@kafka_hosts = ENV.fetch('KAFKA_ADDRESSES', "192.168.235.136").split(",").first
|
23
|
+
@topic = "sofadog"
|
24
|
+
@consumer_group_id = nil
|
25
|
+
@log_level = :info
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module MicroserviceHarness
|
2
|
+
|
3
|
+
class Listener
|
4
|
+
|
5
|
+
def initialize(event_processor:)
|
6
|
+
@topic = MicroserviceHarness.configuration.topic
|
7
|
+
|
8
|
+
config = {
|
9
|
+
:"bootstrap.servers" => MicroserviceHarness.configuration.kafka_hosts,
|
10
|
+
:"group.id" => MicroserviceHarness.configuration.consumer_group_id
|
11
|
+
}
|
12
|
+
|
13
|
+
@consumer = Rdkafka::Config.new(config).consumer
|
14
|
+
@event_processor = event_processor
|
15
|
+
@log_level = MicroserviceHarness.configuration.log_level
|
16
|
+
end
|
17
|
+
|
18
|
+
def listen
|
19
|
+
@consumer.subscribe(@topic)
|
20
|
+
|
21
|
+
@consumer.each do |msg|
|
22
|
+
begin
|
23
|
+
message = JSON.parse(msg.payload)
|
24
|
+
rescue Exception => e
|
25
|
+
Logger.log(level: "ERROR", message: "Error Parsing Message #{msg.payload}", error_class: e.class, error_message: e.message, error_backtrace: e.backtrace.join("\n"))
|
26
|
+
next
|
27
|
+
end
|
28
|
+
|
29
|
+
Logger.log(ttid: message['ttid'], level: "DEBUG", message: "Received message of type #{message}") if @log_level == :debug
|
30
|
+
|
31
|
+
begin
|
32
|
+
if @event_processor.respond_to?(message['event_type'].gsub(".", "_").to_sym)
|
33
|
+
start = Time.now
|
34
|
+
Logger.log(ttid: message['ttid'], level: "INFO", message: "Processing #{message['event_type']}") if @log_level == :info
|
35
|
+
@event_processor.send(message['event_type'].gsub(".", "_").to_sym, message)
|
36
|
+
Logger.log(ttid: message['ttid'], level: "INFO", message: "Finished Processing #{message['event_type']} in #{Time.now - start}") if @log_level == :info
|
37
|
+
end
|
38
|
+
rescue StandardError => e
|
39
|
+
event_data = {
|
40
|
+
message: "Error #{e.class} #{e.message}",
|
41
|
+
error_class: e.class,
|
42
|
+
error_message: e.message,
|
43
|
+
error_backtrace: e.backtrace.join("\n")
|
44
|
+
}
|
45
|
+
|
46
|
+
MicroserviceHarness::Producer.instance.send_message(ttid: message['ttid'], event_type: "request.failed", event_data: event_data)
|
47
|
+
|
48
|
+
Logger.log(ttid: message['ttid'], level: "ERROR", message: "Error #{e.class} #{e.message} #{e.backtrace.join("\n")}", error_class: e.class, error_message: e.message, error_backtrace: e.backtrace.join("\n"))
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module MicroserviceHarness
|
2
|
+
|
3
|
+
class Logger
|
4
|
+
|
5
|
+
def self.log(ttid: nil, level:, message:, error_class: nil, error_message: nil, error_backtrace: nil)
|
6
|
+
puts "[#{MicroserviceHarness.configuration.service_name}] [#{Time.now}] [#{level}] [#{ttid}] #{message} #{error_class} #{error_message} #{error_backtrace}"
|
7
|
+
|
8
|
+
event_type = "#{MicroserviceHarness.configuration.service_name}.log"
|
9
|
+
|
10
|
+
event_data = {
|
11
|
+
logged_ttid: ttid, # We cant log the ttid to the main event otherwise it will interfere with request handler
|
12
|
+
level: level,
|
13
|
+
message: message,
|
14
|
+
error_class: error_class,
|
15
|
+
error_message: error_message,
|
16
|
+
error_backtrace: error_backtrace
|
17
|
+
}
|
18
|
+
|
19
|
+
MicroserviceHarness::Producer.instance.send_message(ttid: SecureRandom.uuid, event_type: event_type, event_data: event_data)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
|
3
|
+
module MicroserviceHarness
|
4
|
+
|
5
|
+
class Producer
|
6
|
+
include Singleton
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
config = {:"bootstrap.servers" => MicroserviceHarness.configuration.kafka_hosts, :"message.max.bytes" => 100000000 }
|
10
|
+
@producer = Rdkafka::Config.new(config).producer
|
11
|
+
@topic = MicroserviceHarness.configuration.topic
|
12
|
+
end
|
13
|
+
|
14
|
+
def send_message(ttid:, event_type:, event_data:)
|
15
|
+
message = {
|
16
|
+
ttid: ttid,
|
17
|
+
event_type: event_type,
|
18
|
+
service_name: MicroserviceHarness.configuration.service_name,
|
19
|
+
event_data: event_data
|
20
|
+
}
|
21
|
+
|
22
|
+
@producer.produce(topic: @topic, payload: message.to_json)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: microservice-harness
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.14
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sofadog OU
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-12-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rdkafka
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description:
|
28
|
+
email:
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- lib/harness/configuration.rb
|
34
|
+
- lib/harness/listener.rb
|
35
|
+
- lib/harness/logger.rb
|
36
|
+
- lib/harness/producer.rb
|
37
|
+
- lib/harness/stdout_sync.rb
|
38
|
+
- lib/microservice-harness.rb
|
39
|
+
homepage:
|
40
|
+
licenses: []
|
41
|
+
metadata: {}
|
42
|
+
post_install_message:
|
43
|
+
rdoc_options: []
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '0'
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
requirements: []
|
57
|
+
rubygems_version: 3.0.3
|
58
|
+
signing_key:
|
59
|
+
specification_version: 4
|
60
|
+
summary: Microservice Harness Framework
|
61
|
+
test_files: []
|