[agent]-[status] accomplish base - 1

This commit is contained in:
IceDerce
2023-01-04 16:52:59 +08:00
parent e74cf260be
commit 69eb330f2f
10 changed files with 130 additions and 47 deletions

View File

@@ -110,4 +110,10 @@ public class AgentServerInfo {
@Value("${machineId}") @Value("${machineId}")
private String machineId; private String machineId;
/*
* get from octopus server at the end of initialization
*
* */
private String agentTopicName;
} }

View File

@@ -46,6 +46,9 @@ public class OMHandlerInit extends AbstractOctopusMessageHandler {
// 2. send PassThroughTopicName successful info to the server // 2. send PassThroughTopicName successful info to the server
String success = String.format("[Octopus Agent] - [ %s ] has successfully PassThroughTopicName with server [ %s ] !", agentServerInfo.getServerName(), octopusMessage.getUuid()); String success = String.format("[Octopus Agent] - [ %s ] has successfully PassThroughTopicName with server [ %s ] !", agentServerInfo.getServerName(), octopusMessage.getUuid());
// set the topic name to bean
agentServerInfo.setAgentTopicName(octopusMessage.getUuid());
octopusMessage.setResult(success); octopusMessage.setResult(success);
// log.info(success); // log.info(success);

View File

@@ -0,0 +1,26 @@
package io.wdd.agent.config.utils;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
public class TimeUtils {
public static ByteBuffer currentTimeByteBuffer() {
byte[] timeBytes = LocalDateTime.now(ZoneId.of("UTC+8")).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).getBytes(StandardCharsets.UTF_8);
return ByteBuffer.wrap(timeBytes);
}
/**
* @return UTC+8 [ yyyy-MM-dd HH:mm:ss ] Time String
*/
public static String currentTimeString() {
return LocalDateTime.now(ZoneId.of("UTC+8")).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
}

View File

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import io.wdd.agent.config.beans.executor.CommandLog; import io.wdd.agent.config.beans.executor.CommandLog;
import io.wdd.agent.config.beans.executor.StreamSenderEntity; import io.wdd.agent.config.beans.executor.StreamSenderEntity;
import io.wdd.agent.config.utils.TimeUtils;
import io.wdd.agent.executor.thread.LogToArrayListCache; import io.wdd.agent.executor.thread.LogToArrayListCache;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -49,17 +50,7 @@ public class StreamSender {
private final ArrayList<String> cacheLogList = new ArrayList<>(256); private final ArrayList<String> cacheLogList = new ArrayList<>(256);
private static ByteBuffer currentTimeByteBuffer() {
byte[] timeBytes = LocalDateTime.now(ZoneId.of("UTC+8")).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).getBytes(StandardCharsets.UTF_8);
return ByteBuffer.wrap(timeBytes);
}
private static String currentTimeString() {
return LocalDateTime.now(ZoneId.of("UTC+8")).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
@SneakyThrows @SneakyThrows
private static Map generateFakeData() { private static Map generateFakeData() {
@@ -130,7 +121,7 @@ public class StreamSender {
HashMap<String, String> map = new HashMap<>(16); HashMap<String, String> map = new HashMap<>(16);
map.put(currentTimeString(), content); map.put(TimeUtils.currentTimeString(), content);
return doSendLogToStream(streamKey, map); return doSendLogToStream(streamKey, map);

View File

@@ -33,8 +33,35 @@ public class CollectSystemInfo implements ApplicationContextAware {
public AgentServerInfo agentServerInfo; public AgentServerInfo agentServerInfo;
@Bean
@Lazy
@PostConstruct
private void getInjectServerInfo(){
log.info("[ Octopus Agent ]-- Starting getInjectServerInfo");
agentServerInfo = (AgentServerInfo) context.getBean("agentServerInfo");
if (ObjectUtils.isEmpty(agentServerInfo)) {
throw new MyRuntimeException(" Collect server info error !");
}
//log.info("host server info has been collected == {}", agentServerInfo);
// start to send message to Octopus Server
octopusAgentInitService.SendInfoToServer(agentServerInfo);
//log.info("PassThroughTopicName server info has been send to octopus server !");
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.context = applicationContext;
}
@Deprecated
public void initialReadingEnvironment(){ public void initialReadingEnvironment(){
// https://zhuanlan.zhihu.com/p/449416472 // https://zhuanlan.zhihu.com/p/449416472
@@ -84,29 +111,4 @@ public class CollectSystemInfo implements ApplicationContextAware {
} }
} }
@PostConstruct
private void getInjectServerInfo(){
log.info("Octopus Agent -- Starting getInjectServerInfo");
agentServerInfo = (AgentServerInfo) context.getBean("agentServerInfo");
if (ObjectUtils.isEmpty(agentServerInfo)) {
throw new MyRuntimeException(" Collect server info error !");
}
//log.info("host server info has been collected == {}", agentServerInfo);
// start to send message to Octopus Server
octopusAgentInitService.SendInfoToServer(agentServerInfo);
//log.info("PassThroughTopicName server info has been send to octopus server !");
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.context = applicationContext;
}
} }

View File

@@ -2,10 +2,13 @@ package io.wdd.agent.status.hardware;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import io.wdd.agent.config.beans.init.AgentServerInfo;
import io.wdd.agent.config.utils.TimeUtils;
import io.wdd.agent.status.hardware.cpu.CpuInfo; import io.wdd.agent.status.hardware.cpu.CpuInfo;
import io.wdd.agent.status.hardware.memory.MemoryInfo; import io.wdd.agent.status.hardware.memory.MemoryInfo;
import io.wdd.agent.status.redisReporter.AgentStatus; import io.wdd.agent.status.redisReporter.AgentStatus;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.catalina.util.ServerInfo;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import oshi.SystemInfo; import oshi.SystemInfo;
@@ -27,6 +30,9 @@ public class AgentStatusCollector {
@Resource @Resource
ObjectMapper objectMapper; ObjectMapper objectMapper;
@Resource
AgentServerInfo agentServerInfo;
private static final SystemInfo systemInfo; private static final SystemInfo systemInfo;
/** /**
@@ -47,14 +53,15 @@ public class AgentStatusCollector {
} }
public AgentStatus collect() {
public AgentStatus collect(){
AgentStatus agentStatus = AgentStatusCache.get(0); AgentStatus agentStatus = AgentStatusCache.get(0);
/* base */
agentStatus.setAgentName(agentServerInfo.getServerName());
agentStatus.setAgentTopicName(agentServerInfo.getAgentTopicName());
/* CPU */ /* CPU */
// help gc
agentStatus.setCpuInfo(new CpuInfo(hardware.getProcessor(), 1000)); agentStatus.setCpuInfo(new CpuInfo(hardware.getProcessor(), 1000));
/* Memory */ /* Memory */
@@ -63,16 +70,21 @@ public class AgentStatusCollector {
/* Storage */ /* Storage */
agentStatus.setDiskStoreInfo(hardware.getDiskStores()); agentStatus.setDiskStoreInfo(hardware.getDiskStores());
return agentStatus; /* Network */
agentStatus.setNetworkInfo(hardware.getNetworkIFs(false));
/* Time */
agentStatus.setTime(TimeUtils.currentTimeString());
return agentStatus;
} }
private void sendAgentStatusToRedis(){ public void sendAgentStatusToRedis() {
try { try {
log.info("time is [{}] , and agent status are [{}]", LocalDateTime.now(), objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(collect())); log.info("time is [{}] , and agent status are [{}]", LocalDateTime.now(), objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(collect()));
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {

View File

@@ -1,9 +1,15 @@
package io.wdd.agent.status.hardware.cpu; package io.wdd.agent.status.hardware.cpu;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import oshi.hardware.CentralProcessor; import oshi.hardware.CentralProcessor;
import java.text.DecimalFormat; import java.text.DecimalFormat;
@AllArgsConstructor
@Data
@NoArgsConstructor
public class CpuInfo { public class CpuInfo {

View File

@@ -36,7 +36,7 @@ public class MemoryInfo {
return MemoryInfo.builder() return MemoryInfo.builder()
.memoryType(memory.getPhysicalMemory().get(0).getMemoryType()) .memoryType(memory.getPhysicalMemory().get(0).getMemoryType())
.total(FormatUtils.formatData(memory.getTotal())) .total(FormatUtils.formatData(memory.getTotal()))
.available(FormatUtils.formatRate(memory.getAvailable())) .available(FormatUtils.formatData(memory.getAvailable()))
.usage(FormatUtils.formatData(memory.getTotal() - memory.getAvailable())) .usage(FormatUtils.formatData(memory.getTotal() - memory.getAvailable()))
.swapTotal(FormatUtils.formatData(virtualMemory.getSwapTotal())) .swapTotal(FormatUtils.formatData(virtualMemory.getSwapTotal()))
.swapUsage(FormatUtils.formatData(virtualMemory.getSwapUsed())) .swapUsage(FormatUtils.formatData(virtualMemory.getSwapUsed()))

View File

@@ -8,6 +8,7 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder; import lombok.experimental.SuperBuilder;
import oshi.hardware.HWDiskStore; import oshi.hardware.HWDiskStore;
import oshi.hardware.NetworkIF;
import java.util.List; import java.util.List;
@@ -17,13 +18,19 @@ import java.util.List;
@SuperBuilder(toBuilder = true) @SuperBuilder(toBuilder = true)
public class AgentStatus { public class AgentStatus {
CpuInfo cpuInfo; String time;
String agentName;
String agentTopicName;
CpuInfo cpuInfo;
MemoryInfo memoryInfo; MemoryInfo memoryInfo;
List<HWDiskStore> diskStoreInfo; List<HWDiskStore> diskStoreInfo;
List<NetworkIF> networkInfo;
} }

View File

@@ -2,6 +2,7 @@ package io.wdd.agent;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import io.wdd.agent.status.hardware.AgentStatusCollector;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import oshi.SystemInfo; import oshi.SystemInfo;
@@ -10,13 +11,24 @@ import oshi.software.os.OSFileStore;
import oshi.software.os.OperatingSystem; import oshi.software.os.OperatingSystem;
import oshi.util.tuples.Pair; import oshi.util.tuples.Pair;
import javax.annotation.Resource;
import java.io.File; import java.io.File;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
@SpringBootTest @SpringBootTest
public class OSHITest { public class OSHITest {
@Resource
AgentStatusCollector agentStatusCollector;
@Test
void testCollect(){
agentStatusCollector.sendAgentStatusToRedis();
}
@Test @Test
void getSystemHardwareInfo(){ void getSystemHardwareInfo(){
@@ -45,8 +57,24 @@ public class OSHITest {
GlobalMemory mem = hal.getMemory(); GlobalMemory mem = hal.getMemory();
System.out.println(mapper.writeValueAsString(mem)); System.out.println(mapper.writeValueAsString(mem));
for (int i = 0; i < 100; i++) {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDefaultLeniency(true);
String s = objectMapper.writeValueAsString(mem);
}
TimeUnit.SECONDS.sleep(10);
GlobalMemory globalMemory = hal.getMemory();
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(globalMemory));
// DiskStorage
List<HWDiskStore> diskStores = hal.getDiskStores();
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(diskStores));
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
System.out.println("Exception encountered: " + e.getMessage()); System.out.println("Exception encountered: " + e.getMessage());
} catch (InterruptedException e) {
throw new RuntimeException(e);
} }
} }
@@ -114,4 +142,6 @@ public class OSHITest {
} }
} }