/* * * Copyright 2013 Netflix, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package com.netflix.ice.basic; import com.google.common.collect.Lists; import com.netflix.ice.common.ProductService; import com.netflix.ice.common.ResourceService; import com.netflix.ice.processor.ProcessorConfig; import com.netflix.ice.tag.Account; import com.netflix.ice.tag.Product; import com.netflix.ice.tag.Region; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.List; /** * */ public class SampleMapDbResourceService extends ResourceService { public static final String UNKNOWN = "unknown"; private static final Logger logger = LoggerFactory.getLogger(SampleMapDbResourceService.class); private static List<List<Product>> productsWithResources = Lists.<List<Product>>newArrayList( Lists.newArrayList(Product.ec2, Product.ec2_instance, Product.ebs), Lists.newArrayList(Product.rds), Lists.newArrayList(Product.s3)); MapDb instanceDb; ProcessorConfig config; public void init() { config = ProcessorConfig.getInstance(); instanceDb = new MapDb("instances"); } @Override public void commit() { instanceDb.commit(); } @Override public List<List<Product>> getProductsWithResources() { return productsWithResources; } @Override public String getResource(Account account, Region region, Product product, String resourceId, String[] lineItem, long millisStart) { if (product == Product.ec2 || product == Product.ec2_instance || product == Product.ebs || product == Product.cloudwatch) { return getEc2Resource(account, region, resourceId, lineItem, millisStart); } else if (product == Product.rds) { return getRdsResource(account, region, resourceId, lineItem, millisStart); } else if (product == Product.s3) { return getS3Resource(account, region, resourceId, lineItem, millisStart); } else if (product == Product.eip) { return null; } else { return resourceId; } } protected String getEc2Resource(Account account, Region region, String resourceId, String[] lineItem, long millisStart) { String autoScalingGroupName = lineItem.length > config.lineItemProcessor.getUserTagStartIndex() ? lineItem[config.lineItemProcessor.getUserTagStartIndex()] : null; if (StringUtils.isEmpty(autoScalingGroupName)) { return UNKNOWN; } else if (resourceId.startsWith("i-")) { String appName = autoScalingGroupName.length() > 5 ? autoScalingGroupName.substring(0, 5) : autoScalingGroupName; instanceDb.SetResource(account, region, resourceId, appName, millisStart); return autoScalingGroupName; } else { return UNKNOWN; } } protected String getRdsResource(Account account, Region region, String resourceId, String[] lineItem, long millisStart) { if (resourceId.indexOf(":db:") > 0) return resourceId.substring(resourceId.indexOf(":db:") + 4); else return resourceId; } protected String getS3Resource(Account account, Region region, String resourceId, String[] lineItem, long millisStart) { return resourceId; } }