mirror of
https://github.com/lordmathis/llamactl.git
synced 2025-11-06 00:54:23 +00:00
77 lines
1.4 KiB
Go
77 lines
1.4 KiB
Go
package instance
|
|
|
|
import (
|
|
"encoding/json"
|
|
"log"
|
|
)
|
|
|
|
// Enum for instance status
|
|
type InstanceStatus int
|
|
|
|
const (
|
|
Stopped InstanceStatus = iota
|
|
Running
|
|
Failed
|
|
)
|
|
|
|
var nameToStatus = map[string]InstanceStatus{
|
|
"stopped": Stopped,
|
|
"running": Running,
|
|
"failed": Failed,
|
|
}
|
|
|
|
var statusToName = map[InstanceStatus]string{
|
|
Stopped: "stopped",
|
|
Running: "running",
|
|
Failed: "failed",
|
|
}
|
|
|
|
func (p *Process) SetStatus(status InstanceStatus) {
|
|
p.mu.Lock()
|
|
oldStatus := p.Status
|
|
p.Status = status
|
|
p.mu.Unlock()
|
|
|
|
if p.onStatusChange != nil {
|
|
p.onStatusChange(oldStatus, status)
|
|
}
|
|
}
|
|
|
|
func (p *Process) GetStatus() InstanceStatus {
|
|
p.mu.RLock()
|
|
defer p.mu.RUnlock()
|
|
return p.Status
|
|
}
|
|
|
|
// IsRunning returns true if the status is Running
|
|
func (p *Process) IsRunning() bool {
|
|
p.mu.RLock()
|
|
defer p.mu.RUnlock()
|
|
return p.Status == Running
|
|
}
|
|
|
|
func (s InstanceStatus) MarshalJSON() ([]byte, error) {
|
|
name, ok := statusToName[s]
|
|
if !ok {
|
|
name = "stopped" // Default to "stopped" for unknown status
|
|
}
|
|
return json.Marshal(name)
|
|
}
|
|
|
|
// UnmarshalJSON implements json.Unmarshaler
|
|
func (s *InstanceStatus) UnmarshalJSON(data []byte) error {
|
|
var str string
|
|
if err := json.Unmarshal(data, &str); err != nil {
|
|
return err
|
|
}
|
|
|
|
status, ok := nameToStatus[str]
|
|
if !ok {
|
|
log.Printf("Unknown instance status: %s", str)
|
|
status = Stopped // Default to Stopped on unknown status
|
|
}
|
|
|
|
*s = status
|
|
return nil
|
|
}
|