diff --git a/itbaima-monitor-server/pom.xml b/itbaima-monitor-server/pom.xml index bf08e50..7f75cde 100644 --- a/itbaima-monitor-server/pom.xml +++ b/itbaima-monitor-server/pom.xml @@ -94,6 +94,12 @@ springdoc-openapi-starter-webmvc-ui 2.1.0 + + + com.influxdb + influxdb-client-java + 6.6.0 + diff --git a/itbaima-monitor-server/src/main/java/com/example/entity/dto/RuntimeData.java b/itbaima-monitor-server/src/main/java/com/example/entity/dto/RuntimeData.java new file mode 100644 index 0000000..c50ffa3 --- /dev/null +++ b/itbaima-monitor-server/src/main/java/com/example/entity/dto/RuntimeData.java @@ -0,0 +1,30 @@ +package com.example.entity.dto; + +import com.influxdb.annotations.Column; +import com.influxdb.annotations.Measurement; +import lombok.Data; + +import java.time.Instant; + +@Data +@Measurement(name = "runtime") +public class RuntimeData { + @Column(tag = true) + int clientId; + @Column + double cpuUsage; + @Column + double memoryUsage; + @Column + double diskUsage; + @Column + double networkUpload; + @Column + double networkDownload; + @Column + double diskRead; + @Column + double diskWrite; + @Column(timestamp = true) + Instant timestamp; +} diff --git a/itbaima-monitor-server/src/main/java/com/example/filter/RequestLogFilter.java b/itbaima-monitor-server/src/main/java/com/example/filter/RequestLogFilter.java index 4ab82b6..52525e5 100644 --- a/itbaima-monitor-server/src/main/java/com/example/filter/RequestLogFilter.java +++ b/itbaima-monitor-server/src/main/java/com/example/filter/RequestLogFilter.java @@ -29,7 +29,7 @@ public class RequestLogFilter extends OncePerRequestFilter { @Resource SnowflakeIdGenerator generator; - private final Set ignores = Set.of("/swagger-ui", "/v3/api-docs"); + private final Set ignores = Set.of("/swagger-ui", "/v3/api-docs", "/monitor/runtime"); @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { diff --git a/itbaima-monitor-server/src/main/java/com/example/service/impl/ClientServiceImpl.java b/itbaima-monitor-server/src/main/java/com/example/service/impl/ClientServiceImpl.java index 7b0e74c..da69452 100644 --- a/itbaima-monitor-server/src/main/java/com/example/service/impl/ClientServiceImpl.java +++ b/itbaima-monitor-server/src/main/java/com/example/service/impl/ClientServiceImpl.java @@ -8,6 +8,7 @@ import com.example.entity.vo.request.RuntimeDetailVO; import com.example.mapper.ClientDetailMapper; import com.example.mapper.ClientMapper; import com.example.service.ClientService; +import com.example.utils.InfluxDbUtils; import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -29,6 +30,9 @@ public class ClientServiceImpl extends ServiceImpl impleme @Resource private ClientDetailMapper detailMapper; + @Resource + private InfluxDbUtils influx; + @PostConstruct public void initClientCache() { this.list().forEach(this::addClientCache); @@ -76,11 +80,13 @@ public class ClientServiceImpl extends ServiceImpl impleme } } - private Map test = new HashMap<>(); + private final Map lastRuntime = new HashMap<>(); @Override public void updateRuntimeDetail(RuntimeDetailVO vo, Client client) { - test.put(client, vo); + RuntimeDetailVO oldData = lastRuntime.put(client, vo); + if(oldData != null) + influx.writeRuntimeData(client.getId(), oldData); } private void addClientCache(Client client) { diff --git a/itbaima-monitor-server/src/main/java/com/example/utils/InfluxDbUtils.java b/itbaima-monitor-server/src/main/java/com/example/utils/InfluxDbUtils.java new file mode 100644 index 0000000..c0ef686 --- /dev/null +++ b/itbaima-monitor-server/src/main/java/com/example/utils/InfluxDbUtils.java @@ -0,0 +1,44 @@ +package com.example.utils; + +import com.example.entity.dto.RuntimeData; +import com.example.entity.vo.request.RuntimeDetailVO; +import com.influxdb.client.InfluxDBClient; +import com.influxdb.client.InfluxDBClientFactory; +import com.influxdb.client.WriteApiBlocking; +import com.influxdb.client.domain.WritePrecision; +import jakarta.annotation.PostConstruct; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.Date; + +@Component +public class InfluxDbUtils { + + @Value("${spring.influx.url}") + String url; + @Value("${spring.influx.user}") + String user; + @Value("${spring.influx.password}") + String password; + + private final String BUCKET = "monitor"; + private final String ORG = "itbaima"; + + private InfluxDBClient client; + + @PostConstruct + private void init() { + client = InfluxDBClientFactory.create(url, user, password.toCharArray()); + } + + public void writeRuntimeData(int clientId, RuntimeDetailVO vo) { + RuntimeData data = new RuntimeData(); + BeanUtils.copyProperties(vo, data); + data.setTimestamp(new Date(vo.getTimestamp()).toInstant()); + data.setClientId(clientId); + WriteApiBlocking writeApi = client.getWriteApiBlocking(); + writeApi.writeMeasurement(BUCKET, ORG, WritePrecision.NS, data); + } +} diff --git a/itbaima-monitor-server/src/main/resources/application-dev.yml b/itbaima-monitor-server/src/main/resources/application-dev.yml index 81fac07..9a8688b 100644 --- a/itbaima-monitor-server/src/main/resources/application-dev.yml +++ b/itbaima-monitor-server/src/main/resources/application-dev.yml @@ -4,6 +4,10 @@ springdoc: swagger-ui: operations-sorter: alpha spring: + influx: + url: http://localhost:8086 + user: admin + password: 12345678 mail: host: smtp.163.com username: javastudy111@163.com diff --git a/itbaima-monitor-server/src/main/resources/application-prod.yml b/itbaima-monitor-server/src/main/resources/application-prod.yml index 158f3ec..fae71be 100644 --- a/itbaima-monitor-server/src/main/resources/application-prod.yml +++ b/itbaima-monitor-server/src/main/resources/application-prod.yml @@ -8,6 +8,10 @@ mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl spring: + influx: + url: http://localhost:8086 + user: admin + password: 12345678 mail: host: smtp.163.com username: javastudy111@163.com diff --git a/itbaima-monitor-web/itbaima-monitor-web.iml b/itbaima-monitor-web/itbaima-monitor-web.iml index 15fa616..0f035bf 100644 --- a/itbaima-monitor-web/itbaima-monitor-web.iml +++ b/itbaima-monitor-web/itbaima-monitor-web.iml @@ -2,7 +2,9 @@ - + + + diff --git a/itbaima-monitor.iml b/itbaima-monitor.iml index 0aa69c3..9a87ac5 100644 --- a/itbaima-monitor.iml +++ b/itbaima-monitor.iml @@ -4,6 +4,7 @@ +