diff options
Diffstat (limited to 'internal/server')
| -rw-r--r-- | internal/server/handlers/basehandler.go | 1 | ||||
| -rw-r--r-- | internal/server/handlers/healthhandler.go | 4 | ||||
| -rw-r--r-- | internal/server/handlers/readcommand.go | 39 | ||||
| -rw-r--r-- | internal/server/handlers/serverhandler.go | 4 |
4 files changed, 40 insertions, 8 deletions
diff --git a/internal/server/handlers/basehandler.go b/internal/server/handlers/basehandler.go index 6d10d17..53bf375 100644 --- a/internal/server/handlers/basehandler.go +++ b/internal/server/handlers/basehandler.go @@ -114,7 +114,6 @@ func (h *baseHandler) Read(p []byte) (n int, err error) { pool.RecycleBytesBuffer(line.Content) case <-time.After(time.Second): - // Once in a while check whether we are done. select { case <-h.done.Done(): err = io.EOF diff --git a/internal/server/handlers/healthhandler.go b/internal/server/handlers/healthhandler.go index 6dd9872..e7f7762 100644 --- a/internal/server/handlers/healthhandler.go +++ b/internal/server/handlers/healthhandler.go @@ -2,10 +2,10 @@ package handlers import ( "context" - "os" "strings" "github.com/mimecast/dtail/internal" + "github.com/mimecast/dtail/internal/config" "github.com/mimecast/dtail/internal/io/dlog" "github.com/mimecast/dtail/internal/io/line" "github.com/mimecast/dtail/internal/lcontext" @@ -32,7 +32,7 @@ func NewHealthHandler(user *user.User) *HealthHandler { } h.handleCommandCb = h.handleHealthCommand - fqdn, err := os.Hostname() + fqdn, err := config.Hostname() if err != nil { dlog.Server.FatalPanic(err) } diff --git a/internal/server/handlers/readcommand.go b/internal/server/handlers/readcommand.go index 4728a55..51077fc 100644 --- a/internal/server/handlers/readcommand.go +++ b/internal/server/handlers/readcommand.go @@ -109,18 +109,51 @@ func (r *readCommand) readFileIfPermissions(ctx context.Context, ltx lcontext.LC r.readFile(ctx, ltx, path, globID, re) } +func (*readCommand) limit(ctx context.Context, limiter chan struct{}, message string) { + select { + case <-ctx.Done(): + return + } +} + func (r *readCommand) readFile(ctx context.Context, ltx lcontext.LContext, path, globID string, re regex.Regex) { dlog.Server.Info(r.server.user, "Start reading file", path, globID) var reader fs.FileReader + var limiter chan struct{} + switch r.mode { case omode.TailClient: - reader = fs.NewTailFile(path, globID, r.server.serverMessages, r.server.tailLimiter) + reader = fs.NewTailFile(path, globID, r.server.serverMessages) + limiter = r.server.tailLimiter case omode.GrepClient, omode.CatClient: - reader = fs.NewCatFile(path, globID, r.server.serverMessages, r.server.catLimiter) + reader = fs.NewCatFile(path, globID, r.server.serverMessages) + limiter = r.server.catLimiter default: - reader = fs.NewTailFile(path, globID, r.server.serverMessages, r.server.tailLimiter) + reader = fs.NewTailFile(path, globID, r.server.serverMessages) + limiter = r.server.tailLimiter + } + + defer func() { + select { + case <-limiter: + default: + } + }() + + select { + case limiter <- struct{}{}: + case <-ctx.Done(): + return + default: + dlog.Server.Info("Server limit hit, queueing file", len(limiter), path) + select { + case limiter <- struct{}{}: + dlog.Server.Info("Server limit OK now, processing file", len(limiter), path) + case <-ctx.Done(): + return + } } lines := r.server.lines diff --git a/internal/server/handlers/serverhandler.go b/internal/server/handlers/serverhandler.go index 36574a9..75a8acc 100644 --- a/internal/server/handlers/serverhandler.go +++ b/internal/server/handlers/serverhandler.go @@ -2,10 +2,10 @@ package handlers import ( "context" - "os" "strings" "github.com/mimecast/dtail/internal" + "github.com/mimecast/dtail/internal/config" "github.com/mimecast/dtail/internal/io/dlog" "github.com/mimecast/dtail/internal/io/line" "github.com/mimecast/dtail/internal/lcontext" @@ -43,7 +43,7 @@ func NewServerHandler(user *user.User, catLimiter, } h.handleCommandCb = h.handleUserCommand - fqdn, err := os.Hostname() + fqdn, err := config.Hostname() if err != nil { dlog.Server.FatalPanic(err) } |
