feat: add logs/metrics/tracing
This commit is contained in:
@@ -2,7 +2,6 @@ package streamer
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
|
||||
"github.com/sour-is/ev/pkg/es"
|
||||
"github.com/sour-is/ev/pkg/es/driver"
|
||||
@@ -56,19 +55,15 @@ func (s *streamer) Subscribe(ctx context.Context, streamID string, start int64)
|
||||
size: es.AllEvents,
|
||||
})
|
||||
sub.unsub = s.delete(streamID, sub)
|
||||
log.Println("start ", sub)
|
||||
|
||||
return sub, s.state.Modify(ctx, func(state *state) error {
|
||||
state.subscribers[streamID] = append(state.subscribers[streamID], sub)
|
||||
log.Println("add ", len(state.subscribers[streamID]))
|
||||
return nil
|
||||
})
|
||||
}
|
||||
func (s *streamer) Send(ctx context.Context, streamID string, events event.Events) error {
|
||||
return s.state.Modify(ctx, func(state *state) error {
|
||||
log.Println("trigger ", len(state.subscribers[streamID]))
|
||||
for _, sub := range state.subscribers[streamID] {
|
||||
log.Println("trigg ", sub)
|
||||
err := sub.position.Modify(ctx, func(position *position) error {
|
||||
position.size = int64(events.Last().EventMeta().Position - uint64(position.idx))
|
||||
|
||||
@@ -78,7 +73,9 @@ func (s *streamer) Send(ctx context.Context, streamID string, events event.Event
|
||||
}
|
||||
return nil
|
||||
})
|
||||
if err != nil { return err }
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
})
|
||||
@@ -89,7 +86,6 @@ func (s *streamer) delete(streamID string, sub *subscription) func(context.Conte
|
||||
if err := ctx.Err(); err != nil {
|
||||
return err
|
||||
}
|
||||
log.Println("unsub ", s)
|
||||
return s.state.Modify(ctx, func(state *state) error {
|
||||
lis := state.subscribers[streamID]
|
||||
for i := range lis {
|
||||
@@ -150,8 +146,6 @@ type subscription struct {
|
||||
|
||||
func (s *subscription) Recv(ctx context.Context) bool {
|
||||
var wait func(context.Context) bool
|
||||
log.Println("wait ", s)
|
||||
defer log.Println("recv ", s)
|
||||
err := s.position.Modify(ctx, func(position *position) error {
|
||||
if position.size == es.AllEvents {
|
||||
return nil
|
||||
@@ -187,13 +181,10 @@ func (s *subscription) Events(ctx context.Context) (event.Events, error) {
|
||||
var events event.Events
|
||||
return events, s.position.Modify(ctx, func(position *position) error {
|
||||
var err error
|
||||
log.Println("pos=", position, s)
|
||||
events, err = s.events.Read(ctx, position.idx, position.size)
|
||||
if err != nil {
|
||||
log.Println(err, s)
|
||||
return err
|
||||
}
|
||||
log.Println("events=", len(events), s)
|
||||
position.size = int64(len(events))
|
||||
if len(events) > 0 {
|
||||
position.idx = int64(events.First().EventMeta().Position - 1)
|
||||
|
||||
@@ -2,6 +2,7 @@ package es_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -15,6 +16,7 @@ import (
|
||||
|
||||
func TestES(t *testing.T) {
|
||||
is := is.New(t)
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
err := event.Register(ctx, &ValueSet{})
|
||||
@@ -22,6 +24,12 @@ func TestES(t *testing.T) {
|
||||
|
||||
memstore.Init(ctx)
|
||||
|
||||
_, err = es.Open(ctx, "mem")
|
||||
is.True(errors.Is(err, es.ErrNoDriver))
|
||||
|
||||
_, err = es.Open(ctx, "bogo:")
|
||||
is.True(errors.Is(err, es.ErrNoDriver))
|
||||
|
||||
es, err := es.Open(ctx, "mem:")
|
||||
is.NoErr(err)
|
||||
|
||||
@@ -40,12 +48,25 @@ func TestES(t *testing.T) {
|
||||
t.Log(thing.StreamVersion(), thing.Name, thing.Value)
|
||||
t.Log("Wrote: ", i)
|
||||
|
||||
i, err = es.Append(ctx, "thing-time", event.NewEvents(&ValueSet{Value: "xxx"}))
|
||||
is.NoErr(err)
|
||||
is.Equal(i, uint64(1))
|
||||
|
||||
events, err := es.Read(ctx, "thing-time", -1, -11)
|
||||
is.NoErr(err)
|
||||
|
||||
for i, e := range events {
|
||||
t.Logf("event %d %d - %v\n", i, e.EventMeta().Position, e)
|
||||
}
|
||||
|
||||
first, err := es.FirstIndex(ctx, "thing-time")
|
||||
is.NoErr(err)
|
||||
is.Equal(first, uint64(1))
|
||||
|
||||
last, err := es.LastIndex(ctx, "thing-time")
|
||||
is.NoErr(err)
|
||||
is.Equal(last, uint64(2))
|
||||
|
||||
}
|
||||
|
||||
type Thing struct {
|
||||
|
||||
Reference in New Issue
Block a user