thrift_rack 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
  SHA1:
3
- metadata.gz: 8571e71f5bd664d42b6bb98cebd08bbd1226ebcc
4
- data.tar.gz: 1f15614f521e256d8c3d2728eedcd115949e4c4a
3
+ metadata.gz: c273d19fb145e13d95492d12e9d2d132ad3034cc
4
+ data.tar.gz: 2ad194479ccb84197c6976e776779d398ac2bede
5
5
  SHA512:
6
- metadata.gz: ba3f159d77c44e1bd3f31d5497dd5c86535fcdfa3d4b90843fa71c145026d4a4bbfb6e1540ab8e57995c97c962f36a16d6fc777db19682e71bf0cfe5a24f5539
7
- data.tar.gz: a7bbcaa16095861818690e657259bcbb30d449b51783e37bb23773552505dba76777d201aa218bd714bb9d31d718a3236135ee9af8774a3a1364e16b4dc14d94
6
+ metadata.gz: dc091bdbeb0a9463ddb0a4c7cf32020d8eab74f495097207d230f22ad49b3277b717c311485f2340859ba0aa65d1ec854eb88f12e65a40cb05204f15cc559e8a
7
+ data.tar.gz: 0581140e263a3eb43ae57cc59dc2e3f8baecb0d2fc398ceebeb7bbfae96bbd396f9087101941da522ce32234d415809f4cdda4734fca36fb02afc7903d34a0f2
data/.gitignore CHANGED
@@ -7,4 +7,4 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
  /bin/
10
- thrift_rack-0.1.0.gem
10
+ *.gem
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- thrift_rack (0.1.0)
4
+ thrift_rack (0.1.1)
5
5
  rack (>= 2.0)
6
6
  thrift (~> 0.10.0)
7
7
 
data/lib/thrift_rack.rb CHANGED
@@ -1,9 +1,13 @@
1
1
  require "thrift_rack/version"
2
2
  require "thrift_rack/server"
3
+ require "thrift_rack/logger"
4
+ require "thrift_rack/client"
5
+ require 'thrift_rack/ping'
6
+ require 'thrift_rack/format_check'
7
+
3
8
  require 'rack'
4
9
  require 'thrift'
5
10
 
6
-
7
11
  class ThriftRack
8
12
  THRIFT_HEADER = "application/x-thrift"
9
13
 
@@ -17,10 +21,6 @@ class ThriftRack
17
21
 
18
22
  def call(env)
19
23
  req = Rack::Request.new(env)
20
- return Rack::Response.new(["PONG"], 200, {'Content-Type' => 'text/plain'}) if req.path == "/ping"
21
-
22
- return Rack::Response.new(["Not Valid Thrift Request"], 400, {'Content-Type' => 'text/plain'}) unless req.post? && req.env["CONTENT_TYPE"] == THRIFT_HEADER
23
-
24
24
  server_class = @maps[req.path]
25
25
  return Rack::Response.new(["No Thrift Server For #{req.path}"], 404, {'Content-Type' => 'text/plain'}) unless server_class
26
26
 
@@ -35,9 +35,9 @@ class ThriftRack
35
35
 
36
36
  def self.app(servers = nil)
37
37
  Rack::Builder.new(ThriftRack.new(servers)) do
38
- use Rack::CommonLogger
39
- use Rack::ShowExceptions
40
- use Rack::Lint
38
+ use ThriftRack::Ping
39
+ use ThriftRack::FormatCheck
40
+ use ThriftRack::Logger
41
41
  end
42
42
  end
43
43
  end
@@ -0,0 +1,60 @@
1
+ require 'thrift'
2
+ require 'securerandom'
3
+ class ThriftRack
4
+ class Client
5
+ def initialize(url, client_klass, request_id)
6
+ @rpc_id = SecureRandom.uuid
7
+ @request_id = request_id
8
+ @url = url
9
+ @transport = Thrift::HTTPClientTransport.new(url, ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE)
10
+ @transport.add_headers({"X-Request-ID" => @request_id, "X-Rpc-ID" => @rpc_id})
11
+ protocol = protocol_factory.get_protocol(@transport)
12
+ @client = client_klass.new(protocol)
13
+
14
+ end
15
+
16
+ def logger
17
+ @logger ||= (defined? Rails) ? rails_logger : std_logger
18
+ end
19
+
20
+ def protocol_factory
21
+ Thrift::CompactProtocolFactory.new
22
+ end
23
+
24
+ def method_missing(method, *params)
25
+ return super unless @client.respond_to?(method)
26
+ self.class_eval do
27
+ define_method method.to_sym do |*args|
28
+ begin
29
+ request_at = Time.now
30
+ @transport.add_headers({"X-Rpc-Func" => method.to_s})
31
+ @client.send(method, *args)
32
+ ensure
33
+ end_time = Time.now
34
+ self.logger.info(JSON.dump({
35
+ request_at: request_at.iso8601,
36
+ request_id: @request_id,
37
+ rpc_id: @rpc_id,
38
+ duration: ((end_time - request_at) * 1000).round(4),
39
+ path: URI(@url).path,
40
+ func: method,
41
+ }))
42
+ end
43
+ end
44
+ end
45
+ self.public_send(method, *params)
46
+ end
47
+
48
+ private
49
+
50
+ def rails_logger
51
+ file = File.open("#{Rails.root}/log/rpc_client.log", File::WRONLY | File::APPEND | File::CREAT)
52
+ file.sync = true
53
+ ActiveSupport::Logger.new(file)
54
+ end
55
+
56
+ def std_logger
57
+ ::Logger.new(STDOUT)
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,13 @@
1
+ class ThriftRack
2
+ class FormatCheck
3
+ def initialize(app)
4
+ @app = app
5
+ end
6
+
7
+ def call(env)
8
+ req = Rack::Request.new(env)
9
+ return Rack::Response.new(["Not Valid Thrift Request"], 400, {'Content-Type' => 'text/plain'}) unless req.post? && req.env["CONTENT_TYPE"] == THRIFT_HEADER
10
+ @app.call(env)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,42 @@
1
+ require 'logger'
2
+ require 'json'
3
+ class ThriftRack
4
+ class Logger
5
+ def initialize(app)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ request_at = Time.now
11
+ req = Rack::Request.new(env)
12
+ resp = @app.call(env)
13
+ resp
14
+ ensure
15
+ end_time = Time.now
16
+ self.logger.info(JSON.dump({
17
+ request_at: request_at.iso8601,
18
+ request_id: req.env["HTTP_X_REQUEST_ID"],
19
+ rpc_id: req.env["HTTP_X_RPC_ID"],
20
+ duration: ((end_time - request_at) * 1000).round(4),
21
+ path: req.path,
22
+ func: req.env["HTTP_X_RPC_FUNC"],
23
+ }))
24
+ end
25
+
26
+ def logger
27
+ @logger ||= (defined? Rails) ? rails_logger : std_logger
28
+ end
29
+
30
+ private
31
+
32
+ def rails_logger
33
+ file = File.open("#{Rails.root}/log/rpc.log", File::WRONLY | File::APPEND | File::CREAT)
34
+ file.sync = true
35
+ ActiveSupport::Logger.new(file)
36
+ end
37
+
38
+ def std_logger
39
+ ::Logger.new(STDOUT)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,13 @@
1
+ class ThriftRack
2
+ class Ping
3
+ def initialize(app)
4
+ @app = app
5
+ end
6
+
7
+ def call(env)
8
+ req = Rack::Request.new(env)
9
+ return Rack::Response.new(["PONG"], 200, {'Content-Type' => 'text/plain'}) if req.path == "/ping"
10
+ @app.call(env)
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  class ThriftRack
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thrift_rack
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
  - xuxiangyang
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-24 00:00:00.000000000 Z
11
+ date: 2018-04-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -96,6 +96,10 @@ files:
96
96
  - Rakefile
97
97
  - config.ru
98
98
  - lib/thrift_rack.rb
99
+ - lib/thrift_rack/client.rb
100
+ - lib/thrift_rack/format_check.rb
101
+ - lib/thrift_rack/logger.rb
102
+ - lib/thrift_rack/ping.rb
99
103
  - lib/thrift_rack/server.rb
100
104
  - lib/thrift_rack/version.rb
101
105
  - thrift_rack.gemspec