summaryrefslogtreecommitdiff
path: root/app/workers
diff options
context:
space:
mode:
authorMatija Čupić <matteeyah@gmail.com>2018-05-02 17:19:50 +0200
committerMatija Čupić <matteeyah@gmail.com>2018-05-02 17:19:50 +0200
commit45f52235d9da063bdb190b211d30c13d8b30c711 (patch)
tree912a49bdd92c47b8be035e47218d03b3ebf43d32 /app/workers
parent7a1ce56ffacbc1135fae888e76fe56a92d90a304 (diff)
downloadgitlab-ce-45f52235d9da063bdb190b211d30c13d8b30c711.tar.gz
Remove ListGcpProjectsWorker
Diffstat (limited to 'app/workers')
-rw-r--r--app/workers/list_gcp_projects_worker.rb92
1 files changed, 0 insertions, 92 deletions
diff --git a/app/workers/list_gcp_projects_worker.rb b/app/workers/list_gcp_projects_worker.rb
deleted file mode 100644
index 3e656424bf2..00000000000
--- a/app/workers/list_gcp_projects_worker.rb
+++ /dev/null
@@ -1,92 +0,0 @@
-require 'securerandom'
-
-class ListGcpProjectsWorker
- include ApplicationWorker
- include ClusterQueue
-
- LEASE_TIMEOUT = 3.seconds.to_i
- SESSION_KEY_TIMEOUT = 5.minutes
- PROJECT_TIMEOUT = 1.hour
- BILLING_CHANGED_LABELS = { state_transition: nil }.freeze
-
- def self.get_session_token(token_key)
- Gitlab::Redis::SharedState.with do |redis|
- redis.get(get_redis_session_key(token_key))
- end
- end
-
- def self.store_session_token(token)
- generate_token_key.tap do |token_key|
- Gitlab::Redis::SharedState.with do |redis|
- redis.set(get_redis_session_key(token_key), token, ex: SESSION_KEY_TIMEOUT)
- end
- end
- end
-
- def self.read_projects(token)
- Gitlab::Redis::SharedState.with do |redis|
- value = redis.get(redis_shared_state_key_for(token))
- value ? JSON.parse(value) : []
- end
- end
-
- def perform(token_key)
- return unless token_key
-
- token = self.class.get_session_token(token_key)
- return unless token
- return unless try_obtain_lease_for(token)
-
- billing_enabled_projects = ListGcpProjectsService.new.execute(token)
- update_billing_change_counter(!self.class.read_projects(token).empty?, !billing_enabled_projects.empty?)
- self.class.store_projects(token, billing_enabled_projects.to_json)
- end
-
- private
-
- def self.generate_token_key
- SecureRandom.uuid
- end
-
- def self.get_redis_session_key(token_key)
- "gitlab:gcp:session:#{token_key}"
- end
-
- def self.redis_shared_state_key_for(token)
- "gitlab:gcp:#{Digest::SHA1.hexdigest(token)}:projects"
- end
-
- def self.store_projects(token, value)
- Gitlab::Redis::SharedState.with do |redis|
- redis.set(redis_shared_state_key_for(token), value, ex: PROJECT_TIMEOUT)
- end
- end
-
- def try_obtain_lease_for(token)
- Gitlab::ExclusiveLease
- .new("list_gcp_projects_worker:#{token.hash}", timeout: LEASE_TIMEOUT)
- .try_obtain
- end
-
- def billing_changed_counter
- @billing_changed_counter ||= Gitlab::Metrics.counter(
- :gcp_billing_change_count,
- "Counts the number of times a GCP project changed billing_enabled state from false to true",
- BILLING_CHANGED_LABELS
- )
- end
-
- def state_transition(previous_state, current_state)
- if previous_state.nil? && !current_state
- 'no_billing'
- elsif previous_state.nil? && current_state
- 'with_billing'
- elsif !previous_state && current_state
- 'billing_configured'
- end
- end
-
- def update_billing_change_counter(previous_state, current_state)
- billing_changed_counter.increment(state_transition: state_transition(previous_state, current_state))
- end
-end