zoukankan      html  css  js  c++  java
  • 服务器时间同步平台化

    针对linux服务器,用平台一键同步时间、查看内存占用、磁盘占用,由于采用用户名,密码登录SSH远程登录拿取数据,所以不需要安装客户端

    时间同步界面

    平台根据远程服务器的登录名,密码,ssh登录远程服务器,执行ntpdate 172.16.3.3(时间服务器ip)来同步时间

    public String syncDate(String ip) throws IOException, InterruptedException
    	{
    		 RemoteShellTool tool = new RemoteShellTool(ip,"utf-8");
    		 tool.loginCentos();
    		 String returnString = tool.exec("ntpdate 172.16.3.2"); 
    		 
    		 if(returnString.indexOf("adjust")<0)
    		 {
    			 logger.info("syncDate:"+ip+" return "+returnString);
    			 return "fail";
    		 }
    		 Thread.sleep(1000);
    		 return viewDate(ip);
    	}	

    附其他代码:

    html

    <!DOCTYPE html>
    <html lang="zh-CN">
    
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link href="/css/reset.css" rel="stylesheet">
        <link href="/bootstrap/css/bootstrap.min.css" rel="stylesheet">
        <link href="/css/layout.css" rel="stylesheet">
        <link href="/css/index/applications.css" rel="stylesheet">
        <script type="text/javascript" src="/lib/jquery.js"></script>
        <script type="text/javascript" src="/bootstrap/js/bootstrap.min.js"></script>
        <script type="text/javascript" src="/bootstrap/js/jquery.bootpag.min.js"></script>
        <script type="text/javascript" src="/lib/avalon.js"></script>
        <script type="text/javascript" src="/js/common/util.js"></script>
        <script type="text/javascript" src="/js/common/common.js"></script>
        <script type="text/javascript" src="/js/index/vmtime.js"></script>
        <title>虚拟机时间管理</title>
    </head>
    
    <body ms-controller="vm">
        <!-- HEAD -->
        <!--HEAD -->
        <div ms-include-src="'/home/header.html'"></div>
        <!-- Content -->
        <div class="container">
         <div ms-controller="vmtime">
    
    			<div class="tabbable">
    
    				<div class="tab-content">
    					<div class="tab-pane active" id="vms">
    						<div id="vmsTab-pane">
    							<br />
    							<div class="row" id="search1Div">
    								<div class="col-md-2">
    									<div class="input-group">
    										<span class="input-group-addon">环境:</span> 
    										<select
    											class="form-control" ms-duplex="envType">
    											<option value="STRESS" selected>STRESS</option>
    											<option value="ALL">全部</option>
    											<option value="SIT1">SIT1</option>
    											<option value="SIT2">SIT2</option>
    											<option value="UAT">UAT</option>
    											<option value="other">其他</option>
    										</select>
    									</div>
    								</div>
    									<div class="col-md-2"  id="search2Div">
    										<div class="input-group">
    											<span class="input-group-addon">类型:</span> <select
    												class="form-control" ms-duplex="conType">
    												<option value="" selected>请选择</option>
    												<option value=".Net Web">.Net Web</option>
    												<option value="Windows Service">Windows Service</option>
    												<option value="Node">Node</option>
    												<option value="Java App">Java App</option>
    												<option value="Java Web">Java Web</option>
    												<option value="其他">其他</option>
    											</select>
    										</div>
    									</div>
    									<div class="col-md-1">
    										<button type="button" id="searchBtn" class="btn btn-primary"
    											ms-click="listVmInfosByPage('init')" style="margin: auto;">
    											搜 索</button>
    									</div>
    
    									<div class="col-md-1">
    										<button type="button" id="allCheckBtn" class="btn btn-info"
    											ms-click="checkAll()" style="margin: auto;">全选</button>
    									</div>
    
    									<div class="col-md-1">
    										<button type="button" id="allUncheckBtn" class="btn btn-info"
    											ms-click="uncheckAll()" style="margin: auto;">全不选</button>
    									</div>
    
    									<div class="col-md-2">
    										<button type="button" id="allStatusBtn"
    											class="btn btn-success" ms-click="viewAllStatus()"
    											style="margin: auto;">查看当前时间</button>
    									</div>
    
    									<div class="col-md-2">
    										<button type="button" id="allDeployBtn"
    											class="btn btn-warning" ms-click="deployAll()"
    											style="margin: auto;">同步时间服务器</button>
    									</div>
    
    								</div>
    
    
    								<div>
    									<div id="pageSizeSelect">
    										<a><span ms-class="{{pagesize1Cls}}"
    											ms-click="changePageSize(pagesize1)">{{pagesize1}}</span></a> | <a><span
    											ms-class="{{pagesize2Cls}}"
    											ms-click="changePageSize(pagesize2)">{{pagesize2}}</span></a> | <a>
    											<spam ms-class="{{pagesize3Cls}}"
    												ms-click="changePageSize(pagesize3)">{{pagesize3}}</spam>
    										</a>
    									</div>
    								</div>
    								<table class="table table-condensed table-hover">
    									<thead>
    										<tr>
    											<td class="width-50"></td>
    											<td class="width-50">ID</td>
    											<td>名称</td>
    											<td class="width-125">IP</td>
    											<td class="width-100">操作系统</td>
    
    											<td class="width-300">当前时间</td>
    
    											<td class="width-50">查看</td>
    											<td class="width-50">同步</td>
    										</tr>
    									</thead>
    									<tbody>
    										<tr ms-repeat="vmsList">
    											<td><label><input type="checkbox"
    													ms-class="check_{{el.name}}"></label></td>
    											<td>{{$index+jpageSize*(jpageIndex-1)+1}}</td>
    											<td>{{el.name}}</td>
    											<td><a ms-href="'/admin/vmdetails.html?vmid='+el.vm.id"
    												target="_blank">{{el.ip}}</a></td>
    											<td>{{el.os}}</td>
    											<td><label ms-class="time_{{el.name}}" /></td>
    											<td>
    												<div ms-class="buttonDiv_view_{{el.name}}">
    													<i style="color: #009100;"
    														ms-class="glyphicon glyphicon-eye-open icon-white i_view_{{el.name}}"
    														ms-click="postViewStatus(el.name,el.ip,el.os)"></i>
    												</div>
    												<div ms-class="loadDiv_view_{{el.name}} loadDiv"
    													style="display: none">
    													<img src="/img/load2.jpg"
    														style=" 16px; height: 16px;" />
    												</div>
    											</td>
    											<td>
    												<div ms-class="buttonDiv_{{el.name}}">
    													<i style="color: #000066;"
    														ms-class="glyphicon glyphicon-play icon-white i_{{el.name}}"
    														ms-click="postDeploy(el.name,el.ip,el.os)"> </i>
    												</div>
    												<div ms-class="loadDiv_{{el.name}} loadDiv"
    													style="display: none">
    													<img src="/img/load2.jpg"
    														style=" 16px; height: 16px;" />
    												</div>
    
    											</td>
    
    										</tr>
    									</tbody>
    								</table>
    								<div class="text-center">
    									<p id="pagination"></p>
    								</div>
    							</div>
    						</div>
    
    
    					</div>
    				</div>
    
    			</div>                   
        </div>
        <!--/.container-->
        <!--FOOTER -->
        <div ms-include-src="'/home/footer.html'"></div>
    </body>
    
    </html>

    js

    /**
     * Created by chenjiazhu on 2017/5/10.
     */
    var vmtime = avalon.define({
    	$id : 'vmtime',
    
    	// VM Start
    	pagesize1 : "20",
    	pagesize1Cls : "pageSizeSelected",
    	pagesize2 : "50",
    	pagesize2Cls : "",
    	pagesize3 : "100",
    	pagesize3Cls : "",
    	changePageSize : function(pgsize) {
    		vmtime.jpageSize = pgsize;
    		vmtime.listVmInfosByPage("init");
    	},
    	clearsearch : function() {
    		vmtime.conType = "";
    		vmtime.listVmInfosByPage("init");
    	},
    	jpageIndex : 1,
    	jpageSize : 20,
    	envType : "STRESS",
    	conType : "",
    
    	vmsList : [],
    
    	listVmInfosByPage : function(tag) {
    		if (tag) {
    			vmtime.jpageIndex = 1;
    		}
    		$.ajax({
    			type : "post",
    			url : 'listVmInfosByPageByEnvType.action',
    			data : {
    				"pageindex" : vmtime.jpageIndex,
    				"pagesize" : vmtime.jpageSize,
    				"type" : vmtime.conType,
    				"envType" : vmtime.envType
    			},
    			dataType : "json",
    			success : function(data) {
    				if (tag) {
    					$('#pagination').bootpag({
    						total : data.pagenum,
    						page : vmtime.jpageIndex
    					});
    				}
    				if (data.retCode == "1000") {
    					vmtime.vmsList = data.vms;
    				} else {
    					alert(data.retMSG);
    				}
    				$("[class^=time]").html("");
    			},
    			error : function(XMLHttpRequest, textStatus, errorThrown) {
    				alert("请求数据异常,状态码:" + XMLHttpRequest.status + ",Error:"
    						+ errorThrown + ",textStatus:" + textStatus);
    			}
    		});
    	},
    
    	postViewStatus : function(name, ip,os) {
    
    		$(".loadDiv_view_" + name).show();
    		$(".buttonDiv_view_" + name).hide();
    
    		$.ajax({
    			type : "post",
    			url : 'viewDate.action',
    			data : {
    				"ip" : ip,
    				"os":os
    			},
    			dataType : "json",
    
    			success : function(data) {
    				$(".time_" + name).html(data.retCode);
    
    				$(".loadDiv_view_" + name).hide();
    				$(".buttonDiv_view_" + name).show();
    			},
    			error : function(XMLHttpRequest, textStatus, errorThrown) {
    				alert("请求数据异常,状态码:" + XMLHttpRequest.status + ",Error:"
    						+ errorThrown + ",textStatus:" + textStatus);
    				$(".loadDiv_view_" + name).hide();
    				$(".buttonDiv_view_" + name).show();
    			}
    		});
    
    	},
    
    	postDeploy : function(name, ip, os) {
    
    		$(".loadDiv_" + name).show();
    		$(".buttonDiv_" + name).hide();
    
    		$.ajax({
    			type : "post",
    			url : 'syncDate.action',
    			data : {
    				"ip" : ip,
    				"os":os
    			},
    			dataType : "json",
    			success : function(data) {
    				$(".loadDiv_" + name).hide();
    				$(".buttonDiv_" + name).show();
    
    				$(".time_" + name).html(data.retCode);
    
    			},
    			error : function(XMLHttpRequest, textStatus, errorThrown) {
    				$(".loadDiv_" + name).hide();
    				$(".buttonDiv_" + name).show();
    				alert("请求数据异常,状态码:" + XMLHttpRequest.status + ",<br/>"
    						+ XMLHttpRequest.readyState + ",<br/>"
    						+ XMLHttpRequest.responseText + ",<br/>Error:"
    						+ errorThrown + ",<br/>textStatus:" + textStatus);
    			}
    		});
    	},
    
    	viewAllStatus : function() {
    		$("input[type='checkbox']").each(function() {
    			if ($(this).get(0).checked) {
    
    				var name = $(this).attr("class").substr(6);
    				// alert(name);
    				$(".i_view_" + name).click();
    			}
    
    		});
    	},
    
    	deployAll : function() {
    		$("input[type='checkbox']").each(function() {
    			if ($(this).get(0).checked) {
    
    				var name = $(this).attr("class").substr(6);
    				// alert(name);
    				$(".i_" + name).click();
    			}
    
    		});
    	},
    
    	checkAll : function() {
    		$("input[type='checkbox']").each(function() {
    			$(this).attr("checked", "true");
    		});
    	},
    
    	uncheckAll : function() {
    		$("input[type='checkbox']").each(function() {
    			$(this).removeAttr("checked");
    		});
    	},
    
    	loadVmTAB : function() {
    		vmtime.listVmInfosByPage("init");
    		$('#vms').tab('show');
    	},
    	// VM END
    	userOps : ops(4),
    	bootpagFuc : function() {
    
    		$('#pagination').bootpag({
    			total : 1,
    			maxVisible : 10
    		}).on('page', function(event, num) {
    			vmtime.jpageIndex = num;
    			vmtime.listVmInfosByPage();
    		});
    	}
    });
    
    /*
    avalon.ready(function() {
        appsvm.bootpagFuc();
        appsvm.listApp("init");
        appsvm.depList = getAllDepartments();
        appsvm.envsList = getAllEnvs();
        appsvm.applicationsTypeList = getAllAppType();
    });*/
    
    avalon.ready(function() {
    /*	if (vmtime.userOps) {
    		vmtime.loadVmTAB();
    
    	} else {
    		redirectAdminIndexPage();
    	}*/
    	vmtime.bootpagFuc();
    	vmtime.listVmInfosByPage("init");
    	// $(".loadDiv").hide();
    });
    
    vmtime.$watch("jpageSize", function(newValue) {
    	vmtime.pagesize1Cls = "";
    	vmtime.pagesize2Cls = "";
    	vmtime.pagesize3Cls = "";
    	if (newValue == vmtime.pagesize1) {
    		vmtime.pagesize1Cls = "pageSizeSelected";
    	} else if (newValue == vmtime.pagesize2) {
    		vmtime.pagesize2Cls = "pageSizeSelected";
    	} else if (newValue == vmtime.pagesize3) {
    		vmtime.pagesize3Cls = "pageSizeSelected";
    	}
    })

    工具类

    package com.ymt.testplatform.util;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.nio.charset.Charset;
    
    import ch.ethz.ssh2.Connection;
    import ch.ethz.ssh2.Session;
    
    public class RemoteShellTool {
    	private Connection conn;  
        private String ipAddr;  
        private String charset = Charset.defaultCharset().toString();  
        private String userName;  
        private String password;  
      
        public RemoteShellTool(String ipAddr, String charset) {  
            this.ipAddr = ipAddr;  
            if (charset != null) {  
                this.charset = charset;  
            }  
        }  
        
        public RemoteShellTool(String ipAddr, String userName, String password,  
                String charset) {  
            this.ipAddr = ipAddr;  
            this.userName = userName;  
            this.password = password;  
            if (charset != null) {  
                this.charset = charset;  
            }  
        }  
      
        public boolean login() throws IOException {  
            conn = new Connection(ipAddr);  
            conn.connect(); // 连接  
            return conn.authenticateWithPassword(userName, password); // 认证  
        }  
        
        public boolean loginCentos() throws IOException
    	{
        	 conn = new Connection(ipAddr);  
             conn.connect(); // 连接  
    		
    		String [] pass = {"ymt@123","abcd@1234","root@1234","1qaz@WSX","1234qwer"};
    		
    		for (String pa : pass) {
    			if(conn.authenticateWithPassword("root", pa))
    			{
    				this.userName = "root";  
    		        this.password = pa;  
    		        return true;
    			}
    		}		
    		
    		return false;
    		
    	}
      
        public boolean login(String userName,String password) throws IOException {  
            conn = new Connection(ipAddr);  
            conn.connect(); // 连接  
            this.userName = userName;  
            this.password = password;  
            return conn.authenticateWithPassword(userName, password); // 认证  
        }  
      
        public String exec(String cmds) {  
            InputStream in = null;  
            String result = "";  
            try {  
                if (this.login()) {  
                    Session session = conn.openSession(); // 打开一个会话  
                    session.execCommand(cmds);  
                      
                    in = session.getStdout();  
                    result = this.processStdout(in, this.charset);  
                    session.close();  
                    conn.close();  
                }  
            } catch (IOException e1) {  
                e1.printStackTrace();  
            }  
            return result;  
        }  
      
        public String processStdout(InputStream in, String charset) {  
          
            byte[] buf = new byte[1024];  
            StringBuffer sb = new StringBuffer();  
            try {  
                while (in.read(buf) != -1) {  
                    sb.append(new String(buf, charset));  
                }  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
            return sb.toString();  
        }  
      
        /** 
         * @param args 
         */  
        public static void main(String[] args) {  
      
            RemoteShellTool tool = new RemoteShellTool("172.16.103.126", "ftpuser",  
                    "1qaz@WSX", "utf-8");  
      
            String result = tool.exec("sh Deploy.sh 172.16.103.121");  
            System.out.print("result:"+result);  
            
            RemoteShellTool tool2 = new RemoteShellTool("172.16.103.121", "ftpuser",  
                    "1qaz@WSX", "utf-8");  
      
            String result2 = tool2.exec("sh tools/clientDeploy.sh");  
            System.out.print("result2:"+result2);  
      
        }  
      
    }
    



  • 相关阅读:
    Linux查看磁盘空间大小
    Qt常见错误
    顺序查找和二分查找代码
    字典树——动态&&静态
    Linux本机和远程服务器之间文件的上传和下载 rz sz
    牛顿迭代法——C语言
    MFC之ListControl选中行删除
    MFC之登录框的问题处理
    MFC之创建多级动态菜单
    c++动态内存知识总结与疑问
  • 原文地址:https://www.cnblogs.com/chenjiazhu/p/7473630.html
Copyright © 2011-2022 走看看