summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortanghao <default@DESKTOP-7FEGRP2>2020-03-31 12:10:10 +0800
committertanghao <default@DESKTOP-7FEGRP2>2020-03-31 12:10:10 +0800
commit3dc0c0cf67d360a1f50a80a81fa8d2d5eeca33e6 (patch)
treeea64586b0c9aaaeb676cf8b8d058af0d174cae5a
parentdabeb03bc9db11409ebc328651a6cc4c20637509 (diff)
parentfb5416ef288bac5a455e72084cb0e393465477b0 (diff)
Merge remote-tracking branch 'origin/snmp' into dev
-rw-r--r--.classpath6
-rw-r--r--.settings/org.eclipse.core.resources.prefs1
-rw-r--r--pom.xml695
-rw-r--r--src/main/java/com/nis/ConfagentMain.java34
-rw-r--r--src/main/java/com/nis/NzConfagentApplication.java23
-rw-r--r--src/main/java/com/nis/controller/HealthyController.java19
-rw-r--r--src/main/java/com/nis/controller/MetricsController.java25
-rw-r--r--src/main/java/com/nis/dao/AlertRuleDao.java3
-rw-r--r--src/main/java/com/nis/dao/ConfEventDao.java3
-rw-r--r--src/main/java/com/nis/dao/EndpointDao.java7
-rw-r--r--src/main/java/com/nis/dao/PromserverDao.java2
-rw-r--r--src/main/java/com/nis/dao/SysConfigDao.java3
-rw-r--r--src/main/java/com/nis/entity/AlertManagerEnum.java8
-rw-r--r--src/main/java/com/nis/entity/ConfagentMetrics.java65
-rw-r--r--src/main/java/com/nis/entity/Endpoint.java7
-rw-r--r--src/main/java/com/nis/entity/MetricsDto.java30
-rw-r--r--src/main/java/com/nis/entity/Module.java34
-rw-r--r--src/main/java/com/nis/entity/ModuleTypeEnum.java14
-rw-r--r--src/main/java/com/nis/entity/Promserver.java12
-rw-r--r--src/main/java/com/nis/job/ConfagentJob.java186
-rw-r--r--src/main/java/com/nis/job/ConfagentJobConfig.java54
-rw-r--r--src/main/java/com/nis/job/ConfagentUptimeJob.java19
-rw-r--r--src/main/java/com/nis/server/SNMPTrapServer.java29
-rw-r--r--src/main/java/com/nis/service/EndpointService.java11
-rw-r--r--src/main/java/com/nis/service/impl/EndpointServiceImpl.java12
-rw-r--r--src/main/java/com/nis/util/ConfagentConfig.java46
-rw-r--r--src/main/java/com/nis/util/ConfigUtil.java6
-rw-r--r--src/main/java/com/nis/util/Constant.java75
-rw-r--r--src/main/java/com/nis/util/MybatisPlusConfig.java76
-rw-r--r--src/main/java/com/nis/util/RedisConfig.java44
-rw-r--r--src/main/java/com/nis/util/SpringContextUtils.java51
-rw-r--r--src/main/java/com/nis/util/YamlUtil.java18
-rw-r--r--src/main/resources/application-dev.yml49
-rw-r--r--src/main/resources/application-prod.yml34
-rw-r--r--src/main/resources/application-test.yml34
-rw-r--r--src/main/resources/application.yml100
-rw-r--r--src/main/resources/banner.txt5
-rw-r--r--src/main/resources/confagent.properties20
-rw-r--r--src/main/resources/log4j.properties26
-rw-r--r--src/main/resources/logback-spring.xml110
-rw-r--r--src/main/resources/mapper/EndpointDao.xml37
-rw-r--r--src/main/resources/mapper/PromserverDao.xml2
-rw-r--r--src/main/resources/spring.xml137
43 files changed, 1524 insertions, 648 deletions
diff --git a/.classpath b/.classpath
index 19bc568..f347c9d 100644
--- a/.classpath
+++ b/.classpath
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="src" output="src/main/webapp/WEB-INF/classes" path="src/main/java">
+ <classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
- <classpathentry excluding="**" kind="src" output="src/main/webapp/WEB-INF/classes" path="src/main/resources">
+ <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
@@ -28,5 +28,5 @@
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
- <classpathentry kind="output" path="src/main/webapp/WEB-INF/classes"/>
+ <classpathentry kind="output" path="target/classes"/>
</classpath>
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
index cf6931b..365bbd6 100644
--- a/.settings/org.eclipse.core.resources.prefs
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -1,4 +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/<project>=UTF-8
diff --git a/pom.xml b/pom.xml
index da3bfa5..8dc9cef 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,123 +1,200 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.nis</groupId>
- <artifactId>nz-confagent</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-parent</artifactId>
+ <version>2.1.3.RELEASE</version>
+ <relativePath/> <!-- lookup parent from repository -->
+ </parent>
+ <groupId>com.nis</groupId>
+ <artifactId>nz-confagent</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <name>nz-confagent</name>
+ <description>confagent</description>
- <!-- 项目属性 -->
<properties>
-
- <!-- main version setting -->
- <spring.version>4.1.9.RELEASE</spring.version>
- <validator.version>5.2.4.Final</validator.version>
- <mybatis.version>3.2.8</mybatis.version>
- <mybatis-spring.version>1.2.3</mybatis-spring.version>
- <druid.version>1.0.18</druid.version>
- <ehcache.version>2.6.11</ehcache.version>
- <ehcache-web.version>2.0.4</ehcache-web.version>
- <shiro.version>1.2.3</shiro.version>
- <sitemesh.version>2.4.2</sitemesh.version>
- <activiti.version>5.21.0</activiti.version>
- <quartz.version>2.3.0</quartz.version>
- <!-- tools version setting -->
- <slf4j.version>1.7.7</slf4j.version>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+ <java.version>1.8</java.version>
+ <junit.version>4.12</junit.version>
+ <jedis.version>2.9.0</jedis.version>
+ <druid.version>1.1.13</druid.version>
+ <mybatisplus.version>3.0.7.1</mybatisplus.version>
+ <mysql.version>5.1.38</mysql.version>
+ <mssql.version>4.0</mssql.version>
+ <oracle.version>11.2.0.3</oracle.version>
+ <commons.lang.version>2.6</commons.lang.version>
+ <commons.fileupload.version>1.3.1</commons.fileupload.version>
+ <commons.collections.version>3.2.2</commons.collections.version>
+ <commons.beanutils.version>1.9.3</commons.beanutils.version>
+ <commons.io.version>2.5</commons.io.version>
+ <commons.codec.version>1.10</commons.codec.version>
+ <fastjson.version>1.2.45</fastjson.version>
+ <joda.time.version>2.9.9</joda.time.version>
+ <lombok.version>1.18.4</lombok.version>
+ <swagger.version>2.7.0</swagger.version>
+ <quartz.version>2.3.0</quartz.version>
+ <shiro.version>1.4.0</shiro.version>
+ <kaptcha.version>0.0.9</kaptcha.version>
+ <qiniu.version>[7.2.0, 7.2.99]</qiniu.version>
+ <aliyun.oss.version>2.5.0</aliyun.oss.version>
+ <qcloud.cos.version>4.4</qcloud.cos.version>
+ <swagger.version>2.7.0</swagger.version>
<commons-lang3.version>3.3.2</commons-lang3.version>
- <commons-io.version>2.4</commons-io.version>
- <commons-codec.version>1.9</commons-codec.version>
- <commons-fileupload.version>1.3.1</commons-fileupload.version>
- <commons-beanutils.version>1.9.1</commons-beanutils.version>
- <jackson.version>2.9.8</jackson.version>
- <fastjson.version>1.1.40</fastjson.version>
- <guava.version>17.0</guava.version>
-
- <!-- jdbc driver setting -->
- <mysql.driver.version>5.1.30</mysql.driver.version>
- <mssql.driver.version>1.3.1</mssql.driver.version>
- <pgsql.driver.version>42.2.5</pgsql.driver.version>
-
- <!-- environment setting -->
- <jdk.version>1.8</jdk.version>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-
</properties>
- <!-- 设定主仓库,按设定顺序进行查找。
- <repositories>
-
- <repository>
- <id>jeesite-repos</id>
- <name>Jeesite Repository</name>
- <url>http://maven.aliyun.com/nexus/content/groups/public</url>
- </repository>
-
- </repositories> -->
-
- <!-- 设定插件仓库
- <pluginRepositories>
-
- <pluginRepository>
- <id>jeesite-repos</id>
- <name>Jeesite Repository</name>
- <url>http://maven.aliyun.com/nexus/content/groups/public</url>
- </pluginRepository>
-
- </pluginRepositories> -->
- <!-- 依赖项定义 -->
<dependencies>
<dependency>
- <groupId>org.yaml</groupId>
- <artifactId>snakeyaml</artifactId>
- <version>1.23</version>
- </dependency>
- <!-- SPRING begin -->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-core</artifactId>
- <version>${spring.version}</version>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-beans</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context-support</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-aop</artifactId>
- <version>${spring.version}</version>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${junit.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-web</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-aop</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context-support</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-data-redis</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-configuration-processor</artifactId>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>redis.clients</groupId>
+ <artifactId>jedis</artifactId>
+ <version>${jedis.version}</version>
+ </dependency>
+ <!-- mysql驱动 -->
+ <dependency>
+ <groupId>mysql</groupId>
+ <artifactId>mysql-connector-java</artifactId>
+ <version>${mysql.version}</version>
+ </dependency>
+ <!-- oracle驱动 -->
+ <dependency>
+ <groupId>com.oracle</groupId>
+ <artifactId>ojdbc6</artifactId>
+ <version>${oracle.version}</version>
+ </dependency>
+ <!-- mssql驱动 -->
+ <dependency>
+ <groupId>com.microsoft.sqlserver</groupId>
+ <artifactId>sqljdbc4</artifactId>
+ <version>${mssql.version}</version>
+ </dependency>
+ <!-- postgresql驱动 -->
+ <dependency>
+ <groupId>org.postgresql</groupId>
+ <artifactId>postgresql</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.alibaba</groupId>
+ <artifactId>druid-spring-boot-starter</artifactId>
+ <version>${druid.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.baomidou</groupId>
+ <artifactId>mybatis-plus-boot-starter</artifactId>
+ <version>${mybatisplus.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>com.baomidou</groupId>
+ <artifactId>mybatis-plus-generator</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>com.alibaba</groupId>
+ <artifactId>fastjson</artifactId>
+ <version>${fastjson.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>${commons.lang.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-fileupload</groupId>
+ <artifactId>commons-fileupload</artifactId>
+ <version>${commons.fileupload.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>${commons.collections.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-beanutils</groupId>
+ <artifactId>commons-beanutils</artifactId>
+ <version>${commons.beanutils.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>${commons.io.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>${commons.codec.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>joda-time</groupId>
+ <artifactId>joda-time</artifactId>
+ <version>${joda.time.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.projectlombok</groupId>
+ <artifactId>lombok</artifactId>
+ <version>${lombok.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.springfox</groupId>
+ <artifactId>springfox-swagger2</artifactId>
+ <version>${swagger.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.springfox</groupId>
+ <artifactId>springfox-swagger-ui</artifactId>
+ <version>${swagger.version}</version>
+ </dependency>
+
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-data-redis</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-freemarker</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-tx</artifactId>
- <version>${spring.version}</version>
- </dependency>
-
- <dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>${quartz.version}</version>
- <!-- <exclusions>
+ <exclusions>
<exclusion>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
@@ -126,334 +203,202 @@
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP-java6</artifactId>
</exclusion>
- </exclusions> -->
- </dependency>
- <!-- spring orm -->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-orm</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-jdbc</artifactId>
- <version>${spring.version}</version>
+ </exclusions>
</dependency>
-
- <!-- bean validate -->
<dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-validator</artifactId>
- <version>${validator.version}</version>
+ <groupId>org.apache.shiro</groupId>
+ <artifactId>shiro-core</artifactId>
+ <version>${shiro.version}</version>
</dependency>
- <!-- SPRING end -->
-
- <!-- AOP begin -->
<dependency>
- <groupId>org.aspectj</groupId>
- <artifactId>aspectjrt</artifactId>
- <version>1.7.4</version>
+ <groupId>org.apache.shiro</groupId>
+ <artifactId>shiro-spring</artifactId>
+ <version>${shiro.version}</version>
</dependency>
<dependency>
- <groupId>org.aspectj</groupId>
- <artifactId>aspectjweaver</artifactId>
- <version>1.7.4</version>
+ <groupId>com.github.axet</groupId>
+ <artifactId>kaptcha</artifactId>
+ <version>${kaptcha.version}</version>
</dependency>
<dependency>
- <groupId>cglib</groupId>
- <artifactId>cglib</artifactId>
- <version>3.1</version>
+ <groupId>io.springfox</groupId>
+ <artifactId>springfox-swagger2</artifactId>
+ <version>${swagger.version}</version>
</dependency>
- <!-- AOP end -->
-
- <!-- PERSISTENCE begin -->
-
- <!-- MyBatis -->
<dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis</artifactId>
- <version>${mybatis.version}</version>
+ <groupId>io.springfox</groupId>
+ <artifactId>springfox-swagger-ui</artifactId>
+ <version>${swagger.version}</version>
</dependency>
<dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis-spring</artifactId>
- <version>${mybatis-spring.version}</version>
+ <groupId>com.qiniu</groupId>
+ <artifactId>qiniu-java-sdk</artifactId>
+ <version>${qiniu.version}</version>
</dependency>
-
- <!-- connection pool -->
<dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid</artifactId>
- <version>${druid.version}</version>
+ <groupId>com.aliyun.oss</groupId>
+ <artifactId>aliyun-sdk-oss</artifactId>
+ <version>${aliyun.oss.version}</version>
</dependency>
-
- <!-- jdbc driver -->
<dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>${mysql.driver.version}</version>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>net.sourceforge.jtds</groupId>
- <artifactId>jtds</artifactId>
- <version>${mssql.driver.version}</version>
- <scope>runtime</scope>
+ <groupId>com.qcloud</groupId>
+ <artifactId>cos_api</artifactId>
+ <version>${qcloud.cos.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ <version>5.1.5.RELEASE</version>
+ <scope>compile</scope>
+ </dependency>
<dependency>
- <groupId>org.postgresql</groupId>
- <artifactId>postgresql</artifactId>
- <version>${pgsql.driver.version}</version>
- </dependency>
-
- <!-- PERSISTENCE end -->
-
-
- <!-- LOGGING begin -->
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>${slf4j.version}</version>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ <version>5.1.5.RELEASE</version>
+ <scope>compile</scope>
</dependency>
<dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>${slf4j.version}</version>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-test</artifactId>
+ <version>2.1.3.RELEASE</version>
+ <scope>compile</scope>
</dependency>
- <!-- common-logging 实际调用slf4j -->
<dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- <version>${slf4j.version}</version>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>RELEASE</version>
+ <scope>compile</scope>
</dependency>
- <!-- java.util.logging 实际调用slf4j -->
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jul-to-slf4j</artifactId>
- <version>${slf4j.version}</version>
- </dependency>
- <!-- LOGGING end -->
-
- <!-- GENERAL UTILS begin -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
+ <dependency>
+ <groupId>com.google.code.gson</groupId>
+ <artifactId>gson</artifactId>
+ <version>2.8.5</version>
+ </dependency>
<dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- <version>${commons-io.version}</version>
- </dependency>
- <dependency>
- <groupId>commons-codec</groupId>
- <artifactId>commons-codec</artifactId>
- <version>${commons-codec.version}</version>
- </dependency>
- <dependency>
- <groupId>commons-fileupload</groupId>
- <artifactId>commons-fileupload</artifactId>
- <version>${commons-fileupload.version}</version>
- </dependency>
- <dependency>
- <groupId>commons-beanutils</groupId>
- <artifactId>commons-beanutils</artifactId>
- <version>${commons-beanutils.version}</version>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
+ <groupId>com.jcraft</groupId>
+ <artifactId>jsch</artifactId>
+ <version>0.1.54</version>
</dependency>
-
- <!-- google java lib -->
<dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- <version>${guava.version}</version>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-web</artifactId>
</dependency>
-
- <!-- jackson json -->
<dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-core</artifactId>
- <version>${jackson.version}</version>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-websocket</artifactId>
+ <version>2.0.4.RELEASE</version>
</dependency>
<dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <version>${jackson.version}</version>
+ <groupId>commons-net</groupId>
+ <artifactId>commons-net</artifactId>
+ <version>3.6</version>
</dependency>
+ <dependency>
+ <groupId>org.yaml</groupId>
+ <artifactId>snakeyaml</artifactId>
+ <version>1.25</version>
+ </dependency>
+
+ <!-- prometheus java sdk -->
<dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-annotations</artifactId>
- <version>${jackson.version}</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.module</groupId>
- <artifactId>jackson-module-jaxb-annotations</artifactId>
- <version>${jackson.version}</version>
- </dependency>
-
- <!-- fastjson json -->
- <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId>
- <version>${fastjson.version}</version>
- </dependency>
-
-
- <!-- snmp -->
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-actuator</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.micrometer</groupId>
+ <artifactId>micrometer-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.micrometer</groupId>
+ <artifactId>micrometer-registry-prometheus</artifactId>
+ </dependency>
+
+ <!-- snmp -->
<dependency>
<groupId>org.snmp4j</groupId>
<artifactId>snmp4j</artifactId>
<version>2.6.2</version>
</dependency>
-
- <!-- TEST begin -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.11</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <!-- TEST end -->
-
- <dependency>
- <groupId>cn.hutool</groupId>
- <artifactId>hutool-all</artifactId>
- <version>4.1.19</version>
- </dependency>
-
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-web</artifactId>
- <version>4.0.4.RELEASE</version>
- <scope>compile</scope>
- </dependency>
-
</dependencies>
<build>
- <outputDirectory>${project.basedir}/src/main/webapp/WEB-INF/classes/</outputDirectory>
<finalName>${project.artifactId}</finalName>
<plugins>
- <!-- Compiler 插件, 设定JDK版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
- <version>3.5.1</version>
- <configuration>
- <source>${jdk.version}</source>
- <target>${jdk.version}</target>
- <showWarnings>true</showWarnings>
- </configuration>
- </plugin>
-
- <!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>2.4</version>
+ <version>3.2</version>
<configuration>
- <encoding>${project.build.sourceEncoding}</encoding>
+ <source>8</source>
+ <target>8</target>
+ <encoding>UTF-8</encoding>
</configuration>
</plugin>
-
<plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-shade-plugin</artifactId>
- <version> 1.7.1</version>
- <executions>
- <execution>
- <phase>package</phase>
- <goals>
- <goal>shade</goal>
- </goals>
- <configuration>
- <transformers>
- <transformer
- implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
- <resource>META-INF/spring.handlers</resource>
- </transformer>
- <transformer
- implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
- <resource>META-INF/spring.schemas</resource>
- </transformer>
- <transformer
- implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
- <mainClass>com.nis.ConfagentMain</mainClass>
- </transformer>
- </transformers>
- </configuration>
- </execution>
- </executions>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
-
- <!-- Eclipse 插件 -->
+ <!-- 跳过单元测试 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-eclipse-plugin</artifactId>
- <version>2.9</version>
+ <artifactId>maven-surefire-plugin</artifactId>
<configuration>
- <downloadSources>${downloadSources}</downloadSources>
- <downloadJavadocs>false</downloadJavadocs>
- <wtpversion>2.0</wtpversion>
- <jeeversion>5.0</jeeversion>
- <!-- <jeeversion>6.0</jeeversion> -->
- <additionalConfig>
- <file>
- <name>.settings/org.eclipse.core.resources.prefs</name>
- <content>
- <![CDATA[eclipse.preferences.version=1${line.separator}encoding/<project>=${project.build.sourceEncoding}${line.separator}]]>
- </content>
- </file>
- </additionalConfig>
- <additionalProjectnatures>
- <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
- </additionalProjectnatures>
+ <skipTests>true</skipTests>
</configuration>
</plugin>
-
-
- <!-- resource插件 -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-resources-plugin</artifactId>
- <version>2.7</version>
- </plugin>
-
- <!-- install插件 -->
<plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-install-plugin</artifactId>
- <version>2.5.2</version>
- </plugin>
-
- <!-- clean插件 -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-clean-plugin</artifactId>
- <version>2.6.1</version>
- </plugin>
-
- <!-- ant插件 -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-antrun-plugin</artifactId>
- <version>1.8</version>
- </plugin>
-
- <!-- dependency插件 -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>2.10</version>
+ <groupId>com.spotify</groupId>
+ <artifactId>docker-maven-plugin</artifactId>
+ <version>0.4.14</version>
+ <configuration>
+ <imageName>nz/confagent</imageName>
+ <dockerDirectory>${project.basedir}</dockerDirectory>
+ <resources>
+ <resource>
+ <targetPath>/</targetPath>
+ <directory>${project.build.directory}</directory>
+ <include>${project.build.finalName}.jar</include>
+ </resource>
+ </resources>
+ </configuration>
+ <!-- 运行命令 mvn clean package docker:build 打包并生成docker镜像 -->
</plugin>
</plugins>
</build>
-
-</project> \ No newline at end of file
+
+ <!-- 阿里云maven仓库 -->
+ <repositories>
+ <repository>
+ <id>public</id>
+ <name>aliyun nexus</name>
+ <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>public</id>
+ <name>aliyun nexus</name>
+ <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </pluginRepository>
+ </pluginRepositories>
+</project>
diff --git a/src/main/java/com/nis/ConfagentMain.java b/src/main/java/com/nis/ConfagentMain.java
deleted file mode 100644
index 012cb74..0000000
--- a/src/main/java/com/nis/ConfagentMain.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.nis;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.apache.log4j.PropertyConfigurator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-import org.springframework.context.support.FileSystemXmlApplicationContext;
-
-import com.nis.server.SNMPTrapServer;
-
-
-/*@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(locations="classpath:spring.xml")*/
-public class ConfagentMain {
- private static Logger logger = LoggerFactory.getLogger(ConfagentMain.class);
- public static void main(String[] args) {
-
- // 如果放到linux环境 打包下需要注释掉 同时解开下面注释内容 进行打包
- ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring.xml");
-
- PropertyConfigurator.configure(System.getProperty("user.dir") + File.separator + "log4j.properties");
-
- // 如果放到linux环境 打包下需要解开注释
- /* ApplicationContext ctx = new FileSystemXmlApplicationContext(
- "file:" + System.getProperty("confagent.dir")
- + File.separator+ "spring.xml");*/
-
- logger.info("initContext successfully");
- }
-}
diff --git a/src/main/java/com/nis/NzConfagentApplication.java b/src/main/java/com/nis/NzConfagentApplication.java
new file mode 100644
index 0000000..0237694
--- /dev/null
+++ b/src/main/java/com/nis/NzConfagentApplication.java
@@ -0,0 +1,23 @@
+package com.nis;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import io.micrometer.core.instrument.MeterRegistry;
+
+@SpringBootApplication
+public class NzConfagentApplication {
+
+ public static void main(String[] args) {
+
+ SpringApplication.run(NzConfagentApplication.class, args);
+ }
+
+ @Bean
+ MeterRegistryCustomizer<MeterRegistry> configurer(@Value("Confagent") String applicationName) {
+ return (registry) -> registry.config().commonTags("application", applicationName);
+ }
+
+}
diff --git a/src/main/java/com/nis/controller/HealthyController.java b/src/main/java/com/nis/controller/HealthyController.java
new file mode 100644
index 0000000..d1bb69e
--- /dev/null
+++ b/src/main/java/com/nis/controller/HealthyController.java
@@ -0,0 +1,19 @@
+package com.nis.controller;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class HealthyController{
+
+ @GetMapping("/healthy")
+ public Map healthy() {
+ HashMap<String, Object> map =new HashMap<String,Object>();
+ map.put("msg", "success");
+ map.put("code", 200);
+ return map;
+ }
+}
diff --git a/src/main/java/com/nis/controller/MetricsController.java b/src/main/java/com/nis/controller/MetricsController.java
new file mode 100644
index 0000000..4f56b78
--- /dev/null
+++ b/src/main/java/com/nis/controller/MetricsController.java
@@ -0,0 +1,25 @@
+package com.nis.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.nis.entity.ConfagentMetrics;
+
+import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
+
+@RestController
+public class MetricsController{
+ @Autowired
+ private ConfagentMetrics confagentMetrics;
+
+ @RequestMapping(value = "/metrics", method= RequestMethod.GET)
+ public ModelAndView counter1() {
+ confagentMetrics.bindTo(new SimpleMeterRegistry());
+ ModelAndView mv = new ModelAndView();
+ mv.setViewName("redirect:/prometheus");
+ return mv;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/com/nis/dao/AlertRuleDao.java b/src/main/java/com/nis/dao/AlertRuleDao.java
index bf7ee7e..9accd18 100644
--- a/src/main/java/com/nis/dao/AlertRuleDao.java
+++ b/src/main/java/com/nis/dao/AlertRuleDao.java
@@ -2,8 +2,11 @@ package com.nis.dao;
import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+
import com.nis.entity.AlertRule;
+@Mapper
public interface AlertRuleDao {
List<AlertRule> selectList();
diff --git a/src/main/java/com/nis/dao/ConfEventDao.java b/src/main/java/com/nis/dao/ConfEventDao.java
index a29d09c..ab240cf 100644
--- a/src/main/java/com/nis/dao/ConfEventDao.java
+++ b/src/main/java/com/nis/dao/ConfEventDao.java
@@ -2,8 +2,11 @@ package com.nis.dao;
import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+
import com.nis.entity.ConfEvent;
+@Mapper
public interface ConfEventDao {
List<ConfEvent> selectList();
diff --git a/src/main/java/com/nis/dao/EndpointDao.java b/src/main/java/com/nis/dao/EndpointDao.java
index f3025ef..7ef31d7 100644
--- a/src/main/java/com/nis/dao/EndpointDao.java
+++ b/src/main/java/com/nis/dao/EndpointDao.java
@@ -2,10 +2,17 @@ package com.nis.dao;
import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+
import com.nis.entity.Endpoint;
+import com.nis.entity.MetricsDto;
+@Mapper
public interface EndpointDao {
List<Endpoint> selectExporterInfos(Integer idcId);
+ List<MetricsDto> selectEndpointMetrics();
+
+ List<Endpoint> selectPromServerInfo(Integer promserverId);
}
diff --git a/src/main/java/com/nis/dao/PromserverDao.java b/src/main/java/com/nis/dao/PromserverDao.java
index e3820c7..bfcc7e1 100644
--- a/src/main/java/com/nis/dao/PromserverDao.java
+++ b/src/main/java/com/nis/dao/PromserverDao.java
@@ -2,10 +2,12 @@ package com.nis.dao;
import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.nis.entity.Promserver;
+@Mapper
public interface PromserverDao {
List<Promserver> selectList();
diff --git a/src/main/java/com/nis/dao/SysConfigDao.java b/src/main/java/com/nis/dao/SysConfigDao.java
index bb1d6ff..e4ddb04 100644
--- a/src/main/java/com/nis/dao/SysConfigDao.java
+++ b/src/main/java/com/nis/dao/SysConfigDao.java
@@ -2,8 +2,11 @@ package com.nis.dao;
import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+
import com.nis.entity.SysConfig;
+@Mapper
public interface SysConfigDao {
List<SysConfig> selectList();
diff --git a/src/main/java/com/nis/entity/AlertManagerEnum.java b/src/main/java/com/nis/entity/AlertManagerEnum.java
index 424d5a7..e3d1f54 100644
--- a/src/main/java/com/nis/entity/AlertManagerEnum.java
+++ b/src/main/java/com/nis/entity/AlertManagerEnum.java
@@ -1,8 +1,12 @@
package com.nis.entity;
public enum AlertManagerEnum {
- Alert_api("alert_api"),
- Alert_path_prefix("alert_path_prefix");
+ ALERT_API("alert_api"),
+ ALERT_PATH_PREFIX("alert_path_prefix"),
+ CONFAGENT_API("confagent_api"),
+ CONFAGENT_PORT("confagent_port"),
+ CONFAGENT_PATH("confagent_path");
+
private final String paramkey;
private AlertManagerEnum(String paramkey) {
this.paramkey = paramkey;
diff --git a/src/main/java/com/nis/entity/ConfagentMetrics.java b/src/main/java/com/nis/entity/ConfagentMetrics.java
new file mode 100644
index 0000000..764ff35
--- /dev/null
+++ b/src/main/java/com/nis/entity/ConfagentMetrics.java
@@ -0,0 +1,65 @@
+package com.nis.entity;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.nis.service.EndpointService;
+
+import io.micrometer.core.annotation.Timed;
+import io.micrometer.core.instrument.Counter;
+import io.micrometer.core.instrument.Gauge;
+import io.micrometer.core.instrument.MeterRegistry;
+import io.micrometer.core.instrument.Timer;
+import io.micrometer.core.instrument.binder.MeterBinder;
+
+@Component
+public class ConfagentMetrics implements MeterBinder {
+
+ public Counter snmpCounter;
+ public Map<String, Double> map;
+ public Counter confagentUpTimeCounter;
+ @Autowired
+ private EndpointService endpointService;
+
+ ConfagentMetrics() {
+ map = new HashMap<>();
+ }
+
+ @Override
+ public void bindTo(MeterRegistry meterRegistry) {
+
+ this.snmpCounter = Counter.builder("nz_confagent_snmptrap_nums")
+ .tags(new String[]{"name", "snmpNums"})
+ .description("snmp alert count").register(meterRegistry);
+ this.confagentUpTimeCounter = Counter.builder("nz_confagent_up_time")
+ .tags(new String[]{"name", "upTime"})
+ .description("confagent up time").register(meterRegistry);
+ if(map==null) {
+ map=new HashMap<>();
+ }
+ List<MetricsDto> endpointMetrics = endpointService.queryEndpointMetrics();
+ if(endpointMetrics!=null && endpointMetrics.size()>0) {
+ for(int i=0;i<endpointMetrics.size();i++) {
+ // 这里将统计值扔进map操作是避免弱引用 统计结果出现NaN
+ map.put("endpointNums"+i, endpointMetrics.get(i).getTotal());
+ String key="endpointNums"+i;
+ Gauge.builder("nz_confagent_endpoint_nums", map, x -> x.get(key))
+ .tags("id",endpointMetrics.get(i).getId().toString(),"host",endpointMetrics.get(i).getHost())
+ .description("Alert message statistics info")
+ .register(meterRegistry);
+ }
+ }else {
+ map.put("endpointNums", 0.0);
+ String key="endpointNums";
+ Gauge.builder("nz_confagent_endpoint_nums", map, x -> x.get(key))
+ .tags("id","null","host","null")
+ .description("Alert message statistics info")
+ .register(meterRegistry);
+ }
+ }
+}
diff --git a/src/main/java/com/nis/entity/Endpoint.java b/src/main/java/com/nis/entity/Endpoint.java
index 652bfca..bc6b4e4 100644
--- a/src/main/java/com/nis/entity/Endpoint.java
+++ b/src/main/java/com/nis/entity/Endpoint.java
@@ -16,6 +16,7 @@ public class Endpoint implements Serializable{
private Idc idc;
private Integer idcId;
private Project project;
+ private Promserver promserver;
public Integer getId() {
return id;
}
@@ -88,5 +89,11 @@ public class Endpoint implements Serializable{
public void setProject(Project project) {
this.project = project;
}
+ public Promserver getPromserver() {
+ return promserver;
+ }
+ public void setPromserver(Promserver promserver) {
+ this.promserver = promserver;
+ }
}
diff --git a/src/main/java/com/nis/entity/MetricsDto.java b/src/main/java/com/nis/entity/MetricsDto.java
new file mode 100644
index 0000000..4acd2da
--- /dev/null
+++ b/src/main/java/com/nis/entity/MetricsDto.java
@@ -0,0 +1,30 @@
+package com.nis.entity;
+
+import java.io.Serializable;
+
+public class MetricsDto implements Serializable{
+
+ private Integer id;
+ private String host;
+ private Double total;
+
+ public Integer getId() {
+ return id;
+ }
+ public void setId(Integer id) {
+ this.id = id;
+ }
+ public String getHost() {
+ return host;
+ }
+ public void setHost(String host) {
+ this.host = host;
+ }
+ public Double getTotal() {
+ return total;
+ }
+ public void setTotal(Double total) {
+ this.total = total;
+ }
+
+}
diff --git a/src/main/java/com/nis/entity/Module.java b/src/main/java/com/nis/entity/Module.java
index e2eb753..f617fa2 100644
--- a/src/main/java/com/nis/entity/Module.java
+++ b/src/main/java/com/nis/entity/Module.java
@@ -11,7 +11,11 @@ public class Module implements Serializable{
private String param;
private String path;
private String remark;
- private Boolean buildIn;
+ private Integer buildIn;
+ private String seq;
+ private String snmpParam;
+ private String snmpYml;
+ private String type;
public Integer getId() {
return id;
}
@@ -54,10 +58,34 @@ public class Module implements Serializable{
public void setRemark(String remark) {
this.remark = remark;
}
- public Boolean getBuildIn() {
+ public Integer getBuildIn() {
return buildIn;
}
- public void setBuildIn(Boolean buildIn) {
+ public void setBuildIn(Integer buildIn) {
this.buildIn = buildIn;
}
+ public String getSeq() {
+ return seq;
+ }
+ public void setSeq(String seq) {
+ this.seq = seq;
+ }
+ public String getSnmpParam() {
+ return snmpParam;
+ }
+ public void setSnmpParam(String snmpParam) {
+ this.snmpParam = snmpParam;
+ }
+ public String getSnmpYml() {
+ return snmpYml;
+ }
+ public void setSnmpYml(String snmpYml) {
+ this.snmpYml = snmpYml;
+ }
+ public String getType() {
+ return type;
+ }
+ public void setType(String type) {
+ this.type = type;
+ }
}
diff --git a/src/main/java/com/nis/entity/ModuleTypeEnum.java b/src/main/java/com/nis/entity/ModuleTypeEnum.java
new file mode 100644
index 0000000..3709784
--- /dev/null
+++ b/src/main/java/com/nis/entity/ModuleTypeEnum.java
@@ -0,0 +1,14 @@
+package com.nis.entity;
+
+public enum ModuleTypeEnum {
+ HTTP("http"),
+ SNMP("snmp");
+
+ private final String paramkey;
+ private ModuleTypeEnum(String paramkey) {
+ this.paramkey = paramkey;
+ }
+ public String getValue() {
+ return paramkey;
+ }
+}
diff --git a/src/main/java/com/nis/entity/Promserver.java b/src/main/java/com/nis/entity/Promserver.java
index 6e509bd..7cc29fe 100644
--- a/src/main/java/com/nis/entity/Promserver.java
+++ b/src/main/java/com/nis/entity/Promserver.java
@@ -12,7 +12,7 @@ public class Promserver implements Serializable{
private Integer port;
private Integer type;
private Boolean status;
- private Date lastUpdate;
+ private Date checkTime;
public Integer getId() {
return id;
}
@@ -49,10 +49,10 @@ public class Promserver implements Serializable{
public void setStatus(Boolean status) {
this.status = status;
}
- public Date getLastUpdate() {
- return lastUpdate;
+ public Date getCheckTime() {
+ return checkTime;
+ }
+ public void setCheckTime(Date checkTime) {
+ this.checkTime = checkTime;
}
- public void setLastUpdate(Date lastUpdate) {
- this.lastUpdate = lastUpdate;
- }
}
diff --git a/src/main/java/com/nis/job/ConfagentJob.java b/src/main/java/com/nis/job/ConfagentJob.java
index 68fa4cb..b7b3a72 100644
--- a/src/main/java/com/nis/job/ConfagentJob.java
+++ b/src/main/java/com/nis/job/ConfagentJob.java
@@ -5,15 +5,27 @@ import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.lang3.StringUtils;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.HashOperations;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+import org.springframework.scheduling.quartz.QuartzJobBean;
import com.alibaba.fastjson.JSON;
import com.nis.entity.AlertManagerEnum;
import com.nis.entity.AlertRule;
import com.nis.entity.Endpoint;
+import com.nis.entity.Module;
+import com.nis.entity.ModuleTypeEnum;
import com.nis.entity.Promserver;
import com.nis.entity.SysConfig;
import com.nis.service.AlertRuleService;
@@ -22,6 +34,7 @@ import com.nis.service.EndpointService;
import com.nis.service.PromserverService;
import com.nis.service.SysConfigService;
import com.nis.util.ConfigUtil;
+import com.nis.util.Constant;
import com.nis.util.PropertyPlaceholder;
import com.nis.util.YamlUtil;
@@ -30,9 +43,9 @@ import com.nis.util.YamlUtil;
* @author Th
*
*/
-public class ConfagentJob{
+public class ConfagentJob extends QuartzJobBean {
private Logger logger = LoggerFactory.getLogger(ConfagentJob.class);
- private Map<String,Integer> confEvents=null;
+ private static Map<String,Integer> confEvents=null;
@Autowired
private PromserverService promserverService;
@Autowired
@@ -45,17 +58,24 @@ public class ConfagentJob{
private SysConfigService sysConfigService;
@Autowired
private ConfigUtil configUtil;
- @Value("${ipaddr}")
+ @Value("${confagent.ipaddr}")
private String ipaddr;
- @Value("${ymlPath}")
+ @Value("${confagent.ymlPath}")
private String ymlPath;
- @Value("${ruleYmlPath}")
+ @Value("${confagent.ruleYmlPath}")
private String ruleYmlPath;
- @Value("${prometheusPort}")
+ @Value("${confagent.prometheusPort}")
private String prometheusPort;
+ @Value("${confagent.metricsPath}")
+ private String metricsPath;
+ @Value("${confagent.snmpYmlPath}")
+ private String snmpYmlPath;
+ @Autowired
+ private RedisTemplate<Object,Object> redisTemplate;
@SuppressWarnings("unchecked")
- public void execute(){
+ @Override
+ protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
logger.info("task start");
//获取本机ip地址 获取本机所属角色信息
logger.info("The local IP address is {}",ipaddr);
@@ -66,6 +86,7 @@ public class ConfagentJob{
logger.info("The local ymlPath info {}",JSON.toJSON(ymlPath));
logger.info("The local ruleYmlPath info {}",JSON.toJSON(ruleYmlPath));
+
if(promserver!=null) {
// 判断本次表格数据与之前数据是否有变化判断是否执行操作
boolean changeFlag = confEventService.compareData(confEvents);
@@ -117,6 +138,8 @@ public class ConfagentJob{
* 处理sub相关逻辑
*/
public List subHandle(Promserver promserver) {
+ //保存当前promserver hash分配后处理的endpoint信息
+ List<Endpoint> subs = new ArrayList<Endpoint>();
//查询同一个idc下相同角色sub的数量以及exporter的数量信息
List<Promserver> subInfos = promserverService.querySubInfos(promserver);
logger.info("subHandle : There are {} sub in total",subInfos.size());
@@ -135,14 +158,20 @@ public class ConfagentJob{
}
}
List result = null;
+ List<String> snmpYmls= new ArrayList<String>();
//两者模运算均匀分配
if(index!=null && !endpointInfos.isEmpty()) {
result=new ArrayList();
for(int m=0;m<endpointInfos.size();m++) {
if(m%subInfos.size()==index) {
+ //根据module类型来判断snmp处理
+ Module module = endpointInfos.get(m).getModule();
+ String type = module.getType();
+ subs.add(endpointInfos.get(m));
LinkedHashMap job = new LinkedHashMap();
// job.put("job_name", endpointInfos.get(m).getModule().getName()+endpointInfos.get(m).getHost());
- job.put("job_name", "ed_"+endpointInfos.get(m).getId());
+// job.put("job_name", "ed_"+endpointInfos.get(m).getId());
+ job.put("job_name", endpointInfos.get(m).getId());
job.put("metrics_path", endpointInfos.get(m).getPath());
List list=new ArrayList();
list.add(endpointInfos.get(m).getHost()+":"+endpointInfos.get(m).getPort());
@@ -154,30 +183,59 @@ public class ConfagentJob{
job3.put("project", endpointInfos.get(m).getProject().getName());
job3.put("asset",endpointInfos.get(m).getAsset().getHost());
job3.put("module",endpointInfos.get(m).getModule().getName());
-// job3.put("job", "ed_"+endpointInfos.get(m).getId());
-// job3.put("host", endpointInfos.get(m).getAsset().getHost());
+// job3.put("job", "ed_"+endpointInfos.get(m).getId());
+// job3.put("host", endpointInfos.get(m).getAsset().getHost());
job2.put("labels", job3);
list2.add(job2);
job.put("static_configs", list2);
- //处理endpoint中param字段json串 请求参数
- String param = endpointInfos.get(m).getParam();
- Map params=null;
- if(param!=null && !param.isEmpty()) {
- params=new HashMap();
- Map<String,String> json = (Map) JSON.parse(param);
- for(Map.Entry<String, String> a:json.entrySet()){
- List paramList =new ArrayList();
- paramList.add(a.getValue());
- params.put(a.getKey(),paramList);
+ List list3=new ArrayList();
+ Map job4=new HashMap();
+ job4.put("source_labels", "__address__");
+ job4.put("regex", "(.*)");
+ job4.put("target_label", "endpoint");
+ job4.put("action", "replace");
+ job4.put("replacement", "$1");
+ list3.add(job4);
+ job.put("relabel_configs", list3);
+ if(StringUtils.isNotBlank(type)&&type.equals(ModuleTypeEnum.HTTP.getValue())) {
+ //处理endpoint中param字段json串 请求参数
+ String param = endpointInfos.get(m).getParam();
+ Map params=null;
+ if(param!=null && !param.isEmpty()) {
+ params=new HashMap();
+ Map<String,String> json = (Map) JSON.parse(param);
+ for(Map.Entry<String, String> a:json.entrySet()){
+ List paramList =new ArrayList();
+ paramList.add(a.getValue());
+ params.put(a.getKey(),paramList);
+ }
}
- }
- if(params!=null) {
- job.put("params",params);
+ if(params!=null) {
+ job.put("params",params);
+ }
+ }else if(StringUtils.isNotBlank(type)&&type.equals(ModuleTypeEnum.SNMP.getValue())) {
+ Map params=new HashMap();
+ params.put("target",endpointInfos.get(m).getHost()+":"+endpointInfos.get(m).getPort());
+ params.put("module", module.getName());
+ job.put("params", params);
+
+ String snmpYml = module.getSnmpYml();
+ snmpYmls.add(snmpYml);
}
result.add(job);
}
}
+ if(snmpYmls.size()>0) {
+ try {
+ // 同步snmp.yml文件内容 同时重启snmp exporter
+ YamlUtil.snmpYmlHandle(snmpYmls,snmpYmlPath);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ //将promserver和处理的endpoint对应关系储存到redis
+// savePromeserverInfoToRedis(promserver,subs);
}
logger.info("subHandle : result : {} ",JSON.toJSON(result));
return result;
@@ -188,6 +246,8 @@ public class ConfagentJob{
*/
public Map centerHandle() {
Map result=new HashMap();
+ //查询sys_config表获取数据
+ List<SysConfig> sysConfigs = sysConfigService.queryList();
//获取所有sub信息 配置联邦
List<Promserver> subInfos = promserverService.querySubInfosByType(2);
if(subInfos==null||subInfos.size()==0) {
@@ -209,15 +269,18 @@ public class ConfagentJob{
// m1.put("scrape_interval", "15s");
m1.put("honor_labels", true);
m1.put("metrics_path", "/federate");
-
-
+
List l2 =new ArrayList();
List l3 =new ArrayList();
//获取默认端口号
// String prometheusPort = (String)PropertyPlaceholder.getProperty("prometheusPort");
+ List<String> promserverApi =new ArrayList<String>();
+ List<String> confagentIps =new ArrayList<String>();
for(Promserver subInfo:subInfos) {
- l3.add(subInfo.getHost()+":"+subInfo.getPort());
+ promserverApi.add(subInfo.getHost()+":"+subInfo.getPort());
+ confagentIps.add(subInfo.getHost());
}
+ l3.addAll(promserverApi);
Map m2 =new HashMap();
m2.put("targets", l3);
l2.add(m2);
@@ -232,6 +295,49 @@ public class ConfagentJob{
l.add(m1);
+
+
+ //配置自监控相关任务
+ Map nezhaMetrics = new HashMap();
+ Map nezhaMetrics2 = new HashMap();
+ nezhaMetrics.put("job_name","nezha_metrics");
+
+ Map confagentMetrics = new HashMap();
+ Map confagentMetrics2 = new HashMap();
+ confagentMetrics.put("job_name","confagent_metrics");
+
+ List nezhaMetricsList =new ArrayList();
+ List nezhaMetricsList2 =new ArrayList();
+ List confagentMetricsList =new ArrayList();
+ List confagentMetricsList2 =new ArrayList();
+
+ nezhaMetrics.put("static_configs", nezhaMetricsList);
+ confagentMetrics.put("static_configs", confagentMetricsList);
+
+ if(!sysConfigs.isEmpty()) {
+ for(SysConfig sysconfig : sysConfigs) {
+ if(sysconfig.getParamKey().equals(AlertManagerEnum.ALERT_API.getValue())) {
+ nezhaMetricsList2.add(sysconfig.getParamValue());
+ }else if(sysconfig.getParamKey().equals(AlertManagerEnum.ALERT_PATH_PREFIX.getValue())){
+ nezhaMetrics.put("metrics_path", sysconfig.getParamValue()+metricsPath);
+ }else if(sysconfig.getParamKey().equals(AlertManagerEnum.CONFAGENT_PORT.getValue())) {
+ for(String confagentIp : confagentIps) {
+ confagentMetricsList2.add(confagentIp+":"+sysconfig.getParamValue());
+ }
+ }else if(sysconfig.getParamKey().equals(AlertManagerEnum.CONFAGENT_API.getValue())) {
+ confagentMetricsList2.add(sysconfig.getParamValue());
+ }else if(sysconfig.getParamKey().equals(AlertManagerEnum.CONFAGENT_PATH.getValue())) {
+ confagentMetrics.put("metrics_path", sysconfig.getParamValue()+metricsPath);
+ }
+ }
+ }
+ nezhaMetrics2.put("targets", nezhaMetricsList2);
+ confagentMetrics2.put("targets", confagentMetricsList2);
+ nezhaMetricsList.add(nezhaMetrics2);
+ confagentMetricsList.add(confagentMetrics2);
+ l.add(nezhaMetrics);
+ l.add(confagentMetrics);
+
result.put("scrape_configs", l);
logger.info("centerHandle : scrape_configs Info : {}",JSON.toJSON(l));
@@ -274,8 +380,7 @@ public class ConfagentJob{
logger.info("centerHandle : alert rule Info : {}",JSON.toJSON(groups));
//配置alertManager
- //查询sys_config表获取数据
- List<SysConfig> sysConfigs = sysConfigService.queryList();
+
Map alertManager =new HashMap();
List staticConfigList=new ArrayList();
LinkedHashMap staticConfigs =new LinkedHashMap();
@@ -286,9 +391,9 @@ public class ConfagentJob{
List alertData =new ArrayList();
if(!sysConfigs.isEmpty()) {
for(SysConfig sysconfig : sysConfigs) {
- if(sysconfig.getParamKey().equals(AlertManagerEnum.Alert_api.getValue())) {
+ if(sysconfig.getParamKey().equals(AlertManagerEnum.ALERT_API.getValue())) {
alertData.add(sysconfig.getParamValue());
- }else if(sysconfig.getParamKey().equals(AlertManagerEnum.Alert_path_prefix.getValue())){
+ }else if(sysconfig.getParamKey().equals(AlertManagerEnum.ALERT_PATH_PREFIX.getValue())){
staticConfigs.put("path_prefix", sysconfig.getParamValue());
}
}
@@ -304,4 +409,25 @@ public class ConfagentJob{
logger.info("centerHandle : alert manager Info : {}",JSON.toJSON(alertManager));
return result;
}
+
+ /**
+ * 定时任务中将promserver信息储存到redis中
+ */
+ public void savePromeserverInfoToRedis(Promserver promserver,List<Endpoint> endpoints) {
+ HashOperations opsForHash = redisTemplate.opsForHash();
+ Set<Object> keys = redisTemplate.opsForHash().keys(Constant.ENDPOINT_PROM);
+ logger.info("endpoint_prom keys :{}",JSON.toJSON(keys));
+ /*if(!keys.isEmpty()) {
+ for(Object key:keys) {
+ opsForHash.delete(Constant.ENDPOINT_PROM, key);
+ }
+ logger.info("delete "+Constant.ENDPOINT_PROM+" all keys ");
+ }*/
+ if(endpoints!=null && endpoints.size()>0) {
+ for(Endpoint endpointPromInfo : endpoints) {
+ logger.info("savePromeserverInfoToRedis"+endpointPromInfo.getId()+"--->"+JSON.toJSONString(endpointPromInfo.getPromserver()));
+ redisTemplate.boundHashOps(Constant.ENDPOINT_PROM).put(endpointPromInfo.getId().toString(), endpointPromInfo.getPromserver().getId());
+ }
+ }
+ }
}
diff --git a/src/main/java/com/nis/job/ConfagentJobConfig.java b/src/main/java/com/nis/job/ConfagentJobConfig.java
new file mode 100644
index 0000000..a338aa9
--- /dev/null
+++ b/src/main/java/com/nis/job/ConfagentJobConfig.java
@@ -0,0 +1,54 @@
+package com.nis.job;
+
+import org.quartz.CronScheduleBuilder;
+import org.quartz.JobBuilder;
+import org.quartz.JobDetail;
+import org.quartz.Trigger;
+import org.quartz.TriggerBuilder;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+@Configuration
+public class ConfagentJobConfig {
+
+ @Value("${confagent.jobCron}")
+ private String confagentJobCron;
+
+ @Bean
+ public JobDetail confagentCronJobDetail() {
+ return JobBuilder.newJob(ConfagentJob.class).withIdentity("confagentJob").storeDurably().build();
+ }
+
+ @Bean
+ public Trigger confagentCronJobTrigger() {
+
+ if(confagentJobCron.isEmpty()) {
+ //如果配置文件没有配置定时周期 默认为15秒执行一次
+ confagentJobCron="0/30 * * * * ?";
+ }
+
+ CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(confagentJobCron);
+
+ return TriggerBuilder.newTrigger()
+ .forJob(confagentCronJobDetail())
+ .withSchedule(cronScheduleBuilder)
+ .build();
+ }
+
+ @Bean
+ public JobDetail confagentUptimeCronJobDetail() {
+ return JobBuilder.newJob(ConfagentUptimeJob.class).withIdentity("confagentUptimeJob").storeDurably().build();
+ }
+
+ @Bean
+ public Trigger confagentUptimeCronJobTrigger() {
+
+ CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/1 * * * * ?");
+
+ return TriggerBuilder.newTrigger()
+ .forJob(confagentUptimeCronJobDetail())
+ .withSchedule(cronScheduleBuilder)
+ .build();
+ }
+
+}
diff --git a/src/main/java/com/nis/job/ConfagentUptimeJob.java b/src/main/java/com/nis/job/ConfagentUptimeJob.java
new file mode 100644
index 0000000..fd3c050
--- /dev/null
+++ b/src/main/java/com/nis/job/ConfagentUptimeJob.java
@@ -0,0 +1,19 @@
+package com.nis.job;
+
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+
+import com.nis.entity.ConfagentMetrics;
+
+public class ConfagentUptimeJob extends QuartzJobBean {
+ @Autowired
+ private ConfagentMetrics confagentMetrics;
+
+ @Override
+ protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
+ confagentMetrics.confagentUpTimeCounter.increment();
+ }
+
+}
diff --git a/src/main/java/com/nis/server/SNMPTrapServer.java b/src/main/java/com/nis/server/SNMPTrapServer.java
index 148c35e..8e34bba 100644
--- a/src/main/java/com/nis/server/SNMPTrapServer.java
+++ b/src/main/java/com/nis/server/SNMPTrapServer.java
@@ -50,6 +50,9 @@ import org.snmp4j.util.ThreadPool;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.core.annotation.Order;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
@@ -59,12 +62,12 @@ import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
-import com.alibaba.druid.util.StringUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.nis.entity.AlertManagerEnum;
import com.nis.entity.AlertRule;
+import com.nis.entity.ConfagentMetrics;
import com.nis.entity.SysConfig;
import com.nis.entity.TrapMessage;
import com.nis.service.AlertRuleService;
@@ -84,15 +87,17 @@ import com.nis.service.SysConfigService;
* @author YJS
*
*/
-public class SNMPTrapServer implements CommandResponder{// implements CommandResponder, extends Service
+@Component
+@Order(1)
+public class SNMPTrapServer implements CommandResponder,ApplicationRunner{// implements CommandResponder, extends Service
private static Logger logger = LoggerFactory.getLogger(SNMPTrapServer.class);
private static SNMPTrapServer ts = null;
private AlertRule alertRule;
- @Value("${snmp.ip}")
+ @Value("${confagent.snmp.ip}")
private String snmpIp;
- @Value("${snmp.trapThredPoolSize}")
+ @Value("${confagent.snmp.trapThredPoolSize}")
private String snmpTrapThredPoolSize;
- @Value("${snmp.trapPort}")
+ @Value("${confagent.snmp.trapPort}")
private String snmpTrapPort;
@Autowired
private AlertRuleService alertRuleService;
@@ -100,6 +105,8 @@ public class SNMPTrapServer implements CommandResponder{// implements CommandRes
private SysConfigService sysConfigService;
private String alertApi;
private String alertPathPrefix;
+ @Autowired
+ private ConfagentMetrics confagentMetrics;
/*public static SNMPTrapServer getInstance() throws IOException{
if(ts == null){
ts = new SNMPTrapServer();
@@ -110,6 +117,11 @@ public class SNMPTrapServer implements CommandResponder{// implements CommandRes
return ts;
}*/
+ @Override
+ public void run(ApplicationArguments args) throws Exception {
+ initServer();
+ }
+
public void initServer() throws Exception{
logger.info("snmpTrapThredPoolSize is {}",snmpTrapThredPoolSize);
ThreadPool threadPool = ThreadPool.create("Trap", Integer.valueOf(snmpTrapThredPoolSize));
@@ -183,9 +195,9 @@ public class SNMPTrapServer implements CommandResponder{// implements CommandRes
List<SysConfig> sysConfigs = sysConfigService.queryList();
if(!sysConfigs.isEmpty()) {
for(SysConfig sysconfig : sysConfigs) {
- if(sysconfig.getParamKey().equals(AlertManagerEnum.Alert_api.getValue())) {
+ if(sysconfig.getParamKey().equals(AlertManagerEnum.ALERT_API.getValue())) {
alertApi=sysconfig.getParamValue();
- }else if(sysconfig.getParamKey().equals(AlertManagerEnum.Alert_path_prefix.getValue())){
+ }else if(sysconfig.getParamKey().equals(AlertManagerEnum.ALERT_PATH_PREFIX.getValue())){
alertPathPrefix=sysconfig.getParamValue();
}
}
@@ -317,7 +329,7 @@ public class SNMPTrapServer implements CommandResponder{// implements CommandRes
description.append(",oid:"+trapmessageinfo.getTrapOID());
description.append(",value:"+value);
String trapName = trapmessageinfo.getTrapName();
- if(!StringUtils.isEmpty(trapName)) {
+ if(trapName!=null&&trapName.length()>0) {
description.append(",trapName:"+trapName);
}
StringBuilder summary=new StringBuilder("snmptrap:");
@@ -358,6 +370,7 @@ public class SNMPTrapServer implements CommandResponder{// implements CommandRes
String url="http://"+alertApi+alertPathPrefix+"/api/v1/alerts";
Object postForEntity = restTemplate.postForEntity(url, entity,Object.class);
logger.info("post success info {}",JSON.toJSON(postForEntity));
+ confagentMetrics.snmpCounter.increment();
}
catch (Exception exception)
{
diff --git a/src/main/java/com/nis/service/EndpointService.java b/src/main/java/com/nis/service/EndpointService.java
index 797b8bc..438b2a9 100644
--- a/src/main/java/com/nis/service/EndpointService.java
+++ b/src/main/java/com/nis/service/EndpointService.java
@@ -3,6 +3,8 @@ package com.nis.service;
import java.util.List;
import com.nis.entity.Endpoint;
+import com.nis.entity.MetricsDto;
+import com.nis.entity.Promserver;
public interface EndpointService {
@@ -11,4 +13,13 @@ public interface EndpointService {
*/
public List<Endpoint> queryExporterInfos(Integer idcId);
+ /**
+ * 自定义指标当前采集endpoint个数
+ */
+ List<MetricsDto> queryEndpointMetrics();
+
+ /**
+ * 查询endpoint和promserver对应关系
+ */
+ List<Endpoint> queryPromServerInfo(Integer promserverId);
}
diff --git a/src/main/java/com/nis/service/impl/EndpointServiceImpl.java b/src/main/java/com/nis/service/impl/EndpointServiceImpl.java
index d2af0da..6542a6d 100644
--- a/src/main/java/com/nis/service/impl/EndpointServiceImpl.java
+++ b/src/main/java/com/nis/service/impl/EndpointServiceImpl.java
@@ -7,6 +7,8 @@ import org.springframework.stereotype.Service;
import com.nis.dao.EndpointDao;
import com.nis.entity.Endpoint;
+import com.nis.entity.MetricsDto;
+import com.nis.entity.Promserver;
import com.nis.service.EndpointService;
@Service
public class EndpointServiceImpl implements EndpointService{
@@ -18,4 +20,14 @@ public class EndpointServiceImpl implements EndpointService{
return endpointDao.selectExporterInfos(idcId);
}
+ @Override
+ public List<MetricsDto> queryEndpointMetrics() {
+ return endpointDao.selectEndpointMetrics();
+ }
+
+ @Override
+ public List<Endpoint> queryPromServerInfo(Integer promserverId) {
+ return endpointDao.selectPromServerInfo(promserverId);
+ }
+
}
diff --git a/src/main/java/com/nis/util/ConfagentConfig.java b/src/main/java/com/nis/util/ConfagentConfig.java
new file mode 100644
index 0000000..c074ac4
--- /dev/null
+++ b/src/main/java/com/nis/util/ConfagentConfig.java
@@ -0,0 +1,46 @@
+/**
+
+ *
+
+ *
+
+ */
+
+package com.nis.util;
+
+import org.apache.ibatis.mapping.DatabaseIdProvider;
+import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+import java.util.Properties;
+
+/**
+ * WebMvc配置
+ *
+
+ */
+@Configuration
+public class ConfagentConfig implements WebMvcConfigurer {
+
+ @Bean
+ public DatabaseIdProvider getDatabaseIdProvider(){
+ DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
+ Properties properties = new Properties();
+ properties.setProperty("Oracle","oracle");
+ properties.setProperty("MySQL","mysql");
+ properties.setProperty("DB2","db2");
+ properties.setProperty("Derby","derby");
+ properties.setProperty("H2","h2");
+ properties.setProperty("HSQL","hsql");
+ properties.setProperty("Informix","informix");
+ properties.setProperty("MS-SQL","ms-sql");
+ properties.setProperty("PostgreSQL","postgresql");
+ properties.setProperty("Sybase","sybase");
+ properties.setProperty("Hana","hana");
+ databaseIdProvider.setProperties(properties);
+
+ return databaseIdProvider;
+ }
+
+} \ No newline at end of file
diff --git a/src/main/java/com/nis/util/ConfigUtil.java b/src/main/java/com/nis/util/ConfigUtil.java
index 10eb58d..e3b5d41 100644
--- a/src/main/java/com/nis/util/ConfigUtil.java
+++ b/src/main/java/com/nis/util/ConfigUtil.java
@@ -6,10 +6,10 @@ import org.springframework.stereotype.Component;
@Component
public class ConfigUtil {
- @Value("${ipaddr}")
+ @Value("${confagent.ipaddr}")
private String ipaddr;
- @Value("${ymlPath}")
+ @Value("${confagent.ymlPath}")
private String ymlPath;
- @Value("${prometheusPort}")
+ @Value("${confagent.prometheusPort}")
private String prometheusPort;
}
diff --git a/src/main/java/com/nis/util/Constant.java b/src/main/java/com/nis/util/Constant.java
new file mode 100644
index 0000000..73b527c
--- /dev/null
+++ b/src/main/java/com/nis/util/Constant.java
@@ -0,0 +1,75 @@
+/**
+
+ *
+
+ *
+
+ */
+
+package com.nis.util;
+
+import org.apache.ibatis.mapping.DatabaseIdProvider;
+
+import javax.sql.DataSource;
+import java.io.File;
+import java.sql.SQLException;
+import java.util.*;
+
+/**
+ * 常量
+ *
+
+ */
+public class Constant {
+ /** redis 存储promserver信息 hash key */
+ public static final String ENDPOINT_PROM="endpoint_prom";
+ /** 超级管理员ID */
+ public static final int SUPER_ADMIN = 1;
+ /** 数据权限过滤 */
+ public static final String SQL_FILTER = "sql_filter";
+ /**
+ * 当前页码
+ */
+ public static final String PAGE = "pageNo";
+ /**
+ * 每页显示记录数
+ */
+ public static final String LIMIT = "pageSize";
+ /**
+ * 每页显示条数
+ */
+ public static final long PAGESIZE = 10;
+ /**
+ * 排序字段
+ */
+ public static final String ORDER_FIELD = "sidx";
+ /**
+ * 排序方式
+ */
+ public static final String ORDER = "order";
+ /**
+ * 升序
+ */
+ public static final String ASC = "asc";
+
+ /**
+ * 当前数据库类型
+ */
+ public static final String DB_TYPE;
+
+ public static final String ORACLE = "oracle";
+ public static final String MYSQL = "mysql";
+ public static final String POSTGRESQL = "postgresql";
+
+ static {
+ DatabaseIdProvider databaseIdProvider = SpringContextUtils.getBean("getDatabaseIdProvider", DatabaseIdProvider.class);
+ DataSource dataSource = SpringContextUtils.getBean("dataSource",DataSource.class);
+ String databaseId = null;
+ try {
+ databaseId = databaseIdProvider.getDatabaseId(dataSource);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ DB_TYPE = databaseId;
+ }
+}
diff --git a/src/main/java/com/nis/util/MybatisPlusConfig.java b/src/main/java/com/nis/util/MybatisPlusConfig.java
new file mode 100644
index 0000000..56d2237
--- /dev/null
+++ b/src/main/java/com/nis/util/MybatisPlusConfig.java
@@ -0,0 +1,76 @@
+package com.nis.util;
+
+import java.sql.SQLException;
+
+import javax.sql.DataSource;
+
+import org.apache.ibatis.mapping.DatabaseIdProvider;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
+import com.baomidou.mybatisplus.core.injector.ISqlInjector;
+import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import com.nis.util.Constant;
+
+/**
+ * mybatis-plus配置
+ *
+
+ */
+@Configuration
+public class MybatisPlusConfig {
+
+ /**
+ * 分页插件
+ */
+ @Bean
+ public PaginationInterceptor paginationInterceptor() {
+ return new PaginationInterceptor();
+ }
+
+ @Bean
+ public SeqKeyGenerator seqKeyGenerator() {
+ return new SeqKeyGenerator();
+ }
+
+ @Bean
+ public ISqlInjector sqlInjector() {
+ return new LogicSqlInjector();
+ }
+
+ /**
+ * 自定义主键生成器
+ * @author fang
+ *
+ */
+ static class SeqKeyGenerator implements IKeyGenerator {
+ @Autowired
+ DatabaseIdProvider databaseIdProvider;
+ @Autowired
+ DataSource dataSource;
+
+ @Override
+ public String executeSql(String incrementerName) {
+ String databaseId = null;
+ try {
+ databaseId = databaseIdProvider.getDatabaseId(dataSource);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+
+ switch (databaseId){
+ case Constant.MYSQL:
+ return String.format("select seq_nextval('%s')", incrementerName);
+ case Constant.POSTGRESQL:
+ return String.format("select seq_nextval('%s')", incrementerName);
+ case Constant.ORACLE:
+ return String.format("select %s.nextval from dual", incrementerName);
+ default:
+ return String.format("select seq_nextval('%s')", incrementerName);
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/nis/util/RedisConfig.java b/src/main/java/com/nis/util/RedisConfig.java
new file mode 100644
index 0000000..0e6046f
--- /dev/null
+++ b/src/main/java/com/nis/util/RedisConfig.java
@@ -0,0 +1,44 @@
+package com.nis.util;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+@Configuration
+public class RedisConfig {
+
+ /**
+ * redisTemplate 序列化使用的jdkSerializeable, 存储二进制字节码, 所以自定义序列化类
+ * @param redisConnectionFactory
+ * @return
+ */
+ @Bean
+ public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
+ RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
+ redisTemplate.setConnectionFactory(redisConnectionFactory);
+
+ // 使用Jackson2JsonRedisSerialize 替换默认序列化
+ Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
+
+ ObjectMapper objectMapper = new ObjectMapper();
+ objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+ objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+
+ jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
+
+ // 设置value的序列化规则和 key的序列化规则
+ redisTemplate.setKeySerializer(new StringRedisSerializer());
+ redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
+ redisTemplate.setHashKeySerializer(new StringRedisSerializer());
+ redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
+ redisTemplate.afterPropertiesSet();
+ return redisTemplate;
+ }
+}
diff --git a/src/main/java/com/nis/util/SpringContextUtils.java b/src/main/java/com/nis/util/SpringContextUtils.java
new file mode 100644
index 0000000..8680dcf
--- /dev/null
+++ b/src/main/java/com/nis/util/SpringContextUtils.java
@@ -0,0 +1,51 @@
+/**
+
+ *
+
+ *
+ *
+ */
+
+package com.nis.util;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+/**
+ * Spring Context 工具类
+ *
+ * @author Mark [email protected]
+ */
+@Component
+public class SpringContextUtils implements ApplicationContextAware {
+ public static ApplicationContext applicationContext;
+
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext)
+ throws BeansException {
+ SpringContextUtils.applicationContext = applicationContext;
+ }
+
+ public static Object getBean(String name) {
+ return applicationContext.getBean(name);
+ }
+
+ public static <T> T getBean(String name, Class<T> requiredType) {
+ return applicationContext.getBean(name, requiredType);
+ }
+
+ public static boolean containsBean(String name) {
+ return applicationContext.containsBean(name);
+ }
+
+ public static boolean isSingleton(String name) {
+ return applicationContext.isSingleton(name);
+ }
+
+ public static Class<? extends Object> getType(String name) {
+ return applicationContext.getType(name);
+ }
+
+} \ No newline at end of file
diff --git a/src/main/java/com/nis/util/YamlUtil.java b/src/main/java/com/nis/util/YamlUtil.java
index 8644354..cbfaa87 100644
--- a/src/main/java/com/nis/util/YamlUtil.java
+++ b/src/main/java/com/nis/util/YamlUtil.java
@@ -6,6 +6,7 @@ import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -23,6 +24,23 @@ public class YamlUtil {
}
@SuppressWarnings("unchecked")
+ public static boolean snmpYmlHandle(List<String> param,String ymlPath) throws Exception {
+ boolean flag=false;
+ if(!param.isEmpty() && ymlPath != null && ymlPath.length() != 0) {
+ File file = new File(ymlPath);
+ OutputStream out = new FileOutputStream(file);
+ OutputStreamWriter osw = new OutputStreamWriter(out, "UTF-8");
+ for(String s : param) {
+ y.dump(y.load(s),osw);
+ }
+// RuntimeUtil.run(null, null, new String[]{"kill","-hup","`ps -ef |grep prometheus|grep -v grep|awk \'{print $2}\'`"});
+ RuntimeUtil.run(null, null, new String[]{"/bin/sh", "-c","ps -ef |grep snmp_exporter|grep -v grep|awk \'{print $2}\'|xargs kill -hup"});
+ flag = true;
+ }
+ return flag;
+ }
+
+ @SuppressWarnings("unchecked")
public static boolean subYmlHandle(List<Object> param,String ymlPath) throws Exception {
boolean flag=false;
if(!param.isEmpty() && ymlPath != null && ymlPath.length() != 0) {
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..0bec45a
--- /dev/null
+++ b/src/main/resources/application-dev.yml
@@ -0,0 +1,49 @@
+spring:
+ datasource:
+ type: com.alibaba.druid.pool.DruidDataSource
+ druid:
+ driver-class-name: com.mysql.jdbc.Driver
+ url: jdbc:mysql://192.168.40.247:3306/nz?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
+ username: root
+ password: 111111
+ initial-size: 10
+ max-active: 100
+ min-idle: 10
+ max-wait: 60000
+ pool-prepared-statements: true
+ max-pool-prepared-statement-per-connection-size: 20
+ time-between-eviction-runs-millis: 60000
+ min-evictable-idle-time-millis: 300000
+ #Oracle需要打开注释
+ #validation-query: SELECT 1 FROM DUAL
+ test-while-idle: true
+ test-on-borrow: false
+ test-on-return: false
+ stat-view-servlet:
+ enabled: true
+ url-pattern: /druid/*
+ #login-username: admin
+ #login-password: admin
+ filter:
+ stat:
+ log-slow-sql: true
+ slow-sql-millis: 1000
+ merge-sql: false
+ wall:
+ config:
+ multi-statement-allow: true
+
+
+##多数据源的配置,需要引用nezha-dynamic-datasource
+#dynamic:
+# datasource:
+# slave1:
+# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+# url: jdbc:sqlserver://localhost:1433;DatabaseName=nezha_security
+# username: sa
+# password: 123456
+# slave2:
+# driver-class-name: org.postgresql.Driver
+# url: jdbc:postgresql://localhost:5432/nezha_security
+# username: nezha
+# password: 123456 \ No newline at end of file
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
new file mode 100644
index 0000000..f121219
--- /dev/null
+++ b/src/main/resources/application-prod.yml
@@ -0,0 +1,34 @@
+spring:
+ datasource:
+ type: com.alibaba.druid.pool.DruidDataSource
+ druid:
+ driver-class-name: com.mysql.jdbc.Driver
+ url: jdbc:mysql://192.168.40.247:3306/nezha?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
+ username: root
+ password: 111111
+ initial-size: 10
+ max-active: 100
+ min-idle: 10
+ max-wait: 60000
+ pool-prepared-statements: true
+ max-pool-prepared-statement-per-connection-size: 20
+ time-between-eviction-runs-millis: 60000
+ min-evictable-idle-time-millis: 300000
+ #Oracle需要打开注释
+ #validation-query: SELECT 1 FROM DUAL
+ test-while-idle: true
+ test-on-borrow: false
+ test-on-return: false
+ stat-view-servlet:
+ enabled: true
+ url-pattern: /druid/*
+ #login-username: admin
+ #login-password: admin
+ filter:
+ stat:
+ log-slow-sql: true
+ slow-sql-millis: 1000
+ merge-sql: false
+ wall:
+ config:
+ multi-statement-allow: true \ No newline at end of file
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
new file mode 100644
index 0000000..f121219
--- /dev/null
+++ b/src/main/resources/application-test.yml
@@ -0,0 +1,34 @@
+spring:
+ datasource:
+ type: com.alibaba.druid.pool.DruidDataSource
+ druid:
+ driver-class-name: com.mysql.jdbc.Driver
+ url: jdbc:mysql://192.168.40.247:3306/nezha?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
+ username: root
+ password: 111111
+ initial-size: 10
+ max-active: 100
+ min-idle: 10
+ max-wait: 60000
+ pool-prepared-statements: true
+ max-pool-prepared-statement-per-connection-size: 20
+ time-between-eviction-runs-millis: 60000
+ min-evictable-idle-time-millis: 300000
+ #Oracle需要打开注释
+ #validation-query: SELECT 1 FROM DUAL
+ test-while-idle: true
+ test-on-borrow: false
+ test-on-return: false
+ stat-view-servlet:
+ enabled: true
+ url-pattern: /druid/*
+ #login-username: admin
+ #login-password: admin
+ filter:
+ stat:
+ log-slow-sql: true
+ slow-sql-millis: 1000
+ merge-sql: false
+ wall:
+ config:
+ multi-statement-allow: true \ No newline at end of file
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
new file mode 100644
index 0000000..af16249
--- /dev/null
+++ b/src/main/resources/application.yml
@@ -0,0 +1,100 @@
+# Tomcat
+server:
+ tomcat:
+ uri-encoding: UTF-8
+ max-threads: 1000
+ min-spare-threads: 30
+ port: 8989
+ servlet:
+ context-path: /nz-confagent
+
+spring:
+ profiles:
+ active: dev
+ jackson:
+ date-format: yyyy-MM-dd HH:mm:ss
+ time-zone: GMT+8
+ servlet:
+ multipart:
+ max-file-size: 100MB
+ max-request-size: 100MB
+ enabled: true
+ redis:
+ database: 0
+ host: 192.168.41.69
+ port: 6379
+ password: # 密码(默认为空)
+ timeout: 6000ms # 连接超时时长(毫秒)
+ jedis:
+ pool:
+ max-active: 1000 # 连接池最大连接数(使用负值表示没有限制)
+ max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
+ max-idle: 10 # 连接池中的最大空闲连接
+ min-idle: 5 # 连接池中的最小空闲连接
+ freemarker:
+ suffix: .html
+ request-context-attribute: request
+
+
+confagent:
+ ipaddr: 192.168.40.126
+ ymlPath: F:/prometheus.yml
+ ruleYmlPath: F:/rule.yml
+ snmpYmlPath: F:/snmp.yml
+ prometheusPort: 9090
+ ## job config
+ jobCron: 0/15 * * * * ?
+ metricsPath: /metrics
+ ## snmp trap config
+ snmp:
+ trapThredPoolSize: 2
+ trapPort: 162
+ ip: 192.168.41.87
+
+
+
+#mybatis
+mybatis-plus:
+ mapper-locations: classpath*:/mapper/*.xml
+ #实体扫描,多个package用逗号或者分号分隔
+ typeAliasesPackage: com.nis.entity
+ global-config:
+ #数据库相关配置
+ db-config:
+ #主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID", ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
+ id-type: AUTO
+ #字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断"
+ field-strategy: NOT_NULL
+ #驼峰下划线转换
+ column-underline: true
+ logic-delete-value: 1
+ logic-not-delete-value: 0
+ banner: false
+ key-generator: com.nis.util.MybatisPlusConfig.SeqKeyGenerator
+ #原生配置
+ configuration:
+ map-underscore-to-camel-case: true
+ cache-enabled: false
+ call-setters-on-nulls: true
+ jdbc-type-for-null: 'null'
+
+management:
+ metrics:
+ binders:
+ jvm:
+ enabled: false
+ files:
+ enabled: false
+ integration:
+ enabled: false
+ logback:
+ enabled: false
+ processor:
+ enabled: false
+ uptime:
+ enabled: false
+ endpoints:
+ web:
+ exposure:
+ include: ["prometheus"]
+ base-path: "/" \ No newline at end of file
diff --git a/src/main/resources/banner.txt b/src/main/resources/banner.txt
new file mode 100644
index 0000000..0b09012
--- /dev/null
+++ b/src/main/resources/banner.txt
@@ -0,0 +1,5 @@
+=====================================
+| |
+| nz-confagent |
+| |
+===================================== \ No newline at end of file
diff --git a/src/main/resources/confagent.properties b/src/main/resources/confagent.properties
deleted file mode 100644
index 2993179..0000000
--- a/src/main/resources/confagent.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-## database config
-jdbc.driver=com.mysql.jdbc.Driver
-jdbc.url=jdbc:mysql://192.168.40.247:3306/nz?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
-jdbc.username=root
-jdbc.password=111111
-
-ipaddr=192.168.40.247
-
-## prometheus config
-ymlPath=F:/prometheus.yml
-ruleYmlPath=F:/rule.yml
-prometheusPort=9090
-
-## job config
-job.cron=0/15 * * * * ?
-
-## snmp trap config
-snmp.trapThredPoolSize=2
-snmp.trapPort=162
-snmp.ip=192.168.41.87 \ No newline at end of file
diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties
deleted file mode 100644
index b2e383c..0000000
--- a/src/main/resources/log4j.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-### #\u914d\u7f6e\u6839Logger ###
-log4j.rootLogger = debug,stdout,logfile,errorLog
-
-log4j.appender.stdout = org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout.ConversionPattern = %d %p [%l] [%t] - <%m>%n
-log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
-
-#----------------------debug---------------------
-
-log4j.appender.logfile = org.apache.log4j.RollingFileAppender
-log4j.appender.logfile.MaxFileSize = 50MB
-log4j.appender.logfile.MaxBackupIndex = 20
-
-log4j.appender.logfile.File = ../nz-confagent/confagent.log
-log4j.appender.logfile.layout.ConversionPattern = %d %p [%l] [%t] - <%m>%n
-log4j.appender.logfile.layout = org.apache.log4j.PatternLayout
-
-#----------------------error---------------------
-log4j.appender.errorLog = org.apache.log4j.RollingFileAppender
-log4j.appender.errorLog.MaxFileSize = 50MB
-log4j.appender.errorLog.Append = true
-log4j.appender.errorLog.Threshold = warn
-log4j.appender.errorLog.MaxBackupIndex = 10
-log4j.appender.errorLog.File = ../nz-confagent/confagent.log
-log4j.appender.errorLog.layout.ConversionPattern = %d %p [%l] [%t] - <%m>%n
-log4j.appender.errorLog.layout = org.apache.log4j.PatternLayout
diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..30cf8cf
--- /dev/null
+++ b/src/main/resources/logback-spring.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+ <include resource="org/springframework/boot/logging/logback/base.xml" />
+ <logger name="org.springframework.web" level="INFO"/>
+ <logger name="org.springboot.sample" level="TRACE" />
+ <property name="log.path" value="./logs/" />
+
+ <!-- 开发、测试环境 -->
+ <springProfile name="dev,test">
+ <logger name="org.springframework.web" level="INFO"/>
+ <logger name="org.springboot.sample" level="INFO" />
+ <logger name="com.nis" level="DEBUG" />
+ </springProfile>
+
+ <!-- 生产环境 -->
+ <springProfile name="prod">
+ <logger name="org.springframework.web" level="ERROR"/>
+ <logger name="org.springboot.sample" level="ERROR" />
+ <logger name="com.nis" level="ERROR" />
+ </springProfile>
+
+ <!-- 2.2 level为 INFO 日志,时间滚动输出 -->
+ <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <!-- 正在记录的日志文档的路径及文档名 -->
+ <file>${log.path}/nz-confagent.log</file>
+ <!--日志文档输出格式-->
+ <encoder>
+ <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+ <charset>UTF-8</charset>
+ </encoder>
+ <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+ <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+ <!-- 每天日志归档路径以及格式 -->
+ <fileNamePattern>${log.path}/nz-confagent-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+ <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+ <maxFileSize>100MB</maxFileSize>
+ </timeBasedFileNamingAndTriggeringPolicy>
+ <!--日志文档保留天数-->
+ <maxHistory>15</maxHistory>
+ </rollingPolicy>
+ <!-- 此日志文档只记录info级别的 -->
+ <filter class="ch.qos.logback.classic.filter.LevelFilter">
+ <level>info</level>
+ <onMatch>ACCEPT</onMatch>
+ <onMismatch>DENY</onMismatch>
+ </filter>
+ </appender>
+
+ <!-- 2.1 level为 DEBUG 日志,时间滚动输出 -->
+ <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <!-- 正在记录的日志文档的路径及文档名 -->
+ <file>${log.path}/nz-confagent-debug.log</file>
+ <!--日志文档输出格式-->
+ <encoder>
+ <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+ <charset>UTF-8</charset> <!-- 设置字符集 -->
+ </encoder>
+ <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+ <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+ <!-- 日志归档 -->
+ <fileNamePattern>${log.path}/confagent-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+ <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+ <maxFileSize>100MB</maxFileSize>
+ </timeBasedFileNamingAndTriggeringPolicy>
+ <!--日志文档保留天数-->
+ <maxHistory>15</maxHistory>
+ </rollingPolicy>
+ <!-- 此日志文档只记录debug级别的 -->
+ <filter class="ch.qos.logback.classic.filter.LevelFilter">
+ <level>debug</level>
+ <onMatch>ACCEPT</onMatch>
+ <onMismatch>DENY</onMismatch>
+ </filter>
+ </appender>
+
+ <!-- 2.1 level为 ERROR 日志,时间滚动输出 -->
+ <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <!-- 正在记录的日志文档的路径及文档名 -->
+ <file>${log.path}/nz-confagent-error.log</file>
+ <!--日志文档输出格式-->
+ <encoder>
+ <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+ <charset>UTF-8</charset> <!-- 设置字符集 -->
+ </encoder>
+ <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+ <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+ <!-- 日志归档 -->
+ <fileNamePattern>${log.path}/confagent-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+ <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+ <maxFileSize>100MB</maxFileSize>
+ </timeBasedFileNamingAndTriggeringPolicy>
+ <!--日志文档保留天数-->
+ <maxHistory>15</maxHistory>
+ </rollingPolicy>
+ <!-- 此日志文档只记录debug级别的 -->
+ <filter class="ch.qos.logback.classic.filter.LevelFilter">
+ <level>error</level>
+ <onMatch>ACCEPT</onMatch>
+ <onMismatch>DENY</onMismatch>
+ </filter>
+ </appender>
+
+
+ <root level="info">
+ <appender-ref ref="ERROR_FILE" />
+ <appender-ref ref="DEBUG_FILE" />
+ <appender-ref ref="INFO_FILE" />
+ </root>
+
+</configuration> \ No newline at end of file
diff --git a/src/main/resources/mapper/EndpointDao.xml b/src/main/resources/mapper/EndpointDao.xml
index 4cee06a..53cc2dd 100644
--- a/src/main/resources/mapper/EndpointDao.xml
+++ b/src/main/resources/mapper/EndpointDao.xml
@@ -18,6 +18,9 @@
<result column="port" property="port"/>
<result column="param" property="param"/>
<result column="path" property="path"/>
+ <result column="type" property="type"/>
+ <result column="snmp_param" property="snmpParam"/>
+ <result column="snmp_yml" property="snmpYml"/>
</association>
<association columnPrefix="a_" property="asset" javaType="com.nis.entity.Asset">
@@ -48,6 +51,16 @@
<result column="name" property="name"/>
<result column="remark" property="remark"/>
</association>
+
+ <association columnPrefix="prom_" property="promserver" javaType="com.nis.entity.Promserver">
+ <id column="id" property="id"/>
+ <result column="idc_id" property="idcId"></result>
+ <result column="host" property="host"/>
+ <result column="port" property="port"/>
+ <result column="type" property="type"/>
+ <result column="status" property="status"/>
+ <result column="check_time" property="checkTime"/>
+ </association>
</resultMap>
<select id="selectExporterInfos" resultMap="endpoint">
@@ -59,6 +72,9 @@
m.param AS m_param,
m.path AS m_path,
m.remark AS m_remark,
+ m.type AS m_type,
+ m.snmp_param AS m_snmp_param,
+ m.snmp_yml AS m_snmp_yml,
a.id AS a_id,
a.sn AS a_sn,
a.model_id AS a_model_id,
@@ -87,4 +103,25 @@
where a.idc_id=#{idcId}
</select>
+ <select id="selectEndpointMetrics" resultType="com.nis.entity.MetricsDto">
+ select count(*) total , ps.id id, ps.host host
+ from endpoint e left join asset a on a.id=e.asset_id
+ left join idc i on i.id=a.idc_id
+ left join prom_server ps on ps.idc_id=i.id
+ where ps.`status`=1 and a.state=1 group by ps.id
+ </select>
+
+ <select id="selectPromServerInfo" resultMap="endpoint" >
+ select e.*,
+ prom.id AS prom_id,
+ prom.idc_id AS prom_idc_id,
+ prom.host AS prom_host,
+ prom.type AS prom_type,
+ prom.port AS prom_port,
+ prom.status AS prom_status,
+ prom.check_time AS prom_check_time
+ from endpoint e left join asset a on e.asset_id=a.id
+ left join prom_server prom on a.idc_id=prom.idc_id
+ where prom.id=#{id}
+ </select>
</mapper> \ No newline at end of file
diff --git a/src/main/resources/mapper/PromserverDao.xml b/src/main/resources/mapper/PromserverDao.xml
index 81b78d1..f845493 100644
--- a/src/main/resources/mapper/PromserverDao.xml
+++ b/src/main/resources/mapper/PromserverDao.xml
@@ -8,7 +8,7 @@
<result property="port" column="port"/>
<result property="type" column="type"/>
<result property="status" column="status"/>
- <result property="lastUpdate" column="last_update"/>
+ <result property="checkTime" column="check_Time"/>
</resultMap>
<select id="selectList" resultMap="promserver">
diff --git a/src/main/resources/spring.xml b/src/main/resources/spring.xml
deleted file mode 100644
index eed53d6..0000000
--- a/src/main/resources/spring.xml
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
- xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:util="http://www.springframework.org/schema/util" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
- http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.1.xsd
- http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.1.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
- http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd
- http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd"
- default-lazy-init="true">
-
- <description>Spring Configuration</description>
-
- <!-- 加载配置属性文件 -->
- <!-- <context:property-placeholder location="classpath*:confagent.properties" /> -->
-
- <!-- <bean id="propertyConfigurer" class="com.nis.util.PropertyPlaceholder"> -->
- <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="location">
- <value>classpath:confagent.properties</value>
- <!-- <value>file:${confagent.dir}/confagent.properties</value> -->
- </property>
- </bean>
-
- <!-- 使用Annotation自动注册Bean,解决事物失效问题:在主容器中不扫描@Controller注解,在SpringMvc中只扫描@Controller注解。 -->
- <context:component-scan base-package="com.nis"><!-- base-package 如果多个,用“,”分隔 -->
- <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
- </context:component-scan>
-
- <!-- MyBatis begin -->
- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- <property name="dataSource" ref="dataSource"/>
- <property name="typeAliasesPackage" value="com.nis.entity"/>
- <property name="mapperLocations" value="classpath:/mapper/*.xml"/>
- <!-- <property name="configLocation" value="classpath:/mybatis-config.xml"></property> -->
- </bean>
-
- <!-- 扫描basePackage下所有以@MyBatisDao注解的接口 -->
- <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
- <property name="basePackage" value="com.nis.dao"/>
- <!-- <property name="annotationClass" value="com.nis.common.persistence.annotation.MyBatisDao"/> -->
- </bean>
-
- <!-- 定义事务 -->
- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource" />
- </bean>
-
- <!-- 配置 Annotation 驱动,扫描@Transactional注解的类定义事务 -->
- <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
- <!-- MyBatis end -->
-
- <!-- 配置 JSR303 Bean Validator 定义 -->
- <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
-
- <!-- 计划任务配置,用 @Service @Lazy(false)标注类,用@Scheduled(cron = "0 0 2 * * ?")标注方法 -->
- <task:executor id="executor" pool-size="10"/>
- <task:scheduler id="scheduler" pool-size="10"/>
- <task:annotation-driven scheduler="scheduler" executor="executor" proxy-target-class="true"/>
-
- <!-- 数据源配置, 使用 BoneCP 数据库连接池 -->
- <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
- <!-- 数据源驱动类可不写,Druid默认会自动根据URL识别DriverClass -->
- <property name="driverClassName" value="${jdbc.driver}" />
-
- <!-- 基本属性 url、user、password -->
- <property name="url" value="${jdbc.url}" />
- <property name="username" value="${jdbc.username}" />
- <property name="password" value="${jdbc.password}" />
-
- <!-- 配置初始化大小、最小、最大-->
- <property name="initialSize" value="5" />
- <property name="minIdle" value="5" />
- <property name="maxActive" value="10" />
-
- <!-- 配置获取连接等待超时的时间 -->
- <property name="maxWait" value="15000" />
-
- <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
- <property name="timeBetweenEvictionRunsMillis" value="60000" />
-
- <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
- <property name="minEvictableIdleTimeMillis" value="300000" />
-
- <!-- <property name="validationQuery" value="${jdbc.testSql}" /> -->
- <property name="testWhileIdle" value="true" />
- <property name="testOnBorrow" value="false" />
- <property name="testOnReturn" value="false" />
-
- <!-- 打开PSCache,并且指定每个连接上PSCache的大小(Oracle使用)
- <property name="poolPreparedStatements" value="true" />
- <property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> -->
-
- <!-- 配置监控统计拦截的filters -->
- <property name="filters" value="stat" />
- </bean>
-
- <bean id="jobFactory" class="com.nis.job.ConfagentJobFactory"/>
-
-
- <!-- 配置Job类 -->
- <bean id="myJob" class="com.nis.job.ConfagentJob"></bean>
-
- <!-- 配置JobDetail -->
- <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
- <!-- 执行目标job -->
- <property name="targetObject" ref="myJob"></property>
- <property name="concurrent" value="false" />
- <!-- 要执行的方法 -->
- <property name="targetMethod" value="execute"></property>
- </bean>
-
- <!-- 配置tirgger触发器 -->
- <bean id="cronTriggerFactoryBean" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
- <!-- jobDetail -->
- <property name="jobDetail" ref="jobDetail"></property>
- <!-- cron表达式,执行时间 每5秒执行一次 -->
- <property name="cronExpression" value="${job.cron}"></property>
- </bean>
-
- <!-- 配置调度工厂 -->
- <bean id="springJobSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
- <property name="jobFactory" ref="jobFactory"/>
- <property name="triggers">
- <list>
- <ref bean="cronTriggerFactoryBean"></ref>
- </list>
- </property>
-
- </bean>
-
- <bean id="snmpTrapServer" class="com.nis.server.SNMPTrapServer" scope="singleton" init-method="initServer" lazy-init ="false"></bean>
-</beans> \ No newline at end of file