From b1ec1c404dfddbd516ec4c14daf48c856f95ece4 Mon Sep 17 00:00:00 2001 From: Masahiro Nagano Date: Tue, 5 Feb 2019 11:41:42 +0900 Subject: [PATCH] add seq id --- handler/handler.go | 6 ++++++ seq/seq.go | 25 +++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 seq/seq.go diff --git a/handler/handler.go b/handler/handler.go index 436267f..88c59e0 100644 --- a/handler/handler.go +++ b/handler/handler.go @@ -12,6 +12,7 @@ import ( "github.com/kazeburo/wsgate-server/dumper" "github.com/kazeburo/wsgate-server/mapping" "github.com/kazeburo/wsgate-server/publickey" + "github.com/kazeburo/wsgate-server/seq" "go.uber.org/zap" ) @@ -30,6 +31,7 @@ type Handler struct { mp *mapping.Mapping pk *publickey.Publickey dumpTCP uint + sq *seq.Seq } // New new handler @@ -59,6 +61,7 @@ func New( mp: mp, pk: pk, dumpTCP: dumpTCP, + sq: seq.New(), }, nil } @@ -81,6 +84,7 @@ func (h *Handler) Proxy() func(w http.ResponseWriter, r *http.Request) { disconnectAt := "" logger := h.logger.With( + zap.Uint64("seq", h.sq.Next()), zap.String("user-email", r.Header.Get("X-Goog-Authenticated-User-Email")), zap.String("x-forwarded-for", r.Header.Get("X-Forwarded-For")), zap.String("remote-addr", r.RemoteAddr), @@ -148,6 +152,8 @@ func (h *Handler) Proxy() func(w http.ResponseWriter, r *http.Request) { for { select { case <-r.Context().Done(): + dr.Flush() + ds.Flush() return case _ = <-ticker.C: dr.Flush() diff --git a/seq/seq.go b/seq/seq.go new file mode 100644 index 0000000..033a2ab --- /dev/null +++ b/seq/seq.go @@ -0,0 +1,25 @@ +package seq + +import "sync" + +// Seq struct +type Seq struct { + i uint64 + mu *sync.RWMutex +} + +// New create sequencer +func New() *Seq { + return &Seq{ + i: 0, + mu: new(sync.RWMutex), + } +} + +// Next fetch new sequence +func (s *Seq) Next() uint64 { + s.mu.Lock() + defer s.mu.Unlock() + s.i = s.i + 1 + return s.i +}