ooni-probe-cli/internal/engine/legacy/netx/handlers/handlers.go
Simone Basso d57c78bc71
chore: merge probe-engine into probe-cli (#201)
This is how I did it:

1. `git clone https://github.com/ooni/probe-engine internal/engine`

2. ```
(cd internal/engine && git describe --tags)
v0.23.0
```

3. `nvim go.mod` (merging `go.mod` with `internal/engine/go.mod`

4. `rm -rf internal/.git internal/engine/go.{mod,sum}`

5. `git add internal/engine`

6. `find . -type f -name \*.go -exec sed -i 's@/ooni/probe-engine@/ooni/probe-cli/v3/internal/engine@g' {} \;`

7. `go build ./...` (passes)

8. `go test -race ./...` (temporary failure on RiseupVPN)

9. `go mod tidy`

10. this commit message

Once this piece of work is done, we can build a new version of `ooniprobe` that
is using `internal/engine` directly. We need to do more work to ensure all the
other functionality in `probe-engine` (e.g. making mobile packages) are still WAI.

Part of https://github.com/ooni/probe/issues/1335
2021-02-02 12:05:47 +01:00

53 lines
1.1 KiB
Go

// Package handlers contains default modelx.Handler handlers.
package handlers
import (
"encoding/json"
"fmt"
"sync"
"github.com/ooni/probe-cli/v3/internal/engine/internal/runtimex"
"github.com/ooni/probe-cli/v3/internal/engine/legacy/netx/modelx"
)
type stdoutHandler struct{}
func (stdoutHandler) OnMeasurement(m modelx.Measurement) {
data, err := json.Marshal(m)
runtimex.PanicOnError(err, "unexpected json.Marshal failure")
fmt.Printf("%s\n", string(data))
}
// StdoutHandler is a Handler that logs on stdout.
var StdoutHandler stdoutHandler
type noHandler struct{}
func (noHandler) OnMeasurement(m modelx.Measurement) {
}
// NoHandler is a Handler that does not print anything
var NoHandler noHandler
// SavingHandler saves the events it receives.
type SavingHandler struct {
mu sync.Mutex
v []modelx.Measurement
}
// OnMeasurement implements modelx.Handler.OnMeasurement
func (sh *SavingHandler) OnMeasurement(ev modelx.Measurement) {
sh.mu.Lock()
sh.v = append(sh.v, ev)
sh.mu.Unlock()
}
// Read extracts the saved events
func (sh *SavingHandler) Read() []modelx.Measurement {
sh.mu.Lock()
v := sh.v
sh.v = nil
sh.mu.Unlock()
return v
}