neetodeploy 1.1.9 → 1.1.11

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: 3077cc8ea8b0ba167b73c2cfd196ba988203fe0b5e00eda98bff96f187f0afe9
4
- data.tar.gz: afbb0390b774d70b50f0d3d39df09d0ddb386897585e8d40000ae7a4b1571156
3
+ metadata.gz: 991f65ca44d321dc7580b71263b9436176095769a7f069f55c2edadb6f5f2532
4
+ data.tar.gz: d614216531a9ef2a3c500a3a4e54cb9a72b34144607e4ea5f0ce8c6e1afabd22
5
5
  SHA512:
6
- metadata.gz: cc1a2b72805e0814f874be024dda38900395c775430a2291e5545e1943a02747b6d58e33e1105c77ffd47ed281388789c8f6a57809ed7c7a38fd18393f36ef42
7
- data.tar.gz: c9b9dad7f5d16ee636e4eb973b0f42b46f5676b5170a96b4b47165e31a134a123c7cb53d87a2ac17c0392d88f95cbcf2514f316cb1c5f52eab3b5b9dec69bd71
6
+ metadata.gz: 21eea9fe929b0bb2176b83ef0f547912bd2824aa3fbc28a4757a9e01cbb19ad56d7b9f658482318ee65f7c57d587d98c47abc74eae87127bd33375af46973763
7
+ data.tar.gz: 503ce18f29dc4a0bd9f4263cbd09b7f314aaf2bc3a5e95fba63b5ff1c2ec0c9193c90d59ab3625c9e77b03d659da3dd67bceabb7ed56d740491475361807f535
data/Gemfile CHANGED
@@ -5,3 +5,5 @@ source "https://rubygems.org"
5
5
  gemspec
6
6
 
7
7
  gem "byebug"
8
+
9
+ gem "websocket-eventmachine-client"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- neetodeploy (1.1.9)
4
+ neetodeploy (1.1.11)
5
5
  colorize
6
6
  dotenv (~> 2.8.1)
7
7
  httparty (~> 0.21.0)
@@ -9,7 +9,7 @@ PATH
9
9
  terminal-table (~> 3.0.2)
10
10
  thor (~> 1.3.0)
11
11
  tty-spinner
12
- websocket-client-simple
12
+ websocket-eventmachine-client
13
13
 
14
14
  GEM
15
15
  remote: https://rubygems.org/
@@ -19,7 +19,7 @@ GEM
19
19
  byebug (11.1.3)
20
20
  colorize (1.1.0)
21
21
  dotenv (2.8.1)
22
- event_emitter (0.2.6)
22
+ eventmachine (1.2.7)
23
23
  httparty (0.21.0)
24
24
  mini_mime (>= 1.0.0)
25
25
  multi_xml (>= 0.5.2)
@@ -36,9 +36,13 @@ GEM
36
36
  tty-cursor (~> 0.7)
37
37
  unicode-display_width (2.4.2)
38
38
  websocket (1.2.9)
39
- websocket-client-simple (0.6.1)
40
- event_emitter
41
- websocket
39
+ websocket-eventmachine-base (1.2.0)
40
+ eventmachine (~> 1.0)
41
+ websocket (~> 1.0)
42
+ websocket-native (~> 1.0)
43
+ websocket-eventmachine-client (1.3.0)
44
+ websocket-eventmachine-base (~> 1.0)
45
+ websocket-native (1.0.0)
42
46
 
43
47
  PLATFORMS
44
48
  arm64-darwin-20
@@ -48,6 +52,7 @@ PLATFORMS
48
52
  DEPENDENCIES
49
53
  byebug
50
54
  neetodeploy!
55
+ websocket-eventmachine-client
51
56
 
52
57
  BUNDLED WITH
53
58
  2.4.8
data/exe/console CHANGED
Binary file
@@ -9,13 +9,13 @@ module NeetoDeploy
9
9
  module Addon
10
10
  class Commands < Thor
11
11
  desc "info", "Get addon informations"
12
- option :addon_name, type: :string, aliases: "-n", required: true, desc: "Addon name"
12
+ option :addon, type: :string, aliases: "-n", required: true, desc: "Addon name"
13
13
  def info
14
14
  Info.new(options).run
15
15
  end
16
16
 
17
17
  desc "scheduled_exports_enabled", "Check whether scheduled exports is enabled for an app"
18
- option :app_name, type: :string, aliases: "-a", required: true, desc: "App name"
18
+ option :app, type: :string, aliases: "-a", required: true, desc: "App name"
19
19
  def scheduled_exports_enabled
20
20
  ScheduledExportsSettings.new(options).run
21
21
  end
@@ -16,7 +16,7 @@ module NeetoDeploy
16
16
 
17
17
  def initialize(options)
18
18
  super()
19
- @addon_name = options[:addon_name]
19
+ @addon_name = options[:addon]
20
20
  end
21
21
 
22
22
  def run
@@ -16,7 +16,7 @@ module NeetoDeploy
16
16
 
17
17
  def initialize(options)
18
18
  super()
19
- @app_name = options[:app_name]
19
+ @app_name = options[:app]
20
20
  end
21
21
 
22
22
  def run
@@ -5,80 +5,56 @@ require "thor"
5
5
  module NeetoDeploy
6
6
  class CLI
7
7
  class DynoConsoleManager < Base
8
- DYNO_CONSOLE_MANAGER_URL = "wss://neeto-deploy-lc.neetodeployapp.com"
8
+ attr_reader :addon_name, :kind
9
9
 
10
- def initialize
10
+ def initialize(addon_name)
11
11
  super()
12
- @prompt = ""
12
+ @addon_name = addon_name
13
13
  end
14
14
 
15
- def run_console
15
+ def process!
16
16
  start_spinner
17
17
  send_console_session_request
18
- ui.error(response) and return unless @response.success?
18
+ ui.error("\n#{@response.body}") and return unless @response.success?
19
19
 
20
- send_websocket_request
21
- define_websocket_blocks
20
+ start_console
21
+ connection_cleanup_callback
22
22
  end
23
23
 
24
24
  private
25
25
 
26
- def start_spinner
27
- @spinner = TTY::Spinner.new("[:spinner] Connecting to #{@instance_name}", format: :classic)
28
- @spinner.auto_spin
26
+ def console_executable_path
27
+ gem_spec = Gem::Specification.find_by_name("neetodeploy")
28
+ gem_dir = gem_spec.gem_dir
29
+ executable_path = File.join(gem_dir, "exe", "console")
29
30
  end
30
31
 
31
- def define_websocket_blocks
32
- stop_spinner = lambda do
33
- @spinner.stop unless @connection_established
34
- end
35
-
36
- cleanup = lambda do
37
- connection_cleanup
38
- end
39
-
40
- @ws.on :message do |msg|
41
- message = msg.data
42
- if message.to_s.eql?("{\"exitCode\":0,\"signal\":0}")
43
- cleanup.call
44
- exit 0
45
- end
46
- cmd = message[0]
47
- if cmd == "1"
48
- extracted_message = message.delete_prefix("1")
49
- stop_spinner.call && @connection_established = true unless extracted_message == ""
50
- @prompt = "\u001b[2K\u001b[0G#{extracted_message.split("\r\n").last}"
51
- print extracted_message
52
- end
53
- end
54
-
55
- @ws.on :open do
56
- end
32
+ def start_console
33
+ console_access_token = @response.parsed_response["console_access_token"]
34
+ pod_name = @response.parsed_response["pod_name"]
35
+ database_url = @response.parsed_response["database_url"]
36
+ container_name = @response.parsed_response["container_name"]
57
37
 
58
- @ws.on :close do |e|
59
- puts e
60
- exit 1
61
- end
38
+ execute_console(pod_name, console_access_token, container_name, kind, database_url)
39
+ end
62
40
 
63
- @ws.on :error do |e|
64
- puts e
65
- puts "MyserverBackend>> Close entered. Last error:#{$!.class}:#{$!.to_s};Module:#{$0};"
66
- $@.each { |backtrace| puts backtrace }
67
- exit 1
68
- end
41
+ def execute_console(pod_name, console_access_token, container_name, kind, database_url)
42
+ system("#{console_executable_path} -podname #{pod_name} -token #{console_access_token} -kind #{kind} -container #{container_name} -url #{database_url}")
43
+ end
69
44
 
70
- trap("SIGINT") do
71
- Thread.new { @ws.send "4" }
72
- end
45
+ def send_console_session_request
46
+ @response = send_post_request(console_session_base_url, { addon_name:, kind: })
47
+ @spinner.stop
48
+ end
73
49
 
74
- loop do
75
- sleep 0.1
76
- input = Readline.readline(@prompt, true)
77
- @ws.send "1" + input
78
- end
50
+ def connection_cleanup_callback
51
+ url = "#{console_session_base_url}/#{addon_name}"
52
+ send_delete_request(url, { pubsub_token: @pubsub_token })
79
53
  end
80
54
 
81
- def connection_cleanup
55
+ def start_spinner
56
+ @spinner = TTY::Spinner.new("Setting up dyno [:spinner]", format: :classic)
57
+ @spinner.auto_spin
82
58
  end
83
59
  end
84
60
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "websocket-client-simple"
4
3
  require "thor"
5
4
  require "readline"
6
5
 
@@ -42,7 +41,8 @@ module NeetoDeploy
42
41
  @pubsub_token = @response.parsed_response["console_pubsub_token"]
43
42
  console_access_token = @response.parsed_response["console_access_token"]
44
43
  pod_name = "#{app_name}-#{@pubsub_token}-console-deployment"
45
- system("#{console_executable_path} #{pod_name} #{console_access_token}")
44
+ container_name = "#{app_name}-#{@pubsub_token}-console"
45
+ system("#{console_executable_path} -podname #{pod_name} -token #{console_access_token} -container #{container_name}")
46
46
  end
47
47
 
48
48
  def send_console_session_request
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "websocket-client-simple"
4
3
  require "thor"
5
4
  require "colorize"
5
+ require "websocket-eventmachine-client"
6
6
 
7
7
  require_relative "../session"
8
8
  require_relative "./constants"
@@ -14,11 +14,11 @@ module NeetoDeploy
14
14
  include Constants
15
15
  include Session
16
16
 
17
- attr_reader :app_name, :process_type
17
+ attr_reader :app_slug, :process_type
18
18
 
19
- def initialize(app_name, process_type = nil)
19
+ def initialize(app_slug, process_type = nil)
20
20
  super()
21
- @app_name = app_name
21
+ @app_slug = app_slug
22
22
  @process_type = process_type
23
23
  end
24
24
 
@@ -32,57 +32,45 @@ module NeetoDeploy
32
32
  "wss://connect.neetodeploy.com/cable"
33
33
  end
34
34
 
35
- def ensure_app_access?
36
- response = send_get_request(app_verify_access_url, { app_slug: app_name })
37
- @ui.error(JSON[response.body]["error"]) unless response.success?
38
- response.success?
39
- end
40
-
41
35
  def stream_logs
42
- ws_connection = WebSocket::Client::Simple.connect(uri)
43
- session_token = common_body[:session_token]
44
- app_slug = @app_name
45
- process_type = @process_type
46
- pubsub_token = SecureRandom.hex(16)
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:)
47
40
 
48
- ws_connection.on :open do
49
- payload = {
50
- command: "subscribe",
51
- identifier: {
52
- channel: "Cli::LogChannel", app_slug:, pubsub_token:, process_type:,
53
- session_token:
54
- }.to_json
55
- }
56
- ws_connection.send(payload.to_json)
57
- end
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
48
+ }
49
+ ws_connection.send(payload.to_json)
50
+ end
58
51
 
59
- ws_connection.on :message do |msg|
60
- unless msg.data.empty?
61
- parsed_msg = JSON.parse(msg.data)
62
- if parsed_msg["type"].nil?
63
- parsed_msg["message"]&.each do |log|
64
- STDOUT.write "#{Time.at(log[0].to_i / 1e9).to_s.light_magenta} #{log[1]}\n"
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
65
59
  end
66
- elsif parsed_msg["type"] == "disconnect"
67
- puts parsed_msg["error"].red
60
+ STDOUT.puts logs
61
+ end
62
+
63
+ if parsed_message["type"] == "disconnect"
64
+ puts parsed_message["error"].red
65
+ ws_connection.close
68
66
  exit
69
67
  end
70
68
  end
71
- end
72
-
73
- ws_connection.on :close do |e|
74
- p e unless e.nil?
75
- exit 1
76
- end
77
69
 
78
- ws_connection.on :error do |e|
79
- p e
80
- puts "MyserverBackend>> Close entered. Last error:#{$!.class}:#{$!.to_s};Module:#{$0};"
81
- $@.each { |backtrace| puts backtrace }
82
- exit 1
70
+ ws_connection.onerror do |error|
71
+ puts "Error: #{error}"
72
+ end
83
73
  end
84
-
85
- loop do end
86
74
  end
87
75
  end
88
76
  end
@@ -6,12 +6,11 @@ module NeetoDeploy
6
6
  class CLI
7
7
  module Pg
8
8
  class Commands < Thor
9
- # desc "cli", "Connect to postgresql console"
10
- # option :addon_name, type: :string, aliases: "-n", required: true, desc: "Addon name"
11
-
12
- # def cli
13
- # Console.new(options).run
14
- # end
9
+ desc "cli", "Connect to postgresql console"
10
+ option :addon, type: :string, aliases: "-n", required: true, desc: "Addon name"
11
+ def cli
12
+ Console.new(options[:addon]).process!
13
+ end
15
14
  end
16
15
  end
17
16
  end
@@ -12,33 +12,10 @@ module NeetoDeploy
12
12
  include Constants
13
13
  include Session
14
14
 
15
- attr_reader :addon_name
16
-
17
- def initialize(options)
18
- super()
19
- @addon_name = options[:addon_name]
20
- @instance_name = options[:addon_name]
21
- @connection_established = false
22
- end
23
-
24
- def run
25
- run_console
15
+ def initialize(addon_name)
16
+ super(addon_name)
17
+ @kind = "neetodeploy-postgresql"
26
18
  end
27
-
28
- private
29
-
30
- def send_console_session_request
31
- @response = send_post_request(console_session_base_url(addon_name), {})
32
- end
33
-
34
- def send_websocket_request
35
- console_token = @response.parsed_response["console_token"]
36
- database_url = @response.parsed_response["url"]
37
- deployment_name = @response.parsed_response["internal_name"]
38
- app_name = @response.parsed_response["app_name"]
39
-
40
- @ws = WebSocket::Client::Simple.connect "#{DYNO_CONSOLE_MANAGER_URL}/cli_console?app_name=#{app_name}&deployment_name=#{deployment_name}&console_token=#{console_token}&database_url=#{database_url}&kind=postgres"
41
- end
42
19
  end
43
20
  end
44
21
  end
@@ -4,8 +4,8 @@ module NeetoDeploy
4
4
  class CLI
5
5
  module Pg
6
6
  module Constants
7
- def console_session_base_url(addon_name)
8
- "#{NEETO_DEPLOY_CLI_API_BASE_URL}/addons/#{addon_name}/console_session"
7
+ def console_session_base_url
8
+ "#{NEETO_DEPLOY_CLI_API_BASE_URL}/addons/console_sessions"
9
9
  end
10
10
  end
11
11
  end
@@ -4,13 +4,14 @@ require "thor"
4
4
  require_relative "./set"
5
5
  require_relative "./get"
6
6
  require_relative "./reset_stats"
7
+ require_relative "./console"
7
8
 
8
9
  module NeetoDeploy
9
10
  class CLI
10
11
  module Redis
11
12
  class Commands < Thor
12
13
  desc "set", "Set redis config"
13
- option :addon_name, type: :string, aliases: "-n", required: true, desc: "Addon name"
14
+ option :addon, type: :string, aliases: "-n", required: true, desc: "Addon name"
14
15
  option :key, type: :string, aliases: "-k", required: true, desc: "CONFIG name"
15
16
  option :value, type: :string, aliases: "-v", required: true, desc: "New value for the CONFIG"
16
17
 
@@ -19,18 +20,24 @@ module NeetoDeploy
19
20
  end
20
21
 
21
22
  desc "get", "Get redis config"
22
- option :addon_name, type: :string, aliases: "-n", required: true, desc: "Addon name"
23
+ option :addon, type: :string, aliases: "-n", required: true, desc: "Addon name"
23
24
  option :key, type: :string, aliases: "-k", required: true, desc: "CONFIG name"
24
25
  def get
25
26
  Get.new(options).run
26
27
  end
27
28
 
28
29
  desc "reset-stats", "Resets the statistics of the Redis instance"
29
- option :addon_name, type: :string, aliases: "-n", required: true, desc: "Addon name"
30
+ option :addon, type: :string, aliases: "-n", required: true, desc: "Addon name"
30
31
  def reset_stats
31
32
  ResetStats.new(options).run
32
33
  end
33
34
 
35
+ desc "cli", "Connect to redis console"
36
+ option :addon, type: :string, aliases: "-n", required: true, desc: "Addon name"
37
+ def cli
38
+ Console.new(options[:addon]).process!
39
+ end
40
+
34
41
  end
35
42
  end
36
43
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "thor"
4
+ require_relative "../session"
5
+ require_relative "./constants"
6
+ require_relative "../dyno_console_manager"
7
+
8
+ module NeetoDeploy
9
+ class CLI
10
+ module Redis
11
+ class Console < CLI::DynoConsoleManager
12
+ include Constants
13
+ include Session
14
+
15
+ def initialize(addon_name)
16
+ super(addon_name)
17
+ @kind = "neetodeploy-redis"
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -14,6 +14,10 @@ module NeetoDeploy
14
14
  def available_configs_to_edit
15
15
  AVAILABLE_REDIS_CONFIGS_TO_EDIT
16
16
  end
17
+
18
+ def console_session_base_url
19
+ "#{NEETO_DEPLOY_CLI_API_BASE_URL}/addons/console_sessions"
20
+ end
17
21
  end
18
22
  end
19
23
  end
@@ -15,7 +15,7 @@ module NeetoDeploy
15
15
 
16
16
  def initialize(options)
17
17
  super()
18
- @addon_name = options[:addon_name]
18
+ @addon_name = options[:addon]
19
19
  @key = options[:key]
20
20
  end
21
21
 
@@ -15,7 +15,7 @@ module NeetoDeploy
15
15
 
16
16
  def initialize(options)
17
17
  super()
18
- @addon_name = options[:addon_name]
18
+ @addon_name = options[:addon]
19
19
  end
20
20
 
21
21
  def run
@@ -16,7 +16,7 @@ module NeetoDeploy
16
16
 
17
17
  def initialize(options)
18
18
  super()
19
- @addon_name = options[:addon_name]
19
+ @addon_name = options[:addon]
20
20
  @key = options[:key]
21
21
  @value = options[:value]
22
22
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NeetoDeploy
4
- VERSION = "1.1.9"
4
+ VERSION = "1.1.11"
5
5
  CLI_API_VERSION = "v1"
6
6
  end
data/neetodeploy.gemspec CHANGED
@@ -35,7 +35,7 @@ Gem::Specification.new do |spec|
35
35
  spec.add_dependency "launchy", "~> 2.5.0" # for opening in browser
36
36
  spec.add_dependency "terminal-table", "~> 3.0.2" # for building cli table
37
37
  spec.add_dependency "thor", "~> 1.3.0" # for cli
38
- spec.add_dependency "websocket-client-simple"
38
+ spec.add_dependency "websocket-eventmachine-client"
39
39
  spec.add_dependency "colorize"
40
40
  spec.add_dependency "tty-spinner"
41
41
 
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.9
4
+ version: 1.1.11
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-08-01 00:00:00.000000000 Z
11
+ date: 2024-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: 1.3.0
83
83
  - !ruby/object:Gem::Dependency
84
- name: websocket-client-simple
84
+ name: websocket-eventmachine-client
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -161,6 +161,7 @@ files:
161
161
  - lib/neeto_deploy/cli/pg/console.rb
162
162
  - lib/neeto_deploy/cli/pg/constants.rb
163
163
  - lib/neeto_deploy/cli/redis/commands.rb
164
+ - lib/neeto_deploy/cli/redis/console.rb
164
165
  - lib/neeto_deploy/cli/redis/constants.rb
165
166
  - lib/neeto_deploy/cli/redis/get.rb
166
167
  - lib/neeto_deploy/cli/redis/reset_stats.rb