diff --git a/go.mod b/go.mod index 555ca1b..cbc34b5 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,6 @@ go 1.23.8 require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/coreos/go-systemd/v22 v22.6.0 // indirect github.com/dgraph-io/badger/v4 v4.8.0 // indirect github.com/dgraph-io/ristretto/v2 v2.2.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect @@ -12,7 +11,6 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-viper/mapstructure/v2 v2.4.0 // indirect - github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/google/flatbuffers v25.2.10+incompatible // indirect github.com/klauspost/compress v1.18.0 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect diff --git a/go.sum b/go.sum index f61e769..2482f6c 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,5 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/coreos/go-systemd/v22 v22.6.0 h1:aGVa/v8B7hpb0TKl0MWoAavPDmHvobFe5R5zn0bCJWo= -github.com/coreos/go-systemd/v22 v22.6.0/go.mod h1:iG+pp635Fo7ZmV/j14KUcmEyWF+0X7Lua8rrTWzYgWU= github.com/dgraph-io/badger/v4 v4.8.0 h1:JYph1ChBijCw8SLeybvPINizbDKWZ5n/GYbz2yhN/bs= github.com/dgraph-io/badger/v4 v4.8.0/go.mod h1:U6on6e8k/RTbUWxqKR0MvugJuVmkxSNc79ap4917h4w= github.com/dgraph-io/ristretto/v2 v2.2.0 h1:bkY3XzJcXoMuELV8F+vS8kzNgicwQFAaGINAEJdWGOM= @@ -17,8 +15,6 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= -github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= -github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/google/flatbuffers v25.2.10+incompatible h1:F3vclr7C3HpB1k9mxCGRMXq6FdUalZ6H/pNX4FP1v0Q= github.com/google/flatbuffers v25.2.10+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= diff --git a/pkg/systemd/main.go b/pkg/systemd/main.go deleted file mode 100644 index ea5fef0..0000000 --- a/pkg/systemd/main.go +++ /dev/null @@ -1,109 +0,0 @@ -package systemd - -import ( - "context" - "errors" - "fmt" - "time" - - "github.com/coreos/go-systemd/v22/dbus" -) - -const ( - defaultTimeout = 5 * time.Second - jobMode = "replace" -) - -type Manager struct { - conn *dbus.Conn -} - -type ServiceStatus struct { - Name string - LoadState string - ActiveState string - SubState string - MainPID uint32 -} - -// New crée une connexion D-Bus systemd (scope système) -func New() (*Manager, error) { - ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout) - defer cancel() - - conn, err := dbus.NewSystemConnectionContext(ctx) - if err != nil { - return nil, err - } - - return &Manager{conn: conn}, nil -} - -// Close ferme la connexion D-Bus -func (m *Manager) Close() { - if m.conn != nil { - m.conn.Close() - } -} - -// Start démarre un service systemd -func (m *Manager) Start(service string) error { - return m.job("StartUnit", service) -} - -// Stop arrête un service systemd -func (m *Manager) Stop(service string) error { - return m.job("StopUnit", service) -} - -func (m *Manager) job(method, service string) error { - ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout) - defer cancel() - - ch := make(chan string, 1) - - var err error - switch method { - case "StartUnit": - _, err = m.conn.StartUnitContext(ctx, service, jobMode, ch) - case "StopUnit": - _, err = m.conn.StopUnitContext(ctx, service, jobMode, ch) - default: - return errors.New("unsupported job method") - } - - if err != nil { - return err - } - - result := <-ch - if result != "done" { - return fmt.Errorf("%s %s failed: %s", method, service, result) - } - - return nil -} - -// Status retourne l’état courant du service -func (m *Manager) Status(service string) (*ServiceStatus, error) { - ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout) - defer cancel() - - props, err := m.conn.GetUnitPropertiesContext(ctx, service) - if err != nil { - return nil, err - } - - status := &ServiceStatus{ - Name: service, - LoadState: props["LoadState"].(string), - ActiveState: props["ActiveState"].(string), - SubState: props["SubState"].(string), - } - - if pid, ok := props["MainPID"].(uint32); ok { - status.MainPID = pid - } - - return status, nil -}