pagoda 0.6.2 → 0.7.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ebf5df5a892dae6f2ab3422cd715a3e3dce31821
4
+ data.tar.gz: eb90b58aa1084ea3e5a640dbc00d4d208cdfcf00
5
+ SHA512:
6
+ metadata.gz: afa8eb59341f072e6f998b7fe0bbfe9a7ae9f30ce6c1d42a09c73cd3bed90d16e7b0ad6fa5fc78e9fe9bf0775bcd74a3e0f2f8768d5bcf026e3050a23e590e0f
7
+ data.tar.gz: 2d58c7d5fbe50277938bc50ebd0a7ee27ccb4ad5f0acb631533cc0799cf297de6da1f577a88add8a7577de09899dd974172536fb922c140a5fd251897e3243d3
data/.DS_Store CHANGED
File without changes
data/.gitignore CHANGED
File without changes
data/Gemfile.lock CHANGED
@@ -1,24 +1,30 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pagoda (0.6.0)
5
- gli
4
+ pagoda (0.7.0)
5
+ eventmachine
6
+ faye-websocket
7
+ gli (~> 2.0.0)
8
+ msgpack
6
9
  pagoda-client
7
10
  pagoda-tunnel
8
11
  rest-client
9
- socketio-client
10
12
 
11
13
  GEM
12
14
  remote: http://rubygems.org/
13
15
  specs:
14
16
  coderay (0.9.8)
15
17
  diff-lcs (1.1.3)
18
+ eventmachine (1.0.3)
19
+ faye-websocket (0.4.6)
20
+ eventmachine (>= 0.12.0)
16
21
  gli (2.0.0)
17
- json_pure (1.7.4)
22
+ json_pure (1.8.0)
18
23
  method_source (0.6.7)
19
24
  ruby_parser (>= 2.3.1)
20
- mime-types (1.19)
21
- pagoda-client (0.1.8)
25
+ mime-types (1.23)
26
+ msgpack (0.5.4)
27
+ pagoda-client (0.2.2)
22
28
  json_pure
23
29
  rest-client
24
30
  pagoda-tunnel (0.1.3)
@@ -42,8 +48,6 @@ GEM
42
48
  sexp_processor (~> 3.0)
43
49
  sexp_processor (3.0.7)
44
50
  slop (2.1.0)
45
- socketio-client (0.0.3)
46
- rest-client
47
51
 
48
52
  PLATFORMS
49
53
  ruby
data/bin/pagoda CHANGED
@@ -66,9 +66,9 @@ post do |global,command,options,args|
66
66
  end
67
67
 
68
68
  on_error do |exception|
69
- if exception.class == RestClient::Unauthorized
70
- Pagoda::Command::Base.error "Username or Password is invald"
71
- elsif exception.class == RestClient::ResourceNotFound
69
+ # if exception.class == RestClient::Unauthorized
70
+ # Pagoda::Command::Base.error "Username or Password is invald"
71
+ if exception.class == RestClient::ResourceNotFound
72
72
  Pagoda::Command::Base.error "It appears we cant find your 'resource', please try again later"
73
73
  elsif exception.class == RestClient::InternalServerError
74
74
  Pagoda::Command::Base.error "It appears pagodabox is having some trouble, please try again later"
@@ -2,9 +2,12 @@ desc 'Real time log to your pagodabox application'
2
2
  arg_name 'Component name'
3
3
  command :log do |c|
4
4
 
5
- c.desc 'Component name you want to connect to'
6
- c.arg_name 'COMPONENT_NAME'
7
- c.flag [:c, :component]
5
+ c.desc "Live stream"
6
+ c.switch [:live]
7
+
8
+ c.desc 'Number of log lines to retrieve'
9
+ c.arg_name 'COUNT'
10
+ c.flag [:c, :count]
8
11
 
9
12
  c.desc 'App name'
10
13
  c.arg_name 'APP_NAME'
@@ -1,11 +1,16 @@
1
- require 'socketIO'
1
+ require 'faye/websocket'
2
+ require "msgpack"
3
+ require 'json'
4
+ require 'pp'
5
+ require 'eventmachine'
6
+ require "base64"
2
7
 
3
8
  module Pagoda::Command
4
9
  class Log < Base
5
10
 
6
11
  COLORS = [
7
- 'light_red',
8
12
  'light_green',
13
+ 'light_red',
9
14
  'light_yellow',
10
15
  'light_blue',
11
16
  'light_magenta',
@@ -20,76 +25,97 @@ module Pagoda::Command
20
25
  ]
21
26
 
22
27
  def run
23
- user_input = options[:component] || args.first
24
-
25
- if user_input =~ /^(web\d*)|(db\d*)|(cache\d*)|(worker\d*)$/
26
- comps = user_input
27
- else
28
- comps = nil
29
- end
30
-
31
-
32
- auth_hash = {user: user, pass: password, app: app}
33
- auth_hash['comps'] = [comps] unless comps == nil
34
- message_block = ->(hash) { colorize hash[0]['message'], hash[0]['name'] }
35
- error_block = ->(hash) { error hash[0]['message'] }
36
-
37
- @client = SocketIO.connect("http://logvac.pagodabox.com", sync: true) do
38
-
39
- before_start do
40
- on_event('auth_challenge') do
41
- emit('authenticate', auth_hash)
42
- end
43
-
44
- on_event('authenticated') do
45
- puts "Successfully Authenticated"
28
+
29
+ app_id = client.app_info(app)[:id]
30
+ if options[:live]
31
+ EM.run do
32
+ STDOUT.sync = true
33
+ # socket = WebSocket::EventMachine::Client.connect(:uri => "wss://#{user}:#{password}@live.pagodabox.com/stormpack/websocket/pagodabox?protocol=1&client=ruby&version=1.0.0&batch=false&adapter=msgpack&flash=false")
34
+ socket = Faye::WebSocket::Client.new("wss://live.pagodabox.com/stormpack/websocket/pagodabox?protocol=1&client=ruby&version=1.0.0&batch=false&adapter=msgpack&flash=false&authorization=Basic%20#{Base64.encode64("#{user}:#{password}").chop.gsub(/\=/, '%3D')}")
35
+
36
+ # puts "Connecting to #{socket.inspect}"
37
+
38
+ # socket.onopen do
39
+ # puts "Connected"
40
+ # socket.send({"event"=>"stormpack:subscribe","data"=>{"channel"=>"app-log-#{app_id}"}}.to_msgpack, :type => :binary)
41
+ # end
42
+ socket.onopen = lambda do |event|
43
+ # puts 'connection open'
44
+ socket.send({"event"=>"stormpack:subscribe","data"=>{"channel"=>"app-log-#{app_id}"}}.to_msgpack.bytes.to_a)
45
+ # puts "listening to app: #{app}"
46
+ puts "Now tailing your live stream"
47
+ puts "press 'ctrl+c to exit"
48
+ puts "----------------------------"
46
49
  end
47
50
 
48
- on_event('error', &error_block)
49
-
50
- on_event('subscribed') do |hash|
51
- if hash[0]['success']
52
- puts "successfully subscribed to #{hash[0]['comp']}"
53
- else
54
- puts "failed to subscribe to #{hash[0]['comp']}"
51
+ # socket.onmessage do |msg, type|
52
+ # puts "Received message: #{msg}"
53
+ # end
54
+ socket.onmessage = lambda do |event|
55
+ # p [:message, MessagePack.unpack(event.data.pack("c*"))]
56
+ data = MessagePack.unpack(event.data.pack("c*"))
57
+ if data['keypath']
58
+ colorize "[#{Time.at(data['data']['time'].to_i / 1000000) rescue Time.now}] #{(data['data']['log'].split(':').first rescue '')} : ", (data['data']['log'].split(':').first rescue 'str'), false
59
+ puts data['data']['log'].to_s.split(':')[1..-1].join(":").strip
60
+ # else
61
+ # puts data
55
62
  end
56
63
  end
57
64
 
58
- on_event('unsubscribed') do |hash|
59
- puts "#{hash[0]['success'] ? 'successfully unsubscribed from' : 'failed to unsubscribe from' } #{hash[0]['comp']}"
65
+ # socket.onclose do
66
+ # puts "Disconnected"
67
+ # end
68
+ socket.onclose = lambda do |event|
69
+ # puts 'Server connection closed'
70
+ EM.stop
60
71
  end
61
72
 
62
- on_event('log', &message_block)
63
-
64
- on_disconnect do
65
- puts "Disconnected"
66
- exit 0
73
+ [:INT, :TERM].each do |sig|
74
+ Signal.trap(sig) do
75
+ STDOUT.sync = false
76
+ # socket.close 1000, 'Going away'
77
+ puts "Log closing."
78
+ puts "----------------------------"
79
+ puts
80
+ socket.close
81
+ end
67
82
  end
68
-
69
83
  end
70
-
71
- end
72
-
73
- [:INT, :TERM].each do |sig|
74
- Signal.trap(sig) do
75
- @client.disconnect
76
- puts "Log Closed."
77
- puts "-----------------------------------------------"
78
- puts
79
- exit
84
+ else
85
+ count = (options[:count] || 100).to_i
86
+
87
+ log = []
88
+ last_time_stamp = Time.now.to_i * 100_000_000
89
+ while log.length < count
90
+ # puts "****"
91
+ # puts "#{app}?start=#{last_time_stamp + 1}&stop=#{Time.now.to_i * 1000000}"
92
+ # puts "****"
93
+
94
+ r = JSON.parse(RestClient.get("https://#{user}:#{password}@logvac.pagodabox.com/logs/apps/#{app_id}?limit=#{count - log.length}&start=#{last_time_stamp - 1}&stop=#{0}"))
95
+ if r == []
96
+ break
97
+ else
98
+ last_time_stamp = r.last['time']
99
+ log = log + r
100
+ end
101
+ print " loading... (#{log.length} of #{count}) \r"
102
+ end
103
+ puts
104
+ log.reverse.each do |line|
105
+ colorize("[#{Time.at(line['time'].to_i / 1000000)}] #{line['log'].split(':').first} : ", line['log'].split(':').first, false)
106
+ puts line['log'].split(':')[1..-1].join(":").strip
80
107
  end
81
108
  end
82
109
 
83
- loop { sleep 1000 }
84
110
 
85
111
  end
86
112
 
87
- def colorize message, name
113
+ def colorize message, name, newline = true
88
114
  @hash ||= {}
89
115
  if color = @hash[name]
90
- puts message.send(color)
116
+ newline ? (puts message.send(color)) : (print message.send(color))
91
117
  else
92
- puts message.send(@hash[name] = next_color)
118
+ newline ? (puts message.send(@hash[name] = next_color)) : (print message.send(@hash[name] = next_color))
93
119
  # retry
94
120
  end
95
121
  end
@@ -1,5 +1,5 @@
1
1
  module Pagoda
2
2
  module CLI
3
- VERSION = "0.6.2"
3
+ VERSION = "0.7.0"
4
4
  end
5
5
  end
data/pagoda.gemspec CHANGED
@@ -18,9 +18,11 @@ Gem::Specification.new do |gem|
18
18
  gem.add_development_dependency "rspec"
19
19
  gem.add_development_dependency "pry"
20
20
 
21
- gem.add_dependency 'socketio-client'
22
21
  gem.add_dependency "pagoda-client"
23
22
  gem.add_dependency "pagoda-tunnel"
24
23
  gem.add_dependency "rest-client"
25
24
  gem.add_dependency "gli", '~> 2.0.0'
25
+ gem.add_dependency 'faye-websocket'
26
+ gem.add_dependency 'msgpack'
27
+ gem.add_dependency 'eventmachine'
26
28
  end
metadata CHANGED
@@ -1,128 +1,141 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pagoda
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
5
- prerelease:
4
+ version: 0.7.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Lyon Hill
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-08-22 00:00:00.000000000 Z
11
+ date: 2013-05-29 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rspec
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: pry
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
- name: socketio-client
42
+ name: pagoda-client
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
- name: pagoda-client
56
+ name: pagoda-tunnel
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
- name: pagoda-tunnel
70
+ name: rest-client
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :runtime
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
- name: rest-client
84
+ name: gli
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 2.0.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 2.0.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: faye-websocket
96
99
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
100
  requirements:
99
- - - ! '>='
101
+ - - '>='
100
102
  - !ruby/object:Gem::Version
101
103
  version: '0'
102
104
  type: :runtime
103
105
  prerelease: false
104
106
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
107
  requirements:
107
- - - ! '>='
108
+ - - '>='
108
109
  - !ruby/object:Gem::Version
109
110
  version: '0'
110
111
  - !ruby/object:Gem::Dependency
111
- name: gli
112
+ name: msgpack
112
113
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
114
  requirements:
115
- - - ~>
115
+ - - '>='
116
116
  - !ruby/object:Gem::Version
117
- version: 2.0.0
117
+ version: '0'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
121
  requirements:
123
- - - ~>
122
+ - - '>='
124
123
  - !ruby/object:Gem::Version
125
- version: 2.0.0
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: eventmachine
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
126
139
  description: Pagoda Box User facing interface to improve workflow with Pagoda Box
127
140
  email:
128
141
  - lyon@pagodabox.com
@@ -162,7 +175,6 @@ files:
162
175
  - lib/pagoda/cli/helpers/tunnel.rb
163
176
  - lib/pagoda/cli/override.rb
164
177
  - lib/pagoda/cli/version.rb
165
- - newpagoda-0.5.0.gem
166
178
  - pagoda.gemspec
167
179
  - pagoda.rdoc
168
180
  - spec/lib/helper_spec.rb
@@ -173,27 +185,26 @@ files:
173
185
  - spec/spec_helper.rb
174
186
  homepage: http://www.pagodabox.com
175
187
  licenses: []
188
+ metadata: {}
176
189
  post_install_message:
177
190
  rdoc_options: []
178
191
  require_paths:
179
192
  - lib
180
193
  required_ruby_version: !ruby/object:Gem::Requirement
181
- none: false
182
194
  requirements:
183
- - - ! '>='
195
+ - - '>='
184
196
  - !ruby/object:Gem::Version
185
197
  version: '0'
186
198
  required_rubygems_version: !ruby/object:Gem::Requirement
187
- none: false
188
199
  requirements:
189
- - - ! '>='
200
+ - - '>='
190
201
  - !ruby/object:Gem::Version
191
202
  version: '0'
192
203
  requirements: []
193
204
  rubyforge_project:
194
- rubygems_version: 1.8.24
205
+ rubygems_version: 2.0.0
195
206
  signing_key:
196
- specification_version: 3
207
+ specification_version: 4
197
208
  summary: Pagoda Box CLI
198
209
  test_files:
199
210
  - spec/lib/helper_spec.rb
@@ -202,3 +213,4 @@ test_files:
202
213
  - spec/lib/helpers/key_spec.rb
203
214
  - spec/lib/helpers/tunnel_spec.rb
204
215
  - spec/spec_helper.rb
216
+ has_rdoc:
data/newpagoda-0.5.0.gem DELETED
Binary file