ax(mining): use explicit miner names
Some checks failed
Security Scan / security (push) Has been cancelled
Test / test (push) Has been cancelled

This commit is contained in:
Virgil 2026-04-04 08:39:11 +00:00
parent 14839e58cf
commit e8f88e47a6
2 changed files with 25 additions and 25 deletions

View file

@ -50,11 +50,11 @@ var instanceNameRegex = regexp.MustCompile(`[^a-zA-Z0-9_/-]`)
// defer managerInterface.Stop()
type ManagerInterface interface {
StartMiner(ctx context.Context, minerType string, config *Config) (Miner, error)
StopMiner(ctx context.Context, name string) error
GetMiner(name string) (Miner, error)
StopMiner(ctx context.Context, minerName string) error
GetMiner(minerName string) (Miner, error)
ListMiners() []Miner
ListAvailableMiners() []AvailableMiner
GetMinerHashrateHistory(name string) ([]HashratePoint, error)
GetMinerHashrateHistory(minerName string) ([]HashratePoint, error)
UninstallMiner(ctx context.Context, minerType string) error
Stop()
}
@ -439,7 +439,7 @@ func (manager *Manager) updateMinerConfig(minerType string, autostart bool, conf
// manager.StopMiner(ctx, "xmrig/monero") stops the matching miner instance and removes it from the manager map.
// manager.StopMiner(ctx, "ttminer/rtx4090") still removes the entry when the miner has already stopped.
func (manager *Manager) StopMiner(ctx context.Context, name string) error {
func (manager *Manager) StopMiner(ctx context.Context, minerName string) error {
// ctx, cancel := context.WithCancel(context.Background()); cancel(); manager.StopMiner(ctx, "xmrig-rx_0") returns context.Canceled before locking.
select {
case <-ctx.Done():
@ -450,12 +450,12 @@ func (manager *Manager) StopMiner(ctx context.Context, name string) error {
manager.mutex.Lock()
defer manager.mutex.Unlock()
miner, exists := manager.miners[name]
miner, exists := manager.miners[minerName]
if !exists {
for minerKey := range manager.miners {
if hasPrefix(minerKey, name) {
if hasPrefix(minerKey, minerName) {
miner = manager.miners[minerKey]
name = minerKey
minerName = minerKey
exists = true
break
}
@ -463,19 +463,19 @@ func (manager *Manager) StopMiner(ctx context.Context, name string) error {
}
if !exists {
return ErrMinerNotFound(name)
return ErrMinerNotFound(minerName)
}
// manager.emitEvent(EventMinerStopping, MinerEventData{Name: "xmrig-rx_0"}) tells websocket clients shutdown has started.
manager.emitEvent(EventMinerStopping, MinerEventData{
Name: name,
Name: minerName,
})
// stopErr := miner.Stop() may fail after an external kill, but cleanup continues so the manager state stays accurate.
stopErr := miner.Stop()
// delete(manager.miners, "xmrig-rx_0") removes stale entries even when the process has already exited.
delete(manager.miners, name)
delete(manager.miners, minerName)
// manager.emitEvent(EventMinerStopped, MinerEventData{Name: "xmrig-rx_0", Reason: "stopped"}) confirms the final stop reason.
reason := "stopped"
@ -483,7 +483,7 @@ func (manager *Manager) StopMiner(ctx context.Context, name string) error {
reason = stopErr.Error()
}
manager.emitEvent(EventMinerStopped, MinerEventData{
Name: name,
Name: minerName,
Reason: reason,
})
@ -523,21 +523,21 @@ func (manager *Manager) ListMiners() []Miner {
// simulatedMiner := NewSimulatedMiner(SimulatedMinerConfig{Name: "sim-rx0"})
// if err := manager.RegisterMiner(simulatedMiner); err != nil { return err }
func (manager *Manager) RegisterMiner(miner Miner) error {
name := miner.GetName()
minerName := miner.GetName()
manager.mutex.Lock()
if _, exists := manager.miners[name]; exists {
if _, exists := manager.miners[minerName]; exists {
manager.mutex.Unlock()
return ErrMinerExists(name)
return ErrMinerExists(minerName)
}
manager.miners[name] = miner
manager.miners[minerName] = miner
manager.mutex.Unlock()
logging.Info("registered miner", logging.Fields{"name": name})
logging.Info("registered miner", logging.Fields{"miner_name": minerName})
// Emit miner started event (outside lock)
manager.emitEvent(EventMinerStarted, map[string]interface{}{
"name": name,
// Emit miner started event (outside lock) with the shared event payload shape.
manager.emitEvent(EventMinerStarted, MinerEventData{
Name: minerName,
})
return nil
@ -713,12 +713,12 @@ func (manager *Manager) collectSingleMinerStats(miner Miner, minerType string, n
// points, err := manager.GetMinerHashrateHistory("xmrig")
// for _, point := range points { logging.Info("hashrate", logging.Fields{"time": point.Timestamp, "rate": point.Hashrate}) }
func (manager *Manager) GetMinerHashrateHistory(name string) ([]HashratePoint, error) {
func (manager *Manager) GetMinerHashrateHistory(minerName string) ([]HashratePoint, error) {
manager.mutex.RLock()
defer manager.mutex.RUnlock()
miner, exists := manager.miners[name]
miner, exists := manager.miners[minerName]
if !exists {
return nil, ErrMinerNotFound(name)
return nil, ErrMinerNotFound(minerName)
}
return miner.GetHashrateHistory(), nil
}

View file

@ -6,11 +6,11 @@ import (
"crypto/sha256"
"encoding/hex"
"encoding/json"
"forge.lthn.ai/Snider/Borg/pkg/datanode"
"forge.lthn.ai/Snider/Borg/pkg/tim"
"io"
"os"
"path/filepath"
"forge.lthn.ai/Snider/Borg/pkg/datanode"
"forge.lthn.ai/Snider/Borg/pkg/tim"
)
// bundle.Type = BundleProfile // config/profile JSON only
@ -207,7 +207,7 @@ func isJSON(data []byte) bool {
return data[0] == '{' || data[0] == '['
}
// tarData, err := createTarball(map[string][]byte{"xmrig": binaryData, "config.json": cfgData})
// tarData, err := createTarball(map[string][]byte{"xmrig": binaryData, "config.json": configData})
// if err != nil { return nil, err }
func createTarball(files map[string][]byte) ([]byte, error) {
var buffer bytes.Buffer