fluke/devops-service/db/mongo/connectors/report.rb
2015-09-15 15:37:34 +03:00

80 lines
2.3 KiB
Ruby

require "date"
module Connectors
class Report < Base
include Helpers::ShowCommand,
Helpers::ListCommand
def initialize(db)
self.collection = db.collection('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 = nil
if options["sort"]
val = options.delete("sort")
sort = {created_at: (val == "desc" ? 1 : -1)}
end
puts "Reports: #{options}"
cursor = collection.find(options)
cursor = cursor.sort(sort) if sort
cursor.to_a.map {|bson| model_from_bson(bson)}
end
def set_report_status(jid, status)
collection.update({"_id" => jid}, {"$set" => {"status" => status, "updated_at" => Time.new}})
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