diff --git a/itbaima-monitor-server/pom.xml b/itbaima-monitor-server/pom.xml index 1d23028..8538b60 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..3425188 --- /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(timestamp = true) + Instant timestamp; + @Column + double cpuUsage; + @Column + double memoryUsage; + @Column + double diskUsage; + @Column + double networkUpload; + @Column + double networkDownload; + @Column + double diskRead; + @Column + double diskWrite; +} diff --git a/itbaima-monitor-server/src/main/java/com/example/filter/JwtAuthenticationFilter.java b/itbaima-monitor-server/src/main/java/com/example/filter/JwtAuthenticationFilter.java index 70e9ebe..c959072 100644 --- a/itbaima-monitor-server/src/main/java/com/example/filter/JwtAuthenticationFilter.java +++ b/itbaima-monitor-server/src/main/java/com/example/filter/JwtAuthenticationFilter.java @@ -44,6 +44,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { Client client = service.findClientByToken(authorization); if(client == null) { response.setStatus(401); + response.setCharacterEncoding("utf-8"); response.getWriter().write(RestBean.failure(401, "未注册").asJsonString()); return; } else { 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 83cbff3..8a31643 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 org.springframework.beans.BeanUtils; @@ -31,6 +32,9 @@ public class ClientServiceImpl extends ServiceImpl impleme @Resource ClientDetailMapper detailMapper; + @Resource + InfluxDbUtils influx; + @PostConstruct public void initClientCache() { this.list().forEach(this::addClientCache); @@ -77,16 +81,17 @@ public class ClientServiceImpl extends ServiceImpl impleme } } - private Map currentRuntime = new ConcurrentHashMap<>(); + private final Map currentRuntime = new ConcurrentHashMap<>(); @Override public void updateRuntimeDetail(RuntimeDetailVO vo, Client client) { currentRuntime.put(client.getId(), vo); - System.out.println(vo); + influx.writeRuntimeData(client.getId(), vo); } private void addClientCache(Client client) { clientIdCache.put(client.getId(), client); + clientTokenCache.put(client.getToken(), client); } private int randomClientId() { 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..a2b4c32 --- /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 + public 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 984d8f4..f81dc41 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