add traffic reset for stats

This commit is contained in:
ginuerzh
2024-12-24 20:11:22 +08:00
parent 914a4622fd
commit 06d993023f
41 changed files with 407 additions and 143 deletions
+7 -3
View File
@@ -2,13 +2,14 @@ package observer
import (
"context"
"errors"
"io"
"github.com/go-gost/core/logger"
"github.com/go-gost/core/observer"
"github.com/go-gost/core/observer/stats"
"github.com/go-gost/plugin/observer/proto"
"github.com/go-gost/x/internal/plugin"
xstats "github.com/go-gost/x/observer/stats"
"github.com/go-gost/x/service"
"google.golang.org/grpc"
)
@@ -67,7 +68,7 @@ func (p *grpcPlugin) Observe(ctx context.Context, events []observer.Event, opts
},
})
case observer.EventStats:
ev := event.(stats.StatsEvent)
ev := event.(xstats.StatsEvent)
req.Events = append(req.Events, &proto.Event{
Kind: ev.Kind,
Service: ev.Service,
@@ -83,11 +84,14 @@ func (p *grpcPlugin) Observe(ctx context.Context, events []observer.Event, opts
})
}
}
_, err := p.client.Observe(ctx, &req)
reply, err := p.client.Observe(ctx, &req)
if err != nil {
p.log.Error(err)
return err
}
if reply == nil || !reply.Ok {
return errors.New("observe failed")
}
return nil
}
+14 -5
View File
@@ -4,14 +4,14 @@ import (
"bytes"
"context"
"encoding/json"
"fmt"
"errors"
"net/http"
"strings"
"github.com/go-gost/core/logger"
"github.com/go-gost/core/observer"
"github.com/go-gost/core/observer/stats"
"github.com/go-gost/x/internal/plugin"
xstats "github.com/go-gost/x/observer/stats"
"github.com/go-gost/x/service"
)
@@ -41,7 +41,7 @@ type statusEvent struct {
Msg string `json:"msg"`
}
type observeResponse struct {
type httpPluginResponse struct {
OK bool `json:"ok"`
}
@@ -94,7 +94,7 @@ func (p *httpPlugin) Observe(ctx context.Context, events []observer.Event, opts
},
})
case observer.EventStats:
ev := e.(stats.StatsEvent)
ev := e.(xstats.StatsEvent)
r.Events = append(r.Events, event{
Kind: ev.Kind,
Service: ev.Service,
@@ -131,7 +131,16 @@ func (p *httpPlugin) Observe(ctx context.Context, events []observer.Event, opts
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return fmt.Errorf(resp.Status)
return errors.New(resp.Status)
}
res := httpPluginResponse{}
if err := json.NewDecoder(resp.Body).Decode(&res); err != nil {
return err
}
if !res.OK {
return errors.New("observe failed")
}
return nil