diff --git a/.classpath b/.classpath
index 7e729e64..bb361b44 100644
--- a/.classpath
+++ b/.classpath
@@ -2,11 +2,6 @@
-
-
-
-
-
@@ -14,5 +9,6 @@
+
diff --git a/WebContent/WEB-INF/lib/ganymed-ssh2-build209.jar b/WebContent/WEB-INF/lib/ganymed-ssh2-build209.jar
new file mode 100644
index 00000000..95f233ce
Binary files /dev/null and b/WebContent/WEB-INF/lib/ganymed-ssh2-build209.jar differ
diff --git a/build/classes/.gitignore b/build/classes/.gitignore
new file mode 100644
index 00000000..43e58b99
--- /dev/null
+++ b/build/classes/.gitignore
@@ -0,0 +1 @@
+/com
diff --git a/build/classes/META-INF/persistence.xml b/build/classes/META-INF/persistence.xml
new file mode 100644
index 00000000..2ad4aeca
--- /dev/null
+++ b/build/classes/META-INF/persistence.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/build/classes/com/platform/controller/DataModelController.class b/build/classes/com/platform/controller/DataModelController.class
index df05df6b..837dcfde 100644
Binary files a/build/classes/com/platform/controller/DataModelController.class and b/build/classes/com/platform/controller/DataModelController.class differ
diff --git a/build/classes/com/platform/controller/DefaultController.class b/build/classes/com/platform/controller/DefaultController.class
index 91940503..e9becdfc 100644
Binary files a/build/classes/com/platform/controller/DefaultController.class and b/build/classes/com/platform/controller/DefaultController.class differ
diff --git a/build/classes/com/platform/entities/FolderNode.class b/build/classes/com/platform/entities/FolderNode.class
index c958e276..f5bb0dee 100644
Binary files a/build/classes/com/platform/entities/FolderNode.class and b/build/classes/com/platform/entities/FolderNode.class differ
diff --git a/build/classes/com/platform/service/OracleExtractService.class b/build/classes/com/platform/service/OracleExtractService.class
index 90711c2e..cc6bcadf 100644
Binary files a/build/classes/com/platform/service/OracleExtractService.class and b/build/classes/com/platform/service/OracleExtractService.class differ
diff --git a/build/classes/com/platform/test/TestController.class b/build/classes/com/platform/test/TestController.class
index 3abc9c41..507e036c 100644
Binary files a/build/classes/com/platform/test/TestController.class and b/build/classes/com/platform/test/TestController.class differ
diff --git a/build/classes/com/platform/test/TestEncodeInfoDao.class b/build/classes/com/platform/test/TestEncodeInfoDao.class
index bdfb87d9..b323c8a1 100644
Binary files a/build/classes/com/platform/test/TestEncodeInfoDao.class and b/build/classes/com/platform/test/TestEncodeInfoDao.class differ
diff --git a/build/classes/com/platform/test/TestEncodeService.class b/build/classes/com/platform/test/TestEncodeService.class
index c4656f12..b4e52795 100644
Binary files a/build/classes/com/platform/test/TestEncodeService.class and b/build/classes/com/platform/test/TestEncodeService.class differ
diff --git a/build/classes/com/platform/utils/Configs.class b/build/classes/com/platform/utils/Configs.class
index 6bc46bf3..ef6f24b0 100644
Binary files a/build/classes/com/platform/utils/Configs.class and b/build/classes/com/platform/utils/Configs.class differ
diff --git a/build/classes/com/platform/utils/ConfigsLoader.class b/build/classes/com/platform/utils/ConfigsLoader.class
index c37ec21a..556ce238 100644
Binary files a/build/classes/com/platform/utils/ConfigsLoader.class and b/build/classes/com/platform/utils/ConfigsLoader.class differ
diff --git a/src/META-INF/persistence.xml b/src/META-INF/persistence.xml
new file mode 100644
index 00000000..2ad4aeca
--- /dev/null
+++ b/src/META-INF/persistence.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/com/base/BaseController.java b/src/com/base/BaseController.java
new file mode 100644
index 00000000..a9fd417a
--- /dev/null
+++ b/src/com/base/BaseController.java
@@ -0,0 +1,63 @@
+/**
+ * 文件名 : BaseController.java
+ * 版权 : XX科技有限公司。
+ * 描述 : <描述>
+ * 修改时间:2016年9月7日
+ * 修改内容:<修改内容>
+ */
+package com.base;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.log4j.Logger;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+
+import com.platform.utils.Configs;
+
+/**
+ * <一句话功能简述>
+ * <功能详细描述>
+ * @author chen
+ * @version [版本号,2016年9月7日]
+ * @see [相关类/方法]
+ * @since [产品/模块版本]
+ */
+public class BaseController {
+
+ /** log4j */
+ public static Logger log = Logger.getRootLogger();
+
+ /**
+ * <一句话功能简述> 基于@ExceptionHandler异常处理----全局异常处理
+ * <功能详细描述>
+ * @param request
+ * @param ex 异常
+ * @return
+ * @see [类、类#方法、类#成员]
+ */
+ @ExceptionHandler
+ public Object exp(HttpServletRequest request, HttpServletResponse response,Exception ex) {
+ System.out.println("URI"+request.getRequestURI());
+ request.setAttribute("ex", ex);
+ System.err.println("BaseController --exp ");
+ // 根据不同错误转向不同页面
+ if(ex instanceof CustomException) {
+ CustomException cuse = (CustomException) ex;
+ Map errmsg = new HashMap<>();
+ errmsg.put("code", cuse.getCode());
+ errmsg.put("msg", cuse.getMsg());
+ log.error(cuse.getCode());
+ response.setStatus(500);
+ return response;
+ } else {
+ //其他错误则 调到指定页面
+ log.error(Configs.GLOBAL_EXP_NOT_CUSTOM, ex);
+ response.setStatus(500);
+ return response;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/com/base/Constant.java b/src/com/base/Constant.java
new file mode 100644
index 00000000..4d336465
--- /dev/null
+++ b/src/com/base/Constant.java
@@ -0,0 +1,23 @@
+package com.base;
+
+/**
+ * <一句话功能简述>
+ * <功能详细描述>
+ * @author chen
+ * @version [版本号,2016年9月8日]
+ * @see [相关类/方法]
+ * @since [产品/模块版本]
+ */
+public class Constant {
+
+ /** 国际话配置文件文件-i18n.properties */
+ public static String I18N_PROPERTIES_FIEL_PATH = "/com/base/i18n.properties";
+
+ /** WritefileThread-线程睡眠时间--3000 */
+ public final static long THREAD_SLEEP_WRITEFILETHREAD = 3000;
+
+ /** CustomException记录报异常的对象的对象个数--10 */
+ public final static int CustomException_log_object_size = 10;
+
+
+}
diff --git a/src/com/base/Custom4exception.java b/src/com/base/Custom4exception.java
new file mode 100644
index 00000000..2aeba6c6
--- /dev/null
+++ b/src/com/base/Custom4exception.java
@@ -0,0 +1,20 @@
+package com.base;
+
+/**
+ * <一句话功能简述> 异常常量编码
+ * <功能详细描述>
+ * @author chen
+ * @version [版本号,2016年9月8日]
+ * @see [相关类/方法]
+ * @since [产品/模块版本]
+ */
+public class Custom4exception {
+ //3003001001 : 第一位:标识异常, 第二到第四位:标识模块,第五道第七位:标识类别,第八道第十位标识具体异常
+ /**eg
+ * 3:异常
+ * 003:虚拟机模块
+ * 001:软件依赖虚拟机资源类别
+ * 001:启动异常
+ */
+
+}
diff --git a/src/com/base/CustomException.java b/src/com/base/CustomException.java
new file mode 100644
index 00000000..42b44cfb
--- /dev/null
+++ b/src/com/base/CustomException.java
@@ -0,0 +1,124 @@
+package com.base;
+
+import org.apache.log4j.Logger;
+
+/**
+ * <一句话功能简述>
+ * <功能详细描述>
+ * @author chen
+ * @version [版本号,2016年9月8日]
+ * @see [相关类/方法]
+ * @since [产品/模块版本]
+ */
+@SuppressWarnings("serial")
+public class CustomException extends Exception {
+
+ /** log4j */
+ public static Logger log = Logger.getRootLogger();
+
+ /** 自定义异常信息-错误信息 */
+ private String msg;
+
+ /** 自定义异常信息-错误代码 */
+ private String code;
+
+ /** 操作对象 */
+ private Object[] objArray;
+
+ /** 异常 */
+ private Throwable cause;
+
+ public CustomException() {
+ super();
+ }
+
+ /**
+ * @功能 将异常记录进文件
+ * @param code 异常编码
+ * @param msg 自定义异常信息
+ * @param e
+ * @param obj
+ */
+ public CustomException(String code,Exception e,Object... obj) {
+ super(code);
+ StringBuffer sbuf= new StringBuffer();
+ sbuf.append(msg);
+ this.code = code;
+ sbuf.append(code);
+ sbuf.append("\r\n");
+ msg = Resource.getProperties().get(code);
+ // 记录自定义的 异常
+ if (null != msg) {
+ sbuf.append(msg);
+ sbuf.append("\r\n");
+ }
+ // 记录原始的异常
+ if (null != e) {
+ StackTraceElement[] array = e.getStackTrace();
+ cause = e.getCause();
+ for (StackTraceElement stackTraceElement : array) {
+ sbuf.append(stackTraceElement.toString());
+ sbuf.append("\r\n");
+ }
+ }
+ //记录 出现异常时 当前的对象
+ if (null != obj) {
+ Object[] array = obj;
+ sbuf.append("Object[] size : ");
+ sbuf.append(array.length);
+ int forSize = 0;
+ if (Constant.CustomException_log_object_size < array.length) {
+ forSize = Constant.CustomException_log_object_size;
+ }
+ else {
+ forSize = array.length;
+ }
+ for (int i = 0; i < forSize; i++) {
+ sbuf.append(array[i]);
+ sbuf.append("\r\n");
+ }
+ sbuf.append("......");
+ sbuf.append("\r\n");
+ }
+ else {
+ sbuf.append("null");
+ sbuf.append("\r\n");
+ }
+
+ sbuf.append("\r\n");
+ // 是否 写入 文件
+ log.error(sbuf.toString());
+ }
+
+ /**
+ * @功能 获得msg
+ * @return msg
+ */
+ public String getMsg() {
+ return msg;
+ }
+
+
+ /**
+ * @return the code
+ */
+ public String getCode() {
+ return code;
+ }
+
+ /**
+ * @功能 获得objArray
+ * @return objArray
+ */
+ public Object[] getObjArray() {
+ return objArray;
+ }
+
+ /**
+ * @功能 获得cause
+ * @return cause
+ */
+ public Throwable getCause() {
+ return cause;
+ }
+}
diff --git a/src/com/base/Resource.java b/src/com/base/Resource.java
new file mode 100644
index 00000000..0b900bfe
--- /dev/null
+++ b/src/com/base/Resource.java
@@ -0,0 +1,79 @@
+package com.base;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+
+import com.base.Constant;
+
+public class Resource {
+
+ private static Map properties = new HashMap<>();
+
+ static{
+ // 读取 properties文件
+// readPropertiesFile(Constant.SYSTEM_PROPERTIES_FIEL_PATH);
+ readPropertiesFile4Chinese(Constant.I18N_PROPERTIES_FIEL_PATH);
+
+ }
+
+ /**
+ * @功能 读取配置(解决中文乱码)
+ * @param filename "/com/utils/exception/i18n.properties" 的格式
+ */
+ public static void readPropertiesFile4Chinese(String filename) {
+ Properties pro = new Properties();
+ try {
+ // 读取属性文件 XXXX.properties(Reader。writer解决中文乱码)
+// InputStreamReader in= new InputStreamReader(Resource.class.getClassLoader().getResourceAsStream(filename), "UTF-8");
+ InputStreamReader in= new InputStreamReader(Resource.class.getResourceAsStream(filename), "UTF-8");
+ BufferedReader bf = new BufferedReader(in);
+ // InputStreamReader in = new BufferedInputStream(new FileInputStream(filename));
+ pro.load(bf); // /加载属性列表
+ Iterator it = pro.stringPropertyNames().iterator();
+ while (it.hasNext()) {
+ String key = it.next();
+ properties.put(key, pro.getProperty(key));
+ }
+ in.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * @功能 获得properties
+ * @return properties
+ */
+ public static Map getProperties() {
+ return properties;
+ }
+
+ /**
+ * @功能 读取配置
+ * @param filename 文件绝对路径
+ */
+ public static void readPropertiesFile(String filename) {
+ Properties pro = new Properties();
+ try {
+ // 读取属性文件 XXXX.properties( 中文会 乱码)
+ BufferedInputStream bf = new BufferedInputStream(new FileInputStream(filename));
+ pro.load(bf); // /加载属性列表
+ Iterator it = pro.stringPropertyNames().iterator();
+ while (it.hasNext()) {
+ String key = it.next();
+ properties.put(key, pro.getProperty(key));
+ }
+ bf.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+}
diff --git a/src/com/base/i18n.properties b/src/com/base/i18n.properties
new file mode 100644
index 00000000..e69de29b
diff --git a/src/com/platform/controller/DataModelController.java b/src/com/platform/controller/DataModelController.java
index 4d4b2fd6..ba2295ca 100644
--- a/src/com/platform/controller/DataModelController.java
+++ b/src/com/platform/controller/DataModelController.java
@@ -1,8 +1,6 @@
package com.platform.controller;
-import java.util.ArrayList;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -16,13 +14,9 @@ import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
-import com.platform.entities.FolderNode;
import com.platform.entities.PagerOptions;
import com.platform.service.DataInfoService;
import com.platform.service.OracleStatusService;
-import com.platform.test.Brick;
-import com.platform.test.FolderReader;
-import com.platform.test.Volume;
import com.platform.utils.Configs;
import com.platform.utils.UtilsHelper;
@@ -42,7 +36,7 @@ public class DataModelController {
Map paramMap = res.getParameterMap();
Set keySet = paramMap.keySet();
Map params = new HashMap();
- StringBuffer sb = new StringBuffer().append("ǰ:{");
+ StringBuffer sb = new StringBuffer().append("当前的请求参数:{");
for (String str : keySet) {
String value = paramMap.get(str)[0];
if (StringUtils.isNotEmpty(value)){
@@ -73,7 +67,7 @@ public class DataModelController {
String[] oraclesName = paramMap.get("oracleName");
if (oraclesName != null)
for (String rcName : oraclesName) {
- Configs.CONSOLE_LOGGER.info("ִк̨ݿ\t" + rcName);
+ Configs.CONSOLE_LOGGER.info("执行后台数据库连接\t" + rcName);
new OracleStatusService().connectToOracle(rcName);
}
}
@@ -86,7 +80,7 @@ public class DataModelController {
String operate = paramMap.get("operation")[0];
if (null != oraclesName) {
for (String rcName : oraclesName) {
- Configs.CONSOLE_LOGGER.info("ȡ̨ݿ:\t" + rcName);
+ Configs.CONSOLE_LOGGER.info("取消后台数据库连接:\t" + rcName);
new OracleStatusService().cancelToOracle(rcName, operate);
}
}
@@ -98,18 +92,8 @@ public class DataModelController {
}
- @RequestMapping("/volume/list")
- @ResponseBody
- public Volume getFolder(HttpServletRequest res, HttpServletResponse req) {
- System.out.println("get Request");
- Brick brick1 = new Brick("192.168.0.101", "D:/bootstrap");
- Brick brick2 = new Brick("192.168.0.103", "D:\book");
- List bricks = new ArrayList();
- bricks.add(brick1);
- bricks.add(brick2);
- List folderNodes = new ArrayList<>();
- folderNodes.add(FolderReader.reader("D:/bootstrap"));
- Volume volume = new Volume("volume", 1555551024, 153561024, bricks, folderNodes);
- return volume;
+ @RequestMapping("/getFolder")
+ public void getFolder(HttpServletRequest res, HttpServletResponse req) {
+ System.out.println("ooooooooo");
}
}
diff --git a/src/com/platform/controller/DefaultController.java b/src/com/platform/controller/DefaultController.java
index 4722c5d6..1d738507 100644
--- a/src/com/platform/controller/DefaultController.java
+++ b/src/com/platform/controller/DefaultController.java
@@ -4,6 +4,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@@ -11,18 +12,19 @@ import com.platform.utils.Configs;
@Controller
public class DefaultController {
+
@RequestMapping("/")
public ModelAndView defaultHandler(HttpServletRequest req, HttpServletResponse res){
- //ƥ
+ //处理不匹配的请求
System.out.println("index");
return new ModelAndView("index");
-
}
@RequestMapping("/test")
- public void test(HttpServletRequest req, HttpServletResponse res){
+ public ModelMap test(HttpServletRequest req, HttpServletResponse res){
//System.out.println(Class.class.getClass().getResource("/").getPath());
System.out.println(Configs.EXTRACT_LOG_LOCALTION);
+ return new ModelMap();
}
}
diff --git a/src/com/platform/controller/FolderController.java b/src/com/platform/controller/FolderController.java
new file mode 100644
index 00000000..4a7944dc
--- /dev/null
+++ b/src/com/platform/controller/FolderController.java
@@ -0,0 +1,96 @@
+
+package com.platform.controller;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import oracle.sql.DATE;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import com.base.BaseController;
+import com.base.CustomException;
+import com.platform.entities.GfsFolderEntity;
+import com.platform.entities.VolumeEntity;
+import com.platform.glusterfs.VolumeInfo;
+import com.platform.service.IGfsService;
+
+
+/**
+ * <一句话功能简述>
+ * <功能详细描述>
+ * @author chen
+ * @version [版本号,2016年9月8日]
+ * @see [相关类/方法]
+ * @since [产品/模块版本]
+ */
+@Controller
+@RequestMapping("")
+public class FolderController extends BaseController {
+
+ @Resource(name = "gfsService")
+ private IGfsService gfsService;
+
+ @RequestMapping(value="/getAllSubPathByPath", method= RequestMethod.POST)
+ public Object getAllSubPathByPath(String path) throws Exception {
+ System.out.println(path);
+ Object result = null;
+ if (null != path && !"".equals(path)) {
+ System.out.println(path);
+ result = gfsService.getFolder(path);
+ }
+ return result;
+ }
+
+ @RequestMapping(value="/copyFolder", method= RequestMethod.POST)
+ public Object copyFolder(String srcFolder, String dstFolder, String name) throws Exception {
+ // -1 :error; -2: the filename is not exists ;-3 :destFolderName ; 1: right
+ int result = gfsService.copyFolder(srcFolder, dstFolder, name);
+ System.out.println(srcFolder);
+ System.out.println(dstFolder);
+ String obj = "right";
+
+ if (1 != result) {
+ obj = "err";
+ }
+ return obj;
+ }
+
+ /**
+ * <一句话功能简述> 查询集群中所有的 volume 及其 信息
+ * <功能详细描述>
+ * @return
+ * @throws Exception
+ * @see [类、类#方法、类#成员]
+ */
+ @RequestMapping(value="/volume/list", method= RequestMethod.POST)
+ public Object getVolums() throws Exception{
+ System.out.println("----------------------------------");
+ long a = new Date().getTime();
+ List result = gfsService.getAllVolumes();
+ System.out.println("----------------------------------");
+ System.out.println(new Date().getTime()-a);
+ return result;
+ }
+
+ /**
+ * <一句话功能简述> 查询集群中所有的 volume 及其 信息
+ * <功能详细描述>
+ * @param volumeName "/home/gfs_ftp_point" "/home/v1_point"
+ * @return
+ * @throws Exception
+ * @see [类、类#方法、类#成员]
+ */
+
+ @RequestMapping(value="/volume/findByName", method= RequestMethod.POST)
+ public Object getVolumByName(String volumeName) throws Exception{
+ VolumeEntity result = gfsService.getOneVolume(volumeName);
+ return result;
+ }
+
+}
diff --git a/src/com/platform/controller/SetGlusterfsController.java b/src/com/platform/controller/SetGlusterfsController.java
new file mode 100644
index 00000000..481331dd
--- /dev/null
+++ b/src/com/platform/controller/SetGlusterfsController.java
@@ -0,0 +1,45 @@
+
+/**
+ * 文件名 : SetGlusterfs.java
+ * 版权 : <版权/公司名>
+ * 描述 : <描述>
+ * @author liliy
+ * 版本 : <版本>
+ * 修改时间: 2016年9月8日
+ * 修改内容: <修改内容>
+ */
+package com.platform.controller;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ * <一句话功能简述>
+ * <功能详细描述>
+ * @author liliy
+ * @version [版本号,2016年9月8日]
+ * @see [相关类/方法]
+ * @since [产品/模块版本]
+ */
+@Controller
+public class SetGlusterfsController {
+ @RequestMapping("/tes")
+ public Object defaultHandler(HttpServletRequest req, HttpServletResponse request) {
+ //���?ƥ�������
+ try {
+
+ System.out.println("fsdfds");
+
+ return "listAll";
+ } catch (Exception e) {
+ e.printStackTrace();
+
+ return "result";
+ }
+
+
+ }
+}
diff --git a/src/com/platform/controller/ShowGlusterfsController.java b/src/com/platform/controller/ShowGlusterfsController.java
new file mode 100644
index 00000000..83f6e468
--- /dev/null
+++ b/src/com/platform/controller/ShowGlusterfsController.java
@@ -0,0 +1,44 @@
+
+/**
+ * 文件名 : ShowGlusterfsController.java
+ * 版权 : <版权/公司名>
+ * 描述 : <描述>
+ * @author liliy
+ * 版本 : <版本>
+ * 修改时间: 2016年9月8日
+ * 修改内容: <修改内容>
+ */
+package com.platform.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import com.platform.glusterfs.ClusterInfo;
+
+/**
+ * <一句话功能简述>
+ * <功能详细描述>
+ * @author liliy
+ * @version [版本号,2016年9月8日]
+ * @see [相关类/方法]
+ * @since [产品/模块版本]
+ */
+@Controller
+public class ShowGlusterfsController {
+ /**
+ * <一句话功能简述>
+ * <功能详细描述>
+ * @return
+ * @see [类、类#方法、类#成员]
+ */
+ @RequestMapping("/showPeerStatus")
+ public Map showPeerStatus(){
+ Map peer_status=new ClusterInfo().showClusterInfo();
+ return peer_status;
+ }
+
+
+}
diff --git a/src/com/platform/dao/EncodeInfoDao.java b/src/com/platform/dao/EncodeInfoDao.java
index 69bfd819..a877f5f3 100644
--- a/src/com/platform/dao/EncodeInfoDao.java
+++ b/src/com/platform/dao/EncodeInfoDao.java
@@ -12,7 +12,7 @@ import org.springframework.stereotype.Repository;
import com.platform.entities.EncodedInfoEntity;
/**
- * ݿ: ʵɾġ
+ * 数据库操作: 实现增、删、改、查
*
* @author wuming
*
@@ -21,49 +21,49 @@ import com.platform.entities.EncodedInfoEntity;
public interface EncodeInfoDao {
/**
- * ȡѯµʵ壨/ϵͳϢ
+ * 获取查询表下的所有实体(行政区划/系统)信息
*
* @param tableName
- * ѯı
- * @return ʵϢ:ƺͱ
+ * 查询的表名
+ * @return 所有实体信息:名称和编码
*/
@Select("SELECT code, name FROM ${tableName}")
public List getAllEntityInfo(
@Param("tableName") String tableName);
/**
- * ʵ壨/ϵͳƲѯ
+ * 根据实体(行政区划/系统)的名称查询编码
*
* @param code
- * ʵ
+ * 实体编码
* @param tableName
- * ѯı
- * @return ѯֻһ¼
+ * 查询的表名
+ * @return 编码是主键,查询结果最多只有一条记录
*/
@Select("SELECT name FROM ${tableName} WHERE code = #{code}")
public String getEncodeNameByCode(@Param("code") String code,
@Param("tableName") String tableName);
/**
- * ʵ壨/ϵͳıѯ
+ * 根据实体(行政区划/系统)的编码查询名称
*
* @param name
- * ʵ
+ * 实体名称
* @param tableName
- * ѯı
- * @return Ʋѯܻж
+ * 查询的表名
+ * @return 名称不是主键,查询结果可能会有多个
*/
@Select("SELECT code FROM ${tableName} WHERE name = #{name}")
public List getEncodeCodeByName(@Param("name") String name,
@Param("tableName") String tableName);
/**
- * ʵ壨/ϵͳı룬ʵ
+ * 根据实体(行政区划/系统)的编码,更新实体的名称
*
* @param code
- * ϵͳ
+ * 系统编码
* @param tableName
- * ѯı
+ * 查询的表名
* @return
*/
@Update("UPDATE ${tableName} SET name = #{name} WHERE code = #{code}")
@@ -71,12 +71,12 @@ public interface EncodeInfoDao {
@Param("name") String name, @Param("tableName") String tableName);
/**
- * вʵ壨/ϵͳϢ
+ * 向表中插入实体(行政区划/系统)信息
*
* @param efe
- * ʵϢ
+ * 插入的实体信息
* @param tableName
- *
+ * 表名
* @return
*/
@Insert("INSERT INTO ${tableName} (code, name) VALUES (#{efe.code}, #{efe.name})")
@@ -84,12 +84,12 @@ public interface EncodeInfoDao {
@Param("tableName") String tableName);
/**
- * ɾеʵ壨/ϵͳ
+ * 删除表中的实体(行政区划/系统)
*
* @param code
- * ʵı
+ * 实体的编码
* @param tableName
- *
+ * 表名
* @return
*/
@Delete("DELETE FROM ${tableName} WHERE code = #{code}")
diff --git a/src/com/platform/entities/Brick.java b/src/com/platform/entities/Brick.java
new file mode 100644
index 00000000..8bda2cab
--- /dev/null
+++ b/src/com/platform/entities/Brick.java
@@ -0,0 +1,58 @@
+
+/**
+ * 文件名 : Brick.java
+ * 版权 : <版权/公司名>
+ * 描述 : <描述>
+ * @author chen
+ * 版本 : <版本>
+ * 修改时间: 2016年9月9日
+ * 修改内容: <修改内容>
+ */
+package com.platform.entities;
+
+/**
+ * <一句话功能简述> volume 下的 块 对象
+ * <功能详细描述>
+ * @author chen
+ * @version [版本号,2016年9月9日]
+ * @see [相关类/方法]
+ * @since [产品/模块版本]
+ */
+
+public class Brick {
+
+ /** ip */
+ private String ip;
+
+ /** 路径 */
+ private String path;
+
+ /**
+ * @return the ip
+ */
+ public String getIp() {
+ return ip;
+ }
+
+ /**
+ * @param ip the ip to set
+ */
+ public void setIp(String ip) {
+ this.ip = ip;
+ }
+
+ /**
+ * @return the path
+ */
+ public String getPath() {
+ return path;
+ }
+
+ /**
+ * @param path the path to set
+ */
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+}
diff --git a/src/com/platform/entities/DataInfoEntity.java b/src/com/platform/entities/DataInfoEntity.java
index d3581c89..3db92f4a 100644
--- a/src/com/platform/entities/DataInfoEntity.java
+++ b/src/com/platform/entities/DataInfoEntity.java
@@ -1,27 +1,27 @@
package com.platform.entities;
/**
- * Ϣʵ
+ * 数据信息实体类
*
* @author wuming
*
*/
public class DataInfoEntity {
private int id;
- private String regionalismCode; //
- private String cityName; //
- private String districtName; //
- private int systemCode; // ϵͳ
- private String systemName; // ϵͳ
- private String dataType; // ͣ\籣\...
- private int dataVersion; // ݰ汾
- private String submittedBatch; // ϱ
- private String dataPath; // ·
- private String collectingTime; // ɼʱ
- private String collectorContacts; // ɼ˵ϵ
- private String charset; // ݵַ
- private String collectorName; // ɼ
- private String year; //
+ private String regionalismCode; // 行政区划编码
+ private String cityName; // 市
+ private String districtName; // 区县
+ private int systemCode; // 系统编码
+ private String systemName; // 系统名称
+ private String dataType; // 数据类型:财政\社保\...
+ private int dataVersion; // 数据版本
+ private String submittedBatch; // 上报批次
+ private String dataPath; // 数据路径
+ private String collectingTime; // 采集时间
+ private String collectorContacts; // 采集人的联系
+ private String charset; // 数据的字符编码
+ private String collectorName; // 采集人姓名
+ private String year; // 数据年度
public DataInfoEntity() {
}
diff --git a/src/com/platform/entities/EncodedInfoEntity.java b/src/com/platform/entities/EncodedInfoEntity.java
index fa6b934c..3f2f425e 100644
--- a/src/com/platform/entities/EncodedInfoEntity.java
+++ b/src/com/platform/entities/EncodedInfoEntity.java
@@ -2,14 +2,14 @@ package com.platform.entities;
/**
*
- * Ϣʵ
- * /ϵͳϢ
+ * 编码信息实体
+ * 行政区划/系统信息
* @author wuming
*
*/
public class EncodedInfoEntity {
- private String name; //
- private String code; //
+ private String name; //名称
+ private String code; //编码
public EncodedInfoEntity() {}
diff --git a/src/com/platform/entities/FolderNode.java b/src/com/platform/entities/FolderNode.java
index 5dc650b3..da662d0f 100644
--- a/src/com/platform/entities/FolderNode.java
+++ b/src/com/platform/entities/FolderNode.java
@@ -4,24 +4,42 @@ import java.util.List;
public class FolderNode {
private String name;
+ private int isFolder; // 1 is file and other integer is folder show children number
private String path;
- private List childNodes;
+ private List childNodes;
- public FolderNode(String name, String path, List childNodes) {
- super();
+
+ public FolderNode(String name) {
this.name = name;
- this.path = path;
- this.childNodes = childNodes;
+ }
+
+ public FolderNode(String name, int isFolder) {
+ this.name = name;
+ this.isFolder = isFolder;
}
public String getName() {
return name;
- }
+ }
public void setName(String name) {
this.name = name;
}
+ /**
+ * @return the isFolder
+ */
+ public int getIsFolder() {
+ return isFolder;
+ }
+
+ /**
+ * @param isFolder the isFolder to set
+ */
+ public void setIsFolder(int isFolder) {
+ this.isFolder = isFolder;
+ }
+
public String getPath() {
return path;
}
diff --git a/src/com/platform/entities/GfsFolderEntity.java b/src/com/platform/entities/GfsFolderEntity.java
new file mode 100644
index 00000000..13429ddf
--- /dev/null
+++ b/src/com/platform/entities/GfsFolderEntity.java
@@ -0,0 +1,77 @@
+
+/**
+ * 文件名 : GfsPathModel.java
+ * 版权 : <版权/公司名>
+ * 描述 : <描述>
+ * @author chen
+ * 版本 : <版本>
+ * 修改时间: 2016年9月8日
+ * 修改内容: <修改内容>
+ */
+package com.platform.entities;
+
+import java.util.List;
+
+/**
+ * <一句话功能简述>
+ * <功能详细描述>
+ * @author chen
+ * @version [版本号,2016年9月8日]
+ * @see [相关类/方法]
+ * @since [产品/模块版本]
+ */
+
+public class GfsFolderEntity {
+
+ /** 当前路径 */
+ private String path;
+
+ /** 当前路径 */
+ private String name;
+
+ /** 子目录 */
+ private List children;
+
+ /**
+ * @return the path
+ */
+ public String getPath() {
+ return path;
+ }
+
+ /**
+ * @param path the path to set
+ */
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @param name the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * @return the children
+ */
+ public List getChildren() {
+ return children;
+ }
+
+ /**
+ * @param children the children to set
+ */
+ public void setChildren(List children) {
+ this.children = children;
+ }
+
+}
diff --git a/src/com/platform/entities/PagerOptions.java b/src/com/platform/entities/PagerOptions.java
index 046a90cd..f347488f 100644
--- a/src/com/platform/entities/PagerOptions.java
+++ b/src/com/platform/entities/PagerOptions.java
@@ -1,29 +1,29 @@
package com.platform.entities;
public class PagerOptions {
- private Integer currentPageNum; //ǰҳ
+ private Integer currentPageNum; //当前页码
- private String dataType; //
+ private String dataType; //数据类型
- private String submittedBatch; //
+ private String submittedBatch; //数据批次
- private String cityName; //
+ private String cityName; //城市名称
- private String districtName; //
+ private String districtName; //区县名
- private Integer dataVersion; //ݰ汾
+ private Integer dataVersion; //数据版本
- private String systemName; //ϵͳ
+ private String systemName; //系统名称
- private String dataYear; //
+ private String dataYear; // 数据年度
- private Integer limit; //һβѯؼ¼
+ private Integer limit; //一次查询返回记录条数
- private Integer offset; // ѯƫʼid
+ private Integer offset; // 查询偏移量:起始id
- private Integer totalLimit; //ǰҳǰж
+ private Integer totalLimit; //当前页前面已有多少条数据
- private Integer priorTableSize; //ǰһβһҳʾ
+ private Integer priorTableSize; //前一次操作一页显示的数据条数
public Integer getCurrentPageNum() {
return currentPageNum;
diff --git a/src/com/platform/entities/VolumeEntity.java b/src/com/platform/entities/VolumeEntity.java
new file mode 100644
index 00000000..1d785284
--- /dev/null
+++ b/src/com/platform/entities/VolumeEntity.java
@@ -0,0 +1,128 @@
+
+/**
+ * 文件名 : VolumeEntity.java
+ * 版权 : <版权/公司名>
+ * 描述 : <描述>
+ * @author chen
+ * 版本 : <版本>
+ * 修改时间: 2016年9月9日
+ * 修改内容: <修改内容>
+ */
+package com.platform.entities;
+
+import java.util.List;
+
+/**
+ * <一句话功能简述> gfs的 volume 对象
+ * <功能详细描述>
+ * @author chen
+ * @version [版本号,2016年9月9日]
+ * @see [相关类/方法]
+ * @since [产品/模块版本]
+ */
+
+public class VolumeEntity {
+
+ /** volume总大小 */
+ private double allSize;
+
+ /** volume已使用大小 */
+ private double usedSize;
+
+ /** volume名称 */
+ private String name;
+
+ /** 挂载点 */
+ private String path;
+
+ /** volume树形目录 */
+ private FolderNode folder;
+
+ /** volume的 块 */
+ private List brick;
+
+ /**
+ * @return the allSize
+ */
+ public double getAllSize() {
+ return allSize;
+ }
+
+ /**
+ * @param allSize the allSize to set
+ */
+ public void setAllSize(double allSize) {
+ this.allSize = allSize;
+ }
+
+ /**
+ * @return the usedSize
+ */
+ public double getUsedSize() {
+ return usedSize;
+ }
+
+ /**
+ * @param usedSize the usedSize to set
+ */
+ public void setUsedSize(double usedSize) {
+ this.usedSize = usedSize;
+ }
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @param name the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * @return the path
+ */
+ public String getPath() {
+ return path;
+ }
+
+ /**
+ * @param path the path to set
+ */
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+ /**
+ * @return the folder
+ */
+ public FolderNode getFolder() {
+ return folder;
+ }
+
+ /**
+ * @param folder the folder to set
+ */
+ public void setFolder(FolderNode folder) {
+ this.folder = folder;
+ }
+
+ /**
+ * @return the brick
+ */
+ public List getBrick() {
+ return brick;
+ }
+
+ /**
+ * @param brick the brick to set
+ */
+ public void setBrick(List brick) {
+ this.brick = brick;
+ }
+
+}
diff --git a/src/com/platform/glusterfs/ClusterInfo.java b/src/com/platform/glusterfs/ClusterInfo.java
new file mode 100644
index 00000000..c23145e2
--- /dev/null
+++ b/src/com/platform/glusterfs/ClusterInfo.java
@@ -0,0 +1,86 @@
+package com.platform.glusterfs;
+
+
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.PropertyConfigurator;
+
+import com.platform.utils.Constant;
+
+public class ClusterInfo {
+ public static Logger log = Logger.getLogger(ClusterInfo.class);
+
+ public Map showClusterInfo() {
+ log.info("get cluster info");
+ Map peerIps = new HashMap();
+
+ /*
+ String command = "echo \"" + Constant.rootPasswd + "\"|sudo -S gluster peer status";
+ RunCommand runCommand = new RunCommand();
+ List reStrings = runCommand.runCommandWait(command);
+ */
+ List reStrings = Constant.ganymedSSH.execCmdWait(Constant.hostIp, Constant.rootUser, Constant.rootPasswd, Constant.port, Constant.glusterPeerStatus);
+ if (reStrings == null) {
+ log.error("1101 command get result is null");
+ return null;
+ }
+ if (reStrings.size() == 0) {
+ log.error("1102 command get result is nothing");
+ return null;
+ }
+
+ if (!(reStrings.get(0).split(":")[0].contains("Number of Peers"))) {
+
+ log.error("1103 get result string wrong");
+ return null;
+ }
+
+
+ // System.out.print(reStrings.get(0));
+
+ int flag = 0;
+ String ipString = "";
+ String state = "";
+ for (Iterator it2 = reStrings.iterator(); it2.hasNext();) {
+ String line = (String) it2.next();
+ line=line.replaceAll(" +", " ");
+ String keyValue[] = line.split(":");
+ if (keyValue[0].equals("Hostname")) {
+
+ if (keyValue.length < 2) {
+ log.error("1105 command get result is wrong");
+ continue;
+ }
+
+ ipString = keyValue[1].replaceAll(" ", "");
+ flag = 1;
+ } else if (flag == 1 && keyValue[0].equals("State")) {
+
+ if (keyValue.length < 2) {
+ log.error("1106 command get result is wrong");
+ continue;
+ }
+
+ state = keyValue[1].replaceAll(" ", "");
+ flag = 0;
+ peerIps.put(ipString, state);
+ }
+
+ }
+ return peerIps;
+ }
+
+
+
+ public static void main(String[] args) {
+ PropertyConfigurator.configure("log4j.properties");
+ System.out.println(new ClusterInfo().showClusterInfo());
+ }
+}
diff --git a/src/com/platform/glusterfs/CopyData.java b/src/com/platform/glusterfs/CopyData.java
new file mode 100644
index 00000000..6fd1e357
--- /dev/null
+++ b/src/com/platform/glusterfs/CopyData.java
@@ -0,0 +1,80 @@
+package com.platform.glusterfs;
+
+import java.util.List;
+
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.PropertyConfigurator;
+import org.junit.Test;
+
+import com.platform.utils.Constant;
+
+
+/**
+ * <一句话功能简述> 复制数据
+ * <功能详细描述>
+ * @author chen
+ * @version [版本号,2016年9月8日]
+ * @see [相关类/方法]
+ * @since [产品/模块版本]
+ */
+
+public class CopyData {
+ public static Logger log = Logger.getLogger(CopyData.class);
+
+ public int copyVolumeFiles(String sourceVolumeName, String destVolumeName, String fileName) {
+ log.info("start copy " + fileName + " from " + sourceVolumeName + " to " + destVolumeName);
+ int status = -1;
+ /**
+ * get mount point of volumeName
+ */
+
+ String sourceFolderName = sourceVolumeName;
+ String destFolderName = destVolumeName;
+ status = copyFolderFiles(sourceFolderName, destFolderName, fileName);
+ return status;
+ }
+
+ /**
+ * -1 :error; -2: the filename is not exists ;-3 :destFolderName ; 1: right
+ * not exists
+ *
+ * @param folderName
+ * @param fileName
+ * @return
+ */
+ public int copyFolderFiles(String sourceFolderName, String destFolderName, String fileName) {
+ int progress=0;
+ log.info("start copy " + fileName + " from " + sourceFolderName + " to " + destFolderName);
+ ShowData showData=new ShowData();
+ Map reStrings=showData.showFolderData(destFolderName);
+ if(reStrings==null){
+ log.info("3201 "+destFolderName+" is not exists");
+ return -3;
+ }
+
+ reStrings=showData.showFolderData(sourceFolderName+"/"+fileName);
+ if(reStrings==null){
+ log.info("3202 "+sourceFolderName+"/"+fileName+" is not exists");
+ return -2;
+ }
+ String command = "cp -r " + sourceFolderName + "/" + fileName+" "+destFolderName;
+ /*
+ * RunCommand runCommand = new RunCommand();
+
+ List reStrings = runCommand.runCommandWait(command);
+ */
+ Constant.ganymedSSH.execCmdNoWaitAcquiescent(command);
+
+ log.info("copy " + sourceFolderName +"/" + fileName+ " to " + destFolderName + " running");
+ return 1;
+ }
+
+
+ @Test
+ public void testCopyFolderFiles() {
+ PropertyConfigurator.configure("log4j.properties");
+ copyFolderFiles("/home", "/home/ubuntu", "system_data");
+ }
+}
diff --git a/src/com/platform/glusterfs/GetTreeData.java b/src/com/platform/glusterfs/GetTreeData.java
new file mode 100644
index 00000000..ec40e7f6
--- /dev/null
+++ b/src/com/platform/glusterfs/GetTreeData.java
@@ -0,0 +1,80 @@
+package com.platform.glusterfs;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.PropertyConfigurator;
+import org.junit.Test;
+import org.springframework.stereotype.Service;
+
+import com.platform.entities.FolderNode;
+
+/**
+ * <一句话功能简述> 获得GFS某个目录下的子目录
+ * <功能详细描述>
+ * @author chen
+ * @version [版本号,2016年9月8日]
+ * @see [相关类/方法]
+ * @since [产品/模块版本]
+ */
+public class GetTreeData {
+ ShowData showData = new ShowData();
+
+ /**
+ * <一句话功能简述> 获得所以子目录
+ * <功能详细描述>
+ * @param name
+ * @return
+ * @see [类、类#方法、类#成员]
+ */
+ public FolderNode getDatas(String name) {
+ FolderNode fileNode = new FolderNode(name);
+ Map files = showData.showFolderData(name);
+ if(files==null || files.size()==0){
+ return fileNode;
+ }
+ fileNode.setIsFolder(files.size());
+ List list = new ArrayList();
+ fileNode.setChildNodes(list);
+ for (Map.Entry entry : files.entrySet()) {
+ int number = Integer.parseInt(entry.getValue());
+ if ("app".equals(entry.getKey())) {
+ continue;
+ }
+ if (number == 1) {
+ fileNode.getChildNodes().add(new FolderNode(entry.getKey(), number));
+ }
+ if (number > 1) {
+ FolderNode temp=getDatas(name+"/"+entry.getKey());
+ fileNode.getChildNodes().add(temp);
+ }
+ }
+
+ return fileNode;
+ }
+
+// public static void main(String[] args) {
+// GetTreeData getTreeData=new GetTreeData();
+// FileOrFolder fileOrFolder=getTreeData.getDatas("/home");
+// System.out.println(fileOrFolder);
+// }
+}
+
+//class FileOrFolder {
+// String name;
+// int isFolder; // 1 is file and other integer is folder show children number
+// List children;
+//
+// public FileOrFolder(String name) {
+// // TODO Auto-generated constructor stub
+// this.name = name;
+// }
+//
+// public FileOrFolder(String name, int isFolder) {
+// // TODO Auto-generated constructor stub
+// this.name = name;
+// this.isFolder = isFolder;
+// }
+//}
+
diff --git a/src/com/platform/glusterfs/RemoveData.java b/src/com/platform/glusterfs/RemoveData.java
new file mode 100644
index 00000000..2297ed03
--- /dev/null
+++ b/src/com/platform/glusterfs/RemoveData.java
@@ -0,0 +1,98 @@
+package com.platform.glusterfs;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.PropertyConfigurator;
+import org.junit.Test;
+
+import com.platform.utils.Constant;
+
+
+
+public class RemoveData {
+
+ public static Logger log = Logger.getLogger ( RemoveData.class);
+ public int deleteVolumeFiles(String volumeName,String fileName){
+ log.info("start delete "+volumeName+" "+fileName);
+ int status=-1;
+ /**
+ * get mount point of volumeName
+ */
+ String folderName=volumeName;
+
+ status=deleteFolderFiles(folderName,fileName);
+ return status;
+ }
+
+ /**
+ * -1 :error; 0: the filename is not exists ; 1: right
+ * @param folderName
+ * @param fileName
+ * @return
+ */
+ public int deleteFolderFiles(String folderName,String fileName){
+ log.info("start delete "+folderName+"/"+fileName);
+
+ ShowData showData=new ShowData();
+ Map reStrings=showData.showFolderData(folderName+"/"+fileName);
+
+ if(reStrings==null){
+ log.error("3301 "+folderName+"/"+fileName+" is not exists");
+ return -1;
+ }
+
+ String command="rm -r "+folderName+"/"+fileName;
+
+// int status=runCommand.runCommand(command);
+ Constant.ganymedSSH.execCmdNoWaitAcquiescent(command);
+
+ log.info("delete "+folderName+" "+fileName+" running");
+ return 1;
+ }
+
+ public int getFolderSize(String name) {
+ log.info("get "+name+" size");
+ String command="du -k -d 0 "+name;
+ /*
+ * RunCommand runCommand=new RunCommand();
+
+ List reStrings=runCommand.runCommandWait(command);
+ */
+ List reStrings=Constant.ganymedSSH.execCmdWaitAcquiescent(command);
+
+ if(reStrings==null){
+ log.error("3302 the "+command+" return error");
+ return -1;
+ }
+ if(reStrings.size()<1){
+ log.error("3303 the "+command+" return error");
+ return -1;
+ }
+
+ if(reStrings.size()==1 && reStrings.get(0).contains("No such file or directory")){
+ log.info("3304 "+name+" is not exists");
+ return 0;
+ }
+ String strSize=(reStrings.get(0).split("\t"))[0];
+ int size=Integer.parseInt(strSize);
+ log.info(name +" size is "+size);
+ return size;
+ }
+
+// @Test
+ public void test_getFolderSize() {
+ PropertyConfigurator.configure("log4j.properties");
+ getFolderSize("/home/ubuntu");
+ }
+
+ @Test
+ public void testDeleteFolderFiles() {
+ PropertyConfigurator.configure("log4j.properties");
+ deleteFolderFiles("/home/ubuntu","system_data");
+ }
+
+}
diff --git a/src/com/platform/glusterfs/SetCluster.java b/src/com/platform/glusterfs/SetCluster.java
new file mode 100644
index 00000000..ccc3a76f
--- /dev/null
+++ b/src/com/platform/glusterfs/SetCluster.java
@@ -0,0 +1,5 @@
+package com.platform.glusterfs;
+
+public class SetCluster {
+
+}
diff --git a/src/com/platform/glusterfs/SetVolume.java b/src/com/platform/glusterfs/SetVolume.java
new file mode 100644
index 00000000..d6be2d41
--- /dev/null
+++ b/src/com/platform/glusterfs/SetVolume.java
@@ -0,0 +1,493 @@
+
+/**
+ * @author 李乾坤
+ * 进行volume的一系列操作,如创建、开启停止volume,为volume添加或删除brick
+ */
+package com.platform.glusterfs;
+
+
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.PropertyConfigurator;
+
+import com.platform.utils.Constant;
+
+
+
+public class SetVolume {
+ public static Logger log = Logger.getLogger(SetVolume.class);
+
+ /*
+ * 创建volume 返回值:创建并挂载成功 1
+ *
+ */
+ public int createVolume(String volumeName, int count, String type, List bricks, String mountPoint) {
+ log.info("Creat new volume");
+
+ // 判断创建volume的条件是否满足
+ int able = isAbleCreateVolume(volumeName, count, type, bricks, mountPoint);
+
+ if (able == 1) {
+ String command = null;
+ // 将brics从List变量中提取出来并连接成可以在命令行中使用的格式
+ String commandarg = concat(bricks);
+
+ /*
+ * verify the type
+ */
+ if (type.equals(Constant.distributed)) {
+ command = "gluster volume create " + volumeName + " " + commandarg + "force";
+ } else if (type.equals(Constant.replica) || type.equals(Constant.stripe)) {
+ command = "gluster volume create " + volumeName + " " + type + " " + count + " " + commandarg + "force";
+ }
+
+ // 执行命令
+ List reStrings = Constant.ganymedSSH.execCmdWait(Constant.hostIp, Constant.rootUser, Constant.rootPasswd,
+ Constant.port, command);
+
+ // 创建成功时返回信息格式:volume create: volumename success:
+ if (reStrings == null || reStrings.size() == 0) {
+ log.error("3106 " + command + " run return error");
+ return -7;
+ }
+ if (reStrings.get(0).contains("volume create: " + volumeName + ": " + "success:")) {
+ log.info("create volume "+volumeName+" successed!");
+ // 创建成功则启动并进行挂载
+ if (startVolume(volumeName) == 0) {
+ log.info("start volume "+volumeName+" successed!");
+ if ((new ShowData().showFolderData(mountPoint)) == null) {
+ Constant.ganymedSSH.execCmdWaitAcquiescent("mkdir " + mountPoint);
+ }
+ // 进行挂载
+ String command3 = "mount -t glusterfs " + Constant.hostIp + ":/" + volumeName + " " + mountPoint;
+ List reStrings3 = Constant.ganymedSSH.execCmdWait(Constant.hostIp, Constant.rootUser,
+ Constant.rootPasswd, Constant.port, command3);
+
+ // 这里需要添加解析挂载命令返回字符串的语句,由于我的系统有问题,导致挂载成功后返回WARNING: getfattr
+ // not found, certain checks will be skipped..
+ // 所以这句代码未经测试
+ // 成功挂载时没有任何返回信息
+ if (reStrings3.size() == 0 || reStrings.get(0).contains("GlusterFS is already mounted"))
+ {
+ log.info("mount point successed!");
+ return 1;
+ }
+ }
+ } else {
+ log.error("3104 volume create failed with error" + reStrings.get(0));
+ // System.out.println(reStrings.get(0));
+ return -7;
+ }
+ return 1;
+ } else {
+ log.error("给出的参数不满足创建条件");
+ // System.out.println("给出的参数不满足创建条件");
+ return able;
+ }
+
+ }
+
+ /**
+ * 删除volume
+ *
+ * @param volumeName
+ * @return 1 表示成功 ;-1表示volume name不存在;-2表示停止volume 失败
+ */
+ public int deleteVolume(String volumeName) {
+ int status = 0;
+ List volumeNames = new VolumeInfo().showAllVolumeName();
+ if (!volumeNames.contains(volumeName)) {
+ log.error("3801 " + volumeName + " is not exists !");
+ return -1;
+ }
+
+ String mountPoint = new VolumeInfo().getVolumeMountPoint(volumeName);
+ if (stopVolume(volumeName) != 0) {
+ log.error("3802 " + volumeName + " stop failed !");
+ return -2;
+ }
+ log.info("stop "+volumeName+" successed!");
+ if (mountPoint != null) {
+ String command = "umount " + mountPoint;
+ Constant.ganymedSSH.execCmdNoWaitAcquiescent(command);
+ log.info("umount "+mountPoint+" successed!");
+ }
+ String command="echo -e \"y\"| gluster volume delete "+volumeName;
+ List reStrings=Constant.ganymedSSH.execCmdWaitAcquiescent(command);
+ if(reStrings==null || reStrings.size()>0 || !(reStrings.get(0).contains("volume delete: "+volumeName+": success"))){
+ log.error("3803 : delete volume "+volumeName+" failed !");
+ return -3;
+ }
+ log.info("delete "+volumeName+" successed!");
+ return 1;
+ }
+
+ /*
+ * 为指定的volume添加brick,参数中需要指定类型、数量等 返回值:1成功 ;其他失败
+ * 过程中需要先检查volume是否存在,还需检查给出的brick数量与类型、count是否相符
+ */
+ public int addBrickVolume(String volumeName, List brickName, int count, String type) {
+ // 检查是否满足添加bricks的条件
+ int able = isAble(volumeName, count, type, brickName);
+ if (able != 1) {
+ return able;
+ }
+
+ String command = "";
+ log.info("add brick to the specified volume");
+
+ String brick = concat(brickName);
+
+ if (type.equals(Constant.distributed))
+ command = "gluster volume add-brick " + volumeName + " " + brick + "force";
+ else if (type.equals(Constant.replica))
+ command = "gluster volume add-brick " + volumeName + " " + "replica " + count + " " + brick + "force";
+ else if (type.equals(Constant.stripe))
+ command = "gluster volume add-brick " + volumeName + " " + "stripe " + count + " " + brick + "force";
+
+ List reStrings = Constant.ganymedSSH.execCmdWait(Constant.hostIp, Constant.rootUser, Constant.rootPasswd,
+ Constant.port, command);
+
+ // 添加成功的返回信息是:volume add-brick: success
+ if (reStrings != null && reStrings.size() > 0 && reStrings.get(0).contains("volume add-brick: success")) {
+ log.info("添加brick成功!");
+ return 1;
+ } else {
+ log.error("3205 add brick failed,please check the system");
+ // System.out.println("3202 add brick failed,please check the system");
+ return -5;
+ }
+ }
+
+ /*
+ * 为指定的volume删除brick,参数中需要指定类型、数量等 返回值:1 成功 ;其他 失败
+ * 过程中需要先检查volume是否存在,还需检查给出的brick数量与类型、count是否相符
+ */
+ public int deleteBrickVolume(String volumeName, List brickName, int count, String type) {
+ int able = isAble(volumeName, count, type, brickName);
+
+ if (able != 1) {
+ return able;
+ }
+ String command = null;
+
+ log.info("delete brick of the specified volume");
+
+ String brick = concat(brickName);
+
+ if (type.equals(Constant.distributed)) {
+ command = "echo -e \"y\" | gluster volume remove-brick " + volumeName + " " + brick + " force";
+ } else if (type.equals(Constant.replica)) {
+ command = "echo -e \"y\" | gluster volume remove-brick " + volumeName + " repli " + count + " " + brick
+ + " force";
+ } else if (type.equals(Constant.stripe)) {
+ command = "echo -e \"y\" | gluster volume remove-brick " + volumeName + " stripe " + count + " " + brick
+ + " force";
+ }
+
+ if (command == null) {
+ log.error("3305 remove brick failed,please check the system");
+ return -5;
+ }
+ log.info("即将执行删除命令");
+ List reStrings = Constant.ganymedSSH.execCmdWait(Constant.hostIp, Constant.rootUser, Constant.rootPasswd,
+ Constant.port, command);
+ // System.out.println(reStrings);
+ log.info("删除命令执行完毕");
+
+ // 删除成功的返回信息是“volume remove-brick: success”
+ if (reStrings.get(0).contains("volume remove-brick: success")) {
+ {
+ log.info("删除brick成功");
+ return 1;
+ }
+ } else {
+ log.error("3305 remove brick failed,please check the system");
+
+ return -5;
+ }
+
+ }
+
+ /*
+ * 停止指定volume 参数中需给出volume的名字 返回值: 0 成功 -1 失败
+ * 需要先检查volume是否存在,然后判断volume的状态是否已经是停止状态
+ */
+ public int stopVolume(String volumeName) {
+ log.info("stop volume");
+
+ // 首先需要判断volume是否存在,调用其他函数返回所有volume的名字
+ boolean volumeExist = false;
+
+ List volume = new VolumeInfo().showAllVolumeName();
+ for (String temp : volume) {
+ if (temp.equals(volumeName)) {
+ volumeExist = true;
+ break;
+ }
+ }
+
+ if (!volumeExist) {
+ // volume不存在
+ log.error("3501 the volume doesnot exist");
+ System.out.println("3501 the volume doesnot exist");
+ return -1;
+ } else {
+ // volume存在,则需判断volume的状态是否已经为“stop”
+ if (new VolumeInfo().getVolumeStatus(volumeName).equals("Stopped")) {
+ log.error("3502 the volume is already stoped");
+ System.out.println("3502 the volume is already stoped");
+ return -1;
+ } else {
+ String command = "echo -e \"y\"| gluster volume stop " + volumeName;
+ List reStrings = Constant.ganymedSSH.execCmdWait(Constant.hostIp, Constant.rootUser, Constant.rootPasswd,
+ Constant.port, command);
+
+ // 标记操作结果:operation = 1 操作成功
+ // operation = 0 操作失败
+ int operation = 0;
+ for (String temp2 : reStrings) {
+ if (temp2.contains("volume stop: " + volumeName + ": " + "success")) {
+ operation = 1;
+ break;
+ }
+ System.out.println("operation: " + operation);
+ }
+
+ if (operation == 1) {
+ return 0;
+ } else {
+ log.error("3503 stop " + volumeName + " failed");
+ System.out.println("3503 stop " + volumeName + " failed");
+ return -1;
+ }
+
+ }
+ }
+ }
+
+ /*
+ * 开启指定volume 参数中需给出volume的名字 返回值: 0 成功 -1 失败
+ * 需要先检查volume是否存在,然后判断volume的状态是否已经是开启状态
+ */
+ public int startVolume(String volumeName) {
+ log.info("start volume");
+ boolean volumeExist = false;
+ List volume = new VolumeInfo().showAllVolumeName();
+
+ for (String temp : volume) {
+ if (temp.equals(volumeName)) {
+ volumeExist = true;
+ break;
+ }
+ }
+
+ if (volumeExist) {
+ if (!(new VolumeInfo().getVolumeStatus(volumeName).equals("Started"))) {
+ String command = "gluster volume start " + volumeName;
+
+ int operation = 0;
+
+ // 执行命令
+ List reStrings = Constant.ganymedSSH.execCmdWait(Constant.hostIp, Constant.rootUser, Constant.rootPasswd,
+ Constant.port, command);
+ for (String temp2 : reStrings) {
+ if (temp2.equals("volume start: " + volumeName + ": " + "success")) {
+ operation = 1;
+ }
+ }
+
+ if (operation == 1) {
+ return 0;
+ } else {
+ log.error("3602 start volume failed");
+ System.out.println("3602 start volume failed");
+ return -1;
+ }
+ } else {
+ log.error("volume已经开启");
+ System.out.println("volume已经开启");
+ return -1;
+ }
+ } else {
+ log.error("3601 the volume does not exist");
+ // System.out.println("3601 the volume does not exist");
+ return -1;
+ }
+ }
+
+ // 需要将存于List变量中的brick的位置组装成可以在glusterfs命令行中直接使用的格式
+ public String concat(List brickName) {
+ StringBuffer result = new StringBuffer();
+ int len = brickName.size();
+ for (int i = 0; i < len; i++) {
+ result.append(brickName.get(i));
+ result.append(" ");
+ }
+ return result.toString();
+ }
+
+ /*
+ * 只在创建volume时使用此函数 创建volume时对不同数据卷,brick的数量需要满足和count的关系
+ * 首先判断它们是否满足关系,在不满足的关系的情况下是肯定无法完成操作的 1:可以创建 ;-1:brick的ip不在集群中或者未连接; -2 -3
+ * -4 :类型与brick数目不匹配 ; -5 :volumeName 已经存在;-6:挂载点存在且不为空,不能作为挂载点; -7:未知错误
+ */
+ public int isAbleCreateVolume(String volumeName, int count, String type, List bricks, String mountPoint) {
+ int status = 0;
+
+ int length = bricks.size();
+
+ if (type.equals(Constant.distributed)) {
+ if (count != 0) {
+ log.error("3101 the kind of distributed requires the arg of count to be 0");
+ return -2;
+ }
+ }
+ if (type.equals(Constant.stripe)) {
+ if (length % count != 0) {
+ log.error("3102 the number of bricks should be the same as or the times of the stripe count");
+ return -3;
+ }
+ }
+ if (type.equals(Constant.replica)) {
+ if ((length % count) != 0) {
+ log.error(
+ "3103 the number of bricks should be the same as the replicate count or the times of replicate count");
+ return -4;
+ }
+ }
+
+ Map peer_status = new ClusterInfo().showClusterInfo();
+ peer_status.put(Constant.hostIp, Constant.peerincluster_connected);
+ for (String brick : bricks) {
+ brick = brick.split(":")[0];
+ if (!(peer_status.containsKey(brick) && peer_status.get(brick).equals(Constant.peerincluster_connected))) {
+ log.error("3105 birck " + brick + " ip is not in cluster");
+ return -1;
+ }
+
+ }
+
+ List volumeNames = new VolumeInfo().showAllVolumeName();
+ if(volumeNames==null){
+ log.error("3108 showAllVolumeName return error");
+ return -7;
+ }
+ if (volumeNames.contains(volumeName)) {
+ log.error("3106 " + volumeName + " is already exists! ");
+ return -5;
+ }
+
+ Map datas = new ShowData().showFolderData(mountPoint);
+ if (datas != null && datas.size() > 0) {
+ log.error("3107 " + mountPoint + " is not exists or not empty ! ");
+ return -6;
+ }
+ return 1;
+ }
+
+ /**
+ * 添加或删除volume的brick时,首先需要判断volume是否存在,然后需要判断volume类型、count及brick数目
+ *
+ * @param volumeName
+ * @param count
+ * @param type
+ * @param bricks
+ * @return 1 满足条件,可以添加;-1 :volume name is not exists;-2,-3,-4 类型与brick数量不匹配;
+ */
+ public int isAble(String volumeName, int count, String type, List bricks) {
+ List volumeNames = new VolumeInfo().showAllVolumeName();
+
+ if (!volumeNames.contains(volumeName)) {
+ log.error("3201:" + volumeName + " is not exists! ");
+ return -1;
+ }
+
+ int length = bricks.size();
+ if (type.equals("distribute")) {
+ if (count == 0)
+ return 1;
+ else {
+ log.error("3202: the kind of distributed requires the arg of count to be 0");
+ // System.out.println(" the kind of distributed requires the
+ // arg of count to be 0");
+ return -2;
+ }
+ }
+
+ if (type.equals("stripe")) {
+ if (length % count == 0)
+ return 1;
+ else {
+ log.error("3203: the number of bricks should be the same as or the times of the stripe count");
+ // System.out.println(" the number of bricks should be the
+ // same as or the times of the stripe count");
+ return -3;
+
+ }
+ }
+ if (type.equals("replicate")) {
+ if ((length % count) == 0)
+ return 1;
+ else {
+ log.error(
+ "3204: the number of bricks should be the same as the replicate count or the times of replicate count");
+
+ return -4;
+ }
+ }
+
+ return 1;
+ }
+
+ public static void main(String[] args) {
+ SetVolume setVolume = new SetVolume();
+ int operation = 0;
+ PropertyConfigurator.configure("log4j.properties");
+ // TODO Auto-generated method stub
+ // 测试创建volume的代码
+
+ List bricksToCreate = new ArrayList();
+ bricksToCreate.add("192.168.0.110:/v1");
+ bricksToCreate.add("192.168.0.116:/v1");
+ operation = setVolume.createVolume("v1", 0, "distributed", bricksToCreate, "/home/v1_point");
+// operation = setVolume.deleteVolume("v3");
+ //
+ // // 以下是测试添加brick的代码
+ //
+ // List bricksToAdd = new ArrayList();
+ // bricksToAdd.add("192.168.191.23:/v3");
+ // operation = setVolume.addBrickVolume("v3", bricksToAdd, 0,
+ // "distribute");
+ // System.out.println(operation);
+
+ // 以下代码是测试删除brick的代码
+ // List bricksToAdd= new ArrayList();
+ // bricksToAdd.add("192.168.191.23:/v3");
+ // operation =
+ // setVolume.deleteBrickVolume("v3",bricksToAdd,0,"distribute");
+ // System.out.println(operation);
+ // 以下是测试start volume的代码
+ // String volumeToStart = "testcreate" ;
+ // int startOperation = startVolume(volumeToStart);
+ // System.out.println(startOperation);
+ // 以下是测试stop volume
+ String volumeToStop = "v3";
+ // int startOperation = setVolume.stopVolume(volumeToStop);
+ // 以下是测试创建volume并完成挂载的代码
+ // List bricksToCreate= new ArrayList();
+ // bricksToCreate.add("192.168.214.135:/home/create");
+ // bricksToCreate.add("192.168.214.138:/home/create");
+ //
+ // int operation =
+ // createVolume("createAndmount",0,"distribute",bricksToCreate,"/mnt/create");
+ // System.out.println(operation);
+ }
+}
diff --git a/src/com/platform/glusterfs/ShowData.java b/src/com/platform/glusterfs/ShowData.java
new file mode 100644
index 00000000..919f7c7a
--- /dev/null
+++ b/src/com/platform/glusterfs/ShowData.java
@@ -0,0 +1,104 @@
+package com.platform.glusterfs;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+
+
+import org.apache.log4j.PropertyConfigurator;
+import org.junit.Test;
+
+import com.platform.utils.Constant;
+
+
+public class ShowData {
+
+ public static Logger log = Logger.getLogger ( ShowData.class);
+ /**
+ * get the data of volumeName Map s1 is data name and s2 is type file or folder
+ * @param volumeName
+ * @return
+ */
+
+
+ public Map showVolumeFiles(String volumeName){
+ log.info("start show the data");
+ Map data_type=new HashMap();
+ /**
+ * get mount point of volumeName
+ */
+ String folderName=volumeName;
+
+ data_type=showFolderData(volumeName);
+ return data_type;
+}
+ /**
+ * get the data of folder name
+ * Map is folder name and type 1 is file and others is folder
+
+
+ * @param FolderName
+ * @return
+ */
+ public Map showFolderData(String folderName){
+ log.info(" start get "+folderName+" data");
+
+
+ Map data_type=new HashMap();
+ String command="ls -l "+folderName;
+
+ /*
+ RunCommand runCommand=new RunCommand();
+ List reStrings=runCommand.runCommandWait(command);
+ */
+ List reStrings = Constant.ganymedSSH.execCmdWait(Constant.hostIp, Constant.rootUser, Constant.rootPasswd, Constant.port, command);
+ if(reStrings==null){
+ log.error("2101 command get result is null");
+ return null;
+ }
+ if(reStrings.size()==0){
+ log.info("2102 the folder is empty");
+ return data_type;
+ }
+ if(reStrings.get(0).contains("No such file or directory")){
+ log.info("2103 the "+folderName+" is not exists");
+ return null;
+ }
+ /**
+ * remove first line total number
+ */
+ reStrings.remove(0);
+
+ for(Iterator it2 = reStrings.iterator();it2.hasNext();){
+ String line=(String)it2.next();
+ line=line.replaceAll(" +", " ");
+ String keyValue[]=line.split(" ");
+ if(keyValue.length<9){
+ log.error("2104 "+line+" length is short");
+ continue;
+ }
+
+ data_type.put(keyValue[8], keyValue[1]);
+
+ }
+ log.info(" get "+folderName+" data successed");
+ return data_type;
+ }
+
+
+ /**
+ *
+ * <一句话功能简述>
+ * <功能详细描述>
+ * @see [类、类#方法、类#成员]
+ */
+ @Test
+ public void testShowData(){
+
+ System.out.println(showFolderData("/home"));
+
+ }
+}
\ No newline at end of file
diff --git a/src/com/platform/glusterfs/SizeInfo.java b/src/com/platform/glusterfs/SizeInfo.java
new file mode 100644
index 00000000..1aad2969
--- /dev/null
+++ b/src/com/platform/glusterfs/SizeInfo.java
@@ -0,0 +1,93 @@
+package com.platform.glusterfs;
+
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.PropertyConfigurator;
+
+import com.platform.utils.Constant;
+
+public class SizeInfo {
+ public static Logger log = Logger.getLogger(ClusterInfo.class);
+ VolumeInfo volumeInfo = new VolumeInfo();
+
+ /**
+ * 获取集群�?��volume size
+ * 返回值:-1:错�? 0:没有volume long:size大小
+ * @return
+ */
+ public long showAllSize() {
+ log.info("get AllSize ");
+ List volumeNames = volumeInfo.showAllVolumeName();
+ if (volumeNames == null) {
+ log.error("1201 showAllVolumeName error");
+ return -1;
+ }
+ if (volumeNames.size() == 0) {
+ log.error("1202 It is not exist any volume");
+ return 0;
+ }
+ List reStrings = null;
+ long size = 0L;
+
+ for (String str : volumeNames) {
+ String command = "df |grep " + str + "|awk \'{print $2}\'";
+ reStrings = Constant.ganymedSSH.execCmdWait(Constant.hostIp, Constant.rootUser, Constant.rootPasswd, Constant.port,
+ command);
+ if (reStrings.isEmpty()) {
+ log.error("1203 The brick is unmount");
+ } else {
+ size += Long.parseLong(reStrings.get(0));
+ }
+
+ }
+
+ return size;
+ }
+ /**
+ * 返回集群已用大小
+ * @return
+ * 返回值:-1:错�? 0:没有volume long:size大小
+ */
+ public long showUseSize() {
+ log.info("get UseSize ");
+
+ List volumeNames = volumeInfo.showAllVolumeName();
+ List reStrings = null;
+ long size = 0L;
+ if (volumeNames == null) {
+ log.error("1201 showAllVolumeName error");
+ return -1;
+ }
+ if (volumeNames.size() == 0) {
+ log.error("1202 It is not exist any volume");
+ return 0;
+ }
+
+ for (String str : volumeNames) {
+ String command = "df |grep " + str + "|awk \'{print $3}\'";
+ reStrings = Constant.ganymedSSH.execCmdWait(Constant.hostIp, Constant.rootUser, Constant.rootPasswd,
+ Constant.port, command);
+ if (reStrings.isEmpty()) {
+ log.error("1202 The brick is unmount");
+ } else {
+ size += Integer.valueOf(reStrings.get(0));
+ }
+
+ }
+
+ return size;
+ }
+
+ public static void main(String[] args) {
+ PropertyConfigurator.configure("log4j.properties");
+ System.out.println(new SizeInfo().showAllSize());
+ System.out.println(new SizeInfo().showUseSize());
+ }
+}
\ No newline at end of file
diff --git a/src/com/platform/glusterfs/VolumeInfo.java b/src/com/platform/glusterfs/VolumeInfo.java
new file mode 100644
index 00000000..af6a37d6
--- /dev/null
+++ b/src/com/platform/glusterfs/VolumeInfo.java
@@ -0,0 +1,271 @@
+package com.platform.glusterfs;
+
+
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.PropertyConfigurator;
+
+import com.platform.utils.Constant;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class VolumeInfo {
+ public static Logger log = Logger.getLogger(VolumeInfo.class);
+
+ public List showAllVolumeName() {
+ log.info("get volume name");
+ List volNames = new ArrayList();
+
+ /*
+ * String command = "echo \"" + Constant.rootPasswd +
+ * "\" |sudo -S gluster volume info|grep ^Volume.Name"; RunCommand
+ * runCommand = new RunCommand(); List reStrings =
+ * runCommand.runCommandWait(command);
+ */
+ List reStrings = Constant.ganymedSSH.execCmdWait(Constant.hostIp, Constant.rootUser, Constant.rootPasswd,
+ Constant.port, Constant.glusterVolumeInfo + "|grep ^Volume.Name");
+ // System.out.println(reStrings);
+ if(reStrings==null){
+ log.error("1401 get result is null");
+ return null;
+ }
+ if(reStrings.size()==0){
+ log.error("1402 get result is nothing");
+ return null;
+ }
+ if(reStrings.get(0).contains(Constant.noVolume)){
+ reStrings.clear();
+ return reStrings;
+ }
+ if (!(reStrings.get(0).split(":")[0].contains("Volume Name"))) {
+ log.error("1403 get result string wrong");
+ return null;
+ }
+
+ String nameInfo = "";
+ for (Iterator it = reStrings.iterator(); it.hasNext();) {
+ String line = (String) it.next();
+ String str[] = line.split(":");
+ volNames.add(str[1].replaceAll(" ", ""));
+ }
+ return volNames;
+
+ }
+
+ public String getVolumeType(String volumeName) {
+ log.info("get volume type");
+ String volType = "";
+
+ /*
+ * =======
+ *
+ * >>>>>>> origin/AlexKie String command = "echo \"" +
+ * Constant.rootPasswd + "\" |sudo -S gluster volume info " +
+ * volumeName + "|grep ^Type"; RunCommand runCommand = new RunCommand();
+ * List reStrings = runCommand.runCommandWait(command); <<<<<<<
+ * HEAD
+ */
+ List reStrings = Constant.ganymedSSH.execCmdWait(Constant.hostIp, Constant.rootUser, Constant.rootPasswd,
+ Constant.port, Constant.glusterVolumeInfo + volumeName + "|grep ^Type");
+ // System.out.println(reStrings);
+ if(reStrings==null){
+ log.error("1501 get result is null");
+ return null;
+ }
+ if(reStrings.size()==0){
+ log.error("1502 get result is nothing");
+ return null;
+ }
+ if (!(reStrings.get(0).split(":")[0].contains("Type"))) {
+ log.error("1503 get result string wrong");
+ return null;
+ }
+
+ // System.out.println(reStrings);
+
+ for (Iterator it = reStrings.iterator(); it.hasNext();) {
+ String line = (String) it.next();
+ String str[] = line.split(":");
+ volType = str[1];
+ }
+ volType=volType.replaceAll(" ", "");
+ return volType;
+ }
+
+ public String getVolumeStatus(String volumeName) {
+ log.info("get volume status");
+ String volStatus = "";
+
+ /*
+ * =======
+ *
+ * >>>>>>> origin/AlexKie String command = "echo \"" +
+ * Constant.rootPasswd + "\" |sudo -S gluster volume info " +
+ * volumeName + "|grep ^Status"; RunCommand runCommand = new
+ * RunCommand(); List reStrings =
+ * runCommand.runCommandWait(command); <<<<<<< HEAD
+ */
+ List reStrings = Constant.ganymedSSH.execCmdWait(Constant.hostIp, Constant.rootUser, Constant.rootPasswd,
+ Constant.port, Constant.glusterVolumeInfo + "|grep ^Status");
+ // System.out.println(reStrings);
+ if(reStrings==null){
+ log.error("1701 get result is null");
+ return null;
+ }
+ if(reStrings.size()==0){
+ log.error("1702 get result is nothing");
+ return null;
+ }
+ if (!(reStrings.get(0).split(":")[0].contains("Status"))) {
+ log.error("1703 get result string wrong");
+ return null;
+ }
+
+ for (Iterator it = reStrings.iterator(); it.hasNext();) {
+ String line = (String) it.next();
+ String str[] = line.split(":");
+ volStatus = str[1].replaceAll(" ", "");
+ }
+
+ return volStatus;
+ }
+
+ public Double getVolumeAllSize(String volumeName) {
+ log.info("get volume allSize");
+ Double allSize = null;
+ /*
+ * ======= // waiting for testing... public Double
+ * getVolumeAllSize(String volumeName) { log.info("get volume allSize");
+ * Double allSize = null;
+ *
+ * >>>>>>> origin/AlexKie String command = "echo \"" +
+ * Constant.rootPasswd + "\" |sudo -S df -h|grep " + volumeName +
+ * "|awk '{print $2}'"; RunCommand runCommand = new RunCommand();
+ * List reStrings = runCommand.runCommandWait(command); <<<<<<<
+ * HEAD
+ */
+ List reStrings = Constant.ganymedSSH.execCmdWait(Constant.hostIp, Constant.rootUser, Constant.rootPasswd,
+ Constant.port, Constant.df + "|grep " + volumeName + "|awk '{print $2}'");
+ // System.out.println(reStrings);
+ if(reStrings==null){
+ log.error("1801 get result is null");
+ return null;
+ }
+ if(reStrings.size()==0){
+ log.error("1802 get result is nothing");
+ return null;
+ }
+ char flag = reStrings.get(0).trim().toCharArray()[0];
+ if (flag < 48 || flag > 57) {
+ log.error("1803 get result string wrong");
+ return null;
+ }
+
+ for (Iterator it = reStrings.iterator(); it.hasNext();) {
+ String line = (String) it.next();
+ String str[] = line.split("[^0-9]");
+ allSize = Double.parseDouble(str[0]);
+ }
+
+ return allSize;
+ }
+
+ public Double getVolumeUseSize(String volumeName) {
+ log.info("get volume used size");
+ Double usedSize = null;
+
+ /*
+ * =======
+ *
+ * >>>>>>> origin/AlexKie String command = "echo \"" +
+ * Constant.rootPasswd + "\" |sudo -S df -h|grep " + volumeName +
+ * "|awk '{print $3}'"; RunCommand runCommand = new RunCommand();
+ * List reStrings = runCommand.runCommandWait(command); <<<<<<<
+ * HEAD
+ */
+ List reStrings = Constant.ganymedSSH.execCmdWait(Constant.hostIp, Constant.rootUser, Constant.rootPasswd,
+ Constant.port, Constant.df + "|grep " + volumeName + "|awk '{print $3}'");
+ // System.out.println(reStrings);
+ if(reStrings==null){
+ log.error("1901 get result is null");
+ return null;
+ }
+ if(reStrings.size()==0){
+ log.error("1902 get result is nothing");
+ return null;
+ }
+ char flag = reStrings.get(0).trim().toCharArray()[0];
+ if (flag < 48 || flag > 57) {
+ log.error("1903 get result string wrong");
+ return null;
+ }
+
+ for (Iterator it = reStrings.iterator(); it.hasNext();) {
+ String line = (String) it.next();
+ String str[] = line.split("[^0-9]");
+
+ usedSize = Double.parseDouble(str[0]);
+ }
+
+ return usedSize;
+ }
+
+ public String getVolumeMountPoint(String volumeName) {
+ log.info("get volume mountPoint");
+ // String mountPoint = "";
+
+ /*
+ * =======
+ *
+ * >>>>>>> origin/AlexKie String command = "echo \"" +
+ * Constant.rootPasswd + "\" |sudo -S df -h|grep " + volumeName +
+ * "|awk '{print $6}'"; RunCommand runCommand = new RunCommand();
+ * List reStrings = runCommand.runCommandWait(command); <<<<<<<
+ * HEAD
+ */
+ List reStrings = Constant.ganymedSSH.execCmdWait(Constant.hostIp, Constant.rootUser, Constant.rootPasswd,
+ Constant.port, Constant.df + "|grep " + volumeName + "|awk '{print $6}'");
+ // System.out.println(reStrings);
+ if(reStrings==null){
+ log.error("11001 get result string wrong");
+ return null;
+ }
+ if(reStrings.size()==0){
+ log.error("11002 "+volumeName+" is no mountpoint");
+ return null;
+ }
+
+ char flag = reStrings.get(0).trim().toCharArray()[0];
+ if (flag != '/') {
+ log.error("11003 get result string wrong");
+ return null;
+ }
+
+ Iterator it = reStrings.iterator();
+ String mountPoint = (String) it.next();
+ mountPoint=mountPoint.replaceAll(" ", "");
+ return mountPoint;
+ }
+
+ public static void main(String[] args) {
+ PropertyConfigurator.configure("log4j.properties");
+
+ System.out.println(new VolumeInfo().showAllVolumeName());
+ System.out.println(new VolumeInfo().getVolumeType("v1"));
+
+ System.out.println(new VolumeInfo().getVolumeStatus("v1"));
+ System.out.println(new VolumeInfo().getVolumeMountPoint("v1"));
+
+ System.out.println(new VolumeInfo().getVolumeAllSize("v1"));
+ System.out.println(new VolumeInfo().getVolumeUseSize("v1"));
+
+ }
+}
diff --git a/src/com/platform/oracle/OracleConnector.java b/src/com/platform/oracle/OracleConnector.java
index 28d24135..90f29a7d 100644
--- a/src/com/platform/oracle/OracleConnector.java
+++ b/src/com/platform/oracle/OracleConnector.java
@@ -14,7 +14,7 @@ public class OracleConnector {
static {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
- Configs.CONSOLE_LOGGER.info("Oracleسɹ");
+ Configs.CONSOLE_LOGGER.info("Oracle驱动加载成功");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
@@ -59,10 +59,10 @@ public class OracleConnector {
}
/**
- * ִжoracleݿɾ
+ * 执行对oracle数据库的增、删
* @param conn
* @param sql
- * @return Ƿִгɹ
+ * @return 是否执行成功
*/
public boolean execOracleSQL(Connection conn, String sql) {
boolean flag = false;
diff --git a/src/com/platform/service/DataInfoServiceImp.java b/src/com/platform/service/DataInfoServiceImp.java
index 3c89b60e..124e0aca 100644
--- a/src/com/platform/service/DataInfoServiceImp.java
+++ b/src/com/platform/service/DataInfoServiceImp.java
@@ -24,12 +24,12 @@ public class DataInfoServiceImp implements DataInfoService {
public ModelMap getPagerTableData(PagerOptions pagerOptions) {
// TODO Auto-generated method stub
ModelMap modelMap = new ModelMap();
- int count = dfdDao.getLimitedDataCount(pagerOptions); //ȡܼ¼
+ int count = dfdDao.getLimitedDataCount(pagerOptions); //获取总记录条数
int offset = 0;
if (pagerOptions.getCurrentPageNum() > 1) {
pagerOptions.setTotalLimit((pagerOptions.getCurrentPageNum() - 1)
* pagerOptions.getPriorTableSize());
- offset = dfdDao.getLimitedBeginId(pagerOptions); //ȡʼѯid
+ offset = dfdDao.getLimitedBeginId(pagerOptions); //获取起始查询id
System.out.println(offset);
}
pagerOptions.setOffset(offset + 1);
@@ -46,11 +46,11 @@ public class DataInfoServiceImp implements DataInfoService {
for(String idx: id){
List paths = dfdDao.getIdIsExist(Integer.parseInt(idx));
if(paths.size()>0){
- //ɾļ
+ //删除文件操作
for (int i = 0; i < paths.size(); i++) {
System.out.println(paths.get(i));
}
- //ɾݿ¼
+ //删除数据库记录
//dfdDao.deleteRow(idx);
}
}
diff --git a/src/com/platform/service/EncodeInfoService.java b/src/com/platform/service/EncodeInfoService.java
index 8ef13844..36a200bc 100644
--- a/src/com/platform/service/EncodeInfoService.java
+++ b/src/com/platform/service/EncodeInfoService.java
@@ -5,7 +5,7 @@ import java.util.List;
import com.platform.entities.EncodedInfoEntity;
/**
- * ݿҵӿ
+ * 数据库业务逻辑处理接口
*
* @author wuming
*
diff --git a/src/com/platform/service/EncodeInfoServiceImpl.java b/src/com/platform/service/EncodeInfoServiceImpl.java
index 3e5fe735..8492485d 100644
--- a/src/com/platform/service/EncodeInfoServiceImpl.java
+++ b/src/com/platform/service/EncodeInfoServiceImpl.java
@@ -10,7 +10,7 @@ import com.platform.dao.EncodeInfoDao;
import com.platform.entities.EncodedInfoEntity;
/**
- * ҵľʵ
+ * 业务逻辑的具体实现类
*
* @author wuming
*
@@ -26,7 +26,7 @@ public class EncodeInfoServiceImpl implements EncodeInfoService {
}
/**
- * ݴݵtableNameȡӦʵϢ/ϵͳ
+ * 根据传递的tableName参数获取对应实体信息(行政区划/系统)
*/
@Override
public List getAllEncodeInfo(String tableName) {
@@ -35,7 +35,7 @@ public class EncodeInfoServiceImpl implements EncodeInfoService {
}
/**
- *
+ * 测试事物
*/
@Override
public int deleteEncodeByCode(String code, String tableName) {
diff --git a/src/com/platform/service/IGfsService.java b/src/com/platform/service/IGfsService.java
new file mode 100644
index 00000000..9340546a
--- /dev/null
+++ b/src/com/platform/service/IGfsService.java
@@ -0,0 +1,68 @@
+
+/**
+ * 文件名 : IGfsService.java
+ * 版权 : <版权/公司名>
+ * 描述 : <描述>
+ * @author chen
+ * 版本 : <版本>
+ * 修改时间: 2016年9月8日
+ * 修改内容: <修改内容>
+ */
+package com.platform.service;
+
+import java.util.List;
+
+import com.platform.entities.FolderNode;
+import com.platform.entities.VolumeEntity;
+
+/**
+ * <一句话功能简述>
+ * <功能详细描述>
+ * @author chen
+ * @version [版本号,2016年9月8日]
+ * @see [相关类/方法]
+ * @since [产品/模块版本]
+ */
+
+public interface IGfsService {
+
+ /**
+ * <一句话功能简述> 查找path,的所有子目录
+ * <功能详细描述>
+ * @param path
+ * @return
+ * @throws Exception
+ * @see [类、类#方法、类#成员]
+ */
+ public FolderNode getFolder(String path) throws Exception;
+
+ /**
+ * <一句话功能简述> 复制path,的所有子目录
+ * <功能详细描述>
+ * @param srcPath
+ * @param dstPath
+ * @return
+ * @throws Exception
+ * @see [类、类#方法、类#成员]
+ */
+ public int copyFolder(String srcFolder, String dstFolder, String name) throws Exception;
+
+ /**
+ * <一句话功能简述> 获得volume下的 name \ allsize \ usedsize \ folderTree \ brick
+ * <功能详细描述>
+ * @return
+ * @throws Exception
+ * @see [类、类#方法、类#成员]
+ */
+ public List getAllVolumes() throws Exception;
+
+ /**
+ * <一句话功能简述>
+ * <功能详细描述>
+ * @return
+ * @throws Exception
+ * @see [类、类#方法、类#成员]
+ */
+ public VolumeEntity getOneVolume(String volumeName) throws Exception;
+
+}
diff --git a/src/com/platform/service/OracleExtractHelper.java b/src/com/platform/service/OracleExtractHelper.java
index dd8eb368..73043995 100644
--- a/src/com/platform/service/OracleExtractHelper.java
+++ b/src/com/platform/service/OracleExtractHelper.java
@@ -14,11 +14,11 @@ public class OracleExtractHelper {
private OracleConnector oConnector;
/**
- * жdblinkǷѾ
+ * 判断dblink是否已经存在
*
* @param conn
* @param linkName
- * dblink
+ * dblink的名称
* @return
*/
private boolean hasSameNameDBLink(Connection conn, String linkName) {
@@ -37,11 +37,11 @@ public class OracleExtractHelper {
}
/**
- * dblink
+ * 创建dblink
*
* @param conn
* @param oc
- * dblinkӲʵ
+ * dblink连接参数实体
*/
public void createDBLink(Connection conn, OracleConnectorParams oc) {
String linkName = "LinkTo" + oc.getName();
@@ -55,7 +55,7 @@ public class OracleExtractHelper {
+ ")))(CONNECT_DATA =(SERVICE_NAME =" + oc.getDatabase()
+ ")))';";
if (null != oc) {
- if (hasSameNameDBLink(conn, linkName)) { // dblinkѾ,ɾdblinkڴdblink
+ if (hasSameNameDBLink(conn, linkName)) { // 如果dblink已经存在,先删除dblink,在创建dblink
String deleteSql = "DROP PUBLIC DATABASE LINK LinkTo"
+ linkName;
FileOperateHelper
@@ -67,13 +67,13 @@ public class OracleExtractHelper {
+ oc.getName(), sql);
oConnector.execOracleSQL(conn, sql);
} else {
- Configs.CONSOLE_LOGGER.error("ɾеDBLinkʧ,µDBLink!");
+ Configs.CONSOLE_LOGGER.error("删除已有的DBLink失败,无法创建新的DBLink!");
FileOperateHelper.fileWrite(Configs.EXTRACT_LOG_LOCALTION
- + oc.getName(), "ɾеDBLinkʧ,µDBLink!");
+ + oc.getName(), "删除已有的DBLink失败,无法创建新的DBLink!");
}
} else {
- // dblink
+ // 否则,创建dblink
oConnector.execOracleSQL(conn, sql);
FileOperateHelper.fileWrite(
Configs.EXTRACT_LOG_LOCALTION + oc.getName(), sql);
@@ -82,7 +82,7 @@ public class OracleExtractHelper {
}
/**
- * ռ
+ * 创建表空间
*
* @param conn
* @param oc
@@ -103,7 +103,7 @@ public class OracleExtractHelper {
}
/**
- * ûȨ
+ * 创建用户并授权
*
* @param conn
* @param oc
@@ -119,7 +119,7 @@ public class OracleExtractHelper {
}
/**
- * ִлܲ
+ * 执行汇总操作
*
* @param conn
* @param oc
diff --git a/src/com/platform/service/OracleExtractService.java b/src/com/platform/service/OracleExtractService.java
index cd64be1f..9b858706 100644
--- a/src/com/platform/service/OracleExtractService.java
+++ b/src/com/platform/service/OracleExtractService.java
@@ -6,7 +6,7 @@ import com.platform.entities.OracleConnectorParams;
import com.platform.oracle.OracleConnector;
import com.platform.utils.Configs;
-public class OracleExtractService implements Runnable {
+public class OracleExtractService extends Thread implements Runnable {
private OracleConnectorParams ocp;
private java.sql.Connection conn;
@@ -15,11 +15,10 @@ public class OracleExtractService implements Runnable {
String url = "";
this.conn=OracleConnector.ConnectionBuilder(url, Configs.GATHER_USER_NAME, Configs.GATHER_USER_PASSWORD);
}
-
@Override
public void run() {
// TODO Auto-generated method stub
- }
+ }
}
diff --git a/src/com/platform/service/OracleStatusService.java b/src/com/platform/service/OracleStatusService.java
index 158eaf3f..0b081a88 100644
--- a/src/com/platform/service/OracleStatusService.java
+++ b/src/com/platform/service/OracleStatusService.java
@@ -17,9 +17,9 @@ import com.platform.utils.Configs;
public class OracleStatusService {
private static Map alliveTask = new Hashtable();
- public final static int EXEC_TIME = 10;// Ӷٴκɹȡ
- public final static long INTERVAL_TIME = 60 * 1000;// ÿٺִһ
- public final static long DELAY_TIME = 0; // ӳٶִ
+ public final static int EXEC_TIME = 10;// 连接多少次后不成功,取消链接
+ public final static long INTERVAL_TIME = 60 * 1000;// 每隔多少毫秒执行一次连接任务
+ public final static long DELAY_TIME = 0; // 延迟多少秒后执行
public void connectToOracle(String replicasName) {
SimpleKubeClient sKubeClient = new SimpleKubeClient();
@@ -55,7 +55,7 @@ public class OracleStatusService {
}
/**
- * ȡƳָʱ
+ * 取消并移除指定定时任务
*
*
* @param taskName
@@ -73,7 +73,7 @@ public class OracleStatusService {
}
/**
- * նʱ
+ * 清空定时任务
*/
public void cleanUpAlliveTask() {
Iterator> iterator = alliveTask.entrySet()
@@ -86,7 +86,7 @@ public class OracleStatusService {
}
/**
- * oracle
+ * 链接oracle任务类
*
* @author wuming
*
@@ -114,14 +114,14 @@ public class OracleStatusService {
+ ocp.getPort() + ":" + ocp.getDatabase();
boolean flag = OracleConnector.canConnect(url, ocp.getUser(),
ocp.getPassword());
- String message = "ʧ";
+ String message = "失败";
if (flag && alliveTask.containsKey(taskName)) {
client.updateOrAddReplicasLabelById(taskName, "status", "2");
- message = "ɹ";
- killAlliveTask(taskName); // ӳɹȡ
+ message = "成功";
+ killAlliveTask(taskName); // 连接成功,取消连接
}
- Configs.CONSOLE_LOGGER.info("ӵݿ " + taskName
- + "\t[ӽ " + message + "]");
+ Configs.CONSOLE_LOGGER.info("连接到数据库服务: " + taskName
+ + "\t[连接结果: " + message + "]");
}
count++;
}
diff --git a/src/com/platform/service/impl/GfsServiceImpl.java b/src/com/platform/service/impl/GfsServiceImpl.java
new file mode 100644
index 00000000..f45b9952
--- /dev/null
+++ b/src/com/platform/service/impl/GfsServiceImpl.java
@@ -0,0 +1,102 @@
+
+/**
+ * 文件名 : GfsServiceImpl.java
+ * 版权 : <版权/公司名>
+ * 描述 : <描述>
+ * @author chen
+ * 版本 : <版本>
+ * 修改时间: 2016年9月8日
+ * 修改内容: <修改内容>
+ */
+package com.platform.service.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+
+import com.platform.entities.FolderNode;
+import com.platform.entities.VolumeEntity;
+import com.platform.glusterfs.CopyData;
+import com.platform.glusterfs.GetTreeData;
+import com.platform.glusterfs.VolumeInfo;
+import com.platform.service.IGfsService;
+import com.platform.utils.CacheTreeData;
+import com.platform.utils.VolumeThread;
+import com.platform.utils.getTreeDataByPath;
+
+/**
+ * <一句话功能简述> gfs功能实现类
+ * <功能详细描述>
+ * @author chen
+ * @version [版本号,2016年9月8日]
+ * @see [相关类/方法]
+ * @since [产品/模块版本]
+ */
+@Service(value = "gfsService")
+public class GfsServiceImpl implements IGfsService {
+
+ /** gfs目录树形查询 */
+ private getTreeDataByPath getFolder = new getTreeDataByPath();
+
+ /** 数据迁移实现 */
+ private CopyData copydata = new CopyData();
+
+ /** Volume信息查询 */
+ private VolumeInfo volumeInfo = new VolumeInfo();
+
+ @Override
+ public FolderNode getFolder(String path) {
+ FolderNode result = getFolder.findByPath(path);
+ return result;
+ }
+
+ @Override
+ public int copyFolder(String srcFolder, String dstFolder, String name)
+ throws Exception {
+ int status = copydata.copyFolderFiles(srcFolder, dstFolder, name);
+ return status;
+ }
+
+ /* (non-Javadoc)
+ * @see com.platform.service.IGfsService#getAllVolume()
+ */
+ @Override
+ public List getAllVolumes() throws Exception {
+ List volumeList = new ArrayList<>();
+ List volumeNameList = volumeInfo.showAllVolumeName();
+ for (String volumeName : volumeNameList) {
+ VolumeEntity volume = new VolumeEntity();
+ volume.setName(volumeName);
+ String path = volumeInfo.getVolumeMountPoint(volumeName);
+ volume.setPath(path);
+ volume.setAllSize(volumeInfo.getVolumeAllSize(volumeName));
+ volume.setUsedSize(volumeInfo.getVolumeUseSize(volumeName));
+ //TODO
+// volume.setBrick(brick);
+ if (null != volume.getPath()) {
+// volume.setFolder(gfsTree.getDatas(volume.getPath()));
+ volume.setFolder(getFolder(path));
+ }
+ volumeList.add(volume);
+ }
+
+ return volumeList;
+ }
+
+ @Override
+ public VolumeEntity getOneVolume(String volumeName) throws Exception {
+ VolumeEntity volume = new VolumeEntity();
+ volume.setName(volumeName);
+ String path = volumeInfo.getVolumeMountPoint(volumeName);
+ volume.setPath(path);
+// volume.setAllSize(volumeInfo.getVolumeAllSize(volumeName));
+// volume.setUsedSize(volumeInfo.getVolumeUseSize(volumeName));
+// volume.setBrick(brick);
+ if (null != volume.getPath()) {
+ volume.setFolder(getFolder(path));
+ }
+ return volume;
+ }
+
+}
diff --git a/src/com/platform/utils/CacheTreeData.java b/src/com/platform/utils/CacheTreeData.java
new file mode 100644
index 00000000..80246a6d
--- /dev/null
+++ b/src/com/platform/utils/CacheTreeData.java
@@ -0,0 +1,18 @@
+package com.platform.utils;
+
+import com.platform.entities.FolderNode;
+
+public class CacheTreeData {
+
+ private static FolderNode folders = null;
+
+ public static FolderNode getFolders() {
+ return folders;
+ }
+
+ public static void setFolders(FolderNode folders) {
+ CacheTreeData.folders = folders;
+ }
+
+
+}
diff --git a/src/com/platform/utils/ConfigLoder.java b/src/com/platform/utils/ConfigLoder.java
index fe3ef0f9..ce3b30a0 100644
--- a/src/com/platform/utils/ConfigLoder.java
+++ b/src/com/platform/utils/ConfigLoder.java
@@ -29,7 +29,7 @@ public class ConfigLoder {
}
/**
- * ȡPropertyеֵ
+ * 读取文Property中的属性值
*
* @param key
* @return
diff --git a/src/com/platform/utils/ConfigPropertyReader.java b/src/com/platform/utils/ConfigPropertyReader.java
index 7f9df866..d2a3bd9b 100644
--- a/src/com/platform/utils/ConfigPropertyReader.java
+++ b/src/com/platform/utils/ConfigPropertyReader.java
@@ -29,7 +29,7 @@ public class ConfigPropertyReader {
}
/**
- * ȡPropertyеֵ
+ * 读取文Property中的属性值
*
* @param key
* @return
diff --git a/src/com/platform/utils/Configs.java b/src/com/platform/utils/Configs.java
index 87ee6c2e..bb2afede 100644
--- a/src/com/platform/utils/Configs.java
+++ b/src/com/platform/utils/Configs.java
@@ -3,6 +3,13 @@ package com.platform.utils;
import org.apache.log4j.Logger;
public class Configs {
+
+ /** 全局自定义异常--编码 */
+ public static final String GLOBAL_EXP_CUSTOM = "3001001001";
+
+ /** 全局非自定义异常--编码 */
+ public static final String GLOBAL_EXP_NOT_CUSTOM = "3001001002";
+
public static final String CONFIG_LOCALTION = "WebContent/WEB-INF/config/config.properties";
public static final Logger CONSOLE_LOGGER = Logger.getLogger("console");
@@ -14,32 +21,32 @@ public class Configs {
public static final Logger LOGGER = Logger.getLogger(Configs.class);
- public static String KUBE_MASTER_URL = "http://192.168.0.113:8080/"; // kubernetesȺmaser
+ public static String KUBE_MASTER_URL = "http://192.168.0.113:8080/"; // kubernetes集群的maser
// URl
- public static int ORACLE_DEFAULT_PORT = 1521; // oracleĬ϶˿ں
+ public static int ORACLE_DEFAULT_PORT = 1521; // oracle的默认端口号
- public static String COLLECT_USER_NAME = "system"; //ɼͳһĵû
+ public static String COLLECT_USER_NAME = "system"; //采集统一的登入用户名
- public static String COLLECT_PASSWORD = "oracle"; //ɼͳһĵ
+ public static String COLLECT_PASSWORD = "oracle"; //采集统一的登入密码
- public static String COLLECT_SERVICE_NAME = "orcl"; //ɼͳһķ
+ public static String COLLECT_SERVICE_NAME = "orcl"; //采集库统一的服务名
- public static String GATHER_PORT ="1521"; //ܿĶ˿ں
+ public static String GATHER_PORT ="1521"; //汇总库的端口号
- public static String GATHER_USER_NAME = "system"; //ܿĵû
+ public static String GATHER_USER_NAME = "system"; //汇总库的登入用户名
- public static String GATHER_USER_PASSWORD = "1"; //ܿĵ
+ public static String GATHER_USER_PASSWORD = "1"; //汇总库的登入密码
- public static String GATHER_SERVICE_NAME = "orcl"; //ܿķ
+ public static String GATHER_SERVICE_NAME = "orcl"; //汇总库的服务名
- public static String TABLE_SUFFIX = "_20152016"; //ܱܿĺ
+ public static String TABLE_SUFFIX = "_20152016"; //汇总库汇总表的后缀名
- public static String EXTRACT_LOG_LOCALTION = "/home/log"; //ݻ־λ
+ public static String EXTRACT_LOG_LOCALTION = "/home/log"; //数据汇总日志保存位置
- public static String GATHER_TABLESPACE_NAME=""; //ռ
+ public static String GATHER_TABLESPACE_NAME=""; //表空间名
- public static String GATHER_TABLESPACE_PATH=""; //ռ·
+ public static String GATHER_TABLESPACE_PATH=""; //表空间路径
- public static String GATHER_TABLE_PASSWORD=""; //
+ public static String GATHER_TABLE_PASSWORD=""; //登入密码
}
diff --git a/src/com/platform/utils/ConfigsLoader.java b/src/com/platform/utils/ConfigsLoader.java
index 1b1c1959..b47695d6 100644
--- a/src/com/platform/utils/ConfigsLoader.java
+++ b/src/com/platform/utils/ConfigsLoader.java
@@ -11,18 +11,19 @@ public class ConfigsLoader implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent sEvent) {
// TODO Auto-generated method stub
- Configs.CONSOLE_LOGGER.info("ϵͳֹͣ..");
+ Configs.CONSOLE_LOGGER.info("系统停止..");
}
@SuppressWarnings("static-access")
@Override
public void contextInitialized(ServletContextEvent sEvent) {
// TODO Auto-generated method stub
- Configs.CONSOLE_LOGGER.info("ϵͳʼ..");
+ Configs.CONSOLE_LOGGER.info("系统初始化..");
String contextPath = sEvent.getServletContext().getRealPath("/")
+ "WEB-INF/config/config.properties";
this.cReader = ConfigPropertyReader.Builder(contextPath);
init();
+ new VolumeThread("").start();
}
public static void init() {
diff --git a/src/com/platform/utils/Constant.java b/src/com/platform/utils/Constant.java
new file mode 100644
index 00000000..5e3ceef0
--- /dev/null
+++ b/src/com/platform/utils/Constant.java
@@ -0,0 +1,24 @@
+package com.platform.utils;
+
+import java.util.List;
+
+public class Constant {
+ public static String rootUser = "root";
+ public static String rootPasswd = "root";
+ public static String hostIp = "192.168.0.116";
+ public static int port = 22;
+ public static String glusterPeerStatus = "gluster peer status";
+ public static String glusterVolumeInfo = "gluster volume info ";
+ public static String df = "df -k ";
+ public static String peerincluster_connected="PeerinCluster(Connected)";
+ public static String distributed="distributed";
+ public static String replica="replica";
+ public static String stripe="stripe";
+ public static String noVolume="No volumes present";
+ public static GanymedSSH ganymedSSH=new GanymedSSH(hostIp, rootUser, rootPasswd, port);
+
+ /**
+ * volume 获取的线程休眠时间
+ */
+ public final static int get_volume_sleep_time = 300000;
+}
diff --git a/src/com/platform/utils/DateHandle.java b/src/com/platform/utils/DateHandle.java
new file mode 100644
index 00000000..90ebb9d7
--- /dev/null
+++ b/src/com/platform/utils/DateHandle.java
@@ -0,0 +1,9 @@
+package com.platform.utils;
+import java.util.Date;
+import java.text.SimpleDateFormat;
+public class DateHandle {
+public static String getNow() {
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
+ return df.format(new Date());// new Date()为获取当前系统时?
+}
+}
diff --git a/src/com/platform/utils/FileOperateHelper.java b/src/com/platform/utils/FileOperateHelper.java
index 31827547..b2b9fa9b 100644
--- a/src/com/platform/utils/FileOperateHelper.java
+++ b/src/com/platform/utils/FileOperateHelper.java
@@ -8,7 +8,7 @@ import java.io.IOException;
import java.io.InputStreamReader;
/**
- * ļд
+ * 文件读写操作帮助类
*
* @author wuming
*
@@ -16,7 +16,7 @@ import java.io.InputStreamReader;
public class FileOperateHelper {
/**
- * ӵķʽϢдļ
+ * 以追加的方式将信息写入文件
*
* @param path
* @param message
@@ -27,7 +27,7 @@ public class FileOperateHelper {
File file = new File(path);
if (file.exists())
file.createNewFile();
- FileOutputStream out = new FileOutputStream(file, true); // ӷʽtrue
+ FileOutputStream out = new FileOutputStream(file, true); // 如果追加方式用true
StringBuffer sb = new StringBuffer();
sb.append(message).append("\n");
out.write(sb.toString().getBytes("utf-8"));
@@ -37,7 +37,7 @@ public class FileOperateHelper {
}
/**
- * ļȡ
+ * 文件读取方法
* @param path
* @return
*/
diff --git a/src/com/platform/utils/GanymedSSH.java b/src/com/platform/utils/GanymedSSH.java
new file mode 100644
index 00000000..54a7a84e
--- /dev/null
+++ b/src/com/platform/utils/GanymedSSH.java
@@ -0,0 +1,265 @@
+package com.platform.utils;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.PropertyConfigurator;
+
+import ch.ethz.ssh2.Connection;
+import ch.ethz.ssh2.Session;
+import ch.ethz.ssh2.StreamGobbler;
+
+import ch.ethz.ssh2.*;
+
+
+
+public class GanymedSSH {
+ public static Logger log = Logger.getLogger(GanymedSSH.class);
+ Connection conn;
+
+ public boolean status = true;// 锟角凤拷锟斤拷锟街达拷锟斤拷锟斤拷锟阶刺�
+
+ public GanymedSSH() {
+ // TODO Auto-generated constructor stub
+
+ }
+
+ public GanymedSSH(String host, String username, String password, int port) {
+ // TODO Auto-generated constructor stub
+ try {
+ conn = getOpenedConnection(host, username, password, port);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ }
+
+
+ public Connection getOpenedConnection(String host, String username, String password, int port)
+ throws IOException {
+
+ conn = new Connection(host, port);
+ conn.connect(); // make sure the connection is opened
+ boolean isAuthenticated = conn.authenticateWithPassword(username, password);
+ if (isAuthenticated == false)
+ throw new IOException("Authentication failed.");
+ return conn;
+ }
+
+ public void execCmdNoWaitAcquiescent(String cmd) {
+ String host=Constant.hostIp;
+ String username=Constant.rootUser;
+ String password=Constant.rootPasswd;
+ int port=Constant.port;
+
+ Session sess = null;
+ try {
+ conn = getOpenedConnection(host, username, password, port);
+ sess = conn.openSession();
+ // 执锟斤拷cmd
+ sess.execCommand(cmd);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } finally {
+ sess.close();
+
+ }
+ }
+
+ public void execCmdNoWait(String host, String username, String password, int port, String cmd) {
+
+ Session sess = null;
+ try {
+ conn = getOpenedConnection(host, username, password, port);
+ sess = conn.openSession();
+ // 执锟斤拷cmd
+ sess.execCommand(cmd);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } finally {
+ sess.close();
+
+ }
+ }
+
+ public List execCmdWaitAcquiescent(String cmd) {
+ String host=Constant.hostIp;
+ String username=Constant.rootUser;
+ String password=Constant.rootPasswd;
+ int port=Constant.port;
+ List reStrings = new ArrayList();
+
+ Session sess = null;
+ try {
+
+ sess = conn.openSession();
+ // 执锟斤拷cmd
+ sess.execCommand(cmd);
+
+ InputStream stdout = new StreamGobbler(sess.getStdout());
+ InputStream stderr = new StreamGobbler(sess.getStderr());
+ BufferedReader stdoutReader = new BufferedReader(new InputStreamReader(stdout));
+ BufferedReader stderrReader = new BufferedReader(new InputStreamReader(stderr));
+ while (true) {
+ String line = stdoutReader.readLine();
+
+ if (line != null) {
+// System.out.println(line);
+ reStrings.add(line);
+ } else {
+ break;
+ }
+ }
+
+ while (true) {
+ String line = stderrReader.readLine();
+
+ if (line != null) {
+// System.out.println(line);
+ reStrings.add(line);
+ } else {
+ break;
+ }
+ }
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } finally {
+ sess.close();
+
+ }
+ return reStrings;
+ }
+
+ public List execCmdWait(String host, String username, String password, int port, String cmd) {
+ List reStrings = new ArrayList();
+
+ Session sess = null;
+ try {
+
+ sess = conn.openSession();
+ // 执锟斤拷cmd
+ sess.execCommand(cmd);
+
+ InputStream stdout = new StreamGobbler(sess.getStdout());
+ InputStream stderr = new StreamGobbler(sess.getStderr());
+ BufferedReader stdoutReader = new BufferedReader(new InputStreamReader(stdout));
+ BufferedReader stderrReader = new BufferedReader(new InputStreamReader(stderr));
+ while (true) {
+ String line = stdoutReader.readLine();
+
+ if (line != null) {
+// System.out.println(line);
+ reStrings.add(line);
+ } else {
+ break;
+ }
+ }
+
+ while (true) {
+ String line = stderrReader.readLine();
+
+ if (line != null) {
+// System.out.println(line);
+ reStrings.add(line);
+ } else {
+ break;
+ }
+ }
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } finally {
+ sess.close();
+
+ }
+ return reStrings;
+ }
+
+ public Map execMD5cmd(String host, String username, String password, int port, String cmd,
+ String prefix) {
+ Map md5 = new HashMap();
+
+
+ Session sess = null;
+ try {
+
+ sess = conn.openSession();
+ // 执锟斤拷cmd
+ sess.execCommand(cmd);
+ InputStream stdout = new StreamGobbler(sess.getStdout());
+
+ @SuppressWarnings("resource")
+ BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
+ while (true) {
+ String line = br.readLine();
+ if (line != null) {
+ String[] lines = line.split(" ");
+ String key = lines[1].replace(prefix, "");
+ String value = lines[0];
+ md5.put(key, value);
+ // System.out.println(key+"\t"+value);
+ } else {
+ break;
+ }
+
+ }
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } finally {
+ sess.close();
+
+ }
+ return md5;
+ }
+
+ public String execGetSize(String cmd) {
+ status = false;
+ String str_size = "0";
+ Session sess = null;
+ try {
+
+ // 执锟斤拷cmd
+ sess = conn.openSession();
+ sess.execCommand(cmd);
+ InputStream stdout = new StreamGobbler(sess.getStdout());
+
+ @SuppressWarnings("resource")
+ BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
+ while (true) {
+ String line = br.readLine();
+ if (line != null) {
+ // String[] lines=line.split(" ");
+ // str_size=lines[0];
+
+ str_size = line;
+ } else {
+ break;
+ }
+
+ }
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } finally {
+ sess.close();
+ }
+ status = true;
+ return str_size;
+ }
+ public static void main(String[] args) {
+ PropertyConfigurator.configure("log4j.properties");
+ }
+
+}
diff --git a/src/com/platform/utils/RunCommand.java b/src/com/platform/utils/RunCommand.java
new file mode 100644
index 00000000..66292a2a
--- /dev/null
+++ b/src/com/platform/utils/RunCommand.java
@@ -0,0 +1,60 @@
+package com.platform.utils;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.log4j.*;
+
+public class RunCommand {
+
+
+ public static Logger log = Logger.getLogger(RunCommand.class);
+
+ public List runCommandWait(String command) {
+ List reStrings = null;
+ String cmds[] = { "/bin/bash", "-c", command };
+ try {
+ Process ps = Runtime.getRuntime().exec(cmds);
+ ps.waitFor();
+ BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
+ reStrings = new ArrayList();
+ String line;
+ while ((line = br.readLine()) != null) {
+ reStrings.add(line);
+ // System.out.println(line);
+ }
+
+ br = new BufferedReader(new InputStreamReader(ps.getErrorStream()));
+ reStrings = new ArrayList();
+
+ while ((line = br.readLine()) != null) {
+ reStrings.add(line);
+ // System.out.println(line);
+ }
+ } catch (Exception e) {
+
+ log.error("0001 runCommandWait is error");
+
+ e.printStackTrace();
+ }
+ return reStrings;
+ }
+
+ public int runCommand(String command) {
+ List reStrings = null;
+ String cmds[] = { "/bin/bash", "-c", command };
+ try {
+ Process ps = Runtime.getRuntime().exec(cmds);
+ } catch (Exception e) {
+
+ log.error("0002 runCommand execute " + command + " is error");
+
+ e.printStackTrace();
+ return -1;
+ }
+ return 1;
+ }
+
+
+}
diff --git a/src/com/platform/utils/TestSupport.java b/src/com/platform/utils/TestSupport.java
new file mode 100644
index 00000000..74d938cb
--- /dev/null
+++ b/src/com/platform/utils/TestSupport.java
@@ -0,0 +1,14 @@
+package com.platform.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TestSupport {
+public List strToList(String str) {
+ List reStrings=new ArrayList();
+ for(String one:str.split("\n")){
+ reStrings.add(one);
+ }
+ return reStrings;
+}
+}
diff --git a/src/com/platform/utils/UtilsHelper.java b/src/com/platform/utils/UtilsHelper.java
index 348f7a54..3da84c22 100644
--- a/src/com/platform/utils/UtilsHelper.java
+++ b/src/com/platform/utils/UtilsHelper.java
@@ -23,7 +23,7 @@ public class UtilsHelper {
for (Field fs : fileds) {
String fieldName = fs.getName();
String fieldType = fs.getGenericType().toString()
- .replace("class ", ""); // typeͣǰ"class "
+ .replace("class ", ""); // 如果type是类类型,则前面包含"class ",后面跟类名
if (paramMap.containsKey(fieldName)) {
Method method = clazz.getDeclaredMethod(
getAttributeSetName(fs), Class.forName(fieldType));
@@ -72,11 +72,11 @@ public class UtilsHelper {
}
/**
- * {@fs}set
+ * 生成属性{@fs}的set方法的名字
*
* @param fs
- * Զ
- * @return set
+ * 属性对象
+ * @return set方法的名字
*/
private static String getAttributeSetName(Field fs) {
String fieldName = fs.getName();
diff --git a/src/com/platform/utils/VolumeThread.java b/src/com/platform/utils/VolumeThread.java
new file mode 100644
index 00000000..4e8549ec
--- /dev/null
+++ b/src/com/platform/utils/VolumeThread.java
@@ -0,0 +1,48 @@
+package com.platform.utils;
+
+import java.util.List;
+
+import com.platform.entities.FolderNode;
+import com.platform.glusterfs.GetTreeData;
+import com.platform.glusterfs.VolumeInfo;
+
+public class VolumeThread extends Thread implements Runnable{
+
+ /**
+ * 挂载点路径
+ */
+ private static String pointPath = "/home";
+
+ public VolumeThread(String path) {
+ if (null != path && !"".equals(path.trim())) {
+ VolumeThread.pointPath = path;
+ }
+ }
+
+ /** gfs目录树形展示 */
+ private GetTreeData gfsTree = new GetTreeData();
+
+ @Override
+ public void run() {
+ super.run();
+ while(true){
+ FolderNode folders = gfsTree.getDatas(pointPath);
+ //TODO
+ CacheTreeData.setFolders(folders);
+ try {
+ Thread.sleep(Constant.get_volume_sleep_time);
+ } catch (InterruptedException e) {
+ }
+ }
+
+ }
+
+ public static String getPointPath() {
+ return pointPath;
+ }
+
+ public static void setPointPath(String pointPath) {
+ VolumeThread.pointPath = pointPath;
+ }
+
+}
diff --git a/src/com/platform/utils/getTreeDataByPath.java b/src/com/platform/utils/getTreeDataByPath.java
new file mode 100644
index 00000000..3ea9f60d
--- /dev/null
+++ b/src/com/platform/utils/getTreeDataByPath.java
@@ -0,0 +1,42 @@
+package com.platform.utils;
+
+import java.util.List;
+
+import com.platform.entities.FolderNode;
+
+public class getTreeDataByPath {
+
+ /**
+ * @param path
+ * @return
+ */
+ public FolderNode findByPath(String path) {
+ FolderNode folderNode = CacheTreeData.getFolders();
+ if (null == folderNode) {
+ return null;
+ }
+ FolderNode folder = getFolder(folderNode, path);
+ return folder;
+ }
+
+ /**
+ * @param f
+ * @return
+ */
+ private FolderNode getFolder(FolderNode f, String path){
+ FolderNode result = null;
+ if(path.equals(f.getName())){
+ return f;
+ }
+ List folds = f.getChildNodes();
+ if (null != folds) {
+ for (FolderNode folderNode : folds) {
+ result = getFolder(folderNode, path);
+ if (null != result) {
+ break;
+ }
+ }
+ }
+ return result;
+ }
+}