mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2025-10-13 19:49:12 +00:00
Compare commits
4 commits
b65ec83c39
...
a824875c4f
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a824875c4f | ||
![]() |
cafcb250ec | ||
![]() |
e7cfee570b | ||
![]() |
90c3529301 |
5 changed files with 44 additions and 28 deletions
|
@ -53,7 +53,7 @@ install_base() {
|
|||
arch | manjaro | parch)
|
||||
pacman -Syu && pacman -Syu --noconfirm wget curl tar tzdata
|
||||
;;
|
||||
opensuse-tumbleweed)
|
||||
opensuse-tumbleweed | opensuse-leap)
|
||||
zypper refresh && zypper -q install -y wget curl tar timezone
|
||||
;;
|
||||
alpine)
|
||||
|
|
|
@ -76,7 +76,7 @@ install_base() {
|
|||
ubuntu | debian | armbian)
|
||||
apt-get update >/dev/null 2>&1 && apt-get install -y -q wget curl tar tzdata >/dev/null 2>&1
|
||||
;;
|
||||
centos | almalinux | rocky | ol)
|
||||
centos | rhel | almalinux | rocky | ol)
|
||||
yum -y update >/dev/null 2>&1 && yum install -y -q wget curl tar tzdata >/dev/null 2>&1
|
||||
;;
|
||||
fedora | amzn | virtuozzo)
|
||||
|
@ -85,7 +85,7 @@ install_base() {
|
|||
arch | manjaro | parch)
|
||||
pacman -Syu >/dev/null 2>&1 && pacman -Syu --noconfirm wget curl tar tzdata >/dev/null 2>&1
|
||||
;;
|
||||
opensuse-tumbleweed)
|
||||
opensuse-tumbleweed | opensuse-leap)
|
||||
zypper refresh >/dev/null 2>&1 && zypper -q install -y wget curl tar timezone >/dev/null 2>&1
|
||||
;;
|
||||
alpine)
|
||||
|
|
|
@ -37,13 +37,19 @@ func (j *PeriodicTrafficResetJob) Run() {
|
|||
resetCount := 0
|
||||
|
||||
for _, inbound := range inbounds {
|
||||
if err := j.inboundService.ResetAllClientTraffics(inbound.Id); err != nil {
|
||||
logger.Warning("Failed to reset traffic for inbound", inbound.Id, ":", err)
|
||||
continue
|
||||
resetInboundErr := j.inboundService.ResetAllTraffics()
|
||||
if resetInboundErr != nil {
|
||||
logger.Warning("Failed to reset traffic for inbound", inbound.Id, ":", resetInboundErr)
|
||||
}
|
||||
|
||||
resetCount++
|
||||
logger.Infof("Reset traffic for inbound %d (%s)", inbound.Id, inbound.Remark)
|
||||
resetClientErr := j.inboundService.ResetAllClientTraffics(inbound.Id)
|
||||
if resetClientErr != nil {
|
||||
logger.Warning("Failed to reset traffic for all users of inbound", inbound.Id, ":", resetClientErr)
|
||||
}
|
||||
|
||||
if resetInboundErr == nil && resetClientErr == nil {
|
||||
resetCount++
|
||||
}
|
||||
}
|
||||
|
||||
if resetCount > 0 {
|
||||
|
|
|
@ -110,6 +110,7 @@ type ServerService struct {
|
|||
mu sync.Mutex
|
||||
lastCPUTimes cpu.TimesStat
|
||||
hasLastCPUSample bool
|
||||
hasNativeCPUSample bool
|
||||
emaCPU float64
|
||||
cpuHistory []CPUSample
|
||||
cachedCpuSpeedMhz float64
|
||||
|
@ -432,23 +433,27 @@ func (s *ServerService) AppendCpuSample(t time.Time, v float64) {
|
|||
}
|
||||
|
||||
func (s *ServerService) sampleCPUUtilization() (float64, error) {
|
||||
// Prefer native Windows API to avoid external deps for CPU percent
|
||||
if runtime.GOOS == "windows" {
|
||||
if pct, err := sys.CPUPercentRaw(); err == nil {
|
||||
s.mu.Lock()
|
||||
// Smooth with EMA
|
||||
const alpha = 0.3
|
||||
if s.emaCPU == 0 {
|
||||
s.emaCPU = pct
|
||||
} else {
|
||||
s.emaCPU = alpha*pct + (1-alpha)*s.emaCPU
|
||||
}
|
||||
val := s.emaCPU
|
||||
// Try native platform-specific CPU implementation first (Windows, Linux, macOS)
|
||||
if pct, err := sys.CPUPercentRaw(); err == nil {
|
||||
s.mu.Lock()
|
||||
// First call to native method returns 0 (initializes baseline)
|
||||
if !s.hasNativeCPUSample {
|
||||
s.hasNativeCPUSample = true
|
||||
s.mu.Unlock()
|
||||
return val, nil
|
||||
return 0, nil
|
||||
}
|
||||
// If native call fails, fall back to gopsutil times
|
||||
// Smooth with EMA
|
||||
const alpha = 0.3
|
||||
if s.emaCPU == 0 {
|
||||
s.emaCPU = pct
|
||||
} else {
|
||||
s.emaCPU = alpha*pct + (1-alpha)*s.emaCPU
|
||||
}
|
||||
val := s.emaCPU
|
||||
s.mu.Unlock()
|
||||
return val, nil
|
||||
}
|
||||
// If native call fails, fall back to gopsutil times
|
||||
// Read aggregate CPU times (all CPUs combined)
|
||||
times, err := cpu.Times(false)
|
||||
if err != nil {
|
||||
|
@ -471,17 +476,16 @@ func (s *ServerService) sampleCPUUtilization() (float64, error) {
|
|||
}
|
||||
|
||||
// Compute busy and total deltas
|
||||
// Note: Guest and GuestNice times are already included in User and Nice respectively,
|
||||
// so we exclude them to avoid double-counting (Linux kernel accounting)
|
||||
idleDelta := cur.Idle - s.lastCPUTimes.Idle
|
||||
// Sum of busy deltas (exclude Idle)
|
||||
busyDelta := (cur.User - s.lastCPUTimes.User) +
|
||||
(cur.System - s.lastCPUTimes.System) +
|
||||
(cur.Nice - s.lastCPUTimes.Nice) +
|
||||
(cur.Iowait - s.lastCPUTimes.Iowait) +
|
||||
(cur.Irq - s.lastCPUTimes.Irq) +
|
||||
(cur.Softirq - s.lastCPUTimes.Softirq) +
|
||||
(cur.Steal - s.lastCPUTimes.Steal) +
|
||||
(cur.Guest - s.lastCPUTimes.Guest) +
|
||||
(cur.GuestNice - s.lastCPUTimes.GuestNice)
|
||||
(cur.Steal - s.lastCPUTimes.Steal)
|
||||
|
||||
totalDelta := busyDelta + idleDelta
|
||||
|
||||
|
|
10
x-ui.sh
10
x-ui.sh
|
@ -189,9 +189,9 @@ reset_user() {
|
|||
fi
|
||||
|
||||
read -rp "Please set the login username [default is a random username]: " config_account
|
||||
[[ -z $config_account ]] && config_account=$(date +%s%N | md5sum | cut -c 1-8)
|
||||
[[ -z $config_account ]] && config_account=$(gen_random_string 10)
|
||||
read -rp "Please set the login password [default is a random password]: " config_password
|
||||
[[ -z $config_password ]] && config_password=$(date +%s%N | md5sum | cut -c 1-8)
|
||||
[[ -z $config_password ]] && config_password=$(gen_random_string 18)
|
||||
|
||||
read -rp "Do you want to disable currently configured two-factor authentication? (y/n): " twoFactorConfirm
|
||||
if [[ $twoFactorConfirm != "y" && $twoFactorConfirm != "Y" ]]; then
|
||||
|
@ -518,6 +518,9 @@ enable_bbr() {
|
|||
arch | manjaro | parch)
|
||||
pacman -Sy --noconfirm ca-certificates
|
||||
;;
|
||||
opensuse-tumbleweed | opensuse-leap)
|
||||
zypper refresh && zypper -q install -y ca-certificates
|
||||
;;
|
||||
alpine)
|
||||
apk add ca-certificates
|
||||
;;
|
||||
|
@ -1073,6 +1076,9 @@ ssl_cert_issue() {
|
|||
arch | manjaro | parch)
|
||||
pacman -Sy --noconfirm socat
|
||||
;;
|
||||
opensuse-tumbleweed | opensuse-leap)
|
||||
zypper refresh && zypper -q install -y socat
|
||||
;;
|
||||
alpine)
|
||||
apk add socat
|
||||
;;
|
||||
|
|
Loading…
Reference in a new issue