souls 1.9.11 → 1.9.12

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: f30491de141e0ea11f97bdb7a03b14cbe70ac161f7e480ff7ea235cf730324ca
4
- data.tar.gz: 53f3b274ba7834e0279be8b304ff669183861c282125db8d5576f22cd5168f61
3
+ metadata.gz: 30e75a60a55603333c57c9cfbd45ec5c9a16854cda31c29d1a840439c221967f
4
+ data.tar.gz: 2019911a647b0784122a025f8225b8b277544bbe96055e6851277e2da7974ebc
5
5
  SHA512:
6
- metadata.gz: fd53298937c0438c4b6542483fe195f63322218802e16b5c52e7147b1d60bf11a2af259b730e3016a2f11ae812df717ad15460ff9a1c40e67a49f851b25c8cba
7
- data.tar.gz: 267823450763ccb227c9f258965603ee60c359f14404d16b0ae4e8b941051a61da67cda2b5d5bf07875bcf937f44c415a4ef8599dcf31b9d0851a1b4a4f1c14c
6
+ metadata.gz: d75036d900131455cd301b3170b51a778c99bae004123e9be4ffc0ace011bcdc98848a931ad76713cf4a8f10afe57bca4d7e41ecf14bd328e9fbdd5696fd46fc
7
+ data.tar.gz: e5d25f3dfd8617030124e34de5e0c1ad374099e5a57da3c4bdf44c63354adc72e907d106e3cb9173dab7d29093f8d26f77104386e43e6ed45d309a33932ffd75
@@ -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
@@ -95,8 +95,7 @@ module Souls
95
95
  "roles/storage.admin",
96
96
  "roles/storage.objectAdmin",
97
97
  "roles/cloudscheduler.admin",
98
- "roles/appengine.appCreator",
99
- "roles/cloudscheduler.admin"
98
+ "roles/appengine.appCreator"
100
99
  ]
101
100
  roles.each do |role|
102
101
  add_service_account_role(role: role)
@@ -15,14 +15,44 @@ module Souls
15
15
  require("./app")
16
16
  Souls::Gcloud.new.config_set
17
17
  project_id = Souls.configuration.project_id
18
+
19
+ schedules_list = current_schedules
20
+
18
21
  Queries::BaseQuery.all_schedules.each do |k, v|
19
22
  worker_name = FileUtils.pwd.split("/").last
20
- job_name = "#{worker_name}_#{k.to_s.underscore}"
21
- system("gcloud scheduler jobs delete #{job_name} -q >/dev/null 2>&1")
22
- system(
23
- <<~COMMAND)
24
- gcloud scheduler jobs create pubsub #{job_name} --project=#{project_id} --quiet --schedule="#{v}" --topic="#{k}" --attributes="" --message-body="#{k}"
25
- 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}" --attributes="" --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
+ schedule_list.each do |k, _|
43
+ system("gcloud scheduler jobs delete #{k} -q >/dev/null 2>&1")
44
+ end
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
26
56
  end
27
57
  end
28
58
  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
@@ -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.11".freeze
2
+ VERSION = "1.9.12".freeze
3
3
  public_constant :VERSION
4
4
  end
@@ -1 +1 @@
1
- 1.9.11
1
+ 1.9.12
@@ -1 +1 @@
1
- 1.9.11
1
+ 1.9.12
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.11
4
+ version: 1.9.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - POPPIN-FUMI
@@ -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