pgai 1.0.0 → 1.0.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 +4 -4
- data/lib/pgai/cli/env.rb +17 -1
- data/lib/pgai/client.rb +8 -0
- data/lib/pgai/create_clone_service.rb +21 -11
- data/lib/pgai/resources/attributes.rb +0 -1
- data/lib/pgai/resources/local/environment.rb +1 -0
- data/lib/pgai/resources/remote/snapshot.rb +6 -0
- data/lib/pgai/version.rb +1 -1
- data/lib/pgai.rb +6 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00ac038ff78647c4a3569cb87ebe3ae2dd10b9946be720ccffba5b951fc09f26
|
4
|
+
data.tar.gz: b4581834f1c91edfddff07cff3e05bdd658aa8983038a40adc24b3beaaf68158
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 572343b7a247938db90162ed94f44aa835f0dd7078ca6366f78b0b4151e8c82218b2aacd47f45f8ecb21c0d381e093642a5e40f0b61da37a28014c0a104d80a4
|
7
|
+
data.tar.gz: f7fa39825ffcac44f5130b5e2a98f9348d013928382f8ee5ae73d63417f75c1f6cb2dfc85d4ef627c4828656ede3fccee9eea4dcb9efcbdcde9385b44e238ccf
|
data/lib/pgai/cli/env.rb
CHANGED
@@ -33,10 +33,26 @@ module Pgai::Cli
|
|
33
33
|
desc "list", "List all configured environments"
|
34
34
|
def list
|
35
35
|
data = Pgai::Resources::Local::Environment.all.map do |env|
|
36
|
-
env.attributes.slice(:id, :alias, :port, :dbname)
|
36
|
+
env.attributes.slice(:id, :alias, :port, :dbname, :snapshot)
|
37
37
|
end
|
38
38
|
|
39
39
|
say JSON.pretty_generate(data)
|
40
40
|
end
|
41
|
+
|
42
|
+
desc "dup env", "Duplicate an environment and override the provided attributes"
|
43
|
+
method_option :alias, aliases: "-a",
|
44
|
+
desc: "This will be used internally for the connect command",
|
45
|
+
required: true
|
46
|
+
method_option :dbname,
|
47
|
+
aliases: "-n",
|
48
|
+
desc: "Specify database name to connect to by default"
|
49
|
+
method_option :snapshot,
|
50
|
+
aliases: "-s",
|
51
|
+
desc: "Specify the snapshot id if you want to create a clone from a specific snapshot"
|
52
|
+
def dup(env)
|
53
|
+
env = Pgai::Resources::Local::Environment.find(env)
|
54
|
+
attrs = env.attributes.merge(options.transform_keys(&:to_sym))
|
55
|
+
Pgai::Resources::Local::Environment.new(attrs).save
|
56
|
+
end
|
41
57
|
end
|
42
58
|
end
|
data/lib/pgai/client.rb
CHANGED
@@ -46,6 +46,7 @@ module Pgai
|
|
46
46
|
def parse_reponse(data)
|
47
47
|
data = JSON.parse(data)
|
48
48
|
transform!(data)
|
49
|
+
handle_unauthorized(data)
|
49
50
|
data
|
50
51
|
end
|
51
52
|
|
@@ -65,5 +66,12 @@ module Pgai
|
|
65
66
|
transform_array!(data)
|
66
67
|
end
|
67
68
|
end
|
69
|
+
|
70
|
+
def handle_unauthorized(data)
|
71
|
+
return unless data.is_a?(Hash)
|
72
|
+
return unless data[:code] == "UNAUTHORIZED"
|
73
|
+
|
74
|
+
raise UnauthorizedError, data[:message]
|
75
|
+
end
|
68
76
|
end
|
69
77
|
end
|
@@ -6,6 +6,7 @@ module Pgai
|
|
6
6
|
class CreateCloneService
|
7
7
|
HOSTNAME = "127.0.0.1"
|
8
8
|
CLONE_REFRESH_INTERVAL = 0.2
|
9
|
+
PROGRESS_BAR_WIDTH = 80
|
9
10
|
|
10
11
|
attr_reader :id, :env, :logger
|
11
12
|
|
@@ -16,11 +17,15 @@ module Pgai
|
|
16
17
|
end
|
17
18
|
|
18
19
|
def execute
|
20
|
+
logger.info("Preparing clone ...")
|
21
|
+
logger.debug { "Expected cloning time: #{env.expected_cloning_time}" }
|
22
|
+
progress_bar.start
|
23
|
+
|
19
24
|
create_clone_resource
|
20
|
-
|
21
|
-
|
25
|
+
|
26
|
+
logger.debug { clone_resource.status_message }
|
22
27
|
wait_for_clone_to_be_ready
|
23
|
-
logger.debug
|
28
|
+
logger.debug { clone_resource.status_message }
|
24
29
|
|
25
30
|
Resources::Local::Clone.new(cached_clone_attributes).tap(&:save)
|
26
31
|
end
|
@@ -28,7 +33,7 @@ module Pgai
|
|
28
33
|
def create_clone_resource
|
29
34
|
@clone_resource = Resources::Remote::Clone.new(id: id).tap do |resource|
|
30
35
|
resource.db_object = Resources::Remote::DbObject.new(db_name: env.dbname)
|
31
|
-
resource.snapshot =
|
36
|
+
resource.snapshot = find_snapshot
|
32
37
|
resource.save
|
33
38
|
end
|
34
39
|
end
|
@@ -51,10 +56,18 @@ module Pgai
|
|
51
56
|
@clone_resource ||= create_clone_resource
|
52
57
|
end
|
53
58
|
|
59
|
+
def find_snapshot
|
60
|
+
if env.snapshot
|
61
|
+
Resources::Remote::Snapshot.find(env.snapshot)
|
62
|
+
else
|
63
|
+
Resources::Remote::Snapshot.latest
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
54
67
|
def wait_for_clone_to_be_ready
|
55
68
|
loop do
|
69
|
+
progress_bar.advance(steps)
|
56
70
|
clone_resource.refresh
|
57
|
-
progress_bar.advance
|
58
71
|
break if clone_resource.ready?
|
59
72
|
sleep(CLONE_REFRESH_INTERVAL)
|
60
73
|
end
|
@@ -62,14 +75,11 @@ module Pgai
|
|
62
75
|
end
|
63
76
|
|
64
77
|
def progress_bar
|
65
|
-
@progress_bar ||= TTY::ProgressBar.new(
|
66
|
-
"Preparing clone ... [:bar]",
|
67
|
-
total: progress_bar_steps
|
68
|
-
)
|
78
|
+
@progress_bar ||= TTY::ProgressBar.new("[:bar]", total: PROGRESS_BAR_WIDTH)
|
69
79
|
end
|
70
80
|
|
71
|
-
def
|
72
|
-
(env.expected_cloning_time
|
81
|
+
def steps
|
82
|
+
@steps ||= (PROGRESS_BAR_WIDTH / env.expected_cloning_time).ceil
|
73
83
|
end
|
74
84
|
end
|
75
85
|
end
|
data/lib/pgai/version.rb
CHANGED
data/lib/pgai.rb
CHANGED
@@ -5,8 +5,14 @@ require "zeitwerk"
|
|
5
5
|
loader = Zeitwerk::Loader.for_gem
|
6
6
|
loader.setup
|
7
7
|
|
8
|
+
require "thor"
|
9
|
+
|
8
10
|
module Pgai
|
9
11
|
class Error < StandardError; end
|
10
12
|
|
13
|
+
class CliError < ::Thor::Error; end
|
14
|
+
|
11
15
|
class ResourceNotFound < Error; end
|
16
|
+
|
17
|
+
class UnauthorizedError < CliError; end
|
12
18
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pgai
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marius Bobin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -284,7 +284,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
284
284
|
- !ruby/object:Gem::Version
|
285
285
|
version: '0'
|
286
286
|
requirements: []
|
287
|
-
rubygems_version: 3.4.
|
287
|
+
rubygems_version: 3.4.19
|
288
288
|
signing_key:
|
289
289
|
specification_version: 4
|
290
290
|
summary: CLI wrapper for postgres.ai thin clones
|