diff --git a/devops-service/expire_handler.rb b/devops-service/expire_handler.rb new file mode 100644 index 0000000..3a00ea0 --- /dev/null +++ b/devops-service/expire_handler.rb @@ -0,0 +1,45 @@ +require "commands/server" +require 'rufus-scheduler' + +class ExpireHandler + include ServerCommands + + @@scheduler = Rufus::Scheduler.start_new + + def self.add server + unless server.expires_at.nil? + if server.expires_at < Time.now.to_i + ExpireHandler.do_it server + else + time = Time.at(server.expires_at) + @@scheduler.at time, ExpireHandler.new(server, chef_env) + DevopsLogger.logger "Server '#{server.chef_node_name}' will be expired at '#{time}'" + end + end + end + + def self.init + Devops::Db.connector.servers_find({"expires_at" => {"$ne" => nil}}, nil).each do |s| + ExpireHandler.add s + end + end + + def initialize server + @server = server + end + + def call(job) + ExpireHandler.do_it @server + end + + def self.do_it server + logger = DevopsLogger.logger + logger.info("Removing node '#{server.chef_node_name}' form project '#{server.project}' and env '#{server.deploy_env}'") + begin + delete_server(server, DevopsService.mongo, logger) + rescue => e + logger.error "ExpiredHandler error: " + e.message + end + end +end +