Package jp.co.acroquest.endosnipe.javelin.resource.hadoop

Source Code of jp.co.acroquest.endosnipe.javelin.resource.hadoop.HadoopNameNodeGetter

/*******************************************************************************
* ENdoSnipe 5.0 - (https://github.com/endosnipe)
*
* The MIT License (MIT)
*
* Copyright (c) 2012 Acroquest Technology Co.,Ltd.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
******************************************************************************/
package jp.co.acroquest.endosnipe.javelin.resource.hadoop;

import java.lang.management.ManagementFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.management.AttributeNotFoundException;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.ReflectionException;

import jp.co.acroquest.endosnipe.common.config.JavelinConfig;
import jp.co.acroquest.endosnipe.common.entity.DisplayType;
import jp.co.acroquest.endosnipe.common.entity.ItemType;
import jp.co.acroquest.endosnipe.common.entity.ResourceItem;
import jp.co.acroquest.endosnipe.common.logger.SystemLogger;
import jp.co.acroquest.endosnipe.javelin.converter.hadoop.DfsNodeInfo;
import jp.co.acroquest.endosnipe.javelin.converter.hadoop.HadoopMeasurementInfo;
import net.arnx.jsonic.JSON;
import net.arnx.jsonic.JSONException;

/**
* Hadoop NameNode �̏����擾����Getter�B
*
* @author Ochiai
*/
public class HadoopNameNodeGetter extends HadoopGetter
{
    /** MBeanServer */
    private static MBeanServer  server__                =
                                                          ManagementFactory.getPlatformMBeanServer();

    /** NameNode �� JMX �� ObjectName ��\�������� */
    private static final String OBJECT_NAME_NAMENODE    = "hadoop:service=NameNode,name=NameNodeInfo";

    /** HDFS�S�̂̋󂫗e�ʂ�Attribute */
    private static final String ATTRIBUTE_DFS_REMAINING = "Free";

    /** HDFS�S�̂̎g�p�ʂ�Attribute */
    private static final String ATTRIBUTE_DFS_USED      = "Used";

    /** LiveNode��Attribute */
    private static final String ATTRIBUTE_LIVE_NODES    = "LiveNodes";

    /** dfsused �� suffix */
    private static final String SUFFIX_DFSUSED          = "/dfsused";

    /** dfsremaining �� suffix */
    private static final String SUFFIX_DFSREMAINING     = "/dfsremaining";
   
    /** ���̑��m�[�h��� �� suffix */
    private static final String SUFFIX_NODEINFO     = "/nodeinfo";

    /** hdfs �� prefix */
    private static final String PREFIX_HDFS             = "/hdfs";

    /** hdfs �S�̂�\�������� */
    private static final String HDFS_ALL                = "/--all--";

    /** JMX�̌��ʂ́AusedSpace��\��key */
    private static final String KEY_USED_SPACE          = "usedSpace";

    /** Javelin�ݒ� */
    private JavelinConfig config_              = new JavelinConfig();
   
    /**
     * JMX�̌v���l���擾���邽�߂̃N���X�����������܂��B
     *
     */
    public HadoopNameNodeGetter()
    {
    }

    /**
     * JMX�v���l���擾���܂��B<br />
     *
     * @return JMX�v���l�̃��X�g
     */
    public List<ResourceItem> getValues()
    {
        SystemLogger.getInstance().info("HadoopNameNodeGetter.getValues() : start");
       
        List<ResourceItem> returnList = new ArrayList<ResourceItem>();

        if (config_.isCollectHadoopAgentResources() == false)
        {
            return returnList;
        }
       
        // NameNode �̃f�[�^�擾�Ώ�ObjectName
        ObjectName nameNodeInfoObjectName = null;
        try
        {
            nameNodeInfoObjectName = new ObjectName(OBJECT_NAME_NAMENODE);
        }
        catch (MalformedObjectNameException ex)
        {
            SystemLogger.getInstance().warn(ex);
            return returnList;
        }

        // HDFS�S�̂̋󂫗e�ʁA�g�p�ʂ��擾����
        Number dfsRemaining = HadoopMeasurementInfo.getInstance().getCapacityRemaining();
        if (dfsRemaining != null)
        {
            ResourceItem dfsRemainingItem =
                                            createResourceItem(nameNodeInfoObjectName, PREFIX_HDFS
                                                                       + HDFS_ALL
                                                                       + SUFFIX_DFSREMAINING,
                                                               dfsRemaining,
                                                               ItemType.ITEMTYPE_LONG);
            returnList.add(dfsRemainingItem);

        }

        Number dfsUsed = HadoopMeasurementInfo.getInstance().getCapacityUsed();
        if (dfsUsed != null)
        {
            ResourceItem dfsUsedItem =
                                       createResourceItem(nameNodeInfoObjectName, PREFIX_HDFS
                                                                  + HDFS_ALL + SUFFIX_DFSUSED,
                                                          dfsUsed,
                                                          ItemType.ITEMTYPE_LONG);
            returnList.add(dfsUsedItem);
        }

      Map<String, DfsNodeInfo> liveNodes = HadoopMeasurementInfo.getInstance().getDfsNodeInfo();
     
        List<String> inputNames = new ArrayList<String>();
        inputNames.addAll(liveNodes.keySet());
        List<String> resolvedNames = HadoopMeasurementInfo.getInstance().resolve(inputNames);
        for (int index = 0; index < inputNames.size(); index++)
        {
            String serverName = inputNames.get(index);
            String rackName = resolvedNames.get(index);
            StringBuilder builder = new StringBuilder();
            builder.append(PREFIX_HDFS);
            builder.append("/");
            builder.append(serverName);
            builder.append(SUFFIX_NODEINFO);

            String nodeInfoItemName = builder.toString();
            String nodeInfoValue = "{\"rack-name\":\"" + rackName + "\"}";
            ResourceItem datanodeDfsUsedItem =
                                               createResourceItem(nameNodeInfoObjectName,
                                                                  nodeInfoItemName,
                                                                  nodeInfoValue,
                                                                  ItemType.ITEMTYPE_LONG);
            returnList.add(datanodeDfsUsedItem);

        }

        for (Entry<String, DfsNodeInfo> liveNode : liveNodes.entrySet())
        {
            String hostname = liveNode.getKey();
            long datanodeDfsUsed = liveNode.getValue().getDfsUsed();
            long datanodeDfsTotal = liveNode.getValue().getCapacity();

            // ItemName �ƂȂ镶����
            StringBuilder builder = new StringBuilder();
            builder.append(PREFIX_HDFS);
            builder.append("/");
            builder.append(hostname);
            String dfsRemainingItemName = builder.toString() + SUFFIX_DFSREMAINING;
            String dfsUsedItemName = builder.toString() + SUFFIX_DFSUSED;

            ResourceItem datanodeDfsRemainingItem =
                                                    createResourceItem(nameNodeInfoObjectName,
                                                                       dfsRemainingItemName,
                                                                       (datanodeDfsTotal - datanodeDfsUsed),
                                                                       ItemType.ITEMTYPE_LONG);

            ResourceItem datanodeDfsUsedItem =
                                               createResourceItem(nameNodeInfoObjectName,
                                                                  dfsUsedItemName,
                                                                  datanodeDfsUsed,
                                                                  ItemType.ITEMTYPE_LONG);
            returnList.add(datanodeDfsRemainingItem);
            returnList.add(datanodeDfsUsedItem);
        }

        return returnList;
    }

    /**
     * JMX��long�l���擾����
     *
     * @param objectName �擾����ΏۂƂȂ�I�u�W�F�N�g��
     * @param attribute �擾����ΏۂƂȂ鑮����
     * @return JMX�̒l���擾�������ʁilong�l�j
     */
    private Number getJMXValueLong(ObjectName objectName, String attribute)
    {
        Number valueObj = null;

        try
        {
            // JMX�̌v���l���擾����
            Object value = server__.getAttribute(objectName, attribute);

            if (value instanceof Number)
            {
                valueObj = (Number) value;
            }
            else
            {
                SystemLogger.getInstance().warn("Type error. objectName=" + objectName
                                                         + ",attribute=" + attribute + ",value="
                                                         + value);
            }
        }
        catch (AttributeNotFoundException ex)
        {
            SystemLogger.getInstance().warn(ex);
        }
        catch (InstanceNotFoundException ex)
        {
            SystemLogger.getInstance().warn(ex);
        }
        catch (MBeanException ex)
        {
            SystemLogger.getInstance().warn(ex);
        }
        catch (ReflectionException ex)
        {
            SystemLogger.getInstance().warn(ex);
        }

        return valueObj;
    }

    /**
     * ResourceItem���쐬����
     *
     * @param objectName �擾����ΏۂƂȂ�I�u�W�F�N�g��
     * @param name Item Name
     * @return JMX�̒l���擾�������ʂ� ResourceItem �̌`���ŕԂ�
     */
    private ResourceItem createResourceItem(ObjectName objectName, String name, Number value,
            ItemType itemType)
    {
        ResourceItem retValue = new ResourceItem();

        retValue.setValue(String.valueOf(value));
        retValue.setItemType(itemType);
        retValue.setObjectName(objectName.toString());
        retValue.setName(name);
        retValue.setObjectDisplayNeme(objectName.toString());
        retValue.setDisplayName(name);
        retValue.setDisplayType(DisplayType.DISPLAYTYPE_NORMAL);

        return retValue;
    }

    /**
     * ResourceItem���쐬����
     *
     * @param objectName �擾����ΏۂƂȂ�I�u�W�F�N�g��
     * @param name Item Name
     * @return JMX�̒l���擾�������ʂ� ResourceItem �̌`���ŕԂ�
     */
    private ResourceItem createResourceItem(ObjectName objectName, String name, String value,
            ItemType itemType)
    {
        ResourceItem retValue = new ResourceItem();

        retValue.setValue(String.valueOf(value));
        retValue.setItemType(itemType);
        retValue.setObjectName(objectName.toString());
        retValue.setName(name);
        retValue.setObjectDisplayNeme(objectName.toString());
        retValue.setDisplayName(name);
        retValue.setDisplayType(DisplayType.DISPLAYTYPE_NORMAL);

        return retValue;
    }
   
    /**
     * {@inheritDoc}
     */
    public ItemType getItemType()
    {
        //return ItemType.ITEMTYPE_LONG;
        return ItemType.ITEMTYPE_STRING;
    }

}
TOP

Related Classes of jp.co.acroquest.endosnipe.javelin.resource.hadoop.HadoopNameNodeGetter

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.