From ef26dc19e427c9891b92c0d946846042e17607fd Mon Sep 17 00:00:00 2001 From: Anton Chuchkalov Date: Tue, 21 Jul 2015 18:13:10 +0400 Subject: [PATCH] autosync stack after creating till status not changed --- devops-service/commands/stack.rb | 10 +++++++--- devops-service/db/mongo/connectors/report.rb | 4 ++++ .../db/mongo/models/stack/stack_openstack.rb | 2 +- devops-service/db/mongo/mongo_connector.rb | 2 +- devops-service/routes/v2.0/handlers/stack_preset.rb | 1 + devops-service/workers/stack_sync_worker.rb | 8 ++++---- 6 files changed, 18 insertions(+), 9 deletions(-) diff --git a/devops-service/commands/stack.rb b/devops-service/commands/stack.rb index b125d67..0ea2316 100644 --- a/devops-service/commands/stack.rb +++ b/devops-service/commands/stack.rb @@ -2,16 +2,20 @@ module StackCommands def sync_stack_till_not_in_progress_proc lambda do |out, stack, mongo| + # two tries each 5 seconds, then 5 tries each 10 seconds, then 5 tries each minute. + sleep_times = [5]*2 + [10]*5 + [60]*5 + begin - 10.times do |i| - sleep 10 - out << "Syncing stack '#{stack.id}'..." + out << "Syncing stack '#{stack.id}'...\n" + sleep_times.each do |sleep_time| + sleep sleep_time stack.sync_details! if stack.stack_status != 'CREATE_IN_PROGRESS' mongo.stack_update(stack) out << "Stack '#{stack.id}' status is now #{stack.stack_status}" break end + out << "Next try...\n" end rescue StandardError => e logger.error e.message diff --git a/devops-service/db/mongo/connectors/report.rb b/devops-service/db/mongo/connectors/report.rb index 43ae963..b5ea994 100644 --- a/devops-service/db/mongo/connectors/report.rb +++ b/devops-service/db/mongo/connectors/report.rb @@ -38,6 +38,10 @@ module Connectors list(options) end + def set_report_status(jid, status) + # TODO: merge from novartis + end + private def model_from_bson(bson) diff --git a/devops-service/db/mongo/models/stack/stack_openstack.rb b/devops-service/db/mongo/models/stack/stack_openstack.rb index 62918ae..13818d9 100644 --- a/devops-service/db/mongo/models/stack/stack_openstack.rb +++ b/devops-service/db/mongo/models/stack/stack_openstack.rb @@ -4,7 +4,7 @@ module Devops self.provider = 'openstack' def stack_status - details[:stack_status] if details + details[:stack_status] || details['stack_status'] if details end end end diff --git a/devops-service/db/mongo/mongo_connector.rb b/devops-service/db/mongo/mongo_connector.rb index c92c2f5..2522759 100644 --- a/devops-service/db/mongo/mongo_connector.rb +++ b/devops-service/db/mongo/mongo_connector.rb @@ -26,7 +26,7 @@ class MongoConnector [:user_auth, :user, :users, :users_names, :user_insert, :user_delete, :user_update, :create_root_user, :check_user_privileges] => :users_connector, [:keys, :key, :key_insert, :key_delete] => :keys_connector, - [:save_report, :report, :reports] => :reports_connector, + [:save_report, :report, :reports, :set_report_status] => :reports_connector, [:statistic] => :statistics_connector ) diff --git a/devops-service/routes/v2.0/handlers/stack_preset.rb b/devops-service/routes/v2.0/handlers/stack_preset.rb index 106d638..63f5682 100644 --- a/devops-service/routes/v2.0/handlers/stack_preset.rb +++ b/devops-service/routes/v2.0/handlers/stack_preset.rb @@ -34,6 +34,7 @@ module Devops jid = StackSyncWorker.perform_async( DevopsConfig[:report_dir_v2], + stack.provider, stack.id, request.env['REMOTE_USER'], # owner DevopsConfig.config diff --git a/devops-service/workers/stack_sync_worker.rb b/devops-service/workers/stack_sync_worker.rb index de60193..7400436 100644 --- a/devops-service/workers/stack_sync_worker.rb +++ b/devops-service/workers/stack_sync_worker.rb @@ -10,8 +10,8 @@ require "db/mongo/models/report" class StackSyncWorker < Worker include StackCommands - def perform(dir, stack_id, owner, conf) - call(conf, nil, dir) do |mongo, useless, out, file| + def perform(dir, provider, stack_id, owner, conf) + call(conf, provider, dir) do |mongo, provider, out, file| stack = mongo.stack(stack_id) o = { "file" => file, @@ -19,9 +19,9 @@ class StackSyncWorker < Worker "created_by" => owner, "project" => stack.project, "deploy_env" => stack.deploy_env, - "type" => Report::STACK_TYPE + "type" => ::Devops::Model::Report::STACK_TYPE } - mongo.save_report(Report.new(o)) + mongo.save_report(::Devops::Model::Report.new(o)) status = sync_stack_till_not_in_progress_proc.call(out, stack, mongo) status