tail-cf-plugin 0.0.13.pre → 0.0.14.pre

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.
@@ -1,35 +1,32 @@
1
+ require 'celluloid/websocket/client'
2
+
1
3
  module TailCfPlugin
2
4
  class LoggregatorClient
5
+ include Celluloid
6
+
3
7
  def initialize(output)
4
8
  @output = output
5
9
  end
6
10
 
7
11
  def listen(loggregator_host, space_id, app_id, user_token)
8
- address = "#{loggregator_host}/tail/spaces/#{space_id}"
9
- address += "/apps/#{app_id}" if app_id
10
-
11
- address += "?authorization=#{URI.encode(user_token)}"
12
-
13
- uri = URI.parse(address)
14
- http = Net::HTTP.new(uri.host, uri.port)
15
- if uri.scheme == 'https'
16
- http.use_ssl = true
17
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
18
- end
19
-
20
- request = Net::HTTP::Get.new uri.request_uri
21
- output.puts "Connected to #{loggregator_host}"
22
- http.request request do |response|
23
- case response.code.to_i
24
- when 200
25
- response.read_body do |chunk|
26
- received_message = LogMessage.decode(chunk)
27
- output.puts([received_message.app_id, received_message.source_id, received_message.message_type_name, received_message.message].join(" "))
28
- end
29
- else
30
- output.puts("Error #{response.code}: #{response.body}")
31
- end
32
- end
12
+ websocket_address = "ws://#{loggregator_host}/tail/spaces/#{space_id}"
13
+ websocket_address += "/apps/#{app_id}" if app_id
14
+ websocket_address += "?authorization=#{URI.encode(user_token)}"
15
+
16
+ @client = Celluloid::WebSocket::Client.new(websocket_address, current_actor, headers: {"Origin" => "http://localhost" })
17
+ end
18
+
19
+ def on_open
20
+ output.puts("Connected to server.")
21
+ end
22
+
23
+ def on_message(data)
24
+ received_message = LogMessage.decode(data.pack("C*"))
25
+ output.puts([received_message.app_id, received_message.source_id, received_message.message_type_name, received_message.message].join(" "))
26
+ end
27
+
28
+ def on_close(code, reason)
29
+ output.puts("Server dropped connection...goodbye. #{code} #{reason}")
33
30
  end
34
31
 
35
32
  private
@@ -3,7 +3,6 @@ require 'cf'
3
3
  module TailCfPlugin
4
4
  require 'tail-cf-plugin/loggregator_client'
5
5
  require 'log_message/log_message.pb'
6
- require 'uri'
7
6
 
8
7
  class Plugin < CF::CLI
9
8
  include LoginRequirements
@@ -26,6 +25,7 @@ module TailCfPlugin
26
25
 
27
26
  loggregator_client = LoggregatorClient.new(STDOUT)
28
27
  loggregator_client.listen(loggregator_host, client.current_space.guid, app_guid, client.token.auth_header)
28
+ wait_for_ws_connection_close
29
29
  end
30
30
 
31
31
  ::ManifestsPlugin.default_to_app_from_manifest(:tail, false)
@@ -33,9 +33,12 @@ module TailCfPlugin
33
33
  private
34
34
 
35
35
  def loggregator_host
36
- url = URI.parse(client.target)
37
- domain = url.host.split(".")[1..-1].join(".")
38
- "#{url.scheme}://loggregator.#{domain}"
36
+ target_base = client.target.sub(/^https?:\/\/([^\.]+\.)?(.+)\/?/, '\2')
37
+ "loggregator.#{target_base}"
38
+ end
39
+
40
+ def wait_for_ws_connection_close
41
+ sleep
39
42
  end
40
43
 
41
44
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tail-cf-plugin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13.pre
4
+ version: 0.0.14.pre
5
5
  prerelease: 7
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-23 00:00:00.000000000 Z
12
+ date: 2013-07-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cf
@@ -49,6 +49,86 @@ dependencies:
49
49
  - - ~>
50
50
  - !ruby/object:Gem::Version
51
51
  version: 0.3.7
52
+ - !ruby/object:Gem::Dependency
53
+ name: celluloid-websocket-client
54
+ requirement: !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ~>
58
+ - !ruby/object:Gem::Version
59
+ version: 0.0.1
60
+ type: :runtime
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ~>
66
+ - !ruby/object:Gem::Version
67
+ version: 0.0.1
68
+ - !ruby/object:Gem::Dependency
69
+ name: rake
70
+ requirement: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: rspec
86
+ requirement: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ! '>='
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ type: :development
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ! '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ - !ruby/object:Gem::Dependency
101
+ name: thin
102
+ requirement: !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ! '>='
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ type: :development
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ! '>='
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ - !ruby/object:Gem::Dependency
117
+ name: faye-websocket
118
+ requirement: !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ! '>='
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
52
132
  description: CF command line tool to tail CF Application Logs
53
133
  email:
54
134
  - vcap-dev@googlegroups.com