From 5bf2b3188343904a38ba2eb3e0d9bf60db715803 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Sun, 5 Sep 2021 10:47:09 +0800 Subject: [PATCH] Add hook to init and listen observatory statuses --- app/observatory/observer.go | 6 ++++++ app/observatory/persist.go | 12 ++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 app/observatory/persist.go diff --git a/app/observatory/observer.go b/app/observatory/observer.go index 618ecccb..d64bd6f9 100644 --- a/app/observatory/observer.go +++ b/app/observatory/observer.go @@ -32,6 +32,8 @@ type Observer struct { finished *done.Instance ohm outbound.Manager + + StatusUpdate func(result *OutboundStatus) } func (o *Observer) GetObservation(ctx context.Context) (proto.Message, error) { @@ -183,6 +185,10 @@ func (o *Observer) updateStatusForResult(outbound string, result *ProbeResult) { status.LastErrorReason = result.LastErrorReason status.Delay = 99999999 } + + if o.StatusUpdate != nil { + o.StatusUpdate(status) + } } func (o *Observer) findStatusLocationLockHolderOnly(outbound string) int { diff --git a/app/observatory/persist.go b/app/observatory/persist.go new file mode 100644 index 00000000..b0da324e --- /dev/null +++ b/app/observatory/persist.go @@ -0,0 +1,12 @@ +package observatory + +func (o *Observer) UpdateStatus(result *OutboundStatus) { + o.statusLock.Lock() + defer o.statusLock.Unlock() + + if location := o.findStatusLocationLockHolderOnly(result.OutboundTag); location != -1 { + o.status[location] = result + } else { + o.status = append(o.status, result) + } +}