cloudoutput.dao.ReportDataDAO.java Source code

Java tutorial

Introduction

Here is the source code for cloudoutput.dao.ReportDataDAO.java

Source

/* 
 * Copyright (c) 2010-2012 Thiago T. S
 * 
 * This file is part of cloudoutput.
 *
 * cloudoutput is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * cloudoutput is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * For more information about your rights as a user of cloudoutput,
 * refer to the LICENSE file or see <http://www.gnu.org/licenses/>.
 */

package cloudoutput.dao;

import cloudoutput.database.Database;
import cloudoutput.database.HibernateUtil;
import cloudoutput.models.ReportData;
import java.util.List;
import java.util.TreeMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

public class ReportDataDAO {

    public void insertHostData(String type, String datacenterName, int hostId, double time, double amount,
            int simulationId) {

        ReportData rd = new ReportData(type, datacenterName, null, hostId, null, time, amount, simulationId);

        Session session = HibernateUtil.getSession();
        try {
            session.beginTransaction();
            session.save(rd);
            session.getTransaction().commit();
        } catch (HibernateException ex) {
            session.getTransaction().rollback();
            Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            HibernateUtil.closeSession(session);
        }
    }

    public TreeMap<Double, Double> getHostUsedResources(String type, String datacenterName, int hostId) {
        List<ReportData> dataList = null;
        Session session = HibernateUtil.getSession();
        try {
            dataList = (List<ReportData>) session.createCriteria(ReportData.class)
                    .add(Restrictions.conjunction().add(Restrictions.eq("type", type))
                            .add(Restrictions.eq("datacenterName", datacenterName))
                            .add(Restrictions.eq("hostId", hostId)))
                    .list();
        } catch (HibernateException ex) {
            Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            HibernateUtil.closeSession(session);
        }

        TreeMap<Double, Double> hostUsedResources = new TreeMap<Double, Double>();
        if (dataList == null)
            return hostUsedResources;
        for (ReportData rd : dataList) {
            if (type.equals("BANDWIDTH")) {
                //If bandwidth, convert from kbps to Mbps
                hostUsedResources.put(rd.getTime() / 60, rd.getAmount() / 1000);
            } else
                hostUsedResources.put(rd.getTime() / 60, rd.getAmount());
        }

        return hostUsedResources;
    }

    /**
     * Inserts report data related to resource usage of a given virtual machine.
     *
     * @param type          the type of the used resource.
     * @param customerName  the name of the customer that owns the virtual machine.
     * @param vmId          the id of the virtual machine.
     * @param time          the instant of time which the data being inserted refers to.
     * @param amount        the amount of resources being used by the virtual machine at
     *                      <code>time</code>.
     * @param simulationId  the identification number of the simulation.
     *
     * @see                 ReportData
     * @since               1.0
     */
    public void insertVmData(String type, String customerName, int vmId, double time, double amount,
            int simulationId) {

        ReportData rd = new ReportData(type, null, customerName, null, vmId, time, amount, simulationId);

        Session session = HibernateUtil.getSession();
        try {
            session.beginTransaction();
            session.save(rd);
            session.getTransaction().commit();
        } catch (HibernateException ex) {
            session.getTransaction().rollback();
            Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            HibernateUtil.closeSession(session);
        }
    }

    /** 
     * Gets a report of resources usage of a given virtual machine.
     *
     * @param   type            the type of the used resource.
     * @param   customerName    the name of the customer that owns the virtual machine.
     * @param   vmId            the id of the virtual machine.
     * @return                  a map with values of time as keys and values of
     *                          used resources as values.
     * @see                     ReportData
     * @since                   1.0
     */
    public TreeMap<Double, Double> getVmUsedResources(String type, String customerName, int vmId) {
        List<ReportData> dataList = null;
        Session session = HibernateUtil.getSession();
        try {
            dataList = (List<ReportData>) session.createCriteria(ReportData.class)
                    .add(Restrictions.conjunction().add(Restrictions.eq("type", type))
                            .add(Restrictions.eq("customerName", customerName)).add(Restrictions.eq("vmId", vmId)))
                    .list();
        } catch (HibernateException ex) {
            Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            HibernateUtil.closeSession(session);
        }

        TreeMap<Double, Double> vmUsedResources = new TreeMap<Double, Double>();
        if (dataList == null)
            return vmUsedResources;
        for (ReportData rd : dataList) {
            if (type.equals("BANDWIDTH")) {
                //If bandwidth, convert from kbps to Mbps
                vmUsedResources.put(rd.getTime() / 60, rd.getAmount() / 1000);
            } else {
                vmUsedResources.put(rd.getTime() / 60, rd.getAmount());
            }
        }

        return vmUsedResources;
    }

    /** 
     * Inserts report data related to overall resource usage of a given datacenter.
     *
     * @param   type            the type of the used resource.
     * @param   datacenterName  the name of the datacenter.
     * @param   time            the instant of time which the data being inserted refers to.
     * @param   amount          the overall amount of resources being used by 
     *                          the datacenter at <code>time</code>.
     * @param   simulationId    the identification number of the simulation.
     * 
     * @see                     ReportData
     * @since                   1.0
     */
    public void insertDatacenterOverallData(String type, String datacenterName, double time, double amount,
            int simulationId) {

        ReportData rd = new ReportData(type, datacenterName, null, time, amount, simulationId);

        Session session = HibernateUtil.getSession();
        try {
            session.beginTransaction();
            session.save(rd);
            session.getTransaction().commit();
        } catch (HibernateException ex) {
            session.getTransaction().rollback();
            Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            HibernateUtil.closeSession(session);
        }
    }

    /** 
     * Gets a report of overall resources usage of a given datacenter.
     *
     * @param   type            the type of the used resource.
     * @param   datacenterName  the name of the datacenter.
     * @return                  a map with values of time as keys and values of
     *                          used resources as values.
     * @see                     ReportData
     * @since                   1.0
     */
    public TreeMap<Double, Double> getDatacenterOverallData(String type, String datacenterName) {
        List<ReportData> dataList = null;
        Session session = HibernateUtil.getSession();
        try {
            dataList = (List<ReportData>) session.createCriteria(ReportData.class)
                    .add(Restrictions.conjunction().add(Restrictions.eq("type", type))
                            .add(Restrictions.eq("datacenterName", datacenterName))
                            .add(Restrictions.isNull("hostId")))
                    .list();
        } catch (HibernateException ex) {
            Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            HibernateUtil.closeSession(session);
        }

        TreeMap<Double, Double> overallUsedResources = new TreeMap<Double, Double>();
        if (dataList == null)
            return overallUsedResources;
        for (ReportData rd : dataList) {
            if (type.equals("BANDWIDTH")) {
                //If bandwidth, convert from kbps to Mbps
                overallUsedResources.put(rd.getTime() / 60, rd.getAmount() / 1000);
            } else {
                overallUsedResources.put(rd.getTime() / 60, rd.getAmount());
            }
        }

        return overallUsedResources;
    }

    /** 
     * Inserts report data related to overall resource usage of a given customer.
     *
     * @param   type            the type of the used resource.
     * @param   customerName    the name of the customer.
     * @param   time            the instant of time which the data being inserted refers to.
     * @param   amount          the overall amount of resources being used by 
     *                          the customer at <code>time</code>.
     * @param   simulationId    the identification number of the simulation.
     * 
     * @see                     ReportData
     * @since                   1.0
     */
    public void insertCustomerOverallData(String type, String customerName, double time, double amount,
            int simulationId) {

        ReportData rd = new ReportData(type, null, customerName, time, amount, simulationId);

        Session session = HibernateUtil.getSession();
        try {
            session.beginTransaction();
            session.save(rd);
            session.getTransaction().commit();
        } catch (HibernateException ex) {
            session.getTransaction().rollback();
            Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            HibernateUtil.closeSession(session);
        }
    }

    /**
     * Gets a report of overall resources usage of a given customer.
     *
     * @param type          the type of the used resource.
     * @param customerName  the name of the customer.
     * @return              a map with values of time as keys and values of
     *                      used resources as values.
     * @see                 ReportData
     * @since               1.0
     */
    public TreeMap<Double, Double> getCustomerOverallData(String type, String customerName) {
        List<ReportData> dataList = null;
        Session session = HibernateUtil.getSession();
        try {
            dataList = (List<ReportData>) session.createCriteria(ReportData.class)
                    .add(Restrictions.conjunction().add(Restrictions.eq("type", type))
                            .add(Restrictions.eq("customerName", customerName)).add(Restrictions.isNull("vmId")))
                    .list();
        } catch (HibernateException ex) {
            Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            HibernateUtil.closeSession(session);
        }

        TreeMap<Double, Double> overallUsedResources = new TreeMap<Double, Double>();
        if (dataList == null)
            return overallUsedResources;
        for (ReportData rd : dataList) {
            if (type.equals("BANDWIDTH")) {
                //If bandwidth, convert from kbps to Mbps
                overallUsedResources.put(rd.getTime() / 60, rd.getAmount() / 1000);
            } else {
                overallUsedResources.put(rd.getTime() / 60, rd.getAmount());
            }
        }

        return overallUsedResources;
    }

    /**
     * Inserts a list of report data into the database.
     *
     * @param   dataList    the list of report data to be inserted.
     * @see                 ReportData
     * @since               1.0
     */
    public void insertDataList(List<ReportData> dataList) {
        Session session = HibernateUtil.getSession();
        try {
            session.beginTransaction();

            for (ReportData data : dataList) {
                session.save(data);
            }

            session.getTransaction().commit();
        } catch (HibernateException ex) {
            session.getTransaction().rollback();
            Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            HibernateUtil.closeSession(session);
        }
    }

}