服务器时间同步平台化

来源:互联网 发布:淘宝new balance旗舰店 编辑:程序博客网 时间:2024/06/03 20:49

针对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> <selectclass="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> <selectclass="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><spanms-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="width: 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="width: 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 Startpagesize1 : "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 ENDuserOps : 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);        }    }



原创粉丝点击