souls 1.9.9 → 1.9.14

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a19db3fada626ed2f610127ce7da17d220e56c58d1e1654b2e4387885efe1429
4
- data.tar.gz: 9a7a590f075558a6054079af19b23409f44bc25551ced17bdeca0c55000bf07c
3
+ metadata.gz: f38e1e3e302943fc00240b194b97a78873e3940910521abec972381e5e0c6d5c
4
+ data.tar.gz: 39dd708178403c48242142fa6c726c499667dcdae0cee92976ebe0c4ebbfc64d
5
5
  SHA512:
6
- metadata.gz: e8249307010d8c995718a0a2d5dba4f7317da1c3aa32788af06798f204378f812e143975169206eaa215a23fab6b153eb064bc5a32039ead331bdf9449f92b91
7
- data.tar.gz: 2bb7d1f937b05113225404ad0d27414b9d37d7d25eb3f71b5d42f281ea96d8868d26069f3c672767a655ff2a39f65eadd45ae08b9740793893c983465def07bf
6
+ metadata.gz: 589ae3d10cd888a8fc49e63d9fd4f3c437cbb4c07f3ea1901315ca41c743aa84484346cdfd867c7417105e41e89dfd7bb53b56cac9dfe8e1af8bfb1aaaa653e3
7
+ data.tar.gz: d456976d4d3781b12873db4ff5c4abc26faa42c48a0380b8030a28b2971b2815a0c4057b704b60a3c8a5275b450f5fd9bb7fb777c50c2286718de1fa8d88db98
@@ -1,4 +1,5 @@
1
1
  require_relative "graphql/souls_query"
2
+ require_relative "utils/souls_logger"
2
3
 
3
4
  module Souls
4
5
  end
@@ -0,0 +1,55 @@
1
+ module Souls
2
+ module SoulsLogger
3
+ class Configuration
4
+ attr_accessor :logger
5
+
6
+ def initialize
7
+ @logger = nil
8
+ end
9
+ end
10
+
11
+ class << self
12
+ attr_writer :configuration
13
+ end
14
+
15
+ def self.configuration
16
+ @configuration ||= Configuration.new
17
+ end
18
+
19
+ def self.configure
20
+ yield(configuration)
21
+ end
22
+
23
+ def self.critical_log(message)
24
+ entry = write_log(message)
25
+ entry.critical!
26
+
27
+ configuration.logger.write_entries(entry)
28
+ end
29
+
30
+ def self.warning_log(message)
31
+ entry = write_log(message)
32
+ entry.warning!
33
+
34
+ configuration.logger.write_entries(entry)
35
+ end
36
+
37
+ def self.info_log(message)
38
+ entry = write_log(message)
39
+ entry.info!
40
+
41
+ configuration.logger.write_entries(entry)
42
+ end
43
+
44
+ def self.write_log(message)
45
+ entry = configuration.logger.entry
46
+ entry.payload = "#{message}\n #{message.backtrace.join("\n")}"
47
+ entry.log_name = "error"
48
+ entry.resource.type = "cloud_run_revision"
49
+ entry.resource.labels[:service_name] = "souls"
50
+ entry.resource.labels[:revision_name] = Souls::VERSION
51
+
52
+ entry
53
+ end
54
+ end
55
+ end
@@ -2,11 +2,13 @@ module Souls
2
2
  class Iam < Thor
3
3
  desc "setup_key", "Create Google Cloud IAM Service Account Key And Set All Permissions"
4
4
  def setup_key
5
+ region = Souls.configuration.region
5
6
  Souls::Gcloud.new.auth_login
6
7
  create_service_account
7
8
  create_service_account_key
8
9
  Souls::Gcloud.new.enable_permissions
9
10
  add_permissions
11
+ system("gcloud app create --region=#{region} --quiet")
10
12
  begin
11
13
  set_gh_secret_json
12
14
  rescue StandardError
@@ -92,7 +94,8 @@ module Souls
92
94
  "roles/run.admin",
93
95
  "roles/storage.admin",
94
96
  "roles/storage.objectAdmin",
95
- "roles/cloudscheduler.admin"
97
+ "roles/cloudscheduler.admin",
98
+ "roles/appengine.appCreator"
96
99
  ]
97
100
  roles.each do |role|
98
101
  add_service_account_role(role: role)
@@ -15,16 +15,47 @@ module Souls
15
15
  require("./app")
16
16
  Souls::Gcloud.new.config_set
17
17
  project_id = Souls.configuration.project_id
18
- region = Souls.configuration.region
18
+
19
+ schedules_list = current_schedules
20
+
19
21
  Queries::BaseQuery.all_schedules.each do |k, v|
20
22
  worker_name = FileUtils.pwd.split("/").last
21
- job_name = "#{worker_name}_#{k.to_s.underscore}"
22
- system("gcloud scheduler jobs delete #{job_name} -q >/dev/null 2>&1")
23
- system(
24
- <<~COMMAND)
25
- gcloud scheduler jobs create pubsub #{job_name} --project=#{project_id} --quiet --schedule="#{v}" --topic="#{k}" --attributes="" --message-body="#{k}" --location=#{region}
26
- COMMAND
23
+ job_name = "#{worker_name}_#{k.to_s.underscore}".to_sym
24
+
25
+ if schedules_list.include?(job_name)
26
+ schedule = schedules_list[job_name]
27
+ schedules_list.delete(job_name)
28
+ next if schedule == v
29
+
30
+ system(
31
+ <<~COMMAND)
32
+ gcloud scheduler jobs update pubsub #{job_name} --project=#{project_id} --quiet --schedule="#{v}" --topic="#{k}" --message-body="#{k}"
33
+ COMMAND
34
+ else
35
+ system(
36
+ <<~COMMAND)
37
+ gcloud scheduler jobs create pubsub #{job_name} --project=#{project_id} --quiet --schedule="#{v}" --topic="#{k}" --attributes="" --message-body="#{k}"
38
+ COMMAND
39
+ end
40
+ end
41
+
42
+ schedules_list.each do |k, _|
43
+ system("gcloud scheduler jobs delete #{k} -q >/dev/null 2>&1")
27
44
  end
28
45
  end
46
+
47
+ private
48
+
49
+ def current_schedules
50
+ current_schedules = {}
51
+ `gcloud scheduler jobs list`.split("\n")[1..].each do |line|
52
+ columns = line.split(/\t| {2,}/)
53
+ job_name = columns[0].to_sym
54
+ crontab = columns[2].split(" (")[0]
55
+ current_schedules[job_name] = crontab
56
+ end
57
+
58
+ current_schedules
59
+ end
29
60
  end
30
61
  end
@@ -105,16 +105,38 @@ module Souls
105
105
  end
106
106
 
107
107
  desc "assgin_ip", "Add Current Grobal IP to White List"
108
- def assign_ip(instance_name: "", ip: "")
109
- ip = `curl inet-ip.info` if ip.blank?
110
- project_id = Souls.configuration.project_id if instance_name.blank?
111
- instance_name = Souls.configuration.instance_name if instance_name.blank?
108
+ method_option :ip, default: "", aliases: "--ip", desc: "Adding IP to Google Cloud SQL White List: e.g.'11.11.1.1'"
109
+ def assign_ip
110
+ project_id = Souls.configuration.project_id
111
+ instance_name = Souls.configuration.instance_name
112
+ ips = []
113
+ ip =
114
+ if options[:ip].blank?
115
+ `curl inet-ip.info`.strip
116
+ else
117
+ options[:ip].strip
118
+ end
119
+ ips << ip
120
+ cloud_sql = JSON.parse(
121
+ `curl -X GET \
122
+ -H "Authorization: Bearer "$(gcloud auth print-access-token) \
123
+ "https://sqladmin.googleapis.com/v1/projects/#{project_id}/instances/#{instance_name}?fields=settings"`
124
+ )
125
+ unless cloud_sql["settings"]["ipConfiguration"]["authorizedNetworks"].blank?
126
+ white_ips =
127
+ cloud_sql["settings"]["ipConfiguration"]["authorizedNetworks"].map do |sql_ips|
128
+ sql_ips["value"]
129
+ end
130
+ ips = (ips + white_ips).uniq
131
+ end
132
+ ips = ips.join(",")
112
133
  system(
113
134
  "
114
135
  gcloud sql instances patch #{instance_name} \
115
136
  --project=#{project_id} \
116
137
  --assign-ip \
117
- --authorized-networks=#{ip}
138
+ --authorized-networks=#{ips} \
139
+ --quiet
118
140
  "
119
141
  )
120
142
  end
@@ -139,9 +139,9 @@ module Souls
139
139
  write_txt +=
140
140
  if gem[0] == "souls"
141
141
  if local
142
- " gem \"souls\", \"#{version}\", path: \"~/.local_souls/\"\n"
142
+ " gem \"souls\", \"#{version}\", path: \"~/.local_souls/\"\n"
143
143
  else
144
- " gem \"souls\", \"#{version}\"\n"
144
+ " gem \"souls\", \"#{version}\"\n"
145
145
  end
146
146
  else
147
147
  line
@@ -2,6 +2,7 @@ module Souls
2
2
  class Sync < Thor
3
3
  desc "pubsub", "Sync Worker Jobs & Google Cloud Pubsub Subscriptions"
4
4
  def pubsub
5
+ get_worker_endpoints
5
6
  Souls::Gcloud.new.config_set
6
7
  get_topics(workers: get_workers)
7
8
  puts(Paint["All Jobs Synced with PubSub Subscription!", :green])
@@ -9,6 +10,17 @@ module Souls
9
10
 
10
11
  private
11
12
 
13
+ def get_worker_endpoints
14
+ require("#{Souls.get_mother_path}/config/souls")
15
+ worker_paths = Souls.configuration.workers
16
+ worker_paths.each do |worker|
17
+ endpoint = worker[:endpoint]
18
+ unless endpoint.include?("https://")
19
+ raise(StandardError, "You need to set endpoint.\nPlease Run:\n\n$ souls sync conf\n\n")
20
+ end
21
+ end
22
+ end
23
+
12
24
  def get_topics(workers: {})
13
25
  project_id = Souls.configuration.project_id
14
26
  pubsub = Google::Cloud::Pubsub.new(project_id: project_id)
data/lib/souls/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Souls
2
- VERSION = "1.9.9".freeze
2
+ VERSION = "1.9.14".freeze
3
3
  public_constant :VERSION
4
4
  end
@@ -1 +1 @@
1
- 1.9.9
1
+ 1.9.14
@@ -1 +1 @@
1
- 1.9.9
1
+ 1.9.14
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: souls
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.9
4
+ version: 1.9.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - POPPIN-FUMI
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2021-11-26 00:00:00.000000000 Z
13
+ date: 2021-11-29 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -130,6 +130,7 @@ files:
130
130
  - lib/souls.rb
131
131
  - lib/souls/app/graphql/souls_query.rb
132
132
  - lib/souls/app/index.rb
133
+ - lib/souls/app/utils/souls_logger.rb
133
134
  - lib/souls/cli.rb
134
135
  - lib/souls/cli/cli_exception.rb
135
136
  - lib/souls/cli/console/index.rb