From 51a47110f74eb919514313f634e6dbb5159de04e Mon Sep 17 00:00:00 2001 From: maojian Date: Tue, 7 Jan 2025 16:30:24 +0800 Subject: [PATCH 1/2] Initial commit --- README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..07026db --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# appliction_manager + +sba应用管理 \ No newline at end of file From affefae5e6e0e0d69840a7612e874fda2fe77690 Mon Sep 17 00:00:00 2001 From: 55007 <55007@maojian> Date: Tue, 7 Jan 2025 16:31:02 +0800 Subject: [PATCH 2/2] =?UTF-8?q?sba=E5=BA=94=E7=94=A8=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .classpath | 40 ++++++ .gitignore | 2 + .project | 23 ++++ .settings/org.eclipse.core.resources.prefs | 5 + .settings/org.eclipse.jdt.core.prefs | 9 ++ .settings/org.eclipse.m2e.core.prefs | 4 + README.md | 1 + pom.xml | 149 +++++++++++++++++++++ src/main/java/com/bfd/manager/Application.java | 26 ++++ .../java/com/bfd/manager/alter/AdminNotifier.java | 108 +++++++++++++++ src/main/resources/application.yml | 29 ++++ src/main/resources/logback-spring.xml | 36 +++++ src/test/java/com/bfd/AppTest.java | 20 +++ 13 files changed, 452 insertions(+) create mode 100644 .classpath create mode 100644 .gitignore create mode 100644 .project create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs create mode 100644 README.md create mode 100644 pom.xml create mode 100644 src/main/java/com/bfd/manager/Application.java create mode 100644 src/main/java/com/bfd/manager/alter/AdminNotifier.java create mode 100644 src/main/resources/application.yml create mode 100644 src/main/resources/logback-spring.xml create mode 100644 src/test/java/com/bfd/AppTest.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..deb4b51 --- /dev/null +++ b/.classpath @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..58da1f7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target/ +/logs/ diff --git a/.project b/.project new file mode 100644 index 0000000..41551f8 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + appliction_manager + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..365bbd6 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..0ada971 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,9 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.methodParameters=generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..14b697b --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/README.md b/README.md new file mode 100644 index 0000000..4d6e145 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +应用管理中心 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..157fe7a --- /dev/null +++ b/pom.xml @@ -0,0 +1,149 @@ + + + + 4.0.0 + + + org.springframework.boot + spring-boot-starter-parent + 2.2.4.RELEASE + + com.bfd + appliction_manager + 0.0.1-SNAPSHOT + + appliction_manager + + http://www.example.com + + + UTF-8 + 1.8 + 1.8 + + + + + junit + junit + 4.11 + test + + + + de.codecentric + spring-boot-admin-starter-server + 2.2.4 + + + + org.springframework.boot + spring-boot-starter-mail + 2.2.4.RELEASE + + + + org.projectlombok + lombok + 1.18.16 + provided + + + com.alibaba + fastjson + 2.0.17 + + + + + + + + + + maven-clean-plugin + 3.1.0 + + + + maven-resources-plugin + 3.0.2 + + + maven-compiler-plugin + 3.8.0 + + + maven-surefire-plugin + 2.22.1 + + + maven-jar-plugin + 3.0.2 + + + maven-install-plugin + 2.5.2 + + + maven-deploy-plugin + 2.8.2 + + + + maven-site-plugin + 3.7.1 + + + maven-project-info-reports-plugin + 3.0.0 + + + + + org.springframework.boot + spring-boot-maven-plugin + + com.bfd.manager.Application + ZIP + + + ${project.groupId} + ${project.artifactId} + + + + + + + repackage + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.1.1 + + + copy + package + + copy-dependencies + + + jar + jar + runtime + ${project.build.directory}/libs + + + + + + + + diff --git a/src/main/java/com/bfd/manager/Application.java b/src/main/java/com/bfd/manager/Application.java new file mode 100644 index 0000000..e658faa --- /dev/null +++ b/src/main/java/com/bfd/manager/Application.java @@ -0,0 +1,26 @@ +package com.bfd.manager; + + + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import de.codecentric.boot.admin.server.config.EnableAdminServer; + +/** + * 主入口 + * + * @author jian.mao + * @date 2023年7月4日 + * @description + */ +@SpringBootApplication +@EnableAdminServer +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + + +} diff --git a/src/main/java/com/bfd/manager/alter/AdminNotifier.java b/src/main/java/com/bfd/manager/alter/AdminNotifier.java new file mode 100644 index 0000000..c1d6a2c --- /dev/null +++ b/src/main/java/com/bfd/manager/alter/AdminNotifier.java @@ -0,0 +1,108 @@ +package com.bfd.manager.alter; + +import java.util.Arrays; + +import lombok.extern.slf4j.Slf4j; + +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson.JSONObject; + +import reactor.core.publisher.Mono; +import de.codecentric.boot.admin.server.domain.entities.Instance; +import de.codecentric.boot.admin.server.domain.entities.InstanceRepository; +import de.codecentric.boot.admin.server.domain.events.InstanceEvent; +import de.codecentric.boot.admin.server.domain.events.InstanceStatusChangedEvent; +import de.codecentric.boot.admin.server.notify.AbstractStatusChangeNotifier; + +@Component +@Slf4j +public class AdminNotifier extends AbstractStatusChangeNotifier { + + /** + * 消息模板 + */ + private static final String template = "<<<%s>>> \n 【服务名】: %s(%s) \n 【状态】: %s(%s) \n 【服务ip】: %s \n 【详情】: %s"; + + private String titleAlarm = "系统告警"; + + private String titleNotice = "系统通知"; + + private String[] ignoreChanges = new String[]{"UNKNOWN:UP","DOWN:UP","OFFLINE:UP"}; + + public AdminNotifier(InstanceRepository repository) { + super(repository); + } + + @Override + protected boolean shouldNotify(InstanceEvent event, Instance instance) { + if (!(event instanceof InstanceStatusChangedEvent)) { + return false; + } else { + InstanceStatusChangedEvent statusChange = (InstanceStatusChangedEvent)event; + String from = this.getLastStatus(event.getInstance()); + String to = statusChange.getStatusInfo().getStatus(); + return Arrays.binarySearch(this.ignoreChanges, from + ":" + to) < 0 && Arrays.binarySearch(this.ignoreChanges, "*:" + to) < 0 && Arrays.binarySearch(this.ignoreChanges, from + ":*") < 0; + } + } + + + @Override + protected Mono doNotify(InstanceEvent event, Instance instance) { + + return Mono.fromRunnable(() -> { + + if (event instanceof InstanceStatusChangedEvent) { + log.info("Instance {} ({}) is {}", instance.getRegistration().getName(), + event.getInstance(), + ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus()); + + String status = ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus(); + String messageText = null; + switch (status) { + // 健康检查没通过 + case "DOWN": + log.info("发送 健康检查没通过 的通知!"); + messageText = String + .format(template,titleAlarm, instance.getRegistration().getName(), event.getInstance(), + ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus(), "健康检查没通过通知", + instance.getRegistration().getServiceUrl(), JSONObject.toJSONString(instance.getStatusInfo().getDetails())); + log.info(messageText); + break; + // 服务离线 + case "OFFLINE": + log.info("发送 服务离线 的通知!"); + messageText = String + .format(template,titleAlarm, instance.getRegistration().getName(), event.getInstance(), + ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus(), "服务离线通知", + instance.getRegistration().getServiceUrl(), JSONObject.toJSONString(instance.getStatusInfo().getDetails())); + log.info(messageText); + break; + //服务上线 + case "UP": + log.info("发送 服务上线 的通知!"); + messageText = String + .format(template,titleNotice, instance.getRegistration().getName(), event.getInstance(), + ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus(), "服务上线通知", + instance.getRegistration().getServiceUrl(), JSONObject.toJSONString(instance.getStatusInfo().getDetails())); + log.info(messageText); + break; + // 服务未知异常 + case "UNKNOWN": + log.info("发送 服务未知异常 的通知!"); + messageText = String + .format(template,titleAlarm, instance.getRegistration().getName(), event.getInstance(), + ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus(), "服务未知异常通知", + instance.getRegistration().getServiceUrl(), JSONObject.toJSONString(instance.getStatusInfo().getDetails())); + log.info(messageText); + break; + default: + break; + } + } else { + log.info("Instance {} ({}) {}", instance.getRegistration().getName(), event.getInstance(), + event.getType()); + } + }); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..7fe3d17 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,29 @@ +logging: + level: + root: info + path: ./logs +server: + port: 8000 + +# 邮件服务配置 +spring: + mail: + host: intmail.baifendian.com + username: bfd_crawler_alarm@baifendian.com + password: z26Iyf3vMRb5ejrI + properties: + mail: + smtp: + auth: true + ssl: + enable: true + boot: + admin: + monitor: + default-timeout: 30000 + notify: + mail: + enabled: true + to: jian.mao@percent.cn + from: bfd_crawler_alarm@baifendian.com + \ No newline at end of file diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..9f20517 --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,36 @@ + + + + + + + + + true + + ${logging.level} + + + ${logging.path}/appManagerInfo.log + + + ${logging.path}/appManagerInfo.log.%d{yyyy-MM-dd} + 7 + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %line %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + + diff --git a/src/test/java/com/bfd/AppTest.java b/src/test/java/com/bfd/AppTest.java new file mode 100644 index 0000000..7f816c2 --- /dev/null +++ b/src/test/java/com/bfd/AppTest.java @@ -0,0 +1,20 @@ +package com.bfd; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +/** + * Unit test for simple App. + */ +public class AppTest +{ + /** + * Rigorous Test :-) + */ + @Test + public void shouldAnswerWithTrue() + { + assertTrue( true ); + } +}