44 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			44 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | require 'rufus-scheduler' | ||
|  | 
 | ||
|  | class ExpireHandler | ||
|  | 
 | ||
|  |   @@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 | ||
|  | 
 |