From ad0e8141a883b7f96858512e59c5c9aa23c2462d Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Wed, 29 May 2019 11:04:35 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=9C=8D=E5=8A=A1=E7=9B=91=E6=8E=A7][?= =?UTF-8?q?=E6=96=B0=E5=A2=9E]:=E5=AE=9A=E6=97=B6=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E6=8E=A5=E5=8F=A3=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../V201905290800__ADD_SYS_MONITOR.sql | 52 ++++++++++ .../com/iformall/ScheduleApplication.java | 17 ++++ .../iformall/schedule/SysMonitorSchedule.java | 72 ++++++++++++++ .../src/main/resources/application-dev.yml | 2 + .../src/main/resources/application-prod.yml | 2 + .../src/main/resources/application-test.yml | 2 + .../com/iformall/domain/po/SysMonitor.java | 95 +++++++++++++++++++ .../com/iformall/mapper/SysMonitorMapper.java | 16 ++++ .../iformall/service/SysMonitorService.java | 57 +++++++++++ .../service/impl/SysMonitorServiceImpl.java | 59 ++++++++++++ .../resources/mapper/SysMonitorMapper.xml | 56 +++++++++++ 11 files changed, 430 insertions(+) create mode 100644 mallinkAdmin/src/main/resources/db/migration/V201905290800__ADD_SYS_MONITOR.sql create mode 100644 mallinkSchedule/src/main/java/com/iformall/schedule/SysMonitorSchedule.java create mode 100644 mallinkService/src/main/java/com/iformall/domain/po/SysMonitor.java create mode 100644 mallinkService/src/main/java/com/iformall/mapper/SysMonitorMapper.java create mode 100644 mallinkService/src/main/java/com/iformall/service/SysMonitorService.java create mode 100644 mallinkService/src/main/java/com/iformall/service/impl/SysMonitorServiceImpl.java create mode 100644 mallinkService/src/main/resources/mapper/SysMonitorMapper.xml diff --git a/mallinkAdmin/src/main/resources/db/migration/V201905290800__ADD_SYS_MONITOR.sql b/mallinkAdmin/src/main/resources/db/migration/V201905290800__ADD_SYS_MONITOR.sql new file mode 100644 index 000000000..88ce39b32 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201905290800__ADD_SYS_MONITOR.sql @@ -0,0 +1,52 @@ +DROP TABLE IF EXISTS `sys_monitor`; +CREATE TABLE `sys_monitor` ( + `id` bigint(20) NOT NULL, + `name` varchar(50) NOT NULL COMMENT '网址名称', + `url` varchar(255) NOT NULL COMMENT '网址url', + `type` tinyint(20) DEFAULT '1' COMMENT '1=网址监控', + `deploy` tinyint(20) DEFAULT '1' COMMENT '1=dev 2=test 3=release', + `err_msg` varchar(50) DEFAULT NULL COMMENT '错误信息', + PRIMARY KEY (`id`), + UNIQUE `id_UNIQUE` USING BTREE (`id`) comment '' +) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='网络监控' CHECKSUM=0 DELAY_KEY_WRITE=0; + +INSERT INTO `sys_monitor` (`id`,`name`,`url`,`type`,`deploy`,`err_msg`) VALUES +(1, "dev-管理端","https://mall.youlane.cn/api/version", 1, 1, "{url}不响应"), +(2, "dev-C端","https://ciformall.youlane.cn/C/api/mall/version", 1, 1, "{name}: {url} 不响应"), +(3, "dev-B端","https://biformall.youlane.cn/B/api/mall/version", 1, 1, "{name}: {url}不响应"), +(4, "dev-Schedule","http://202.165.179.86:5000/S/version", 1, 1, "{name}: {url}不响应"), +(5, "dev-消息服务器","http://202.165.179.86:5001/mq/version", 1, 1, "{name}: {url}不响应"), +(6, "dev-websocket服务器","http://202.165.179.86:7100/W/version", 1, 1, "{name}: {url}不响应"), +(7, "dev-微信第三方开放平台","https://open.youlane.cn/O/version", 1, 1, "{name}: {url}不响应"), +(8, "dev-移动端数据塔台","https://mobile.youlane.cn/#/", 1, 1, "{name}: {url}不响应"), +(9, "dev-幸运卡牌","https://game.youlane.cn/luckCard/index.html", 1, 1, "{name}: {url}不响应"), +(10, "dev-幸运砸金蛋","https://game.youlane.cn/goldEgg/index.html", 1, 1, "{name}: {url}不响应"), +(11, "dev-幸运刮刮乐","https://game.youlane.cn/guaguale/index.html", 1, 1, "{name}: {url}不响应"), +(12, "dev-callback","http://202.165.179.86:9100/version", 1, 1, "{name}: {url}不响应"), + +(101, "test-管理端","https://admintest.malls.iformall.com/api/version", 1, 2, "{name}: {url}不响应"), +(102, "test-C端","https://ctest.malls.iformall.com/C/api/mall/version", 1, 2, "{name}: {url} 不响应"), +(103, "test-B端","https://btest.malls.iformall.com/B/api/mall/version", 1, 2, "{name}: {url}不响应"), +(104, "test-Schedule","https://stest.malls.iformall.com/S/version", 1, 2, "{name}: {url}不响应"), +(105, "test-消息服务器","https://stest.malls.iformall.com/mq/version", 1, 2, "{name}: {url}不响应"), +(106, "test-websocket服务器","https://stest.malls.iformall.com/W/version", 1, 2, "{name}: {url}不响应"), +(107, "test-微信第三方开放平台","https://opentest.malls.iformall.com/O/version", 1, 2, "{name}: {url}不响应"), +(108, "test-移动端数据塔台","https://mobiletest.malls.iformall.com/#/", 1, 2, "{name}: {url}不响应"), +(109, "test-幸运卡牌","https://gametest.malls.iformall.com/game/luckCard/index.html", 1, 2, "{name}: {url}不响应"), +(110, "test-幸运砸金蛋","https://gametest.malls.iformall.com/game/goldEgg/index.html", 1, 2, "{name}: {url}不响应"), +(111, "test-幸运刮刮乐","https://gametest.malls.iformall.com/game/guaguale/index.html", 1, 2, "{name}: {url}不响应"), +(112, "test-callback","https://callbacktest.malls.iformall.com/api/version", 1, 2, "{name}: {url}不响应"), + +(201, "生产环境-管理端","https://admin.malls.iformall.com/api/version", 1, 3, "{name}: {url}不响应"), +(202, "生产环境-C端","https://c.malls.iformall.com/C/api/mall/version", 1, 3, "{name}: {url} 不响应"), +(203, "生产环境-B端","https://b.malls.iformall.com/B/api/mall/version", 1, 3, "{name}: {url}不响应"), +(204, "生产环境-Schedule","https://s.malls.iformall.com/S/version", 1, 3, "{name}: {url}不响应"), +(205, "生产环境-消息服务器","https://s.malls.iformall.com/mq/version", 1, 3, "{name}: {url}不响应"), +(206, "生产环境-websocket服务器","https://s.malls.iformall.com/W/version", 1, 3, "{name}: {url}不响应"), +(207, "生产环境-微信第三方开放平台","https://open.malls.iformall.com/O/version", 1, 3, "{name}: {url}不响应"), +(208, "生产环境-移动端数据塔台","https://mobile.malls.iformall.com/#/", 1, 3, "{name}: {url}不响应"), +(209, "生产环境-幸运卡牌","https://game.malls.iformall.com/game/luckCard/index.html", 1, 3, "{name}: {url}不响应"), +(210, "生产环境-幸运砸金蛋","https://game.malls.iformall.com/game/goldEgg/index.html", 1, 3, "{name}: {url}不响应"), +(211, "生产环境-幸运刮刮乐","https://game.malls.iformall.com/game/guaguale/index.html", 1, 3, "{name}: {url}不响应"), +(212, "生产环境-callback","https://callback.malls.iformall.com/api/version", 1, 3, "{name}: {url}不响应") +; \ No newline at end of file diff --git a/mallinkSchedule/src/main/java/com/iformall/ScheduleApplication.java b/mallinkSchedule/src/main/java/com/iformall/ScheduleApplication.java index f60575a28..ebd8a4d91 100644 --- a/mallinkSchedule/src/main/java/com/iformall/ScheduleApplication.java +++ b/mallinkSchedule/src/main/java/com/iformall/ScheduleApplication.java @@ -32,6 +32,12 @@ public class ScheduleApplication { @Value("${fm.upload_dir}") private String uploadDir; + @Value("${fm.monitor_emails}") + private String fmMonitorEmails; + + @Value("${fm.monitor_enable}") + private boolean fmMonitor; + @Bean public boolean isFmException() { return fmException; @@ -52,6 +58,17 @@ public class ScheduleApplication { return uploadDir; } + @Bean + public String fmMonitorEmails() { + return fmMonitorEmails; + } + + @Bean + public boolean isFmMonitor() { + return fmMonitor; + } + + public static void main(String[] args) { SpringApplication.run(ScheduleApplication.class, args); diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/SysMonitorSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/SysMonitorSchedule.java new file mode 100644 index 000000000..e27d1f05b --- /dev/null +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/SysMonitorSchedule.java @@ -0,0 +1,72 @@ +package com.iformall.schedule; + +import com.iformall.domain.po.SysMonitor; +import com.iformall.mapper.*; +import com.iformall.service.MailService; +import com.iformall.utils.HttpUtil; +import org.apache.commons.lang3.StringUtils; +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.Component; + +import java.util.List; + +@Component +public class SysMonitorSchedule { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private String fmMonitorEmails; + + @Autowired + private boolean isFmMonitor; + + @Autowired + private MailService mailService; + + @Autowired + private SysMonitorMapper sysMonitorMapper; + + @Scheduled(cron = "0 */5 * * * *?") // 每隔5分钟检查一下各个网址 + public void checkUrls() { + if(isFmMonitor) { + SysMonitor q = new SysMonitor(); + List sysMonitors = sysMonitorMapper.findList(q); + + for (SysMonitor sysMonitor : sysMonitors) { + checkSysMonitor(sysMonitor); + } + } + } + + private void checkSysMonitor(SysMonitor sysMonitor) { + boolean isNormal = true; + try { + String result = HttpUtil.doGet(sysMonitor.getUrl()); + if(StringUtils.isBlank(result)) { + isNormal = false; + } else { + logger.info(result); + } + } catch (RuntimeException e) { + logger.error(e.getMessage()); + isNormal = false; + } + + if(!isNormal) { + String[] receivers = fmMonitorEmails.split(","); + + String content = sysMonitor.getErrMsg(); + content = content.replace("{name}", sysMonitor.getName()); + content = content.replace("{url}", sysMonitor.getUrl()); + + //发送邮件 + mailService.sendSimpleMail(receivers, sysMonitor.getName() + "访问异常", content); + } + } + + +} \ No newline at end of file diff --git a/mallinkSchedule/src/main/resources/application-dev.yml b/mallinkSchedule/src/main/resources/application-dev.yml index 2aff90875..b4c035ea5 100644 --- a/mallinkSchedule/src/main/resources/application-dev.yml +++ b/mallinkSchedule/src/main/resources/application-dev.yml @@ -108,6 +108,8 @@ fm: deploy: 1 open: true upload_dir: /home/test/server/uploads/ + monitor_emails: hupeng@iformall.com,wuguoqiang@iformall.com,gongbiao@iformall.com,luozukai@iformall.com,sunmingming@iformall.com,huanghui@iformall.com,wangmei@iformall.com + monitor_enable: true logging: level: diff --git a/mallinkSchedule/src/main/resources/application-prod.yml b/mallinkSchedule/src/main/resources/application-prod.yml index 96732f75b..152980909 100644 --- a/mallinkSchedule/src/main/resources/application-prod.yml +++ b/mallinkSchedule/src/main/resources/application-prod.yml @@ -93,6 +93,8 @@ fm: deploy: 3 open: true upload_dir: /home/ec2-user/server/uploads/ + monitor_emails: hupeng@iformall.com,wuguoqiang@iformall.com,gongbiao@iformall.com,luozukai@iformall.com,sunmingming@iformall.com,huanghui@iformall.com,wangmei@iformall.com + monitor_enable: false logging: level: diff --git a/mallinkSchedule/src/main/resources/application-test.yml b/mallinkSchedule/src/main/resources/application-test.yml index d40b7338a..3a5b3d434 100644 --- a/mallinkSchedule/src/main/resources/application-test.yml +++ b/mallinkSchedule/src/main/resources/application-test.yml @@ -93,6 +93,8 @@ fm: deploy: 2 open: true upload_dir: /home/ec2-user/server/uploads/ + monitor_emails: hupeng@iformall.com,wuguoqiang@iformall.com,gongbiao@iformall.com,luozukai@iformall.com,sunmingming@iformall.com,huanghui@iformall.com,wangmei@iformall.com + monitor_enable: false logging: level: diff --git a/mallinkService/src/main/java/com/iformall/domain/po/SysMonitor.java b/mallinkService/src/main/java/com/iformall/domain/po/SysMonitor.java new file mode 100644 index 000000000..6fd62d77a --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/SysMonitor.java @@ -0,0 +1,95 @@ +package com.iformall.domain.po; + +import lombok.Data; +import javax.persistence.*; +import javax.persistence.Transient; +import java.util.List; +import javax.persistence.Id; +import java.io.Serializable; + +@Table(name = "sys_monitor") +@Data +public class SysMonitor implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + @Transient + protected String sortColumns; + + @io.swagger.annotations.ApiModelProperty(value="网址url",name="name") + private String name; + @io.swagger.annotations.ApiModelProperty(value="网址url",name="url") + private String url; + @io.swagger.annotations.ApiModelProperty(value="1=网址监控",name="type") + private Integer type; + @io.swagger.annotations.ApiModelProperty(value="1=dev 2=test 3=release",name="deploy") + private Integer deploy; + @io.swagger.annotations.ApiModelProperty(value="",name="errMsg") + private String errMsg; + + + + public static enum Field + { + Id_ASC("`id` ASC"),Id_DESC("`id` DESC") + ,Name_ASC("`name` ASC"),Name_DESC("`name` DESC") + ,Url_ASC("`url` ASC"),Url_DESC("`url` DESC") + ,Type_ASC("`type` ASC"),Type_DESC("`type` DESC") + ,Deploy_ASC("`deploy` ASC"),Deploy_DESC("`deploy` DESC") + ,ErrMsg_ASC("`err_msg` ASC"),ErrMsg_DESC("`err_msg` DESC") + ; + private String value; + Field(String value){ + this.value = value; + } + public String getValue() { + return value; + } + public void setCol(String value) { + this.value = value; + } + @Override + public String toString() { + return this.getValue(); + } + } + + public void setSortColumns(SysMonitor.Field... fields) + { + if (fields == null || fields.length == 0) { + return; + } + for (int k = 0; k < fields.length; k++) { + if (fields[k] == null) { + return; + } + } + StringBuilder sb = new StringBuilder(fields[0].toString()); + for (int k = 1; k < fields.length; k++) { + sb.append(","); + sb.append(fields[k].toString()); + } + this.sortColumns = sb.toString(); + } + + public void setSortColumns(String sortColumns) + { + if (sortColumns == null || "".equals(sortColumns.trim())) { + return; + } + if (sortColumns.contains(",")) { + String[] cols = sortColumns.split(","); + java.util.List fList = new java.util.ArrayList(); + for (int k = 0; k < cols.length; k++) { + fList.add(Field.valueOf(cols[k])); + } + this.setSortColumns(fList.toArray(new Field[fList.size()])); + } else { + this.setSortColumns(Field.valueOf(sortColumns)); + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/SysMonitorMapper.java b/mallinkService/src/main/java/com/iformall/mapper/SysMonitorMapper.java new file mode 100644 index 000000000..bacc31d97 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/SysMonitorMapper.java @@ -0,0 +1,16 @@ +package com.iformall.mapper; + +import java.util.*; +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.SysMonitor; + +public interface SysMonitorMapper extends CommonMapper { + + List findList(SysMonitor sysMonitor); + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/SysMonitorService.java b/mallinkService/src/main/java/com/iformall/service/SysMonitorService.java new file mode 100644 index 000000000..69d12159c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/SysMonitorService.java @@ -0,0 +1,57 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.SysMonitor; + +import java.util.List; + +public interface SysMonitorService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(SysMonitor record, Integer pageIndex, Integer pageSize); + + /** + * 根据实体查询列表 + * + * @param record + * @return + */ + List getList(SysMonitor record); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + SysMonitor getById(Long id); + + /** + * 保存或更新实体 + * + * @param record + */ + void saveOrUpdate(SysMonitor record); + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/SysMonitorServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/SysMonitorServiceImpl.java new file mode 100644 index 000000000..f5a994177 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/SysMonitorServiceImpl.java @@ -0,0 +1,59 @@ +package com.iformall.service.impl; + +import java.util.*; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.SysMonitor; +import com.iformall.mapper.SysMonitorMapper; +import com.iformall.service.SysMonitorService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.iformall.common.IdWorker; + +@Service +public class SysMonitorServiceImpl implements SysMonitorService { + + @Autowired + SysMonitorMapper sysMonitorMapper; + + + @Override + public PageInfo listAsPage(SysMonitor record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> sysMonitorMapper.findList(record)); + } + + @Override + public List getList(SysMonitor record) { + return sysMonitorMapper.findList(record); + } + + @Override + public SysMonitor getById(Long id) { + return sysMonitorMapper.selectByPrimaryKey(id); + } + + @Override + public void saveOrUpdate(SysMonitor record) { + if (record.getId() == null) { + //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + sysMonitorMapper.insertSelective(record); + } else { + sysMonitorMapper.updateByPrimaryKeySelective(record); + } + } + + @Override + public void deleteById(Long id) { + sysMonitorMapper.deleteByPrimaryKey(id); + } + + + + + + + + +} diff --git a/mallinkService/src/main/resources/mapper/SysMonitorMapper.xml b/mallinkService/src/main/resources/mapper/SysMonitorMapper.xml new file mode 100644 index 000000000..febd96a9a --- /dev/null +++ b/mallinkService/src/main/resources/mapper/SysMonitorMapper.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + `id`,`name`,`url`,`type`,`deploy`,`err_msg` + + + + where 1 = 1 + + and `id` = #{id} + + + and `name` = #{name} + + + and `url` = #{url} + + + and `type` = #{type} + + + and `deploy` = #{deploy} + + + and `err_msg` like concat('%', #{errMsg},'%') + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + +