Package com.netflix.ice.reader

Source Code of com.netflix.ice.reader.ReaderConfig

/*
*
*  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.reader;

import com.amazonaws.auth.AWSCredentialsProvider;
import com.netflix.ice.basic.BasicWeeklyCostEmailService;
import com.netflix.ice.common.*;
import com.netflix.ice.tag.Product;
import com.netflix.ice.tag.TagType;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.Interval;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Collection;
import java.util.Properties;

/**
* COnfiguration class for reader/UI.
*/
public class ReaderConfig extends Config {
    private static ReaderConfig instance;
    private static final Logger logger = LoggerFactory.getLogger(ReaderConfig.class);

    public final String companyName;
    public final String currencySign;
    public final double currencyRate;
    public final String highstockUrl;
    public final ApplicationGroupService applicationGroupService;
    public final ThroughputMetricService throughputMetricService;
    public final BasicWeeklyCostEmailService costEmailService;
    public final Managers managers;
    public final int monthlyCacheSize;

    /**
     *
     * @param properties (required)
     * @param managers (required)
     * @param accountService (required)
     * @param productService (required)
     * @param resourceService (optional)
     * @param applicationGroupService (optional)
     * @param throughputMetricService (optional)
     */
    public ReaderConfig(
            Properties properties,
            AWSCredentialsProvider credentialsProvider,
            Managers managers,
            AccountService accountService,
            ProductService productService,
            ResourceService resourceService,
            ApplicationGroupService applicationGroupService,
            ThroughputMetricService throughputMetricService,
            BasicWeeklyCostEmailService costEmailService) {
        super(properties, credentialsProvider, accountService, productService, resourceService);

        companyName = properties.getProperty(IceOptions.COMPANY_NAME, "");
        currencySign = properties.getProperty(IceOptions.CURRENCY_SIGN, "$");
        currencyRate = Double.parseDouble(properties.getProperty(IceOptions.CURRENCY_RATE, "1"));
        highstockUrl = properties.getProperty(IceOptions.HIGHSTOCK_URL, "http://code.highcharts.com/stock/highstock.js");

        this.managers = managers;
        this.applicationGroupService = applicationGroupService;
        this.throughputMetricService = throughputMetricService;
        this.costEmailService = costEmailService;
        this.monthlyCacheSize = Integer.parseInt(properties.getProperty(IceOptions.MONTHLY_CACHE_SIZE, "12"));

        ReaderConfig.instance = this;

//        AmazonS3Client s3Client = AwsUtils.getAmazonS3Client();
//        logger.info("Deleting all files...");
//        List<S3ObjectSummary> objectSummariesToDelete = AwsUtils.listAllObjects(instance.workS3BucketName, instance.workS3BucketPrefix);
//        for (S3ObjectSummary objectSummary : objectSummariesToDelete) {
//
//            String fileKey = objectSummary.getKey();
//
//            String name = fileKey.substring(fileKey.lastIndexOf("/") + 1);
//            if (name.startsWith("cost_") || name.startsWith("usage_") || name.startsWith("tagdb_")) {
//                s3Client.deleteObject(instance.workS3BucketName, fileKey);
//                continue;
//            }
//        }

        if (throughputMetricService != null)
            throughputMetricService.init();
        managers.init();
        applicationGroupService.init();
    }

    /**
     *
     * @return singlton instance
     */
    public static ReaderConfig getInstance() {
        return instance;
    }

    public void start() {

        Managers managers = ReaderConfig.getInstance().managers;
        Collection<Product> products = managers.getProducts();
        for (Product product: products) {
            TagGroupManager tagGroupManager = managers.getTagGroupManager(product);
            Interval interval = tagGroupManager.getOverlapInterval(new Interval(new DateTime(DateTimeZone.UTC).minusMonths(monthlyCacheSize), new DateTime(DateTimeZone.UTC)));
            if (interval == null)
                continue;
            for (ConsolidateType consolidateType: ConsolidateType.values()) {
                readData(product, managers.getCostManager(product, consolidateType), interval, consolidateType);
                readData(product, managers.getUsageManager(product, consolidateType), interval, consolidateType);
            }
        }

        if (costEmailService != null)
            costEmailService.start();
    }

    public void shutdown() {
        logger.info("Shutting down...");

        instance.managers.shutdown();
        if (instance.costEmailService != null)
            instance.costEmailService.shutdown();
    }

    private void readData(Product product, DataManager dataManager, Interval interval, ConsolidateType consolidateType) {
        if (consolidateType == ConsolidateType.hourly) {
            DateTime start = interval.getStart().withDayOfMonth(1).withMillisOfDay(0);
            do {
                int hours = dataManager.getDataLength(start);
                logger.info("found " + hours + " hours data for " + product + " "  + interval);
                start = start.plusMonths(1);
            }
            while (start.isBefore(interval.getEnd()));
        }
        else if (consolidateType == ConsolidateType.daily) {
            DateTime start = interval.getStart().withDayOfYear(1).withMillisOfDay(0);
            do {
                dataManager.getDataLength(start);
                start = start.plusYears(1);
            }
            while (start.isBefore(interval.getEnd()));
        }
        else {
            dataManager.getData(interval, new TagLists(), TagType.Account, AggregateType.both, false);
        }
    }
}
TOP

Related Classes of com.netflix.ice.reader.ReaderConfig

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.