89 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require "date"
 | |
| 
 | |
| module Connectors
 | |
|   class Report < Base
 | |
|     include Helpers::ShowCommand,
 | |
|       Helpers::UpdateCommand,
 | |
|       Helpers::ListCommand
 | |
| 
 | |
|     def initialize(db)
 | |
|       super(db)
 | |
|     end
 | |
| 
 | |
|     def collection_name
 | |
|       'reports'
 | |
|     end
 | |
| 
 | |
|     def save_report r
 | |
|       r.created_at = Time.new
 | |
|       collection.insert(r.to_mongo_hash) unless report_exists?(r.id)
 | |
|     end
 | |
| 
 | |
|     def report_exists? id
 | |
|       !collection.find({"_id" => id}, fields: ["_id" => true]).to_a.empty?
 | |
|     end
 | |
| 
 | |
|     def reports options={}
 | |
|       date = {}
 | |
|       if options.has_key?("date_from") or options.has_key?("date_to")
 | |
|         if options.has_key?("date_from")
 | |
|           begin
 | |
|             d = Date.parse(options["date_from"])
 | |
|             date["$gte"] = d.to_time
 | |
|           rescue ArgumentError
 | |
|           end
 | |
|         end
 | |
|         if options.has_key?("date_to")
 | |
|           begin
 | |
|             d = Date.parse(options["date_to"])
 | |
|             date["$lt"] = d.to_time
 | |
|           rescue ArgumentError
 | |
|           end
 | |
|         end
 | |
|         options.delete("date_from")
 | |
|         options.delete("date_to")
 | |
|         options["created_at"] = date unless date.empty?
 | |
|       end
 | |
|       sort = {created_at: -1}
 | |
|       if options["sort"]
 | |
|         val = options.delete("sort")
 | |
|         sort = {created_at: (val == "desc" ? -1 : 1)}
 | |
|       end
 | |
|       collection.find(options).sort(sort).to_a.map {|bson| model_from_bson(bson)}
 | |
|     end
 | |
| 
 | |
|     def add_report_subreports(jid, subreports)
 | |
|       collection.update({"_id" => jid}, {"$push" => {"subreports" => {"$each" => subreports}}})
 | |
|     end
 | |
| 
 | |
|     def set_report_status(jid, status, job_result_code)
 | |
|       set = {"status" => status, "updated_at" => Time.new}
 | |
|       set["job_result_code"] = job_result_code unless job_result_code.nil?
 | |
|       collection.update({"_id" => jid}, {"$set" => set})
 | |
|       DevopsLogger.logger.info("Report '#{jid}' status has been changed to '#{status}'")
 | |
|     end
 | |
| 
 | |
|     def set_report_server_data id, chef_node_name, host
 | |
|       collection.update({"_id" => id}, {"$set" => {"chef_node_name" => chef_node_name, "host" => host}})
 | |
|     end
 | |
| 
 | |
|     def create_indexes
 | |
|       info = collection.index_information
 | |
|       unless info["created_at_1"]
 | |
|         collection.create_index({created_at: Mongo::ASCENDING})
 | |
|         DevopsLogger.logger.info("Index 'created_at_1' for reports collection has been created")
 | |
|       end
 | |
|       unless info["project_1_deploy_env_1_created_at_1"]
 | |
|         collection.create_index({project: Mongo::ASCENDING, deploy_env: Mongo::ASCENDING, created_at: Mongo::ASCENDING})
 | |
|         DevopsLogger.logger.info("Index 'project_1_deploy_env_1_created_at_1' for reports collection has been created")
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     private
 | |
| 
 | |
|     def model_from_bson(bson)
 | |
|       Devops::Model::Report.new(bson)
 | |
|     end
 | |
|   end
 | |
| end
 | 
