forked from TrueCloudLab/frostfs-node
[#552] Add sdnotify package
To avoid using third-party dependencies. Signed-off-by: Ekaterina Lebedeva <ekaterina.lebedeva@yadro.com>
This commit is contained in:
parent
9b2dce5763
commit
eca7ac9f0d
4 changed files with 62 additions and 17 deletions
|
@ -10,8 +10,8 @@ import (
|
|||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/control"
|
||||
controlSvc "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/control/server"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/tree"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/sdnotify"
|
||||
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
|
||||
sysdnotify "github.com/iguanesolutions/go-systemd/v5/notify"
|
||||
"go.uber.org/zap"
|
||||
"google.golang.org/grpc"
|
||||
)
|
||||
|
@ -109,14 +109,13 @@ func (c *cfg) HealthStatus() control.HealthStatus {
|
|||
return control.HealthStatus(c.healthStatus.Load())
|
||||
}
|
||||
|
||||
func (c *cfg) notifySystemd(st control.HealthStatus) string {
|
||||
func (c *cfg) notifySystemd(st control.HealthStatus) {
|
||||
status := fmt.Sprintf("%v, %v", st.Number(), st)
|
||||
err := sysdnotify.Status(status)
|
||||
err := sdnotify.Status(status)
|
||||
if err == nil {
|
||||
c.log.Info(fmt.Sprintf("reported STATUS=\"%v\" to systemd", status))
|
||||
}
|
||||
if err != nil {
|
||||
c.log.Error(logs.FailedToReportStatusToSystemd, zap.String("error", err.Error()))
|
||||
}
|
||||
return fmt.Sprintf("%v, %v", st, control.HealthStatus_name[int32(st)])
|
||||
}
|
||||
|
|
1
go.mod
1
go.mod
|
@ -16,7 +16,6 @@ require (
|
|||
github.com/flynn-archive/go-shlex v0.0.0-20150515145356-3f9db97f8568
|
||||
github.com/google/uuid v1.4.0
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.7
|
||||
github.com/iguanesolutions/go-systemd/v5 v5.1.1
|
||||
github.com/klauspost/compress v1.17.4
|
||||
github.com/mitchellh/go-homedir v1.1.0
|
||||
github.com/mr-tron/base58 v1.2.0
|
||||
|
|
12
go.sum
12
go.sum
|
@ -146,18 +146,6 @@ github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU
|
|||
github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E=
|
||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||
github.com/ianlancetaylor/demangle v0.0.0-20230524184225-eabc099b10ab/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw=
|
||||
github.com/iguanesolutions/go-systemd/v5 v5.1.1 h1:Hs0Z16knPGCBFnKECrICPh+RQ89Sgy0xyzcalrHMKdw=
|
||||
github.com/iguanesolutions/go-systemd/v5 v5.1.1/go.mod h1:Quv57scs6S7T0rC6qyLfW20KU/P4p9hrbLPF+ILYrXY=
|
||||
github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
|
||||
github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
|
||||
github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
|
||||
github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
|
||||
github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
|
||||
github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
|
||||
github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg=
|
||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||
github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
|
||||
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||
github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s=
|
||||
|
|
59
pkg/util/sdnotify/sdnotify.go
Normal file
59
pkg/util/sdnotify/sdnotify.go
Normal file
|
@ -0,0 +1,59 @@
|
|||
package sdnotify
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
ReadyEnabled = "READY=1"
|
||||
StoppingEnabled = "STOPPING=1"
|
||||
ReloadingEnabled = "RELOADING=1"
|
||||
)
|
||||
|
||||
var socket *net.UnixAddr
|
||||
|
||||
// Initializes socket with provided name of
|
||||
// environment variable.
|
||||
func InitSocket() error {
|
||||
notifySocket := os.Getenv("NOTIFY_SOCKET")
|
||||
if notifySocket == "" {
|
||||
return fmt.Errorf("\"NOTIFY_SOCKET\" environment variable is not present")
|
||||
}
|
||||
socket = &net.UnixAddr{
|
||||
Name: notifySocket,
|
||||
Net: "unixgram",
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// FlagAndStatus sends systemd a combination of a
|
||||
// well-known status and STATUS=%s{status}, separated by newline.
|
||||
func FlagAndStatus(status string) error {
|
||||
status += "\nSTATUS=" + strings.TrimSuffix(status, "=1")
|
||||
return Send(status)
|
||||
}
|
||||
|
||||
// Status sends systemd notify STATUS=%s{status}.
|
||||
func Status(status string) error {
|
||||
return Send(fmt.Sprintf("STATUS=%s", status))
|
||||
}
|
||||
|
||||
// Send state through the notify socket if any.
|
||||
// If the notify socket was not detected, it returns an error.
|
||||
func Send(state string) error {
|
||||
if socket == nil {
|
||||
return fmt.Errorf("socket is not initialized")
|
||||
}
|
||||
conn, err := net.DialUnix(socket.Net, nil, socket)
|
||||
if err != nil {
|
||||
return fmt.Errorf("can't open unix socket: %v", err)
|
||||
}
|
||||
defer conn.Close()
|
||||
if _, err = conn.Write([]byte(state)); err != nil {
|
||||
return fmt.Errorf("can't write into the unix socket: %v", err)
|
||||
}
|
||||
return nil
|
||||
}
|
Loading…
Reference in a new issue