日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

服务器端口监测系统

發布時間:2023/12/31 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 服务器端口监测系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ?前提說明:在日常的項目中,由于數據量大,數據庫隔幾天就會自動宕機,獨自運行的程序也會自行宕機,或者網絡不穩當。產生的各種各樣的問題,有時候沒有及時發現會導致問題變得越來越大。于是寫了一個監控系統,每隔1分鐘對程序進行監測,如有離線狀態的消息,每隔5分鐘會發送郵件,方便正常維護處置。

源代碼:碼云

1.Demo?

2.建表

總共建兩張表即可

CREATE TABLE `socket` (`id` varchar(255) NOT NULL,`mc` varchar(255) DEFAULT NULL,`ip` varchar(255) DEFAULT NULL,`prot` varchar(255) DEFAULT NULL,`status` varchar(255) DEFAULT NULL,`time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`ifsocket` int(11) DEFAULT NULL,`ifdelte` int(11) DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `email` (`id` int(11) NOT NULL AUTO_INCREMENT,`email` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

3.后端代碼

? 3.1 實體類

import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.experimental.Accessors;import java.util.Date; @Data @Accessors(chain = true) public class Socket {private String id;private String mc;private String ip;private String prot;private String status;@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")private Date time;private int ifsocket;private int ifdelte;public String getStatus() {return status;}public void setStatus(String status) {this.status = status;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getMc() {return mc;}public void setMc(String mc) {this.mc = mc;}public String getIp() {return ip;}public void setIp(String ip) {this.ip = ip;}public String getProt() {return prot;}public void setProt(String prot) {this.prot = prot;}public Date getTime() {return time;}public void setTime(Date time) {this.time = time;}public int getIfsocket() {return ifsocket;}public void setIfsocket(int ifsocket) {this.ifsocket = ifsocket;}public int getIfdelte() {return ifdelte;}public void setIfdelte(int ifdelte) {this.ifdelte = ifdelte;} }

? 3.2? xml

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.sws.course.dao.SocketDao"><!--查詢所有要監聽的ip和端口號--><select id="findAll" resultType="com.sws.course.dto.Socket"> -- SELECT * FROM `socket` where ifdelte=1 and ifsocket=1;SELECT * FROM `socket` where ifdelte=1 ;</select><!--插入要監聽的ip和端口號--><insert id="insertSocket" parameterType="com.sws.course.dto.Socket">insert into socket (id,mc,ip,prot,status,ifsocket,ifdelte) values(#{id},#{mc},#{ip},#{prot},#{status},#{ifsocket},#{ifdelte})</insert><!--插入要監聽的ip和端口號--><update id="updateSocket" parameterType="com.sws.course.dto.Socket">update socket SET status=#{status},time=#{time} where id=#{id} ;</update><!--查詢表中是離線的服務--><select id="findbyStatus" resultType="com.sws.course.dto.Socket">SELECT mc,ip,prot FROM `socket` where status='離線'</select><!--查詢要發送的郵箱--><select id="findEmail" resultType="String">SELECT email from email</select><!--刪除數據--><delete id="deleteById">delete FROM `socket` where id=#{id}</delete> </mapper>

? 3.3? Dao

import com.sws.course.dto.Socket; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.Date; import java.util.List;@Mapper public interface SocketDao {//查詢所有需要監控的ip端口List<Socket> findAll();//插入所有需要監控的ip端口int insertSocket(@Param("id") String id,@Param("mc") String mc,@Param("ip") String ip,@Param("prot") String prot,@Param("status") String status,@Param("ifsocket") int ifsocket,@Param("ifdelte") int ifdelte);//修改服務端口的狀態int updateSocket(@Param("id") String id,@Param("mc") String mc,@Param("ip") String ip,@Param("prot") String prot,@Param("status") String status,@Param("time") Date time);//查詢表中是離線的服務List<Socket> findbyStatus();//查詢要發送的郵箱List<String> findEmail();//根據id刪除相關數據int deleteById(String id);}

3.4Controller

package com.sws.course.controller;import com.fasterxml.jackson.annotation.JsonFormat; import com.sws.course.dao.SocketDao; import com.sws.course.dto.Socket; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;import java.util.*;@RestController @RequestMapping("/Socket") @CrossOrigin @Slf4j public class SocketController {@Autowiredprivate SocketDao dao;@PostMapping("add")public Map<String,Object> add(String mc,String ip,String prot) {UUID uuid= UUID.randomUUID();String uuidString=uuid.toString();dao.insertSocket(uuidString,mc,ip,prot,"待定",1,1);Map<String, Object> map = new HashMap<>();map.put("success","保存成功");map.put("ip",ip);map.put("prot",prot);return map;}@PostMapping("findAll")public List<Socket> findAll() {List<Socket> list=dao.findAll();return list;}@PostMapping("deleteById")public Map<String,Object> delete(String id) {Map<String, Object> map = new HashMap<>();int num=dao.deleteById(id);map.put("success","刪除成功");return map;}}

3.5 定時任務(兩個)

import com.sws.course.dao.SocketDao; import com.sws.course.dto.Socket; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component;import java.io.IOException; import java.net.ConnectException; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List;@Component public class crontabSocket {@AutowiredSocketDao dao;@Scheduled(cron="0 0/1 * * * ? ") //每1分鐘執行一次public void AnimalAechartsMapper() throws IOException, ParseException {java.net.Socket client = null;List<Socket> list=dao.findAll();for (int j=0;j<list.size();j++){String id=list.get(j).getId();String ip=list.get(j).getIp();String mc=list.get(j).getMc();String prot=list.get(j).getProt();int protInt=Integer.parseInt(prot);try{client = new java.net.Socket(ip, protInt);System.out.println("連接已建立...");Date time=getDate();dao.updateSocket(id,mc,ip,prot,"在線",time);} catch(ConnectException e) {System.out.println("未建立連接!!!");Date time=getDate();dao.updateSocket(id,mc,ip,prot,"離線",time);}}}public Date getDate() throws ParseException {DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Calendar calendar = Calendar.getInstance();String dateName = df.format(calendar.getTime());SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = sf.parse(dateName);return date;}} import com.sws.course.dao.SocketDao; import com.sws.course.dto.Socket; import org.apache.commons.mail.EmailException; import org.apache.commons.mail.HtmlEmail; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component;import java.io.IOException; import java.text.ParseException; import java.util.List;@Component public class crontabEmail {@AutowiredSocketDao socketdao;@Scheduled(cron="0/5 * * * * ?") //每10分鐘執行一次public void SendEamil() throws IOException, ParseException, EmailException {List<Socket> list=socketdao.findbyStatus();List<String> emailList =socketdao.findEmail();int num=list.size();if (num>0) {HtmlEmail email=new HtmlEmail();//創建一個HtmlEmail實例對象email.setHostName("smtp.163.com");//郵箱的SMTP服務器,一般123郵箱的是smtp.123.com,qq郵箱為smtp.qq.comemail.setCharset("utf-8");//設置發送的字符類型for (int i=0;i<emailList.size();i++){email.addTo(emailList.get(i));//設置收件人}email.setFrom("18629461220@163.com","服務端口監測系統");//發送人的郵箱為自己的,用戶名可以隨便填email.setAuthentication("18629461220@163.com","xxxxxIBSVPURHA");//設置發送人到的郵箱和用戶名和授權碼(授權碼是自己設置的)email.setSubject("服務端口監測系統-離線通知");//設置發送主題email.setMsg("1234");//設置發送內容email.send();//進行發送StringBuffer bodyBf = new StringBuffer();bodyBf.append("<!DOCTYPE html>");bodyBf.append("<HTML>");bodyBf.append("<HEAD>");bodyBf.append("<TITLE> 管理員你好</TITLE>");bodyBf.append("<meta http-equiv=Content-Type content=text/html; charset=utf-8>");bodyBf.append("</HEAD>");bodyBf.append("<BODY>");bodyBf.append("<h1 align=center style='color:rgb(5,112,255)'>服務端口監測系統 </h1>");bodyBf.append("<table border='1' align=center>");bodyBf.append("<thead><tr>");bodyBf.append("<tr><th>名稱</th><th>地址</th><th>端口</th></tr></thead><tbody>");for (int j=0;j<list.size();j++){String ip=list.get(j).getIp();String mc=list.get(j).getMc();String prot=list.get(j).getProt();bodyBf.append("<tr><th>"+mc+"</th><th>"+ip+"</th><th>"+prot+"</th></tr>");}bodyBf.append("</tbody></table>");bodyBf.append("</BODY>");bodyBf.append("</HTML>");//email.setMsg("您的驗證碼是:123456");email.setHtmlMsg(bodyBf.toString());email.send();System.out.println("發送成功");}else{}} }

4.前段代碼

<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><title>服務端口監測系統</title><link rel="icon" href="./img/favicon.ico" type="image/x-icon"><link rel="stylesheet" href="./css/bootstrap.min.css"><script src="./js/jquery-3.4.1.min.js"></script><script src="./js/bootstrap.min.js"></script><link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css"><script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script><script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script><!-- Latest compiled and minified CSS --><link rel="stylesheet" href="https://unpkg.com/bootstrap-table@1.15.3/dist/bootstrap-table.min.css"><!-- Latest compiled and minified JavaScript --><script src="https://unpkg.com/bootstrap-table@1.15.3/dist/bootstrap-table.min.js"></script><!-- Latest compiled and minified Locales --><script src="https://unpkg.com/bootstrap-table@1.15.3/dist/locale/bootstrap-table-zh-CN.min.js"></script><script src="https://cdn.bootcdn.net/ajax/libs/layer/3.1.1/layer.js"></script></head> <style>/*定義滾動條高寬及背景 高寬分別對應橫豎滾動條的尺寸*/::-webkit-scrollbar {width: 10px;height: 10px;background-color: #F5F5F5;}/*定義滾動條軌道 內陰影+圓角*/::-webkit-scrollbar-track {-webkit-box-shadow: inset 0 0 6px rgba(217, 223, 233);border-radius: 5px;background-color: #F5F5F5;}/*定義滑塊 內陰影+圓角*/::-webkit-scrollbar-thumb {border-radius: 5px;-webkit-box-shadow: inset 0 0 6px rgba(217, 223, 233);background-color: rgba(217, 223, 233);}body {margin: 0;padding: 0;}#LoadTable{width: 800px;}.page-header{display: flex;justify-content:center;color: cornflowerblue;}#pagebody{display: flex;justify-content: center;}#離線{color: red;}#在線{color: green;}#add{position: absolute;right: 20px;bottom: 20px;}</style><body> <div class="page-header"><h1>歡迎來到服務端口監測系統</h1> </div> <div id="pagebody"><div id="toolbar" class="btn-group"><button id="btn_add" type="button" onclick="btn_add()" class="btn btn-primary"><span class="glyphicon glyphicon-plus" aria-hidden="true" ></span>新增</button></div><table id="LoadTable"></table></div><script>$(function () {//1.初始化TableTableInit();});var TableInit = function () {var oTableInit = new Object();//初始化Table$('#LoadTable').bootstrapTable({url: "/Socket/findAll",columns: [{field: 'mc',title: '名稱'}, {field: 'ip',title: '地址'}, {field: 'prot',title: '端口'}, {field: 'status',title: '狀態',align: 'center',valign: 'middle',formatter: function(status){if(status=="離線"){return '<text type="text" style="color:#D9534F">'+status+'</text>';}else if(status=="在線"){return '<text type="text" style="color:#228B22" >'+status+'</text>';}else if(status=="待定"){return '<text type="text" style="color:#A9A9A9" >'+status+'</text>';}}},{field: 'time',title: '時間',align: 'center',valign: 'middle',},{field: 'id',title: '操作',align: 'center',valign: 'middle',formatter: function(id){return '<button type="button" class="btn btn-danger" onclick="deleteById(\''+id+'\')">刪除</button>';}}],method: 'post', //請求方式(*)toolbar: '#toolbar', //工具按鈕用哪個容器striped: true, //是否顯示行間隔色cache: false, //是否使用緩存,默認為true,所以一般情況下需要設置一下這個屬性(*)pagination: true, //是否顯示分頁(*)sortable: false, //是否啟用排序sortOrder: "asc", //排序方式pageSize: 25, //每頁的記錄行數(*)clickToSelect: true, //是否啟用點擊選中行//height: 500, //行高,如果沒有設置height屬性,表格自動根據記錄條數覺得表格高度uniqueId: "id", //每一行的唯一標識,一般為主鍵列});}var html='<form id="form_data" style="padding: 10px">\n' +' <div class="modal-body">\n' +' <div class="form-group">\n' +' <label for="mc">名稱</label>\n' +' <input type="text" class="form-control" id="mc" placeholder="某某數據庫">\n' +' </div>\n' +' <div class="form-group">\n' +' <label for="ip">地址/ip</label>\n' +' <input type="text" class="form-control" id="ip" placeholder="127.0.0.1">\n' +' </div>\n' +' <div class="form-group">\n' +' <label for="prot">端口/prot</label>\n' +' <input type="text" class="form-control" id="prot" placeholder="3306">\n' +' </div>\n' +' </div>\n' +' <div class="modal-footer">\n' +' <button type="button" onclick="add()" class="btn btn-primary">\n' +' 提交更改\n' +' </button>\n' +' </div>\n' +' </form>'function btn_add(){layer.open({type: 1,skin: 'layui-layer-rim', //加上邊框area: ['600px' ], //寬高content: html});}function deleteById(id){layer.confirm('你確認要進行刪除操作?', {btn: ['取消','確認'] //按鈕}, function(){layer.msg('取消成功', {icon: 1});}, function(){$.ajax({type: "post",async:false,url: "/Socket/deleteById",data:{"id":id,},dataType: "json",success: function (response) {layer.msg('刪除成功', {time: 2000, //2s后自動關閉});location.reload();},error: function (e) {alert("請求異常。");}});});}function add() {var mc = $.trim($('#mc').val());var ip = $.trim($('#ip').val());var prot = $.trim($('#prot').val());$.ajax({type: "post",async:false,url: "/Socket/add",data:{"mc":mc,"ip":ip,"prot":prot},dataType: "json",success: function (response) {layer.msg('添加成功', {time: 2000, //2s后自動關閉});location.reload();},error: function (e) {alert("請求異常。");}});}</script> </body></html>

?

?

總結

以上是生活随笔為你收集整理的服务器端口监测系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。