Authored by jack

Merge branch 'master' of http://git.yoho.cn/ops/monitor-service

... ... @@ -60,12 +60,7 @@ public class ZkMonitorCtrl {
if(list==null){
return new BaseResponse<PageResponse<ZkConfig>>();
}
PageResponse<ZkConfig> response = new PageResponse<ZkConfig>();
response.setCurrentPage(list.getCurrentPage());
response.setRows(list.getRows());
response.setPageSize(list.getPageSize());
response.setTotal(list.getTotal());
return new BaseResponse<PageResponse<ZkConfig>>(response);
return new BaseResponse<PageResponse<ZkConfig>>(list);
}
/**
... ... @@ -82,12 +77,7 @@ public class ZkMonitorCtrl {
if(list==null){
return new BaseResponse<PageResponse<ZkConfigAll>>();
}
PageResponse<ZkConfigAll> response = new PageResponse<ZkConfigAll>();
response.setCurrentPage(list.getCurrentPage());
response.setRows(list.getRows());
response.setPageSize(list.getPageSize());
response.setTotal(list.getTotal());
return new BaseResponse<PageResponse<ZkConfigAll>>(response);
return new BaseResponse<PageResponse<ZkConfigAll>>(list);
}
/**
... ...
... ... @@ -147,11 +147,6 @@ public class ZkMoitorServiceImpl implements IZkMoitorService {
zk.getCurrentPage();
page++;
}
if (list.size()>10&&req.getCurrentPage()*10<list.size()) {
list=list.subList(req.getCurrentPage()*10-10, req.getCurrentPage()*10);
}else if (req.getCurrentPage()*10>list.size()) {
list=list.subList(req.getCurrentPage()*10-10, list.size());
}
response.setCurrentPage(req.getCurrentPage());
response.setPageSize(req.getPageSize());
response.setTotal(page);
... ...
... ... @@ -7,10 +7,15 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
/**
* Created by yoho on 2016/7/6.
... ... @@ -20,25 +25,39 @@ public class MailServiceImpl implements MailService {
protected static final Logger logger = LoggerFactory.getLogger(MailServiceImpl.class);
private BlockingQueue<Mail> blockingQueue = new ArrayBlockingQueue<Mail>(5000);
@Autowired
private JavaMailSenderImpl senderImpl;
@Override
public boolean sendHTMLMail(Mail mail) {
try {
MimeMessage mailMessage = senderImpl.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage);
messageHelper.setTo(mail.getReceivers());
messageHelper.setFrom("YOHO-OPERATION@yoho.cn");
messageHelper.setSubject(mail.getSubject());
messageHelper.setCc(mail.getCc());
messageHelper.setText(mail.getMessage(), true);
senderImpl.send(mailMessage);
return true;
}catch (Exception e){
logger.error("send email failed!to:{}", e);
return false;
return blockingQueue.offer(mail);
}
//异步发送邮件
@Scheduled(fixedDelay = 10 * 1000)
public void send() {
int size = blockingQueue.size();
if (size == 0){
return;
}
List<Mail> list = new ArrayList<>(size);
blockingQueue.drainTo(list,size);
for (Mail mail : list){
try {
MimeMessage mailMessage = senderImpl.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage);
messageHelper.setTo(mail.getReceivers());
messageHelper.setFrom("YOHO-OPERATION@yoho.cn");
messageHelper.setSubject(mail.getSubject());
messageHelper.setCc(mail.getCc());
messageHelper.setText(mail.getMessage(), true);
senderImpl.send(mailMessage);
} catch (Exception e) {
logger.error("send email failed!to:{}", e);
}
}
}
}
\ No newline at end of file
... ...
... ... @@ -73,7 +73,7 @@ public class Mail {
private String buildMessage() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(SIGN_DIV_START);
stringBuilder.append("<strong>工单系统有您的待办:</strong>");
stringBuilder.append("<strong>有货运维系统有您的关注:</strong>");
stringBuilder.append(DIV_END);
//邮件正文
... ... @@ -90,7 +90,7 @@ public class Mail {
stringBuilder.append(SIGN_DIV_START);
stringBuilder.append("<span style=\"font-size: xx-large;\"><strong>YOHO!运维系统</strong></span></br>");
stringBuilder.append("<a href=\"http://www.yohops.com/\">www.yohops.com</a></br>");
stringBuilder.append("<a href=\"http://dev.yohops.com/\">dev.yohops.com/</a>");
stringBuilder.append("<a href=\"http://dev.yohops.com/\">dev.yohops.com</a>");
stringBuilder.append(DIV_END);
return stringBuilder.toString();
... ...
... ... @@ -69,46 +69,49 @@ public class DNSMonitorServiceImpl implements IDNSMonitorService {
List<HostDNSConnectModel> hostDNSConnectModelList = new ArrayList<>();
for (String host : dnsConfig.getHosts()) {
try {
// 单个host的dns检测数据,检测完一个host的数据后add到hostDNSConnectModelList中
HostDNSConnectModel hostDNSConnectModel = new HostDNSConnectModel(host);
// 单个host的dns检测数据,检测完一个host的数据后add到hostDNSConnectModelList中
HostDNSConnectModel hostDNSConnectModel = new HostDNSConnectModel(host);
// 单个host的检测到的ip数据 hostDNSConnectModel的成员变量
// key为uid
// value为List<IPConnectModel> host+uid解析出的ip以及其状态
Map<String, List<IPConnectModel>> ipConnectModelsMap = new HashMap<>();
// 单个host的检测到的ip数据 hostDNSConnectModel的成员变量
// key为uid
// value为List<IPConnectModel> host+uid解析出的ip以及其状态
Map<String, List<IPConnectModel>> ipConnectModelsMap = new HashMap<>();
for (String uid : dnsConfig.getUids()) {
for (String uid : dnsConfig.getUids()) {
String result = restTemplateNoEncode.doGet(buildDNSUrl(host, uid));
String result = restTemplateNoEncode.doGet(buildDNSUrl(host, uid));
DEBUG.info("query dns result {} from host {}", result, host);
DEBUG.info("query dns result {} from host {}", result, host);
List<String> ipModelList = parseIPModels(result);
List<String> ipModelList = parseIPModels(result);
if (null == ipModelList) {
if (null == ipModelList) {
//解析不出ip,短信告警
alarmMsgService.sendSms("dns_exception", buildDNSFailedMsnContent(host, uid),
result, alarmMobile);
//解析不出ip,短信告警
alarmMsgService.sendSms("dns_exception", buildDNSFailedMsnContent(host, uid),
result, alarmMobile);
//host dns检测数据存入influxdb
dnsMonitorMapper.insert(host, uid, IDNSMonitorMapper.FAILED, IDNSMonitorMapper.NULL_IP);
//host dns检测数据存入influxdb
dnsMonitorMapper.insert(host, uid, IDNSMonitorMapper.FAILED, IDNSMonitorMapper.NULL_IP);
ipConnectModelsMap.put(uid, null);
logger.error("DNSMonitor Connect DNS no ip return.host:{},uid{}", host, uid);
continue;
}
ipConnectModelsMap.put(uid, null);
logger.error("DNSMonitor Connect DNS no ip return.host:{},uid{}", host, uid);
continue;
}
//将host dns解析出的ip数据 存入influxdb
dnsMonitorMapper.insert(host, uid, IDNSMonitorMapper.SUCCESSED,
JSONArray.toJSONString(ipModelList));
//将host dns解析出的ip数据 存入influxdb
dnsMonitorMapper.insert(host, uid, IDNSMonitorMapper.SUCCESSED,
JSONArray.toJSONString(ipModelList));
//检测ip的正确性
monitIPConnection(host, uid, ipModelList, ipConnectModelsMap);
//检测ip的正确性
monitIPConnection(host, uid, ipModelList, ipConnectModelsMap);
}
hostDNSConnectModel.setIps(ipConnectModelsMap);
hostDNSConnectModelList.add(hostDNSConnectModel);
} catch (Exception e) {
logger.error("dns host:{}", host, e);
}
hostDNSConnectModel.setIps(ipConnectModelsMap);
hostDNSConnectModelList.add(hostDNSConnectModel);
}
//更新当前监控数据的时间
... ... @@ -325,7 +328,7 @@ public class DNSMonitorServiceImpl implements IDNSMonitorService {
DNSIPsModel dnsiPsModel = JSON.parseObject(decodeResult, DNSIPsModel.class);
DEBUG.info("parse DNSIPsModel result {} ", dnsiPsModel.getContent());
List<IPModel> ipModelList = JSON.parseArray(dnsiPsModel.getContent(), IPModel.class);
if (null == ipModelList) {
... ...
... ... @@ -122,7 +122,7 @@ public class ReleaseServiceImpl implements ReleaseService {
//插入用户待处理工单表
PendingJob pendingJob = new PendingJob(WorkType.RELEASE_PROJECT, releaseWorkJob.getId(), releaseWorkJob.getTitle(), releaseWorkJob.getTest(), HandlerRole.TEST, WorkStatus.PUBLISH);
workSystemSupport.addPending(pendingJob,true);
workSystemSupport.addPending(pendingJob,false);
return result;
}
... ... @@ -160,14 +160,14 @@ public class ReleaseServiceImpl implements ReleaseService {
releaseWorkJob.setStatus(WorkStatus.PUBLISH);
releaseWorkJobMapper.updateStatus(releaseWorkJob);
PendingJob newPendingJob = new PendingJob(WorkType.RELEASE_PROJECT, releaseWorkJob.getId(), releaseWorkJob.getTitle(), releaseWorkJob.getTest(), HandlerRole.TEST, WorkStatus.PUBLISH);
workSystemSupport.addPendingByRole(newPendingJob,false);
workSystemSupport.addPending(newPendingJob,false);
}
} else if (currentStatus == WorkStatus.PUBLISH) {//发布状态
if(handleType == HandleType.PASS){//通过测试
releaseWorkJob.setStatus(WorkStatus.TEST_PASS);
releaseWorkJobMapper.updateStatus(releaseWorkJob);
PendingJob newPendingJob = new PendingJob(WorkType.RELEASE_PROJECT, releaseWorkJob.getId(), releaseWorkJob.getTitle(), null, HandlerRole.OPERATOR, WorkStatus.TEST_PASS);
workSystemSupport.addPendingByRole(newPendingJob,false);
workSystemSupport.addPendingByRole(newPendingJob,true);
}else{//未通过测试
releaseWorkJob.setStatus(WorkStatus.CREATED);//置为初始状态
releaseWorkJobMapper.updateStatus(releaseWorkJob);
... ...
... ... @@ -13,6 +13,7 @@ import com.monitor.mysql.mapper.PendingJobMapper;
import com.monitor.mysql.mapper.ReleaseWorkJobMapper;
import com.monitor.mysql.mapper.UserMapper;
import com.monitor.other.worksystem.contants.HandlerRole;
import com.monitor.other.worksystem.contants.WorkStatus;
import com.monitor.other.worksystem.contants.WorkType;
import com.monitor.other.worksystem.service.HandledService;
import org.apache.commons.lang.StringUtils;
... ... @@ -156,11 +157,12 @@ public class WorkSystemSupport {
builder.message("<span style=\"display: inline-block;width: 100px;font-weight:bold;\">工单ID:</span>" + releaseWorkJob.getId());
builder.message("<span style=\"display: inline-block;width: 100px;font-weight:bold;\">工单类型:</span>" + WorkType.RELEASE_PROJECT);
builder.message("<span style=\"display: inline-block;width: 100px;font-weight:bold;\">工单状态:</span>" + WorkStatus.getCstatus(releaseWorkJob.getStatus()));
builder.message("<span style=\"display: inline-block;width: 100px;font-weight:bold;\">工单标题:</span>" + releaseWorkJob.getTitle());
builder.message("<span style=\"display: inline-block;width: 100px;font-weight:bold;\">发布平台:</span>" + releaseWorkJob.getPlatform());
builder.message("<span style=\"display: inline-block;width: 100px;font-weight:bold;\">发布环境:</span>" + releaseWorkJob.getEnvironment());
builder.message("<span style=\"display: inline-block;width: 100px;font-weight:bold;\">发布工程:</span>" + releaseWorkJob.getProject());
builder.message("<span style=\"display: inline-block;width: 100px;font-weight:bold;\">需求内容:</span>" + releaseWorkJob.getDemand() + "");
builder.message("<span style=\"display: inline-block;width: 100px;font-weight:bold;\">需求内容:</span>" + releaseWorkJob.getDemand());
return builder;
}
... ...
... ... @@ -3,8 +3,12 @@ package com.monitor.user.ctrl;
import com.model.HostGroup;
import com.model.User;
import com.monitor.common.service.MailService;
import com.monitor.common.util.MD5Util;
import com.monitor.common.util.MailUtil;
import com.monitor.influxdb.contants.InfluxDBContants;
import com.monitor.influxdb.mapper.UserOperateMapper;
import com.monitor.influxdb.mapper.impl.CommonQuery;
import com.monitor.influxdb.util.QueryResultUtil;
import com.monitor.model.domain.Mail;
import com.monitor.model.domain.PageBean;
import com.monitor.model.domain.UserOperate;
... ... @@ -13,15 +17,21 @@ import com.monitor.model.page.PageResponse;
import com.monitor.model.request.UserOperateReq;
import com.monitor.model.response.BaseResponse;
import com.monitor.mysql.mapper.UserMapper;
import org.apache.commons.lang.StringUtils;
import org.influxdb.dto.QueryResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Controller
... ... @@ -39,19 +49,22 @@ public class UserCtrl {
@Autowired
private MailService mailService;
@Autowired
private CommonQuery commonQuery;
@RequestMapping("/getAllUser")
@ResponseBody
public BaseResponse getAllUser() {
try{
List<User> list=userMapper.selectAll();
try {
List<User> list = userMapper.selectAll();
if (list == null || CollectionUtils.isEmpty(list)) {
return new BaseResponse<List<User>>();
}
return new BaseResponse<List<User>>(list);
}catch (Exception e){
log.error("getAllUser error",e);
} catch (Exception e) {
log.error("getAllUser error", e);
return null;
}
}
... ... @@ -59,11 +72,11 @@ public class UserCtrl {
@RequestMapping("/getUserByName")
@ResponseBody
public BaseResponse getUserByName(String name) {
try{
User user=userMapper.selectByName(name);
try {
User user = userMapper.selectByName(name);
return new BaseResponse<User>(user);
}catch (Exception e){
log.error("getUserByName error",e);
} catch (Exception e) {
log.error("getUserByName error", e);
return null;
}
}
... ... @@ -71,11 +84,11 @@ public class UserCtrl {
@RequestMapping("/getUserById")
@ResponseBody
public BaseResponse getUserById(int id) {
try{
User user=userMapper.selectById(id);
try {
User user = userMapper.selectById(id);
return new BaseResponse<User>(user);
}catch (Exception e){
log.error("getUserById error",e);
} catch (Exception e) {
log.error("getUserById error", e);
return null;
}
}
... ... @@ -83,11 +96,17 @@ public class UserCtrl {
@RequestMapping("/insert")
@ResponseBody
public BaseResponse insert(@RequestBody User user) {
try{
int result = userMapper.insert(user);
try {
Mail.Builder builder = new Mail.Builder("YOHO!运维平台密码");
builder.receiver(user.getEmail());
builder.message("您的密码:" + user.getPwd());
mailService.sendHTMLMail(builder.build());
String pwd = MD5Util.encryption(user.getPwd());
user.setPwd(pwd);
int result = userMapper.insert(user);
return new BaseResponse<Integer>(result);
}catch (Exception e){
log.error("getUserById error",e);
} catch (Exception e) {
log.error("getUserById error", e);
return null;
}
}
... ... @@ -95,11 +114,11 @@ public class UserCtrl {
@RequestMapping("/update")
@ResponseBody
public BaseResponse update(@RequestBody User user) {
try{
int result = userMapper.update(user);
try {
int result = userMapper.update(user);
return new BaseResponse<Integer>(result);
}catch (Exception e){
log.error("getUserById error",e);
} catch (Exception e) {
log.error("getUserById error", e);
return null;
}
}
... ... @@ -107,11 +126,18 @@ public class UserCtrl {
@RequestMapping("/updatePwd")
@ResponseBody
public BaseResponse updatePwd(@RequestBody User user) {
try{
int result = userMapper.updatePwd(user);
try {
Mail.Builder builder = new Mail.Builder("YOHO!运维平台密码");
builder.receiver(user.getEmail());
builder.message("您的密码:" + user.getPwd());
mailService.sendHTMLMail(builder.build());
String pwd = MD5Util.encryption(user.getPwd());
user.setPwd(pwd);
int result = userMapper.updatePwd(user);
return new BaseResponse<Integer>(result);
}catch (Exception e){
log.error("getUserById error",e);
} catch (Exception e) {
log.error("getUserById error", e);
return null;
}
}
... ... @@ -119,11 +145,11 @@ public class UserCtrl {
@RequestMapping("/deleteByName")
@ResponseBody
public BaseResponse deleteByName(String name) {
try{
int result = userMapper.deleteByName(name);
try {
int result = userMapper.deleteByName(name);
return new BaseResponse<Integer>(result);
}catch (Exception e){
log.error("getUserById error",e);
} catch (Exception e) {
log.error("getUserById error", e);
return null;
}
}
... ... @@ -131,11 +157,11 @@ public class UserCtrl {
@RequestMapping("/deleteById")
@ResponseBody
public BaseResponse deleteById(int id) {
try{
int result = userMapper.deleteById(id);
try {
int result = userMapper.deleteById(id);
return new BaseResponse<Integer>(result);
}catch (Exception e){
log.error("getUserById error",e);
} catch (Exception e) {
log.error("getUserById error", e);
return null;
}
}
... ... @@ -143,7 +169,7 @@ public class UserCtrl {
@RequestMapping("/getUsers")
@ResponseBody
public BaseResponse<PageResponse<User>> getUsers(@RequestBody PageRequest req) {
try{
try {
log.info("getUsers with param is {}", req);
// 组装分页对象
PageBean page = PageBean.initPageInfo(req.getCurrentPage(),
... ... @@ -167,8 +193,8 @@ public class UserCtrl {
response.setTotal(total);
response.setRows(users);
return new BaseResponse<PageResponse<User>>(response);
}catch (Exception e){
log.error("getUsers error",e);
} catch (Exception e) {
log.error("getUsers error", e);
return new BaseResponse<>(e.getMessage());
}
... ... @@ -178,7 +204,7 @@ public class UserCtrl {
@ResponseBody
public String operate(@RequestBody UserOperateReq userOperateReq) {
List<UserOperate> list = userOperateReq.getList();
for(UserOperate userOperate : list){
for (UserOperate userOperate : list) {
userOperateMapper.insert(userOperate);
}
return "";
... ... @@ -186,7 +212,7 @@ public class UserCtrl {
@RequestMapping("/getUsersByRole")
@ResponseBody
public BaseResponse<List<User>> getUsersByRole(String role) {
public BaseResponse<List<User>> getUsersByRole(String role) {
List<User> list = userMapper.selectUsersByRole(role);
return new BaseResponse<>(list);
}
... ... @@ -194,19 +220,90 @@ public class UserCtrl {
/**
* 测试邮件
*/
@RequestMapping("/testMail")
public void testMail() {
//@RequestMapping("/testMail")
public void testMail() {
List<User> list = userMapper.selectAll();
for (User user : list){
for (User user : list) {
Mail.Builder builder = new Mail.Builder("TEST 邮件");
builder.receiver(user.getEmail());
builder.message("这是一封测试邮箱是否可用的邮件,无需关注!");
boolean result = mailService.sendHTMLMail(builder.build());
if (!result){
log.info("error mail:" + user.getName()+"---"+user.getEmail());
if (!result) {
log.info("error mail:" + user.getName() + "---" + user.getEmail());
}
}
}
//@Scheduled(fixedDelay = 10*1000*60)
public void gatewayacess() {
try {
QueryResult queryResult = commonQuery.query(InfluxDBContants.AWS, "SHOW TAG VALUES FROM \"gateway_access\" WITH KEY = \"event\"", "yoho_event");
List<List<Object>> tags = QueryResultUtil.getValues(queryResult);
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("e:/tags", true)));
for (List<Object> tag : tags) {
String sql = "SELECT count(\"ip\") FROM \"gateway_access\" WHERE \"event\" = '" + tag.get(1) + "' AND time > now() - 1d";
QueryResult queryResult2 = commonQuery.query(InfluxDBContants.AWS, sql, "yoho_event");
List<List<Object>> list2 = QueryResultUtil.getValues(queryResult2);
Object total = list2.get(0).get(1);
String sql2 = "SELECT count(\"ip\") FROM \"gateway_access\" WHERE \"event\" = '" + tag.get(1) + "' AND time > now() - 1d GROUP BY time(10s) fill(null)";
QueryResult queryResult3 = commonQuery.query(InfluxDBContants.AWS, sql2, "yoho_event");
List<List<Object>> list3 = QueryResultUtil.getValues(queryResult3);
List<countClass> countClassesss = new ArrayList<>();
for (List<Object> list : list3) {
Object time = list.get(0);
int count = (int) (double) list.get(1);
countClass countClasss = new countClass();
countClasss.setTime(time);
countClasss.setCount(count);
countClassesss.add(countClasss);
}
Collections.sort(countClassesss);
String text = StringUtils.rightPad(String.valueOf(tag.get(1)), 40) + " " + total + " " + countClassesss.get(0).getCount() + "\r\n";
bufferedWriter.write(text);
}
bufferedWriter.flush();
bufferedWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("end");
}
public class countClass implements Comparable<countClass> {
private Object time;
private int count;
public Object getTime() {
return time;
}
public void setTime(Object time) {
this.time = time;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
@Override
public int compareTo(countClass o) {
if (this.count > o.count) {
return -1;
} else if (this.count == o.count) {
return 0;
} else {
return 1;
}
}
}
}
... ...