commit affefae5e6e0e0d69840a7612e874fda2fe77690
Author: 55007 <55007@maojian>
Date: Tue Jan 7 16:31:02 2025 +0800
sba应用管理
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 );
+ }
+}