feat: edge gateway service
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
package telemetry
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"galaxy/gateway/internal/push"
|
||||
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
)
|
||||
|
||||
// PushObserver adapts Runtime to the push.Observer interface.
|
||||
type PushObserver struct {
|
||||
runtime *Runtime
|
||||
}
|
||||
|
||||
// NewPushObserver constructs a push stream observer backed by runtime.
|
||||
func NewPushObserver(runtime *Runtime) *PushObserver {
|
||||
return &PushObserver{runtime: runtime}
|
||||
}
|
||||
|
||||
// Registered records one active push stream.
|
||||
func (o *PushObserver) Registered(_ push.StreamBinding) {
|
||||
if o == nil || o.runtime == nil {
|
||||
return
|
||||
}
|
||||
|
||||
o.runtime.AddActivePushStream(context.Background(), 1)
|
||||
}
|
||||
|
||||
// Unregistered records one active-stream decrement and one closure reason for
|
||||
// hub-enforced shutdown, overflow, or revocation.
|
||||
func (o *PushObserver) Unregistered(_ push.StreamBinding, err error) {
|
||||
if o == nil || o.runtime == nil {
|
||||
return
|
||||
}
|
||||
|
||||
o.runtime.AddActivePushStream(context.Background(), -1)
|
||||
|
||||
switch {
|
||||
case errors.Is(err, push.ErrSubscriptionOverflow):
|
||||
o.runtime.RecordPushStreamClosure(context.Background(), attribute.String("reason", "overflow"))
|
||||
case errors.Is(err, push.ErrSubscriptionRevoked):
|
||||
o.runtime.RecordPushStreamClosure(context.Background(), attribute.String("reason", "revoked"))
|
||||
case errors.Is(err, push.ErrHubShuttingDown):
|
||||
o.runtime.RecordPushStreamClosure(context.Background(), attribute.String("reason", "shutdown"))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user