mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Use systemd notification where applicable
With this change in place, the grafana service will signal readiness to serve by writing "READY=1" to the path specified through the NOTIFY_SOCKET environment variable. If this environment variable is not present or empty, no notification will happen. This notification is the standard systemd mechanism for indicating a service is ready to serve. For Grafana this may be a couple of seconds from startup due to database migrations. This change also adjusts the Grafana systemd service definition to make use of this feature.
This commit is contained in:
parent
c0e087640b
commit
d28ca54129
@ -9,7 +9,7 @@ After=postgresql.service mariadb.service mysql.service
|
|||||||
EnvironmentFile=/etc/sysconfig/grafana-server
|
EnvironmentFile=/etc/sysconfig/grafana-server
|
||||||
User=grafana
|
User=grafana
|
||||||
Group=grafana
|
Group=grafana
|
||||||
Type=simple
|
Type=notify
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
WorkingDirectory=/usr/share/grafana
|
WorkingDirectory=/usr/share/grafana
|
||||||
RuntimeDirectory=grafana
|
RuntimeDirectory=grafana
|
||||||
|
@ -29,6 +29,7 @@ import (
|
|||||||
|
|
||||||
"github.com/grafana/grafana/pkg/social"
|
"github.com/grafana/grafana/pkg/social"
|
||||||
"github.com/grafana/grafana/pkg/tracing"
|
"github.com/grafana/grafana/pkg/tracing"
|
||||||
|
"github.com/grafana/grafana/pkg/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewGrafanaServer() models.GrafanaServer {
|
func NewGrafanaServer() models.GrafanaServer {
|
||||||
@ -96,6 +97,7 @@ func (g *GrafanaServerImpl) Start() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
util.SdNotify("READY=1")
|
||||||
g.startHttpServer()
|
g.startHttpServer()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
34
pkg/util/sdnotify.go
Normal file
34
pkg/util/sdnotify.go
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"net"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
var NoNotifySocket = errors.New("NOTIFY_SOCKET environment variable empty or unset.")
|
||||||
|
|
||||||
|
func SdNotify(state string) error {
|
||||||
|
notifySocket := os.Getenv("NOTIFY_SOCKET")
|
||||||
|
|
||||||
|
if notifySocket == "" {
|
||||||
|
return NoNotifySocket
|
||||||
|
}
|
||||||
|
|
||||||
|
socketAddr := &net.UnixAddr{
|
||||||
|
Name: notifySocket,
|
||||||
|
Net: "unixgram",
|
||||||
|
}
|
||||||
|
|
||||||
|
conn, err := net.DialUnix(socketAddr.Net, nil, socketAddr)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = conn.Write([]byte(state))
|
||||||
|
|
||||||
|
conn.Close()
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user