utracker 0.0.1 → 0.0.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
  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