package com.platform.utils; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.springframework.stereotype.Service; import com.base.Custom4exception; import com.base.CustomException; import com.platform.entities.Brick; import com.platform.entities.FolderNode; import com.platform.entities.VolumeEntity; import com.platform.glusterfs.ClusterInfo; import com.platform.glusterfs.GetTreeData; import com.platform.glusterfs.VolumeInfo; public class ThreadVolume extends Thread implements Runnable{ /** * 挂载点路径 -- 暂时无用的 */ private static String pointPath = "/home"; /** Volume信息查询 */ private VolumeInfo volumeInfo = new VolumeInfo(); private ClusterInfo cluster = new ClusterInfo(); public ThreadVolume() { // TODO Auto-generated constructor stub } public ThreadVolume(String path) { if (null != path && !"".equals(path.trim())) { ThreadVolume.pointPath = path; } } /** gfs目录树形展示 */ private GetTreeData gfsTree = new GetTreeData(); @Override public void run() { super.run(); while(true){ List folderlist = new ArrayList(); List volumeList = new ArrayList(); // brick状态 map集合 Map brickStatusMap = cluster.showClusterInfo(); //查询 volume name List volumeNameList = volumeInfo.showAllVolumeName(); if (null != volumeNameList) { for (String volumeName : volumeNameList) { try { VolumeEntity volume = new VolumeEntity(); volume.setName(volumeName); List path = volumeInfo.getVolumeMountPoint(volumeName); //默认加载第一个路径 if (null != path && path.size() > 0) { volume.setPath(path.get(0)); } volume.setAllSize(volumeInfo.getVolumeAvailableSize(volumeName)); volume.setStatus(volumeInfo.getVolumeStatus(volumeName)); volume.setUsedSize(volumeInfo.getVolumeUseSize(volumeName)); volume.setType(volumeInfo.getVolumeType(volumeName)); //TODO 查询brick-- //返回 ip:path List brickStrs = volumeInfo.getVolumeBricks(volumeName); //brick已用大小: Map usedSize = volumeInfo.getVolumebricksDataSize(volumeName); Map availableSize = volumeInfo.getVolumebricksAvailableSize(volumeName); List brickList = new ArrayList(); for (String brickIpPath : brickStrs) { Brick b = new Brick(); String ipAndpath[] = brickIpPath.split(":"); String brickip = ipAndpath[0]; String brickpath = ipAndpath[1]; //iP , path , b.setIp(brickip); if(brickStatusMap==null || brickStatusMap.size()==0){ b.setStatus(false); }else if (brickStatusMap.containsKey(brickip)) { b.setStatus(true); } else { b.setStatus(false); } b.setPath(brickpath); b.setAvailableSize(availableSize.get(brickIpPath)); b.setUsedSize(usedSize.get(brickIpPath)); brickList.add(b); } volume.setBrick(brickList); //默认加载第一个路径 if (null != path && path.size() > 0) { //装入 folder: //查询 每个 volume 下的 folder FolderNode foldertmp = gfsTree.getDatas(path.get(0)); folderlist.add(foldertmp); } volumeList.add(volume); }catch (Exception e) { new CustomException(Custom4exception.threadVolume_class_Except,e); } } } //TODO 更新folder 目录 CacheTreeData.setFolders(folderlist); CacheTreeData.setVolumeList(volumeList); try { Thread.sleep(Constant.get_volume_sleep_time); } catch (InterruptedException e) { new CustomException(Custom4exception.threadVolume_Thread_Except,e); } } } public static String getPointPath() { return pointPath; } public static void setPointPath(String pointPath) { ThreadVolume.pointPath = pointPath; } }