服务器接口状态监控,异常报警到电子邮箱。

使用HTTP URL,发送请求并接收服务器接口响应消息,如5分钟内发生5次异常,则把异常信息发送到指定电子邮箱中;指定时间内异常未达到5次则清零。

1,Http Post

package m;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.SocketException;
import java.net.URL;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

import MailSenderInfo.MyAuthenticator;

public class test_postout {
	static String sessionId = "";
	static int num;
	static int j;
	// 默认的url
	String surl = "http://IP:Port/ibis/faceService/compareFaces";

	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入服务器接口URL:");
		String surl = sc.nextLine();
		System.out.println("请输入图片img1所在文件夹的路径:");
		String folderPath1 = sc.nextLine();
		folderPath1 = folderPath1.replace("\\", "/");
		System.out.println("请输入图片img1的名称:");
		String imageName1 = sc.nextLine();
		System.out.println("请输入图片img2所在文件夹的路径:");
		String folderPath2 = sc.nextLine();
		folderPath2 = folderPath2.replace("\\", "/");
		System.out.println("请输入图片img2的名称:");
		String imageName2 = sc.nextLine();
		// 执行图片上传接收方法
		postOut(surl, folderPath1, imageName1, folderPath2, imageName2);
		sc.close();
	}

	public static void postOut(String surl, String folderPath1, String imageName1, String folderPath2,
			String imageName2) {
		test_parm mp = new test_parm();
		// 获取文件夹图片调用接口次数
		int num = 0;
		// 接口调用不成功SocketException次数,达到门限就告警
		int i = 0;
		// 5分钟计时器,j>300秒时,如果异常计数器未达到门限值则,计数器清零
		int j = 0;
		// 脸脸比对返回code不是0,的门限告警值
		int k = 0;
		// 调用接口未能返回200 OK消息
		int l = 0;
		// EX的门限告警
		int m = 0;

		do {
			// 开始比对时间点t1
			long t1 = System.currentTimeMillis();
			// 比对次数num++;
			num = mp.getNum() + 1;
			mp.setNum(num);
			// http属性设置
			try {
				URL url = new URL(surl);
				HttpURLConnection connection;
				connection = (HttpURLConnection) url.openConnection();
				connection.setDoOutput(true);
				connection.setDoInput(true);
				connection.setRequestMethod("POST");
				connection.setUseCaches(false);
				connection.setInstanceFollowRedirects(false);
				connection.setRequestProperty("Accept-Charset", "utf-8");
				connection.setRequestProperty("contentType", "utf-8");
				connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
				connection.setConnectTimeout(10000);
				connection.setReadTimeout(10000);
				connection.connect();
				Date date = new Date();
				SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSSS");
				DataOutputStream out = new DataOutputStream(connection.getOutputStream());
				String imgpath1 = "";
				String imgpath2 = "";
				imgpath1 = folderPath1 + "/" + imageName1;
				imgpath2 = folderPath2 + "/" + imageName2;

				// 把jpg图片转换为二进制流
				System.out.println("imgpath1:" + imgpath1);
				System.out.println("imgpath2:" + imgpath2);

				// 构造表单消息体
//				System.out.println("构造消息体前的时间:" + System.currentTimeMillis()
//						+ "***************************************************");
				// 图片base64编码
				String img1 = null;
				String img2 = null;
				try {
					//System.out.println("编码前" + System.currentTimeMillis());
					img1 = URLEncoder.encode(test_PicBASE64.getPicBASE64(folderPath1 + "/" + imageName1), "UTF-8");
					img2 = URLEncoder.encode(test_PicBASE64.getPicBASE64(folderPath2 + "/" + imageName2), "UTF-8");
					//System.out.println("编码后" + System.currentTimeMillis());
				} catch (Exception e) {
					throw new RuntimeException(e);
				}
				String data = ("{" + "\"" + "methodName" + "\"" + ":" + "\"" + "compareFaces" + "\"" + "," + "\""
						+ "channel" + "\"" + ":" + "\"" + "0400" + "\"" + "," + "\"" + "img1" + "\"" + ":" + "\"" + img1
						+ "\"" + "," + "\"" + "img2" + "\"" + ":" + "\"" + img2 + "\"" + "}");
				out.writeBytes("requestData" + "=" + data);
				out.flush();
				//System.out.println("HTTP发送时间" + System.currentTimeMillis());
				//long t2 = System.currentTimeMillis();
				out.close();

				// 接收返回值

				ByteArrayOutputStream baos = new ByteArrayOutputStream();
				byte[] buf = new byte[1024];
				int len = 0;
				//System.out.println("HTTP开始接收时间" + System.currentTimeMillis());
				InputStream is = connection.getInputStream();
				// HTTP返回值
				mp.setCode(new Integer(connection.getResponseCode()).toString());
				// HTTP返回消息
				mp.setMessage(connection.getResponseMessage());
				//System.out.println("HTTP 返回code值为:" + mp.getCode());
				//System.out.println("HTTP 返回message值为:" + mp.getMessage());
				if (!(mp.getCode().equals("200")) || !(mp.getMessage().equals("OK"))) {
					l = mp.getL() + 1;
					mp.setL(l);
					// l++;
					if (mp.getL() > 4) {
						mp.setFlagl(1);
					}
				}
				System.out.println("接收字节数:" +is.available());
				// 接收消息内容
				while ((len = is.read(buf)) != -1) {
					System.out.println("Img1" + "\t" + imageName1 + "\t" + "Img2" + "\t" + imageName2 + "\t" + "比对次数:"
							+ "\t" + num );
					// 返回结果写入txt文件
					baos.write(buf, 0, len);
					//System.out.println("HTTP接收完成时间" + System.currentTimeMillis());
					//System.out.println("HTTP发送接收用时" + (System.currentTimeMillis() - t2) + "毫秒");
					FileOutputStream fos = new FileOutputStream(folderPath1 + "/test.txt", true);
					String str2;
//替换					str2 ="第" + num + "次比对:" + "\t" + "Img1" + "\t" + imageName1 + "\t" + "Img2" + "\t" + imageName2 + "\t" + formater.format(date)
//替换						+ "\t" + baos.toString("UTF-8").replace("\n", "") + "\n";
					str2 ="第" + num + "次比对:" + "\t" + "Img1" + "\t" + imageName1 + "\t" + "Img2" + "\t" + imageName2 + "\t" + formater.format(date)
					+ "\t" + baos.toString("UTF-8") + "\n";
					byte[] word = str2.getBytes();
					fos.write(word, 0, word.length);
					fos.flush();
					fos.close();
				}

				baos.flush();
				//System.out.println("预期的HTTP 200OK 实际返回的内容:" + baos.toString("UTF-8"));
				// 初始化数组的值
				String[] a1 = new String[11];
				a1[0] = "a0";
				a1[1] = "a1";
				a1[2] = "a2";
				a1[3] = "a3";
				a1[4] = "a4";
				a1[5] = "a5";
				a1[6] = "a6";
				a1[7] = "a7";
				a1[8] = "a8";
				a1[9] = "a9";
				a1[10] = "a10";
				// 截取{"code":0,"message":"......","data":{"sim":0.9815}}
				mp.setRs(new String(baos.toString("UTF-8")));
				String a[] = mp.getRs().split("\"");
				// 防止数组越界,不同返回值的分割元素的个数不一样
				try {
					String c0 = a[0].equals(null) ? a1[0] : a[0];
					//System.out.println(c0);
					String c1 = a[1].equals(null) ? a1[1] : a[1];
					//System.out.println(c1);
					String c2 = a[2].equals(null) ? a1[2] : a[2];
					//System.out.println(c2);
					String c3 = a[3].equals(null) ? a1[3] : a[3];
					//System.out.println(c3);
					String c4 = a[4].equals(null) ? a1[4] : a[4];
					//System.out.println(c4);
					String c5 = a[5].equals(null) ? a1[5] : a[5];
					//System.out.println(c5);
					String c6 = a[6].equals(null) ? a1[6] : a[6];
					//System.out.println(c6);
					String c7 = a[7].equals(null) ? a1[7] : a[7];
					//System.out.println(c7);
					String c8 = a[8].equals(null) ? a1[8] : a[8];
					//System.out.println(c8);
					String c9 = a[9].equals(null) ? a1[9] : a[9];
					//System.out.println(c9);
					String c10 = a[9].equals(null) ? a1[10] : a[10];
					//System.out.println(c10);
				} catch (ArrayIndexOutOfBoundsException e) {
					e.printStackTrace();
				} finally {

					String code_value = ":0,";
					if (!a[2].equals(code_value)) {
						k = mp.getK() + 1;
						mp.setK(k);
						// k++;
						if (mp.getK() > 4) {
							mp.setFlagk(1);
						}
					}
					baos.close();
					is.close();
					connection.disconnect();
					//System.out.println("\t" + "HTTP断开时间" + System.currentTimeMillis());
					System.out.println("比对处理用时" + (System.currentTimeMillis() - t1) + "毫秒");
					System.out.println("第" + mp.getNum() + "次比对结束!!!11111111111111111111111111111111111");
				}

			} // catch (IOException e) {
				// e.printStackTrace();
				// }
			catch (SocketException e) {
				e.printStackTrace();
				i = mp.getI() + 1;
				mp.setI(i);
				// i++;
				if (mp.getI() > 4) {
					mp.setFlagi(1);
					// flagi = 1;
				}
			} catch (Exception e) {
				e.printStackTrace();
				m = mp.getM() + 1;
				mp.setM(m);
				// m++;
				if (mp.getM() > 4) {
					mp.setFlagm(1);
					;
					// flagm = 1;
				}
			} finally {
				//System.out.println("进入finally/////////////////////////////////////////");
				// 如果4类异常未发生或恢复,则“5分钟计数器”清零
				if ((mp.getI() == 0) && (mp.getK() == 0) && (mp.getL() == 0) && (mp.getM() == 0)) {
					// j = 0;
					mp.setJ(0);
				}
				// 4类异常
//				System.out.println("i的值:" + mp.getI());
//				System.out.println("j的值:" + mp.getJ());
//				System.out.println("k的值:" + mp.getK());
//				System.out.println("l的值:" + mp.getL());
//				System.out.println("m的值:" + mp.getM());
//				System.out.println("flagi的值:" + mp.getFlagi());
//				System.out.println("flag的值:" + mp.getFlag());
//				System.out.println("flagk的值:" + mp.getFlagk());
//				System.out.println("flagl的值:" + mp.getFlagl());
//				System.out.println("flagm的值:" + mp.getFlagm());
				// 邮件发送对象实例化
				MyAuthenticator sendmail = new MyAuthenticator();
				// j<5表示在5分钟内出现5次异常,发送邮件,就退出程序
				if ((mp.getJ() <= 5)
						&& (mp.getFlagi() != 0 || mp.getFlagk() != 0 || mp.getFlagl() != 0 || mp.getFlagm() != 0)) {
					// 如果超过4类异常门限值,就发送邮件告警通知
					if (mp.getFlagi() == 1) {
						System.out.println(
								"java.net.SocketException!!!!!!!!!!!!!!!!!!!!!!!!!" + System.currentTimeMillis());
						// 发送邮件
						sendmail.sendMail("邮箱内容ibis face 2 face 接口不可用提醒 邮件群发:SocketException,请关注ibis的http连接");
						//发一次就归零
						mp.setFlagi(0);
					}
					if (mp.getFlagm() == 1) {
						System.out.println("Exception!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + System.currentTimeMillis());
						sendmail.sendMail("邮箱内容ibis face 2 face 接口不可用提醒 邮件群发:Exception");
						//发一次就归零
						mp.setFlagm(0);
					}
					if (mp.getFlagl() == 1) {
						System.out.println("脸脸比对未能返回200 OK消息!!!!!!!!!!!!!!!!!!!!!!!!!" + System.currentTimeMillis());
						// 发送邮件
						sendmail.sendMail("邮箱内容ibis face 2 face 接口不可用提醒 邮件群发:" + "调用脸脸比对接口,未能返回200 OK消息-->"
								+ mp.getCode() + mp.getMessage());
						//发一次就归零
						mp.setFlagl(0);
					}
					if (mp.getFlagk() == 1) {
						System.out.println("脸脸比对未能返回分数值!!!!!!!!!!!!!!!!!!!!!!!!!" + System.currentTimeMillis());
						// 发送邮件
						sendmail.sendMail("邮箱内容ibis face 2 face 接口不可用提醒 邮件群发:" + mp.getRs());
						//发一次就归零
						mp.setFlagk(0);
					}
					System.out.println("通知邮件已发送");
					mp.setFlag(1);
					// 如果发一次邮件就退出,则break
					// break;
				}
				// 如果没有满足发邮件的条件,即5分钟内没有发生5次异常,则计算器j清零
				if (((mp.getJ() % 5 == 0) && mp.getJ() > 1)
						&& (mp.getFlagi() == 0 || mp.getFlagk() == 0 || mp.getFlagl() == 0 || mp.getFlagm() == 0)) {
					mp.setJ(0);
					mp.setI(0);
					mp.setK(0);
					mp.setL(0);
					mp.setM(0);
					mp.setFlag(0);
				}
				// 过一分钟,“5分钟计数器j”增加1;当异常>4,j>5时,未达到告警通知门限
				try {
					if((60000-(System.currentTimeMillis() - t1)) > 0 ){
						Thread.sleep(60000-(System.currentTimeMillis() - t1));
					}else{
						Thread.sleep(60000);// 1000 毫秒,也就是1秒.
					}; //总时间控制在60秒
				} catch (InterruptedException ex) {
					Thread.currentThread().interrupt();
				}
				// j++;
				j = mp.getJ() + 1;
				mp.setJ(j);
			}
		}
		// 发一次邮件继续监控接口
		while (1 != 0);
	}
}

2,把图片转换成BASE64编码

package m;

import java.io.FileInputStream;

public class mibis_PicBASE64 {
	public static String getPicBASE64(String picPath1) {
		String picPath = picPath1;
		String content = "";
		try {
			FileInputStream img1ForInput = new FileInputStream(picPath);
			byte[] bytes = new byte[img1ForInput.available()];
			img1ForInput.read(bytes);
			content = new sun.misc.BASE64Encoder().encode(bytes);
//			content = content.replace("\r", "");
//			content = content.replace("\n", "");
			content = content.replace("\\", "%2F");
			img1ForInput.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return content;
	}
}

3,程序参数设置

package m;

public class mibis_parm {
	// 获取文件夹图片调用接口次数
	int num = 0;
	// 接口调用不成功次数,达到门限就告警
	int i = 0;
	int flagi = 0;
	// 5分钟计时器,j>300秒时,如果异常计数器未达到门限值则,计数器清零
	int j = 0;
	// 脸脸比对返回code不是0,的门限告警值
	int k = 0;
	int flagk = 0;
	// 调用接口未能返回200 OK消息
	int l = 0;
	int flagl = 0;
	// EX的门限告警
	int m = 0;
	int flagm = 0;
	// 是否退出程序标识
	int flag = 0;
	//HTTP返回的代码值
	String code = "";
	//HTTP返回的消息
	String message = "";
	//HTTP返回值的字符串
	String rs = "";
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public int getI() {
		return i;
	}
	public void setI(int i) {
		this.i = i;
	}
	public int getFlagi() {
		return flagi;
	}
	public void setFlagi(int flagi) {
		this.flagi = flagi;
	}
	public int getJ() {
		return j;
	}
	public void setJ(int j) {
		this.j = j;
	}
	public int getK() {
		return k;
	}
	public void setK(int k) {
		this.k = k;
	}
	public int getFlagk() {
		return flagk;
	}
	public void setFlagk(int flagk) {
		this.flagk = flagk;
	}
	public int getL() {
		return l;
	}
	public void setL(int l) {
		this.l = l;
	}
	public int getFlagl() {
		return flagl;
	}
	public void setFlagl(int flagl) {
		this.flagl = flagl;
	}
	public int getM() {
		return m;
	}
	public void setM(int m) {
		this.m = m;
	}
	public int getFlagm() {
		return flagm;
	}
	public void setFlagm(int flagm) {
		this.flagm = flagm;
	}
	public int getFlag() {
		return flag;
	}
	public void setFlag(int flag) {
		this.flag = flag;
	}
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
	public String getRs() {
		return rs;
	}
	public void setRs(String rs) {
		this.rs = rs;
	}
}

4,

package MailSenderInfo;

/**
* 发送邮件需要使用的基本信息
*/
import java.util.Properties;
public class MailSenderInfo {
    // 发送邮件的服务器的IP和端口
    private String mailServerHost;
    private String mailServerPort = "25";
    // 邮件发送者的地址
    private String fromAddress;
    // 邮件接收者的地址
    private String toAddress;
    // 登陆邮件发送服务器的用户名和密码
    private String userName;
    private String password;
    // 是否需要身份验证
    private boolean validate = false;
    // 邮件主题
    private String subject;
    // 邮件的文本内容
    private String content;
    // 邮件附件的文件名
    private String[] attachFileNames;
    /**
      * 获得邮件会话属性
      */
    public Properties getProperties(){
      Properties p = new Properties();
      p.put("mail.smtp.host", this.mailServerHost);
      p.put("mail.smtp.port", this.mailServerPort);
      p.put("mail.smtp.auth", validate ? "true" : "false");
      return p;
    }
    public String getMailServerHost() {
      return mailServerHost;
    }
    public void setMailServerHost(String mailServerHost) {
      this.mailServerHost = mailServerHost;
    }
    public String getMailServerPort() {
      return mailServerPort;
    }
    public void setMailServerPort(String mailServerPort) {
      this.mailServerPort = mailServerPort;
    }
    public boolean isValidate() {
      return validate;
    }
    public void setValidate(boolean validate) {
      this.validate = validate;
    }
    public String[] getAttachFileNames() {
      return attachFileNames;
    }
    public void setAttachFileNames(String[] fileNames) {
      this.attachFileNames = fileNames;
    }
    public String getFromAddress() {
      return fromAddress;
    }
    public void setFromAddress(String fromAddress) {
      this.fromAddress = fromAddress;
    }
    public String getPassword() {
      return password;
    }
    public void setPassword(String password) {
      this.password = password;
    }
    public String getToAddress() {
      return toAddress;
    }
    public void setToAddress(String toAddress) {
      this.toAddress = toAddress;
    }
    public String getUserName() {
      return userName;
    }
    public void setUserName(String userName) {
      this.userName = userName;
    }
    public String getSubject() {
      return subject;
    }
    public void setSubject(String subject) {
      this.subject = subject;
    }
    public String getContent() {
      return content;
    }
    public void setContent(String textContent) {
      this.content = textContent;
    }
}

5,

<pre name="code" class="java">package MailSenderInfo;

import javax.mail.*;  

public class MyAuthenticator extends Authenticator{
    String userName=null;
    String password=null;  

    public MyAuthenticator(){
    }
    public MyAuthenticator(String username, String password) {
        this.userName = username;
        this.password = password;
    }
    protected PasswordAuthentication getPasswordAuthentication(){
        return new PasswordAuthentication(userName, password);
    }  

    public void sendMail(String content){
     //这个类主要是设置邮件
     MailSenderInfo mailInfo = new MailSenderInfo();
     mailInfo.setMailServerHost("smtp.163.com");
     mailInfo.setMailServerPort("25");
     mailInfo.setValidate(true);
     mailInfo.setUserName("gongxun");   //自己的邮箱
     mailInfo.setPassword("shineboy");//自己的邮箱密码,用于验证
     mailInfo.setFromAddress("[email protected]");  ///自己的邮箱
     mailInfo.setToAddress("[email protected]");  ///对方的邮箱
     mailInfo.setSubject("ibis接口监控邮件群发送通知");
     System.out.println("content:"+content);
     mailInfo.setContent(content);
    // mailInfo.setContent("邮箱内容ibis face 2 face 接口不可用提醒 邮件群发。");
     System.out.println("mailInfo:" + mailInfo.getToAddress());
     //这个类主要来发送邮件
     SimpleMailSender sms = new SimpleMailSender();
     sms.sendTextMail(mailInfo);//发送文体格式
     //sms.sendHtmlMail(mailInfo);//发送html格式

   }
}

6,

package MailSenderInfo;

import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;   

/**
* 简单邮件(不带附件的邮件)发送器
*/
public class SimpleMailSender  {
/**
  * 以文本格式发送邮件
  * @param mailInfo 待发送的邮件的信息
  */
    public boolean sendTextMail(MailSenderInfo mailInfo) {
      // 判断是否需要身份认证
      MyAuthenticator authenticator = null;
      Properties pro = mailInfo.getProperties();
      if (mailInfo.isValidate()) {
      // 如果需要身份认证,则创建一个密码验证器
        authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
      }
      // 根据邮件会话属性和密码验证器构造一个发送邮件的session
      Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
      try {
      // 根据session创建一个邮件消息
      Message mailMessage = new MimeMessage(sendMailSession);
      // 创建邮件发送者地址
      Address from = new InternetAddress(mailInfo.getFromAddress());
      // 设置邮件消息的发送者
      mailMessage.setFrom(from);
      // 创建邮件的接收者地址,并设置到邮件消息中
      Address to = new InternetAddress(mailInfo.getToAddress());
      mailMessage.setRecipient(Message.RecipientType.TO,to);   

      Address toAddress = new InternetAddress("@cloud.cn");
      Address ccAddress = new InternetAddress("@cloud.cn");
      Address ccAddress2 = new InternetAddress("@cloud.cn");
      Address ccAddress3 = new InternetAddress("@cloud.cn");

      mailMessage.addRecipient(Message.RecipientType.TO, toAddress);
      mailMessage.addRecipient(Message.RecipientType.CC, ccAddress);
      mailMessage.addRecipient(Message.RecipientType.CC, ccAddress2);
      mailMessage.addRecipient(Message.RecipientType.CC, ccAddress3);

      // 设置邮件消息的主题
      mailMessage.setSubject(mailInfo.getSubject());
      // 设置邮件消息发送的时间
      mailMessage.setSentDate(new Date());
      // 设置邮件消息的主要内容
      String mailContent = mailInfo.getContent();
      mailMessage.setText(mailContent);
      // 发送邮件
      Transport.send(mailMessage);
      return true;
      } catch (MessagingException ex) {
          ex.printStackTrace();
      }
      return false;
    }   

    /**
      * 以HTML格式发送邮件
      * @param mailInfo 待发送的邮件信息
      */
    public static boolean sendHtmlMail(MailSenderInfo mailInfo){
      // 判断是否需要身份认证
      MyAuthenticator authenticator = null;
      Properties pro = mailInfo.getProperties();
      //如果需要身份认证,则创建一个密码验证器
      if (mailInfo.isValidate()) {
        authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
      }
      // 根据邮件会话属性和密码验证器构造一个发送邮件的session
      Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
      try {
      // 根据session创建一个邮件消息
      Message mailMessage = new MimeMessage(sendMailSession);
      // 创建邮件发送者地址
      Address from = new InternetAddress(mailInfo.getFromAddress());
      // 设置邮件消息的发送者
      mailMessage.setFrom(from);
      // 创建邮件的接收者地址,并设置到邮件消息中
      Address to = new InternetAddress(mailInfo.getToAddress());
      // Message.RecipientType.TO属性表示接收者的类型为TO
      mailMessage.setRecipient(Message.RecipientType.TO,to);
      // 设置邮件消息的主题
      mailMessage.setSubject(mailInfo.getSubject());
      // 设置邮件消息发送的时间
      mailMessage.setSentDate(new Date());
      // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
      Multipart mainPart = new MimeMultipart();
      // 创建一个包含HTML内容的MimeBodyPart
      BodyPart html = new MimeBodyPart();
      // 设置HTML内容
      html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
      mainPart.addBodyPart(html);
      // 将MiniMultipart对象设置为邮件内容
      mailMessage.setContent(mainPart);
      // 发送邮件
      Transport.send(mailMessage);
      return true;
      } catch (MessagingException ex) {
          ex.printStackTrace();
      }
      return false;
    }
}
时间: 2024-09-27 18:57:44

服务器接口状态监控,异常报警到电子邮箱。的相关文章

linux下使用smtp+shell脚本实现服务器存活状态监控

简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 是在Internet传输email的事实标准, SMTP是一个相对简单的基于文本的协议.在其之上指定了一条消息的一个或多个接收者,然后消息文本会 被传输.SMTP使用TCP端口25. 一.配置环境 [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) #查看系统环境 [[email prot

使用云监控实现GPU云服务器的GPU监控和报警(下)-云监控插件监控

摘要: 目录 使用云监控实现GPU云服务器的GPU监控和报警(上) - 自定义监控 使用云监控实现GPU云服务器的GPU监控和报警(下)-云监控插件监控 1 背景 上一篇文章我们介绍了如何使用阿里云云监控服务提供的自定义监控功能,利用自定义监控提供的API或者SDK,通过自定义脚本可以将GP. 1 背景上一篇文章我们介绍了如何使用阿里云云监控服务提供的自定义监控功能,利用自定义监控提供的API或者SDK,通过自定义脚本可以将GPU云主机内采集的GPU数据上报,在云监控控制台上添加相应的GPU监控

mysql主从状态监控脚本报警脚本

#!/bin/bash MYSQLPORT=`netstat -antlp |grep "LISTEN" ` |grep "3306" |awk -F[:""]+  '{print $4}' MYSQLIP = `ifconfig eth0` |grep "inet addr" |awk -F[:""]+ '{print $4}' STATUS = $(/usr/local/mysql/bin/mysql

通过SSIS监控远程服务器Windows服务并发送邮件报警!

原文:通过SSIS监控远程服务器Windows服务并发送邮件报警! 利用SSIS不仅可以做BI项目的ETL,而且还可以做一些系统监控和维护工作,由于之前供应商写的Windows服务是读取ESB的消息进行处理,且通过OA流程与访客系统进行了集成,无论是ESB出现状况,还是Windows服务出现状况,都会对访问系统造成严重影响,导致内部员工无法进行接待外部人员,因此整体对ESB进行优化,在本人博客的前一篇已介绍了<通过SSIS监控远程服务器磁盘空间并发送邮件报警!>.本文实现的方法思路与此相同,仅

tomcat健康状态监控并自动重启短信报警

#!/bin/sh PATH=/usr/local/jdk1.5.0_19/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin JAVA_HOME=/usr/local/jdk1.5.0_19 CLASSPATH=.:/usr/local/jdk1.5.0_19/lib:/usr/local/jdk1.5.0_19/lib/t

论TCP状态监控在异常侦测、业务告警中有多重要

很多同学在做监控告警.异常侦测时专注于软件本身的数据,而忽略了TCP连接状态的监控,其实TCP连接真实的反应了服务器和服务本身的队列情况,是最灵敏的服务阴晴表. 现在的服务之间都是通过网络进行通信,而很多服务通信是基于TCP的方式,包括大家 熟悉的HTTP.FTP等,在工作中,服务启动后监听指定端口,然后按照特定的7层协议通过此端口接收处理任务,4层使用TCP 通信传输,举个例子,比如说常见的php-fpm,启动后监听TCP9000端口,七层使用fastcgi协议接收nginx分发过来的任务,

监控mysql主从同步状态是否异常,如果异常,则发生短信或邮寄给管理员

阶段1:开发一个守护进程脚本每30秒实现检测一次. 阶段2:如果同步出现如下错误号(1158,1159,1008,1007,1062),请跳过错误 阶段3:请使用数组技术实现上述脚本(获取主从判断及错误号部分) [[email protected] ~]# mysql -u root -proot -e "show slave status\G;" *************************** 1. row ***************************       

如何配置服务器自动监控并报警

作者:一个懂技术的运营 链接:https://www.zhihu.com/question/21073555/answer/106131463 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 如果是初创型公司,机器规模和工作流转没有那么复杂的情况下.运维监控和报警,都利用 Zabbix 和一些报警聚合服务. 先来说说,我们公司如何利用 Zabbix 监控和报警的吧. Zabbix 配置报警 其实线上的教程很多:Zabbix 的图文安装教程 . 下面自己 Zabb

Jmeter压力测试简单教程(包括服务器状态监控)

前段时间公司需要对服务器进行压力测试,包括登录前的页面和登录后的页面,主要目的是测试负载均衡的实现效果.不知道是不是因为Jmeter不如loadRunner火爆还是什么,网上关于Jmeter的资料有很多但是大多千篇一律,要么简单弄个页面测试一下,要么全篇都是介绍很多和Jmeter无关的第三方工具,看起来很专业高深,但是作为测试小白来说,看到这样的东西确实头疼.我只是想好好了解一下Jmeter的使用啊,能不能完整的介绍一下啊?我不需要了解那么多其他的第三方工具啊?能不能截个图说的清楚一点啊?这个步