Explorar o código

added support for listening on unix socket #4030 (#8221)

Mitja Z %!s(int64=8) %!d(string=hai) anos
pai
achega
c92d719a72
Modificáronse 4 ficheiros con 28 adicións e 3 borrados
  1. 4 1
      conf/defaults.ini
  2. 4 1
      conf/sample.ini
  3. 14 1
      pkg/api/http_server.go
  4. 6 0
      pkg/setting/setting.go

+ 4 - 1
conf/defaults.ini

@@ -25,7 +25,7 @@ plugins = data/plugins
 
 #################################### Server ##############################
 [server]
-# Protocol (http or https)
+# Protocol (http, https, socket)
 protocol = http
 
 # The ip address to bind to, empty will bind to all interfaces
@@ -57,6 +57,9 @@ enable_gzip = false
 cert_file =
 cert_key =
 
+# Unix socket path
+socket = /tmp/grafana.sock
+
 #################################### Database ############################
 [database]
 # You can configure the database connection by specifying type, host, name, user and password

+ 4 - 1
conf/sample.ini

@@ -26,7 +26,7 @@
 #
 #################################### Server ####################################
 [server]
-# Protocol (http or https)
+# Protocol (http, https, socket)
 ;protocol = http
 
 # The ip address to bind to, empty will bind to all interfaces
@@ -59,6 +59,9 @@
 ;cert_file =
 ;cert_key =
 
+# Unix socket path
+;socket =
+
 #################################### Database ####################################
 [database]
 # You can configure the database connection by specifying type, host, name, user and password

+ 14 - 1
pkg/api/http_server.go

@@ -5,6 +5,7 @@ import (
 	"crypto/tls"
 	"errors"
 	"fmt"
+	"net"
 	"net/http"
 	"os"
 	"path"
@@ -49,7 +50,7 @@ func (hs *HttpServer) Start(ctx context.Context) error {
 	hs.streamManager.Run(ctx)
 
 	listenAddr := fmt.Sprintf("%s:%s", setting.HttpAddr, setting.HttpPort)
-	hs.log.Info("Initializing HTTP Server", "address", listenAddr, "protocol", setting.Protocol, "subUrl", setting.AppSubUrl)
+	hs.log.Info("Initializing HTTP Server", "address", listenAddr, "protocol", setting.Protocol, "subUrl", setting.AppSubUrl, "socket", setting.SocketPath)
 
 	hs.httpSrv = &http.Server{Addr: listenAddr, Handler: hs.macaron}
 	switch setting.Protocol {
@@ -65,6 +66,18 @@ func (hs *HttpServer) Start(ctx context.Context) error {
 			hs.log.Debug("server was shutdown gracefully")
 			return nil
 		}
+	case setting.SOCKET:
+		ln, err := net.Listen("unix", setting.SocketPath)
+		if err != nil {
+			hs.log.Debug("server was shutdown gracefully")
+			return nil
+		}
+
+		err = hs.httpSrv.Serve(ln)
+		if err != nil {
+			hs.log.Debug("server was shutdown gracefully")
+			return nil
+		}
 	default:
 		hs.log.Error("Invalid protocol", "protocol", setting.Protocol)
 		err = errors.New("Invalid Protocol")

+ 6 - 0
pkg/setting/setting.go

@@ -27,6 +27,7 @@ type Scheme string
 const (
 	HTTP              Scheme = "http"
 	HTTPS             Scheme = "https"
+	SOCKET            Scheme = "socket"
 	DEFAULT_HTTP_ADDR string = "0.0.0.0"
 )
 
@@ -65,6 +66,7 @@ var (
 	HttpAddr, HttpPort string
 	SshPort            int
 	CertFile, KeyFile  string
+	SocketPath         string
 	RouterLogging      bool
 	DataProxyLogging   bool
 	StaticRootPath     string
@@ -473,6 +475,10 @@ func NewConfigContext(args *CommandLineArgs) error {
 		CertFile = server.Key("cert_file").String()
 		KeyFile = server.Key("cert_key").String()
 	}
+	if server.Key("protocol").MustString("http") == "socket" {
+		Protocol = SOCKET
+		SocketPath = server.Key("socket").String()
+	}
 
 	Domain = server.Key("domain").MustString("localhost")
 	HttpAddr = server.Key("http_addr").MustString(DEFAULT_HTTP_ADDR)