summaryrefslogtreecommitdiff
path: root/modules/output/json
diff options
context:
space:
mode:
Diffstat (limited to 'modules/output/json')
-rw-r--r--modules/output/json/json.go21
1 files changed, 14 insertions, 7 deletions
diff --git a/modules/output/json/json.go b/modules/output/json/json.go
index 5b4e9d0..1937d17 100644
--- a/modules/output/json/json.go
+++ b/modules/output/json/json.go
@@ -11,6 +11,7 @@ import (
"io"
"log"
"os"
+ "sync"
"time"
"github.com/philippta/flyscrape"
@@ -28,6 +29,7 @@ type Module struct {
once bool
w io.WriteCloser
+ mu *sync.Mutex
}
func (Module) ModuleInfo() flyscrape.ModuleInfo {
@@ -42,6 +44,8 @@ func (m *Module) Provision(ctx flyscrape.Context) {
return
}
+ m.mu = &sync.Mutex{}
+
if m.Output.File == "" {
m.w = nopCloser{os.Stdout}
return
@@ -64,13 +68,6 @@ func (m *Module) ReceiveResponse(resp *flyscrape.Response) {
return
}
- if !m.once {
- fmt.Fprintln(m.w, "[")
- m.once = true
- } else {
- fmt.Fprintln(m.w, ",")
- }
-
o := output{
URL: resp.Request.URL,
Data: resp.Data,
@@ -80,6 +77,16 @@ func (m *Module) ReceiveResponse(resp *flyscrape.Response) {
o.Error = resp.Error.Error()
}
+ m.mu.Lock()
+ defer m.mu.Unlock()
+
+ if !m.once {
+ fmt.Fprintln(m.w, "[")
+ m.once = true
+ } else {
+ fmt.Fprintln(m.w, ",")
+ }
+
var buf bytes.Buffer
enc := json.NewEncoder(&buf)
enc.SetEscapeHTML(false)