[ server ] [ executor ] - optimize code
This commit is contained in:
4
.github/workflows/build-push-docker.yml
vendored
4
.github/workflows/build-push-docker.yml
vendored
@@ -128,9 +128,9 @@ jobs:
|
||||
echo "--------------------------------------"
|
||||
cd ./agent/target
|
||||
ls
|
||||
date --date='TZ="Asia/Shanghai"' --rfc-3339=seconds | cut -d"+" -f1 | sed "s/ /-/g" | sed "s/:/-/g"
|
||||
echo "current time is $(date --rfc-3339=seconds | cut -d"+" -f1 | sed "s/ /-/g" | sed "s/:/-/g")"
|
||||
echo "start to copy target jar"
|
||||
cp ./agent-*.jar ./octopus-agent-$(date --date='TZ="Asia/Shanghai"' --rfc-3339=seconds | cut -d"+" -f1 | sed "s/ /-/g" | sed "s/:/-/g").jar
|
||||
cp ./agent-*.jar ./octopus-agent-$(date --rfc-3339=seconds | cut -d"+" -f1 | sed "s/ /-/g" | sed "s/:/-/g").jar
|
||||
cd /home/runner/work/ProjectOctopus/ProjectOctopus
|
||||
echo "--------------------------------------"
|
||||
cat /proc/cpuinfo
|
||||
|
||||
@@ -30,7 +30,7 @@ public class CommandExecutor {
|
||||
/**
|
||||
* handle command from octopus server
|
||||
*
|
||||
* @param executionMessage get from EXECUTOR_HANDLER
|
||||
* @param executionMessage get from EXECUTOR_HANDLERju
|
||||
*/
|
||||
public void execute(ExecutionMessage executionMessage) {
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package io.wdd.rpc.execute.service;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import io.wdd.common.beans.executor.ExecutionMessage;
|
||||
import io.wdd.common.beans.rabbitmq.OctopusMessage;
|
||||
import io.wdd.common.beans.rabbitmq.OctopusMessageType;
|
||||
@@ -18,6 +20,8 @@ public class CoreExecutionServiceImpl implements CoreExecutionService {
|
||||
@Resource
|
||||
ToAgentMessageSender messageSender;
|
||||
|
||||
@Resource
|
||||
ObjectMapper objectMapper;
|
||||
|
||||
@Override
|
||||
public String SendCommandToAgent(String topicName, String command) {
|
||||
@@ -34,11 +38,22 @@ public class CoreExecutionServiceImpl implements CoreExecutionService {
|
||||
|
||||
OctopusMessage octopusMessage = this.generateOctopusMessage(topicName, type, commandList);
|
||||
|
||||
ExecutionMessage executionMessage = (ExecutionMessage) octopusMessage.getContent();
|
||||
|
||||
String executionMsg;
|
||||
|
||||
try {
|
||||
|
||||
executionMsg = objectMapper.writeValueAsString(executionMessage);
|
||||
octopusMessage.setContent(executionMsg);
|
||||
|
||||
} catch (JsonProcessingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
messageSender.send(octopusMessage);
|
||||
|
||||
ExecutionMessage content = (ExecutionMessage) octopusMessage.getContent();
|
||||
|
||||
return content.getResultKey();
|
||||
return executionMessage.getResultKey();
|
||||
}
|
||||
|
||||
|
||||
@@ -53,15 +68,16 @@ public class CoreExecutionServiceImpl implements CoreExecutionService {
|
||||
|
||||
private OctopusMessage generateOctopusMessage(String topicName, String type, List<String> commandList){
|
||||
|
||||
ExecutionMessage executionMessage = generateExecutionMessage(
|
||||
type,
|
||||
commandList,
|
||||
generateCommandResultKey(topicName)
|
||||
);
|
||||
|
||||
return OctopusMessage.builder()
|
||||
.type(OctopusMessageType.EXECUTOR)
|
||||
.init_time(LocalDateTime.now())
|
||||
.content(generateExecutionMessage(
|
||||
type,
|
||||
commandList,
|
||||
generateCommandResultKey(topicName)
|
||||
))
|
||||
.content(executionMessage)
|
||||
.uuid(topicName)
|
||||
.build();
|
||||
}
|
||||
|
||||
@@ -104,6 +104,7 @@ public class AcceptAgentInitInfo {
|
||||
if (!checkAgentAlreadyRegister(agentQueueTopic)) {
|
||||
// 3. save the agent info into database
|
||||
// backend fixed thread daemon to operate the database ensuring the operation is correct !
|
||||
log.info("[AGENT INIT] - agent not exist ! start to register !");
|
||||
if (!databaseOperator.saveInitOctopusAgentInfo(serverInfoVO)) {
|
||||
throw new MyRuntimeException("database save agent info error !");
|
||||
}
|
||||
|
||||
@@ -40,8 +40,10 @@ public class OctopusMessageHandlerServer {
|
||||
|
||||
// todo what to do after received the result
|
||||
|
||||
// log info ?
|
||||
// update the database
|
||||
// handle the result
|
||||
// collect all message from agent and log to somewhere
|
||||
|
||||
// 1. send some info to the specific topic name
|
||||
// 2. judge from which agent the message are
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,9 +53,13 @@ public class ToAgentMessageSender {
|
||||
|
||||
public void send(OctopusMessage octopusMessage) {
|
||||
|
||||
log.info("OctopusMessage {} send to agent {}",octopusMessage, octopusMessage.getUuid());
|
||||
log.info("OctopusMessage {} send to agent {}", octopusMessage, octopusMessage.getUuid());
|
||||
|
||||
|
||||
rabbitTemplate.convertAndSend(
|
||||
initRabbitMQConfig.OCTOPUS_EXCHANGE,
|
||||
octopusMessage.getUuid()+"*",
|
||||
writeData(octopusMessage));
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import io.wdd.server.beans.vo.ServerInfoVO;
|
||||
import io.wdd.server.coreService.CoreServerService;
|
||||
import io.wdd.server.service.*;
|
||||
import io.wdd.server.utils.EntityUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
|
||||
@@ -24,6 +25,7 @@ import java.util.stream.Collectors;
|
||||
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class CoreServerServiceImpl implements CoreServerService {
|
||||
|
||||
@Resource
|
||||
|
||||
@@ -2,11 +2,11 @@ spring:
|
||||
application:
|
||||
name: octopus-server
|
||||
profiles:
|
||||
active: k3s
|
||||
active: local
|
||||
cloud:
|
||||
nacos:
|
||||
config:
|
||||
group: k3s
|
||||
group: local
|
||||
config-retry-time: 3000
|
||||
file-extension: yaml
|
||||
max-retry: 3
|
||||
@@ -16,5 +16,5 @@ spring:
|
||||
timeout: 5000
|
||||
config-long-poll-timeout: 5000
|
||||
extension-configs:
|
||||
- group: k3s
|
||||
data-id: common-k3s.yaml
|
||||
- group: local
|
||||
data-id: common-local.yaml
|
||||
@@ -1,12 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
containerId=$(docker ps | grep octopus-agent | awk '{print$1}')
|
||||
|
||||
docker container stop $(containerId) && docker container rm $(containerId)
|
||||
|
||||
echo "y
|
||||
" | docker container prune
|
||||
|
||||
docker image rmi octopus-agent-ubuntu:latest -y
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
##### environment variables ######
|
||||
|
||||
RepoSourcePath=https://raw.githubusercontent.com/zeaslity/ProjectOctopus/main/source/src/main/java/io/wdd/source/shell
|
||||
OctopusAgentUrl=https://happybirthday.107421.xyz/octopus-agent/
|
||||
DependLibFiles=(
|
||||
wdd-lib-file.sh
|
||||
wdd-lib-log.sh
|
||||
@@ -199,7 +200,8 @@ DownloadAllFile() {
|
||||
colorEcho $BLUE "start to download octopus agent !"
|
||||
# check for latest version
|
||||
# download the lasted jar
|
||||
wget https://happybirthday.107421.xyz/octopus-agent/octopus-agent-2022-12-21-16-00-00.jar -O /octopus-agent/agent.jar
|
||||
. ./lib/wdd-lib-os.sh
|
||||
CheckAndDownloadLatestVersion
|
||||
|
||||
FunctionSuccess
|
||||
FunctionEnd
|
||||
@@ -265,24 +267,32 @@ InstallJDKPackage() {
|
||||
}
|
||||
|
||||
systemdAgent(){
|
||||
local JAVA_OPTS="-Xms128m -Xmx256m"
|
||||
local JAVA_OPTS="-Xms128m -Xmx512m"
|
||||
|
||||
# https://www.baeldung.com/linux/run-java-application-as-service
|
||||
|
||||
cat >/etc/systemd/system/octopus-agent.service <<EOF
|
||||
[Unit]
|
||||
Description=Octopus Agent
|
||||
Description=Octopus Agent Service
|
||||
Documentation=https://octopus.107421.xyz/
|
||||
After=network.target
|
||||
After=syslog.target network.target
|
||||
|
||||
[Service]
|
||||
SuccessExitStatus=143
|
||||
|
||||
PermissionsStartOnly=true
|
||||
LimitNOFILE=1048576
|
||||
LimitNPROC=65535
|
||||
User=root
|
||||
WorkingDirectory=/octopus-agent
|
||||
ExecStart=java -jar /octopus-agent/agent.jar ${JAVA_OPTS}
|
||||
ExecReload=source /etc/environment
|
||||
Restart=on-failure
|
||||
|
||||
User=root
|
||||
|
||||
Type=simple
|
||||
WorkingDirectory=/octopus-agent
|
||||
|
||||
ExecStart=java -jar /octopus-agent/agent.jar ${JAVA_OPTS}
|
||||
ExecStop=/bin/kill -15 $MAINPID
|
||||
|
||||
Restart=on-failure
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
20
source/src/main/java/io/wdd/source/shell/agent-reboot.sh
Normal file
20
source/src/main/java/io/wdd/source/shell/agent-reboot.sh
Normal file
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
. ./lib/wdd-lib-log.sh
|
||||
. ./lib/wdd-lib-sys.sh
|
||||
|
||||
|
||||
FunctionStart
|
||||
|
||||
log "prepare the env"
|
||||
chmod +x ./lib/wdd-lib-env.sh
|
||||
./lib/wdd-lib-env.sh
|
||||
|
||||
systemctl stop octopus-agent.service
|
||||
systemctl start octopus-agent.service
|
||||
|
||||
FunctionSuccess
|
||||
FunctionEnd
|
||||
|
||||
|
||||
25
source/src/main/java/io/wdd/source/shell/agent-update.sh
Normal file
25
source/src/main/java/io/wdd/source/shell/agent-update.sh
Normal file
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
. ./lib/wdd-lib-log.sh
|
||||
. ./lib/wdd-lib-sys.sh
|
||||
. ./lib/wdd-lib-os.sh
|
||||
|
||||
|
||||
RepoSourcePath=https://raw.githubusercontent.com/zeaslity/ProjectOctopus/main/source/src/main/java/io/wdd/source/shell
|
||||
|
||||
|
||||
|
||||
CheckAndDownloadLatestVersion
|
||||
|
||||
|
||||
if [[ ! -f /octopus-agent/agent-reboot.sh ]]; then\
|
||||
warn "agent-bootup.sh not exist! start to download !"
|
||||
cd /octopus-agent
|
||||
wget $RepoSourcePath/agent-reboot.sh
|
||||
fi
|
||||
|
||||
|
||||
log "start to reboot the octopus agent !"
|
||||
chmod +x /octopus-agent/agent-reboot.sh
|
||||
/octopus-agent/agent-reboot.sh
|
||||
@@ -263,26 +263,26 @@ else
|
||||
machineNumber=99
|
||||
fi
|
||||
cat >>/etc/environment<<EOF
|
||||
export serverName="${city}-${hostArch}-${machineNumber}"
|
||||
export serverIpPbV4="$public_ipv4"
|
||||
export serverIpInV4=""
|
||||
export serverIpPbV6=""
|
||||
export serverIpInV6=""
|
||||
export location="$city $region $country"
|
||||
export provider="$org"
|
||||
export managePort="$(netstat -ntulp | grep sshd | grep -w tcp | awk '{print$4}' | cut -d":" -f2)"
|
||||
export cpuCore="$cores @ $freq MHz"
|
||||
export cpuBrand="$cpuName"
|
||||
export memoryTotal="$tram"
|
||||
export diskTotal="$disk_total_size"
|
||||
export diskUsage="$disk_used_size"
|
||||
export archInfo="$arch ($lbit Bit)"
|
||||
export osInfo="$opsy"
|
||||
export osKernelInfo="$kern"
|
||||
export tcpControl="$tcpctrl"
|
||||
export virtualization="$virt"
|
||||
export ioSpeed="$ioavg MB/s"
|
||||
export machineId="$(cat /etc/machine-id)"
|
||||
export serverName=${city}-${hostArch}-${machineNumber}
|
||||
export serverIpPbV4=$public_ipv4
|
||||
export serverIpInV4=
|
||||
export serverIpPbV6=
|
||||
export serverIpInV6=
|
||||
export location=$city $region $country
|
||||
export provider=$org
|
||||
export managePort=$(netstat -ntulp | grep sshd | grep -w tcp | awk '{print$4}' | cut -d":" -f2)
|
||||
export cpuCore=$cores @ $freq MHz
|
||||
export cpuBrand=$cpuName
|
||||
export memoryTotal=$tram
|
||||
export diskTotal=$disk_total_size
|
||||
export diskUsage=$disk_used_size
|
||||
export archInfo=$arch ($lbit Bit)
|
||||
export osInfo=$opsy
|
||||
export osKernelInfo=$kern
|
||||
export tcpControl=$tcpctrl
|
||||
export virtualization=$virt
|
||||
export ioSpeed=$ioavg MB/s
|
||||
export machineId=$(cat /etc/machine-id)
|
||||
EOF
|
||||
|
||||
log "env collect complete!"
|
||||
|
||||
@@ -1,112 +1,27 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Library for logging functions
|
||||
|
||||
# Constants
|
||||
RESET='\033[0m'
|
||||
RED='\033[38;5;1m'
|
||||
GREEN='\033[38;5;2m'
|
||||
YELLOW='\033[38;5;3m'
|
||||
MAGENTA='\033[38;5;5m'
|
||||
CYAN='\033[38;5;6m'
|
||||
|
||||
# Functions
|
||||
. ./wdd-lib-log.sh
|
||||
|
||||
########################
|
||||
# Print to STDERR
|
||||
# Arguments:
|
||||
# Message to print
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
stderr_print() {
|
||||
# 'is_boolean_yes' is defined in libvalidations.sh, but depends on this file so we cannot source it
|
||||
local bool="${BITNAMI_QUIET:-false}"
|
||||
# comparison is performed without regard to the case of alphabetic characters
|
||||
shopt -s nocasematch
|
||||
if ! [[ "$bool" = 1 || "$bool" =~ ^(yes|true)$ ]]; then
|
||||
printf "%b\\n" "${*}" >&2
|
||||
fi
|
||||
}
|
||||
OctopusAgentUrl=https://happybirthday.107421.xyz/octopus-agent/
|
||||
|
||||
########################
|
||||
# Log message
|
||||
# Arguments:
|
||||
# Message to log
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
log() {
|
||||
stderr_print "${CYAN}${MODULE:-} ${MAGENTA}$(date "+%Y-%m-%d %H:%M:%S.%2N ")${RESET}${*}"
|
||||
}
|
||||
########################
|
||||
# Log an 'info' message
|
||||
# Arguments:
|
||||
# Message to log
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
info() {
|
||||
log "${GREEN}INFO ${RESET} ==> ${*}"
|
||||
}
|
||||
########################
|
||||
# Log message
|
||||
# Arguments:
|
||||
# Message to log
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
warn() {
|
||||
log "${YELLOW}WARN ${RESET} ==> ${*}"
|
||||
}
|
||||
########################
|
||||
# Log an 'error' message
|
||||
# Arguments:
|
||||
# Message to log
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
error() {
|
||||
log "${RED}ERROR${RESET} ==> ${*}"
|
||||
}
|
||||
########################
|
||||
# Log a 'debug' message
|
||||
# Globals:
|
||||
# BITNAMI_DEBUG
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
debug() {
|
||||
# 'is_boolean_yes' is defined in libvalidations.sh, but depends on this file so we cannot source it
|
||||
local bool="${BITNAMI_DEBUG:-true}"
|
||||
# comparison is performed without regard to the case of alphabetic characters
|
||||
shopt -s nocasematch
|
||||
if [[ "$bool" = 1 || "$bool" =~ ^(yes|true)$ ]]; then
|
||||
log "${MAGENTA}DEBUG${RESET} ==> ${*}"
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Indent a string
|
||||
# Arguments:
|
||||
# $1 - string
|
||||
# $2 - number of indentation characters (default: 4)
|
||||
# $3 - indentation character (default: " ")
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
indent() {
|
||||
local string="${1:-}"
|
||||
local num="${2:?missing num}"
|
||||
local char="${3:-" "}"
|
||||
# Build the indentation unit string
|
||||
local indent_unit=""
|
||||
for ((i = 0; i < num; i++)); do
|
||||
indent_unit="${indent_unit}${char}"
|
||||
done
|
||||
# shellcheck disable=SC2001
|
||||
# Complex regex, see https://github.com/koalaman/shellcheck/wiki/SC2001#exceptions
|
||||
echo "$string" | sed "s/^/${indent_unit}/"
|
||||
}
|
||||
CheckAndDownloadLatestVersion(){
|
||||
|
||||
log "checking for the latest version"
|
||||
local latestVersion=$(curl $OctopusAgentUrl | grep -v h1 | grep "a href=" | awk '{print$2}' |cut -d">" -f2 | cut -d"<" -f1)
|
||||
|
||||
log "octopus agent latest version is => [ $latestVersion ]"
|
||||
|
||||
rm -rf /octopus-agent/*.jar
|
||||
cd /octopus-agent
|
||||
|
||||
log "start to download the latest version !"
|
||||
|
||||
wget "$OctopusAgentUrl$latestVersion"
|
||||
cp "$OctopusAgentUrl$latestVersion" agent.jar
|
||||
|
||||
log ""
|
||||
ls /octopus-agent/ | grep jar
|
||||
|
||||
}
|
||||
@@ -95,6 +95,46 @@ check_sys() {
|
||||
return 0
|
||||
}
|
||||
|
||||
RED="31m" ## 姨妈红
|
||||
GREEN="32m" ## 水鸭青
|
||||
YELLOW="33m" ## 鸭屎黄
|
||||
PURPLE="35m" ## 基佬紫
|
||||
BLUE="36m" ## 天依蓝
|
||||
BlinkGreen="32;5m" ##闪烁的绿色
|
||||
BlinkRed="31;5m" ##闪烁的红色
|
||||
BackRed="41m" ## 背景红色
|
||||
SplitLine="----------------------" #会被sys函数中的方法重写
|
||||
|
||||
######## 颜色函数方法很精妙 ############
|
||||
colorEcho() {
|
||||
echo -e "\033[${1}${@:2}\033[0m" 1>&2
|
||||
}
|
||||
|
||||
check_root() {
|
||||
if [[ $EUID != 0 ]]; then
|
||||
colorEcho ${RED} "当前非root账号(或没有root权限),无法继续操作,请更换root账号!"
|
||||
colorEcho ${YELLOW} "使用sudo -命令获取临时root权限(执行后可能会提示输入root密码)"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
FunctionStart() {
|
||||
colorEcho ${PURPLE} ${SplitLine}
|
||||
colorEcho ${PURPLE} ${SplitLine}
|
||||
echo ""
|
||||
}
|
||||
|
||||
FunctionSuccess() {
|
||||
colorEcho ${GREEN} ${SplitLine}
|
||||
echo ""
|
||||
}
|
||||
|
||||
FunctionEnd() {
|
||||
echo ""
|
||||
colorEcho ${BlinkGreen} ${SplitLine}
|
||||
echo ""
|
||||
echo ""
|
||||
}
|
||||
|
||||
tmp () {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user