def initialize(type, name, app, url, status_messages, nolinks=false)
self.name = name
self.type = type
self.scales_from = 0
self.scales_to = nil
self.supported_scales_from = 0
self.supported_scales_to = nil
self.scales_with = nil
self.gear_profile = nil
self.current_scale = 0
self.collocated_with = []
self.status_messages = status_messages
prop_values = nil
cart = CartridgeCache.find_cartridge(name)
if app
if CartridgeCache.cartridge_names('standalone').include? name
app.comp_instance_map.each { |cname, cinst|
next if cinst.parent_cart_name!=name
prop_values = cinst.cart_properties
break
}
else
prop_values = app.embedded[name]
end
group_component_map = {}
app.comp_instance_map.each { |ci_name, ci|
if ci.parent_cart_name==name
group_component_map[ci.group_instance_name] = ci
end
}
group_component_map.each { |group_name, component|
gi = app.group_instance_map[group_name]
set_scaling_info(component, gi, cart)
}
else
set_scaling_info(nil, nil, cart)
end
self.version = cart.version
self.display_name = cart.display_name
self.description = cart.description
self.license = cart.license
self.license_url = cart.license_url
self.tags = cart.categories
self.website = cart.website
self.help_topics = cart.help_topics
self.properties = []
cart.cart_data_def.each do |data_def|
property = {}
property["name"] = data_def["Key"]
property["type"] = data_def["Type"]
property["description"] = data_def["Description"]
property["value"] = prop_values[data_def["Key"]] unless prop_values.nil? or prop_values[data_def["Key"]].nil?
self.properties << property
end
if app and !nolinks
domain_id = app.domain.namespace
app_id = app.name
if not app_id.nil? and not domain_id.nil?
self.links = {
"GET" => Link.new("Get cartridge", "GET", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}")),
"UPDATE" => Link.new("Update cartridge configuration", "PUT", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}"), nil, [
OptionalParam.new("additional_storage", "integer", "Additional filesystem storage in gigabytes on each gear having cartridge #{name}"),
OptionalParam.new("scales_from", "integer", "Minimum number of gears having cartridge #{name}"),
OptionalParam.new("scales_to", "integer", "Maximum number of gears having cartridge #{name}")
])
}
self.links.merge!({
"START" => Link.new("Start embedded cartridge", "POST", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}/events"), [
Param.new("event", "string", "event", "start")
]),
"STOP" => Link.new("Stop embedded cartridge", "POST", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}/events"), [
Param.new("event", "string", "event", "stop")
]),
"RESTART" => Link.new("Restart embedded cartridge", "POST", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}/events"), [
Param.new("event", "string", "event", "restart")
]),
"RELOAD" => Link.new("Reload embedded cartridge", "POST", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}/events"), [
Param.new("event", "string", "event", "reload")
]),
"DELETE" => Link.new("Delete embedded cartridge", "DELETE", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}"))
}) if type == "embedded"
end
end
end