utracker 0.0.1 → 0.0.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
  SHA1:
3
- metadata.gz: c4ee4c98911ffef4acc63f4a59993a7993fa0c2f
4
- data.tar.gz: f13b2bfeba7ca0d2203456041d15ba95eb7846b1
3
+ metadata.gz: 127d98e8fb9eda9a1ce15e7a4aae35965c3552f4
4
+ data.tar.gz: 172d5d04d4ba8a6de4687fb6c4ca3278234adda9
5
5
  SHA512:
6
- metadata.gz: bd6d3ec4c8e7b2dfd79dea5f9f0c19caae604643e49a086a8a22eabc7e6b08fc13f6f1d06bef22e38ee0133af7fd1c033f67d2c2d932b1e10895df116aecfdd8
7
- data.tar.gz: 766d32f041b8f10dfb3772667304f3730da9c86ae1553e4b6801e28206b55f8b53e1f5409845f023e33d5190cc2c3d791b29118e2c5f0f7f3b9b832f6adb9fa0
6
+ metadata.gz: 64b7571d649d4485b12f1abf28a74c43c261ffc875e405bfb274e7b78b6dca97e763cbf8a8f87d9f2bb1bd334b2db114729217d437d917aec63894421e31c67a
7
+ data.tar.gz: 63f94dc7e0dc4da286625d8d29ca00aea6b0cf60a3ac8b596e6b979de81f046bd2e60374cc38087af3ae55f839f940e44039356a38609a535e203444e4b6f9e5
data/README.md CHANGED
@@ -3,6 +3,7 @@
3
3
  [![Build Status](https://travis-ci.org/nicoolas25/micro-tracker.svg?branch=development)](https://travis-ci.org/nicoolas25/micro-tracker)
4
4
  [![Code Climate](https://codeclimate.com/github/nicoolas25/micro-tracker/badges/gpa.svg)](https://codeclimate.com/github/nicoolas25/micro-tracker)
5
5
  [![Test Coverage](https://codeclimate.com/github/nicoolas25/micro-tracker/badges/coverage.svg)](https://codeclimate.com/github/nicoolas25/micro-tracker)
6
+ [![Gem Version](https://badge.fury.io/rb/utracker.svg)](http://badge.fury.io/rb/utracker)
6
7
 
7
8
  Modern web application are more and more designed with micro-services. Those services exchange messages in order to communicate with each other. Eventually your architecture ends with a graph of services that could be quite complex. Micro-tracker is all about tracking this micro-service's interactions in order to know which service received which message, when and from which other service. It will help you monitor your architecture and debug faster.
8
9
 
@@ -14,8 +15,14 @@ Modern web application are more and more designed with micro-services. Those ser
14
15
  * [x] Create messages using a parent message.
15
16
  * [x] Allow to filter the payload in logs.
16
17
 
18
+ ## Backends
19
+
20
+ * MongoDB through [utracker-mongodb][backend-mongodb]
21
+
17
22
  ## Useful tools on top of this
18
23
 
19
24
  * [ ] Broken service alert
20
25
  * [ ] Scaling advisor
21
26
  * [ ] Replay messages after a failure
27
+
28
+ [backend-mongodb]: https://github.com/nicoolas25/micro-tracker-mongodb
@@ -2,6 +2,7 @@ require "utracker/version"
2
2
 
3
3
  module Utracker
4
4
 
5
+ autoload :Drawer, 'utracker/drawer'
5
6
  autoload :Logger, 'utracker/logger'
6
7
  autoload :StdoutLogger, 'utracker/logger/stdout_logger'
7
8
 
@@ -0,0 +1,36 @@
1
+ class Utracker::Drawer
2
+
3
+ Node = Struct.new(:service, :edges) do
4
+ def ==(other)
5
+ other.service == service
6
+ end
7
+ end
8
+
9
+ def write_graph(filename)
10
+ File.open(filename, 'w') do |file|
11
+ file.puts "digraph message_flow {"
12
+ file.puts " node [style=filled fillcolor=white]"
13
+ file.puts " rankdir=LR"
14
+ write_graph_into(file)
15
+ file.puts "}"
16
+ end
17
+ end
18
+
19
+ protected
20
+
21
+ def build_graph
22
+ fail 'Please implement me in subclasses.'
23
+ end
24
+
25
+ private
26
+
27
+ def write_graph_into(file)
28
+ build_graph.each do |node|
29
+ file.puts " #{node.service}"
30
+ node.edges && node.edges.each do |connected_node|
31
+ file.puts " #{node.service} -> #{connected_node.service}"
32
+ end
33
+ end
34
+ end
35
+
36
+ end
@@ -1,3 +1,3 @@
1
1
  module Utracker
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,17 @@
1
+ RSpec.describe Utracker::Drawer::Node do
2
+ let(:instance) { described_class.new('name') }
3
+
4
+ describe "#==" do
5
+ subject { instance == other_instance }
6
+
7
+ context "when the other instance has the same service name" do
8
+ let(:other_instance) { described_class.new(instance.service) }
9
+ it { is_expected.to be true }
10
+ end
11
+
12
+ context "when the other instance has a different service name" do
13
+ let(:other_instance) { described_class.new('name2') }
14
+ it { is_expected.to be false }
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,32 @@
1
+ RSpec.describe Utracker::Drawer do
2
+ let(:instance) { described_class.new }
3
+
4
+ describe '#write_graph' do
5
+ subject { instance.write_graph(filename) }
6
+
7
+ let(:filename) { "spec/test_graph.dot" }
8
+ let(:content) { File.read(filename) }
9
+ let(:graph) do
10
+ node1 = Utracker::Drawer::Node.new('node1', [])
11
+ node2 = Utracker::Drawer::Node.new('node2', nil)
12
+ node1.edges << node2
13
+ [node1, node2]
14
+ end
15
+
16
+ before { allow(instance).to receive(:build_graph).and_return(graph) }
17
+ after { File.delete(filename) }
18
+
19
+ it "writes the expected file" do
20
+ subject
21
+ expect(content).to eq <<-EXPECTED_FILE
22
+ digraph message_flow {
23
+ node [style=filled fillcolor=white]
24
+ rankdir=LR
25
+ node1
26
+ node1 -> node2
27
+ node2
28
+ }
29
+ EXPECTED_FILE
30
+ end
31
+ end
32
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: utracker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicolas ZERMATI
@@ -126,11 +126,14 @@ files:
126
126
  - examples/services.out
127
127
  - examples/services.rb
128
128
  - lib/utracker.rb
129
+ - lib/utracker/drawer.rb
129
130
  - lib/utracker/logger.rb
130
131
  - lib/utracker/logger/stdout_logger.rb
131
132
  - lib/utracker/message.rb
132
133
  - lib/utracker/version.rb
133
134
  - spec/spec_helper.rb
135
+ - spec/utracker/drawer/node_spec.rb
136
+ - spec/utracker/drawer_spec.rb
134
137
  - spec/utracker/logger/event_spec.rb
135
138
  - spec/utracker/logger_spec.rb
136
139
  - spec/utracker/message/logging_spec.rb
@@ -163,6 +166,8 @@ specification_version: 4
163
166
  summary: Track micro-services interactions.
164
167
  test_files:
165
168
  - spec/spec_helper.rb
169
+ - spec/utracker/drawer/node_spec.rb
170
+ - spec/utracker/drawer_spec.rb
166
171
  - spec/utracker/logger/event_spec.rb
167
172
  - spec/utracker/logger_spec.rb
168
173
  - spec/utracker/message/logging_spec.rb