Authored by mlge

no message

Showing 17 changed files with 295 additions and 51 deletions
... ... @@ -105,7 +105,7 @@ public class MaliciousIpMapperImpl extends InfluxDBQuery implements MaliciousIpM
m.put("reason",String.valueOf(ls.get(s.getColumns().indexOf("reason"))));
m.put("dur",String.valueOf(ls.get(s.getColumns().indexOf("dur"))) );
if(s.getColumns().indexOf("createtime")>=0){
m.put("createtime",""+ ls.get(s.getColumns().indexOf("hbasetime"))==null?"":String.valueOf(ls.get(s.getColumns().indexOf("createtime"))));
m.put("createtime", ls.get(s.getColumns().indexOf("createtime"))==null?"":String.valueOf(ls.get(s.getColumns().indexOf("createtime"))));
}
if(s.getColumns().indexOf("hbasetime")>=0){
m.put("hbasetime", ls.get(s.getColumns().indexOf("hbasetime"))==null?"":String.valueOf(ls.get(s.getColumns().indexOf("hbasetime"))));
... ...
... ... @@ -41,9 +41,11 @@ public class MonitAlarmCtrl {
@RequestMapping("/recvMonitAlarmInfo")
public void recvMonitAlarmInfo(String info,String mobiles) {
DEBUG.info("mip monit alarm info: {}", info);
alarmMsgService.sendSms("恶意ip拦截异常", info.toString(), mobiles);
DEBUG.info("mip monit alarm info: ", info);
if(info==null){
info="";
}
alarmMsgService.sendSms("service_exception", info.toString(), mobiles);
}
}
... ...
... ... @@ -38,4 +38,9 @@ public class AlarmGroupContants {
* 联盟激活告警
*/
public final static String UNION_MOBILE ="联盟激活告警";
/**
* Docker发布组
*/
public final static String GROUP_NAME_DOCKER = "Docker发布组";
}
\ No newline at end of file
... ...
... ... @@ -9,6 +9,8 @@ public class DockerJenkinsRecord {
private String id;
private String projectName;
private String jenkinsJobId;
//SUCCESS, UNSTABLE, or FAILURE.
private String jenkinsBuildStatus;
private String ReleaseWorkId;
/**
... ...
... ... @@ -25,4 +25,7 @@ public class MaliciousIpsRecordForbid {
//封禁status 1 表示封
private String forbidStatus;
//统计周期
private String dur;
}
... ...
package com.model;
import lombok.Data;
/**
* Created by craig.qin on 2017/6/26.
*/
@Data
public class SqlOperateDbSource {
private int id;
private String dbSourceText;
private String dbSourceInfo;
private int seqNo;
}
... ...
package com.monitor.mysql.mapper;
import com.model.SqlOperateDbSource;
import java.util.List;
/**
* Created by craig.qinchao on 2017/06/29.
*/
public interface SqlOperateDbSourceMapper {
List<SqlOperateDbSource> selectAll();
}
... ...
... ... @@ -8,9 +8,10 @@
<result column="forbid_status" property="forbidStatus" jdbcType="VARCHAR" />
<result column="hbase_time" property="hbaseTime" jdbcType="VARCHAR" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="dur" property="dur" jdbcType="VARCHAR" />
</resultMap>
<sql id="Base_Column_List" >
id, ip,reason,create_time,forbid_status,hbase_time
id, ip,reason,create_time,forbid_status,hbase_time,dur
</sql>
<select id="getAlarmCountMipsInfoToOpsDb" resultType="java.lang.Integer">
... ... @@ -45,8 +46,8 @@
</select>
<insert id="insert" parameterType="com.model.MaliciousIpsRecordForbid">
insert into malicious_ips_record_forbid(ip,reason,hbase_time,create_time)
values(#{ip,jdbcType=VARCHAR},#{reason,jdbcType=VARCHAR},#{hbaseTime,jdbcType=VARCHAR},now())
insert into malicious_ips_record_forbid(ip,reason,dur,hbase_time,create_time)
values(#{ip,jdbcType=VARCHAR},#{reason,jdbcType=VARCHAR},#{dur,jdbcType=VARCHAR},#{hbaseTime,jdbcType=VARCHAR},now())
</insert>
<update id="updateForbidStatusByPrimaryKey" parameterType="com.model.MaliciousIpsRecordForbid" >
... ...
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.monitor.mysql.mapper.SqlOperateDbSourceMapper" >
<resultMap id="BaseResultMap" type="com.model.SqlOperateDbSource" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="db_source_text" property="dbSourceText" jdbcType="VARCHAR" />
<result column="db_source_info" property="dbSourceInfo" jdbcType="VARCHAR" />
<result column="seq_no" property="seqNo" jdbcType="INTEGER" />
</resultMap>
<sql id="Base_Column_List" >
id, db_source_text,db_source_info,seq_no
</sql>
<select id="selectAll" resultMap="BaseResultMap">
select * from sql_operate_db_source order by seq_no
</select>
</mapper>
\ No newline at end of file
... ...
... ... @@ -65,6 +65,8 @@ public class MaliciousIp {
private List<String> duration;*/
private String reasonDur;
private String dur;
... ... @@ -72,6 +74,6 @@ public class MaliciousIp {
public String toString() {
return "MaliciousIp [ip=" + ip + ", qps=" + qps + ", allCount=" + allCount + ", impCount=" + impCount + ", ipPrecent="
+ ipPrecent + ", impApiPrecent=" + impApiPrecent + ", udidCount=" + udidCount + ", notExsitUdidCount="
+ notExsitUdidCount + ", timestamp=" + timestamp + ", time=" + time + "]";
+ notExsitUdidCount + ", timestamp=" + timestamp + ", time=" + time +", hbaseTime="+hbaseTime+ "]";
}
}
\ No newline at end of file
... ...
... ... @@ -211,13 +211,14 @@ public class MaliciousIpServiceImpl implements MaliciousIpService {
String ip=jo.getString("ip");
String reason=jo.getString("reason");
String hbaseTime=String.valueOf(jo.getLongValue("timestamp"));
//String duration=jo.get("duration")==null?"":""+jo.get("duration");
String duration=jo.get("duration")==null?"":""+jo.get("duration");
if(StringUtils.isNotBlank(ip)){
MaliciousIpsRecordForbid record=new MaliciousIpsRecordForbid();
record.setIp(ip);
record.setReason(reason);
record.setHbaseTime(hbaseTime);
record.setDur(duration);
maliciousIpsRecordForbidMapper.insert(record);
logger.info("MaliciousIpServiceImpl writeMipsObjToOpsReids - "+ip);
... ... @@ -363,6 +364,8 @@ public class MaliciousIpServiceImpl implements MaliciousIpService {
String insertTime2="";
String hbaseTime="";
String hbaseTime2="";
String dur="";
String dur2="";
for(String mipKey : mipKeys){
MaliciousIp mip = new MaliciousIp();
mip.setIp(mipKey);
... ... @@ -374,6 +377,7 @@ public class MaliciousIpServiceImpl implements MaliciousIpService {
String reason=awsInfo.get("reason");
insertTime=awsInfo.get("createtime");
hbaseTime=awsInfo.get("hbasetime");
dur=awsInfo.get("dur");
try{
MaliciousIpModel model=JSON.parseObject(reason,MaliciousIpModel.class);
reason=model.toHtmlString();
... ... @@ -393,6 +397,7 @@ public class MaliciousIpServiceImpl implements MaliciousIpService {
String reason=qcloudInfo.get("reason");
insertTime2=qcloudInfo.get("createtime");
hbaseTime2=qcloudInfo.get("hbasetime");
dur2=qcloudInfo.get("dur");
try{
MaliciousIpModel model=JSON.parseObject(reason,MaliciousIpModel.class);
reason=model.toHtmlString();
... ... @@ -419,53 +424,56 @@ public class MaliciousIpServiceImpl implements MaliciousIpService {
mip.setTime(time);
}*/
mip.setTs(ts);
if(StringUtils.isNotBlank(insertTime)&&StringUtils.isNotBlank(insertTime2)){
if(insertTime.compareTo(insertTime2)>0){
mip.setTime(insertTime);
}else{
mip.setTime(insertTime2);
}
}
if(StringUtils.isNotBlank(hbaseTime)&&StringUtils.isNotBlank(hbaseTime2)){
if(hbaseTime.compareTo(hbaseTime2)>0){
mip.setHbaseTime(hbaseTime);
mip.setTime(insertTime);
mip.setDur(dur);
}else{
mip.setHbaseTime(hbaseTime2);
mip.setTime(insertTime2);
mip.setDur(dur2);
}
}else if(StringUtils.isNotBlank(hbaseTime2)){
mip.setHbaseTime(hbaseTime);
}else{
mip.setHbaseTime(hbaseTime2);
mip.setTime(insertTime2);
mip.setDur(dur2);
}else{
mip.setHbaseTime(hbaseTime);
mip.setTime(insertTime);
mip.setDur(dur);
}
listMaliciousIp.add(mip);
}
//排序
//排序
Collections.sort(listMaliciousIp,new Comparator<MaliciousIp>(){
public int compare(MaliciousIp arg0, MaliciousIp arg1) {
/*long compare= arg0.getTs() - arg1.getTs();
if(compare<0L){
return 1;
}else{
String o1=arg0.getTime();
String o2=arg1.getTime();
if(StringUtils.isBlank(o1) ){
o1="";
}
if(StringUtils.isBlank(o2)){
o2="";
}
if(o1.compareTo(o2) > 0){
return -1;
}*/
if(StringUtils.isBlank(arg0.getTime())){
return 1;
}else if(StringUtils.isBlank(arg1.getTime())){
}
if(o1.compareTo(o2) < 0){
return 1;
}else{
int i= arg0.getTime().compareTo(arg1.getTime());
if(i<0){
return 1;
}else{
return -1;
}
}
if(o1.compareTo(o2) == 0){
return 0;
}
return 0;
}
});
logger.error("listMaliciousIpinfo is {}",listMaliciousIp);
logger.error("listMaliciousIpinfo is {}",JSON.toJSONString(listMaliciousIp));
response.setData(listMaliciousIp);
return response;
}
... ...
... ... @@ -24,6 +24,20 @@ public class SqlOperateCtrl {
@Autowired
private SqlOperateService sqlOperateService;
/*
查询数据源
*/
@RequestMapping("/queryDbSourceList")
@ResponseBody
public BaseResponse queryDbSourceList(){
BaseResponse res=sqlOperateService.queryDbSourceList();
if(res==null){
res=new BaseResponse("发生未知异常,数据库源列表失败");
}
return res;
}
/*
查询db
*/
... ...
... ... @@ -27,6 +27,10 @@ public interface SqlOperateService {
*/
BaseResponse query4Table(SqlOperateModel sqlOperateModel);
/**
* 数据源查询
*/
BaseResponse queryDbSourceList();
/**
* 根据传入的数据查询,返回数据源下的所有的db列表
... ...
... ... @@ -2,12 +2,14 @@ package com.monitor.other.sqlOperate.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.model.SqlOperateDbSource;
import com.model.SqlOperateLogs;
import com.monitor.model.domain.PageBean;
import com.monitor.model.domain.SqlOperateModel;
import com.monitor.model.request.SqlOpLogsReq;
import com.monitor.model.response.BaseResponse;
import com.monitor.model.response.PageResponse;
import com.monitor.mysql.mapper.SqlOperateDbSourceMapper;
import com.monitor.mysql.mapper.SqlOperateLogsMapper;
import com.monitor.other.sqlOperate.service.SqlOperateService;
import org.apache.commons.lang3.StringUtils;
... ... @@ -32,6 +34,9 @@ public class SqlOperateServiceImpl implements SqlOperateService {
@Autowired
private SqlOperateLogsMapper sqlOperateLogsMapper;
@Autowired
private SqlOperateDbSourceMapper sqlOperateDbSourceMapper;
Logger log = LoggerFactory.getLogger(SqlOperateServiceImpl.class);
private final String DRIVE_CLASS_MYSQL = "com.mysql.jdbc.Driver";
private final String DATA_SOURCE_USER="yh_ts_db";
... ... @@ -42,6 +47,25 @@ public class SqlOperateServiceImpl implements SqlOperateService {
/**
* 数据源查询
*/
@Override
public BaseResponse queryDbSourceList(){
List<Map<String,String>> ls=new ArrayList<>();
List<SqlOperateDbSource> allList=sqlOperateDbSourceMapper.selectAll();
if(allList!=null&&allList.size()>0){
for(SqlOperateDbSource model:allList){
Map<String,String> map=new HashMap<>();
map.put("id",model.getDbSourceInfo());
map.put("text",model.getDbSourceText());
ls.add(map);
}
}
BaseResponse res=new BaseResponse();
res.setData(ls);
return res;
}
/**
*
* 据传入的数据查询,返回数据源下的所有的db列表
* @return
... ...
package com.monitor.other.worksystem.ctrl;
import com.alibaba.fastjson.JSONArray;
import com.contants.AlarmGroupContants;
import com.model.DockerJenkinsRecord;
import com.model.DockerProjectModel;
<<<<<<< HEAD
import com.monitor.model.request.DockerInfoReq;
=======
import com.monitor.common.service.AlarmMsgService;
>>>>>>> e9700f8c84e809432697c320db0ccd40c3f55ebb
import com.monitor.model.request.DockerJenkinsReq;
import com.monitor.model.response.BaseResponse;
import com.monitor.model.response.PageResponse;
import com.monitor.mysql.mapper.DockerProjectMapper;
import com.monitor.other.maliciousip.ctrl.MaliciousIpController;
import com.monitor.other.worksystem.dock.qq.DockerServerDeployService;
import com.monitor.other.worksystem.model.WebHooksReleaseBO;
import com.monitor.other.worksystem.service.DockerProjectService;
import com.offbytwo.jenkins.model.JobWithDetails;
import com.util.GetUsersInfoUtil;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
... ... @@ -26,11 +33,15 @@ import org.springframework.web.bind.annotation.ResponseBody;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
@Controller
@RequestMapping("/dockerProject")
public class DockerProjectCtrl {
Logger log = LoggerFactory.getLogger(DockerProjectCtrl.class);
@Autowired
private DockerProjectService dockerProjectService;
... ... @@ -42,6 +53,16 @@ public class DockerProjectCtrl {
@Autowired
private DockerProjectMapper dockerProjectMapper;
@Autowired
private AlarmMsgService alarmMsgService;
/**
* 根据报警组名称取成员的手机号码
*/
@Autowired
private GetUsersInfoUtil getUsersInfoUtil;
/**
* 查询docker项目
*/
... ... @@ -92,23 +113,132 @@ public class DockerProjectCtrl {
public BaseResponse gitWebHook(@RequestBody WebHooksReleaseBO webHooksReleaseBO) {
BaseResponse rtn=new BaseResponse<>();
if (!webHooksReleaseBO.getRef().contains("master")&&StringUtils.isBlank(webHooksReleaseBO.getProjectName())) {
rtn.setData("");
log.info("gitWebHook 非master分支或者项目名为空");
return rtn;
}
String mobile_yunwei = getUsersInfoUtil.getMobileByAlarmGroup(AlarmGroupContants.GROUP_NAME_DOCKER);
//log.info("gitWebHook begin");
DockerProjectModel model=dockerProjectMapper.selectByProjectName(webHooksReleaseBO.getProjectName());
//log.info("gitWebHook model {} ",model);
if (isRealChange(webHooksReleaseBO)&&model!=null) {
//Docker-Deploy-GitHook
DockerJenkinsReq dockerJenkinsReq=new DockerJenkinsReq();
dockerJenkinsReq.setDeployName(model.getProjectName());
dockerJenkinsReq.setProjectGitGroup(model.getProjectGitGroup());
dockerJenkinsReq.setDeployName(model.getDockerProjectName());
dockerJenkinsReq.setBranch("master");
dockerJenkinsReq.setUserMail(webHooksReleaseBO.getUser_email());
dockerJenkinsReq.setImageSource(model.getDockerOnlineImageStore());
dockerJenkinsReq.setNodeEnv("yoho-online");
String id=dockerProjectService.jenkinsBuild(dockerJenkinsReq);
rtn.setData(id);
//异步
log.info("gitWebHook isRealChange is true ");
CompletableFuture.runAsync(new Runnable() {
@Override
public void run() {
//Docker-Deploy-GitHook
DockerJenkinsReq dockerJenkinsReq=new DockerJenkinsReq();
dockerJenkinsReq.setProjectName(model.getProjectName());
dockerJenkinsReq.setProjectJobType(model.getProjectJobType());
dockerJenkinsReq.setProjectGitGroup(model.getProjectGitGroup());
dockerJenkinsReq.setDeployName(model.getDockerProjectName());
dockerJenkinsReq.setBranch("master");
dockerJenkinsReq.setUserMail(webHooksReleaseBO.getUser_email());
dockerJenkinsReq.setImageSource(model.getDockerOnlineImageStore());
dockerJenkinsReq.setNodeEnv("yoho-online");
dockerJenkinsReq.setProjectPort(model.getPort());
dockerJenkinsReq.setClusterId(model.getDockerOnlineClusterId());
//开始创建镜像
log.info("gitWebHook run {} ",dockerJenkinsReq);
String buildId=dockerProjectService.jenkinsBuild(dockerJenkinsReq);
//等待镜像创建完成:查询状态
try {
Thread.sleep(2*60*1000);//等待2分钟再查询
} catch (InterruptedException e) {
log.error("gitWebHook thread sleep error",e);
}
//查询镜像
boolean okFlag=false;
String alarmMsg="镜像制作失败";
String alarmTypeSuccess="service_exception";//"docker_auto_success";
String alarmTypeFail="service_exception";//"docker_auto_error";
for(int i=0;i<20;i++){
DockerJenkinsRecord record=dockerProjectService.queryJenkinsById(buildId);
if(record==null){
//发送短信
alarmMsg="获取镜像状态信息为空,镜像buildId is"+buildId;
break ;
}
String status=record.getJenkinsBuildStatus();
if (StringUtils.isBlank(status)){
//继续查询
try {
Thread.sleep(1*60*1000);//等待1分钟再查询
} catch (InterruptedException e) {
log.error("gitWebHook thread sleep error",e);
}
continue;
}
if ("SUCCESS".equalsIgnoreCase(status.trim())){
//成功
okFlag=true;
break;
}else{
okFlag=false;
alarmMsg="镜像制作失败,镜像状态为 "+status+",镜像buildId is"+buildId;
break;
}
}
//镜像制作失败
if(!okFlag){
//sendMsg
alarmMsg=("["+model.getProjectName()+"]"+alarmMsg);
alarmMsgService.sendSms(alarmTypeFail, alarmMsg , mobile_yunwei);
return;
}
//调用发布
dockerJenkinsReq.setClusterId(model.getDockerOnlineClusterId());
dockerJenkinsReq.setNamespace(model.getDockerOnlineNameSpace());
dockerJenkinsReq.setServiceName(model.getDockerProjectName());
BaseResponse deployResp=deployMirror(dockerJenkinsReq);
if(deployResp==null){
//发布失败
alarmMsg=("["+model.getProjectName()+"]调用腾讯云发布接口失败");
alarmMsgService.sendSms(alarmTypeFail,alarmMsg , mobile_yunwei);
return;
}
if(deployResp.getCode()!=200){
//发布失败
alarmMsg=("["+model.getProjectName()+"]查询腾讯云发布状态接口失败");
alarmMsgService.sendSms(alarmTypeFail,alarmMsg , mobile_yunwei);
return;
}else{
//发布成功
boolean projectStatus=false;
for(int i=0;i<60;i++){
BaseResponse deployStatusResp=queryDockerServerStatus(dockerJenkinsReq);
if(deployStatusResp!=null&&"NORMAL".equalsIgnoreCase((String)deployStatusResp.getData())){
//发布之后的状态成功
projectStatus=true;
alarmMsg=("["+model.getProjectName()+"]发布成功!");
alarmMsgService.sendSms(alarmTypeSuccess,alarmMsg , mobile_yunwei);
break;
}else{
try {
Thread.sleep(1*20*1000);//等待20秒再查询
} catch (InterruptedException e) {
log.error("gitWebHook queryDockerServerStatus thread sleep error",e);
}
}
}
if(!projectStatus){
alarmMsg=("["+model.getProjectName()+"]发布状态为非normal,请检查!");
alarmMsgService.sendSms(alarmTypeFail,alarmMsg , mobile_yunwei);
}
}
}
});
}
return rtn;
... ... @@ -203,7 +333,6 @@ public class DockerProjectCtrl {
return rtn;
}
/**
* 发布docker服务
*/
... ...
bigdata.web.url=http://dashboardui.yohops.com
bigdata.web.url=http://maintain.yohops.com
... ...
bigdata.web.url=http://dashboardui.yohops.com
bigdata.web.url=http://maintain.yohops.com
... ...