neetodeploy 1.1.13 → 1.1.16

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
  SHA256:
3
- metadata.gz: 4f2c80145fe5c0abd4dacfac7feb92d6fa836735a6c5ba2e52a8ab8eaf9384c5
4
- data.tar.gz: c9676d69d581f0220c8ed0420bbac4cc7883050e3e2c6392a8aec834febe8872
3
+ metadata.gz: cec28c12e2d1a584c36b57acda22d17159c87707c1b19aff6135d38efe6e3e80
4
+ data.tar.gz: b29754747bea899d5c845b12015202db84c221cb42b72ba8aa5f00d43ecb7256
5
5
  SHA512:
6
- metadata.gz: 6df5e9decf6130bf63cf7576ee5fceefd938d4e77917d594d33fe1d863400f02023d100d5720bbc1e607a14af3d22ec3f578305671081801d70e0b0a51274d77
7
- data.tar.gz: 8b8b15e9fc5ace97cf20903011c54e91a1cdbfed199473d0733b736ae85c76dce54c92e1a02c4806e01cba86b9270b85be681139c6c1ac98cb2f65c633847a52
6
+ metadata.gz: f92c3d43cd11358105b2e095664c26b28b3cf490baf0add50ea834b049005315287c77bd920ee5f014c6d0c07ed032c82d1b3b7e0f7118714064ee7137d5170a
7
+ data.tar.gz: 1ff3d2d97733734157e57b137427e410170f689263b6b3b87ba16fb468781d4bbe491cb8caf80e2dbb9fe815a39dfa24b352729ae0a4661cfe7a0b2fd4367cd6
data/Gemfile CHANGED
@@ -7,3 +7,7 @@ gemspec
7
7
  gem "byebug"
8
8
 
9
9
  gem "websocket-eventmachine-client"
10
+
11
+ gem "aws-sdk-cloudwatchlogs"
12
+ gem "aws-sdk-cognitoidentity"
13
+ gem "rexml"
data/Gemfile.lock CHANGED
@@ -1,11 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- neetodeploy (1.1.13)
4
+ neetodeploy (1.1.16)
5
+ aws-sdk-cloudwatchlogs
6
+ aws-sdk-cognitoidentity
5
7
  colorize
6
8
  dotenv (~> 2.8.1)
7
9
  httparty (~> 0.21.0)
8
10
  launchy (~> 2.5.0)
11
+ rexml
9
12
  terminal-table (~> 3.0.2)
10
13
  thor (~> 1.3.0)
11
14
  tty-spinner
@@ -16,6 +19,21 @@ GEM
16
19
  specs:
17
20
  addressable (2.8.1)
18
21
  public_suffix (>= 2.0.2, < 6.0)
22
+ aws-eventstream (1.2.0)
23
+ aws-partitions (1.743.0)
24
+ aws-sdk-cloudwatchlogs (1.59.0)
25
+ aws-sdk-core (~> 3, >= 3.165.0)
26
+ aws-sigv4 (~> 1.1)
27
+ aws-sdk-cognitoidentity (1.41.0)
28
+ aws-sdk-core (~> 3, >= 3.165.0)
29
+ aws-sigv4 (~> 1.1)
30
+ aws-sdk-core (3.171.0)
31
+ aws-eventstream (~> 1, >= 1.0.2)
32
+ aws-partitions (~> 1, >= 1.651.0)
33
+ aws-sigv4 (~> 1.5)
34
+ jmespath (~> 1, >= 1.6.1)
35
+ aws-sigv4 (1.5.2)
36
+ aws-eventstream (~> 1, >= 1.0.2)
19
37
  byebug (11.1.3)
20
38
  colorize (1.1.0)
21
39
  dotenv (2.8.1)
@@ -23,11 +41,13 @@ GEM
23
41
  httparty (0.21.0)
24
42
  mini_mime (>= 1.0.0)
25
43
  multi_xml (>= 0.5.2)
44
+ jmespath (1.6.2)
26
45
  launchy (2.5.2)
27
46
  addressable (~> 2.8)
28
47
  mini_mime (1.1.2)
29
48
  multi_xml (0.6.0)
30
49
  public_suffix (5.0.1)
50
+ rexml (3.4.1)
31
51
  terminal-table (3.0.2)
32
52
  unicode-display_width (>= 1.1.1, < 3)
33
53
  thor (1.3.0)
@@ -53,8 +73,11 @@ PLATFORMS
53
73
  x86_64-linux
54
74
 
55
75
  DEPENDENCIES
76
+ aws-sdk-cloudwatchlogs
77
+ aws-sdk-cognitoidentity
56
78
  byebug
57
79
  neetodeploy!
80
+ rexml
58
81
  websocket-eventmachine-client
59
82
 
60
83
  BUNDLED WITH
@@ -26,7 +26,7 @@ module NeetoDeploy
26
26
  def console_executable_path
27
27
  gem_spec = Gem::Specification.find_by_name("neetodeploy")
28
28
  gem_dir = gem_spec.gem_dir
29
- executable_path = File.join(gem_dir, "exe", "console")
29
+ executable_path = File.join(gem_dir, "exe", console_executable_name)
30
30
  end
31
31
 
32
32
  def start_console
@@ -12,10 +12,7 @@ module NeetoDeploy
12
12
  class CLI
13
13
  module Exec
14
14
  class Base < CLI::Base
15
- CONSOLE_EXECUTABLE = {
16
- mac: "console-linux-arm64",
17
- linux: "console-linux-amd64"
18
- }.freeze
15
+
19
16
 
20
17
  include Constants
21
18
  include Session
@@ -67,23 +64,6 @@ module NeetoDeploy
67
64
  @spinner.auto_spin
68
65
  end
69
66
 
70
- def os
71
- @os ||= (
72
- host_os = RbConfig::CONFIG["host_os"]
73
- case host_os
74
- when /darwin|mac os/
75
- :mac
76
- when /linux/
77
- :linux
78
- else
79
- raise Error::WebDriverError, "unsupported os: #{host_os.inspect}"
80
- end
81
- )
82
- end
83
-
84
- def console_executable_name
85
- CONSOLE_EXECUTABLE[os]
86
- end
87
67
  end
88
68
  end
89
69
  end
@@ -2,8 +2,9 @@
2
2
 
3
3
  require "thor"
4
4
  require "colorize"
5
- require "websocket-eventmachine-client"
6
5
 
6
+ require "aws-sdk-cloudwatchlogs"
7
+ require "aws-sdk-cognitoidentity"
7
8
  require_relative "../session"
8
9
  require_relative "./constants"
9
10
 
@@ -20,56 +21,78 @@ module NeetoDeploy
20
21
  super()
21
22
  @app_slug = app_slug
22
23
  @process_type = process_type
24
+ @log_client = nil
23
25
  end
24
26
 
25
27
  def process!
26
- stream_logs
28
+ start_spinner
29
+ response = authenticate_user
30
+ return unless response.success?
31
+
32
+ log_params = JSON[response.body]
33
+ @log_client = cloud_watch_client(log_params)
34
+ start_log_streaming(log_params)
27
35
  end
28
36
 
29
37
  private
30
38
 
31
- def uri
32
- "wss://connect.neetodeploy.com/cable"
39
+ def authenticate_user
40
+ response = send_post_request(authenticate_live_stream_url, { app_slug:, process_type: })
41
+ @spinner.stop && ui.error(response) unless response.success?
42
+ response
43
+ end
44
+
45
+ def cloud_watch_client(log_params)
46
+ cognito = Aws::CognitoIdentity::Client.new(region: log_params["region"])
47
+ identity_id = cognito.get_id(identity_pool_id: log_params["identity_pool_id"]).identity_id
48
+ credentials = cognito.get_credentials_for_identity(identity_id:).credentials
49
+
50
+ Aws::CloudWatchLogs::Client.new(
51
+ region: log_params["region"],
52
+ access_key_id: credentials.access_key_id,
53
+ secret_access_key: credentials.secret_key,
54
+ session_token: credentials.session_token
55
+ )
56
+ end
57
+
58
+ def start_spinner
59
+ @spinner = TTY::Spinner.new("Starting live stream session [:spinner]", format: :classic)
60
+ @spinner.auto_spin
33
61
  end
34
62
 
35
- def stream_logs
36
- EM.run do
37
- session_token = common_body[:session_token]
38
- pubsub_token = SecureRandom.hex(16)
39
- ws_connection = WebSocket::EventMachine::Client.connect(uri:)
40
-
41
- ws_connection.onopen do
42
- payload = {
43
- command: "subscribe",
44
- identifier: {
45
- channel: "Cli::LogChannel", app_slug:, pubsub_token:, process_type:,
46
- session_token:
47
- }.to_json
63
+ def start_log_streaming(log_params)
64
+ next_token = nil
65
+ @spinner.stop
66
+ loop do
67
+ begin
68
+ params = {
69
+ log_group_name: log_params["log_group_name"],
70
+ log_stream_name: log_params["log_stream_name"],
71
+ start_from_head: !next_token.nil?,
72
+ limit: next_token.nil? ? 100 : 1000
48
73
  }
49
- ws_connection.send(payload.to_json)
50
- end
51
74
 
52
- ws_connection.onmessage do |msg, type|
53
- parsed_message = JSON[msg]
54
- if parsed_message["message"] && parsed_message["type"] != "ping"
55
- logs = JSON[parsed_message["message"]]["streams"].flat_map do |stream|
56
- stream["values"].map do |array|
57
- "#{Time.at(array[0].to_i / 1e9).to_s.light_magenta} #{array[1]}"
58
- end
59
- end
60
- STDOUT.puts logs
61
- end
75
+ params[:next_token] = next_token unless next_token.nil?
76
+ response = @log_client.get_log_events(params)
62
77
 
63
- if parsed_message["type"] == "disconnect"
64
- puts parsed_message["error"].red
65
- ws_connection.close
66
- exit
78
+ response.events.each do |event|
79
+ puts "#{Time.zone.at(event.timestamp / 1000)} #{event.message}"
67
80
  end
68
- end
69
81
 
70
- ws_connection.onerror do |error|
71
- puts "Error: #{error}"
82
+ if next_token == response.next_forward_token
83
+ sleep 3
84
+ else
85
+ next_token = response.next_forward_token
86
+ end
87
+ rescue Aws::CloudWatchLogs::Errors::ExpiredTokenException,
88
+ Aws::CloudWatchLogs::Errors::UnrecognizedClientException => e
89
+ warn "Stream time limit has been reached"
90
+ exit 1
91
+ rescue => e
92
+ warn "Connection lost. Reconnecting..."
93
+ sleep 5
72
94
  end
95
+ sleep 2
73
96
  end
74
97
  end
75
98
  end
@@ -4,9 +4,9 @@ module NeetoDeploy
4
4
  class CLI
5
5
  module Logs
6
6
  module Constants
7
- NEETO_DEPLOY_CLI_API_ENVIRONMENT_VARIABLES_URL = "#{NEETO_DEPLOY_CLI_API_BASE_URL}/apps/access".freeze
7
+ NEETO_DEPLOY_CLI_API_ENVIRONMENT_VARIABLES_URL = "#{NEETO_DEPLOY_CLI_API_BASE_URL}/logs".freeze
8
8
 
9
- def app_verify_access_url
9
+ def authenticate_live_stream_url
10
10
  NEETO_DEPLOY_CLI_API_ENVIRONMENT_VARIABLES_URL
11
11
  end
12
12
  end
@@ -6,6 +6,11 @@ require "json"
6
6
  module NeetoDeploy
7
7
  class CLI
8
8
  module Session
9
+ CONSOLE_EXECUTABLE = {
10
+ mac: "console-linux-arm64",
11
+ linux: "console-linux-amd64"
12
+ }.freeze
13
+
9
14
  class Error < StandardError
10
15
  end
11
16
 
@@ -35,6 +40,24 @@ module NeetoDeploy
35
40
  rescue
36
41
  raise Error.new("Unable to retrieve session info. Try logging in again.")
37
42
  end
43
+
44
+ def os
45
+ @os ||= (
46
+ host_os = RbConfig::CONFIG["host_os"]
47
+ case host_os
48
+ when /darwin|mac os/
49
+ :mac
50
+ when /linux/
51
+ :linux
52
+ else
53
+ raise Error::WebDriverError, "unsupported os: #{host_os.inspect}"
54
+ end
55
+ )
56
+ end
57
+
58
+ def console_executable_name
59
+ CONSOLE_EXECUTABLE[os]
60
+ end
38
61
  end
39
62
  end
40
63
  end
@@ -57,5 +57,9 @@ module NeetoDeploy
57
57
 
58
58
  desc "certificates", "Manage certificates"
59
59
  subcommand "certificates", Certificates::Commands
60
+
61
+ desc "version, --version, -v", "Print the version of the gem"
62
+ map %w[--version -v] => :version
63
+ def version = puts(NeetoDeploy::VERSION)
60
64
  end
61
65
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NeetoDeploy
4
- VERSION = "1.1.13"
4
+ VERSION = "1.1.16"
5
5
  CLI_API_VERSION = "v1"
6
6
  end
data/neetodeploy.gemspec CHANGED
@@ -38,6 +38,9 @@ Gem::Specification.new do |spec|
38
38
  spec.add_dependency "websocket-eventmachine-client"
39
39
  spec.add_dependency "colorize"
40
40
  spec.add_dependency "tty-spinner"
41
+ spec.add_dependency "aws-sdk-cloudwatchlogs"
42
+ spec.add_dependency "aws-sdk-cognitoidentity"
43
+ spec.add_dependency "rexml"
41
44
 
42
45
  # To add the files from submodules
43
46
  `git submodule --quiet foreach pwd`.split($\).each do |submodule_path|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: neetodeploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.13
4
+ version: 1.1.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Subin Siby
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-10-29 00:00:00.000000000 Z
11
+ date: 2025-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv
@@ -122,6 +122,48 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: aws-sdk-cloudwatchlogs
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'
139
+ - !ruby/object:Gem::Dependency
140
+ name: aws-sdk-cognitoidentity
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rexml
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
125
167
  description: Manage neetoDeploy apps with CLI
126
168
  email:
127
169
  - subin.siby@bigbinary.com