X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/f5c601f1801aaa276f8c335fcb51c373edc0b50c..80e348724041a694002fc38f57e8868b9b9a2be9:/probe.go diff --git a/probe.go b/probe.go index 384d0f8..a1ee38d 100644 --- a/probe.go +++ b/probe.go @@ -23,6 +23,28 @@ const ( probeCallLimit = 660 ) +// ProbeSlotSummarizer lets at most cap(slots) builds call inner at once. A +// build past the limit waits for a slot. +type ProbeSlotSummarizer struct { + inner Summarizer + slots chan struct{} +} + +// Summarize waits for a slot and builds the node with inner. +func (s ProbeSlotSummarizer) Summarize(ctx context.Context, task Task) (string, error) { + select { + case s.slots <- struct{}{}: + case <-ctx.Done(): + return "", ctx.Err() + } + + defer func() { + <-s.slots + }() + + return s.inner.Summarize(ctx, task) +} + // probe runs "onechat probe LOG COUNT [BUILDS]". It appends the first COUNT // messages of LOG, one JSON object {kind, text} per line, to a new chat in // probe/ in the data directory, and builds its tree with the real compactor. @@ -145,28 +167,6 @@ func probe(ctx context.Context, args []string, out io.Writer) (err error) { return nil } -// ProbeSlotSummarizer lets at most cap(slots) builds call inner at once. A -// build past the limit waits for a slot. -type ProbeSlotSummarizer struct { - inner Summarizer - slots chan struct{} -} - -// Summarize waits for a slot and builds the node with inner. -func (s ProbeSlotSummarizer) Summarize(ctx context.Context, task Task) (string, error) { - select { - case s.slots <- struct{}{}: - case <-ctx.Done(): - return "", ctx.Err() - } - - defer func() { - <-s.slots - }() - - return s.inner.Summarize(ctx, task) -} - // probeReadLog reads the first count messages of the probe log at path. Source // dates are ignored because a probe uses its own clock. func probeReadLog(path string, count int) (entries []DatedMessage, err error) {