Skip to content

Commit eedffec

Browse files
committed
Initial commit
0 parents  commit eedffec

File tree

11 files changed

+145
-0
lines changed

11 files changed

+145
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.gem
2+
varlog-0.0.1.gem

Gemfile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# frozen_string_literal: true
2+
# A sample Gemfile
3+
source "https://rubygems.org"
4+
5+
# gem "rails"
6+
gem "request_store"

example/Gemfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
source "https://rubygems.org"
2+
3+
gem "sinatra"

example/server.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
require 'sinatra'
2+
require 'net/http'
3+
require 'varlog'
4+
5+
configure do
6+
use Varlog::Middleware
7+
end
8+
9+
get '/status' do
10+
uri = URI.parse("http://google.com/")
11+
http = Net::HTTP.new(uri.host, uri.port)
12+
request = Net::HTTP::Get.new(uri.request_uri)
13+
response = http.request(request)
14+
response.body
15+
end

lib/varlog.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
require 'varlog/middleware'
2+
require 'varlog/interceptor'
3+
require 'varlog/version'

lib/varlog/collector.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module Varlog
2+
module Collector
3+
class << self
4+
def collect(event)
5+
p event
6+
end
7+
end
8+
end
9+
end

lib/varlog/events.rb

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
require 'securerandom'
2+
3+
module Varlog
4+
class HTTPRequestEvent
5+
6+
def initialize(parent_id, timestamp, method, endpoint)
7+
self.id = SecureRandom.uuid()
8+
self.parent_id = parent_id
9+
self.timestamp = timestamp
10+
self.endpoint = endpoint
11+
self.type = type
12+
self.schema = "HTTPRequest"
13+
end
14+
15+
end
16+
17+
class HTTPResponseEvent
18+
19+
def initialize(parent_id, timestamp, status, endpoint, rtt)
20+
self.id = SecureRandom.uuid()
21+
self.parent_id = parent_id
22+
self.timestamp = timestamp
23+
self.endpoint = endpoint
24+
self.type = type
25+
self.rtt = rtt
26+
self.schema = "HTTPResponse"
27+
end
28+
29+
end
30+
31+
class MessageEvent
32+
33+
def initialize(parent_id, timestamp, message)
34+
self.id = SecureRandom.uuid()
35+
self.timestamp = timestamp
36+
self.endpoint = endpoint
37+
self.message = message
38+
self.schema = "Message"
39+
end
40+
41+
end
42+
43+
end

lib/varlog/interceptor.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
require 'request_store'
2+
3+
module Net
4+
class HTTP
5+
alias_method :orig_request, :request
6+
7+
def request(req, body = nil)
8+
trace_id = RequestStore[:trace_id]
9+
timestamp = Time.now.to_i
10+
endpoint = req.path
11+
12+
request_event = new Varlog::HTTPRequestEvent(trace_id, timestamp, req.method, endpoint)
13+
Collector.collect(request_event)
14+
rtt = Bechmark.realtime do
15+
@response = orig_request(req, body)
16+
end
17+
response_event = new Varlog::HTTPResponseEvent(trace_id, timestamp, res.code, endpoint, rtt)
18+
Collector.collect(response_event)
19+
20+
@response
21+
end
22+
23+
end
24+
end

lib/varlog/middleware.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
require 'request_store'
2+
require 'securerandom'
3+
4+
module Varlog
5+
class Middleware
6+
7+
def initialize(app)
8+
@app = app
9+
end
10+
11+
def call(env)
12+
RequestStore.begin!
13+
RequestStore[:trace_id] = SecureRandom.uuid
14+
@app.call(env)
15+
ensure
16+
RequestStore.end!
17+
RequestStore.clear!
18+
end
19+
20+
end
21+
end

lib/varlog/version.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module Varlog
2+
VERSION = "0.0.1"
3+
end

0 commit comments

Comments
 (0)