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
This commit is contained in:
parent
b1ce300c8d
commit
d57c78bc71
535 changed files with 66182 additions and 23 deletions
126
internal/engine/model/measurement.go
Normal file
126
internal/engine/model/measurement.go
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
package model
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"time"
|
||||
)
|
||||
|
||||
// MeasurementTarget is the target of a OONI measurement.
|
||||
type MeasurementTarget string
|
||||
|
||||
// MarshalJSON serializes the MeasurementTarget.
|
||||
func (t MeasurementTarget) MarshalJSON() ([]byte, error) {
|
||||
if t == "" {
|
||||
return json.Marshal(nil)
|
||||
}
|
||||
return json.Marshal(string(t))
|
||||
}
|
||||
|
||||
// Measurement is a OONI measurement.
|
||||
//
|
||||
// This structure is compatible with the definition of the base data format in
|
||||
// https://github.com/ooni/spec/blob/master/data-formats/df-000-base.md.
|
||||
type Measurement struct {
|
||||
// Annotations contains results annotations
|
||||
Annotations map[string]string `json:"annotations,omitempty"`
|
||||
|
||||
// DataFormatVersion is the version of the data format
|
||||
DataFormatVersion string `json:"data_format_version"`
|
||||
|
||||
// Extensions contains information about the extensions included
|
||||
// into the test_keys of this measurement.
|
||||
Extensions map[string]int64 `json:"extensions,omitempty"`
|
||||
|
||||
// ID is the locally generated measurement ID
|
||||
ID string `json:"id,omitempty"`
|
||||
|
||||
// Input is the measurement input
|
||||
Input MeasurementTarget `json:"input"`
|
||||
|
||||
// InputHashes contains input hashes
|
||||
InputHashes []string `json:"input_hashes,omitempty"`
|
||||
|
||||
// MeasurementStartTime is the time when the measurement started
|
||||
MeasurementStartTime string `json:"measurement_start_time"`
|
||||
|
||||
// MeasurementStartTimeSaved is the moment in time when we
|
||||
// started the measurement. This is not included into the JSON
|
||||
// and is only used within probe-engine as a "zero" time.
|
||||
MeasurementStartTimeSaved time.Time `json:"-"`
|
||||
|
||||
// Options contains command line options
|
||||
Options []string `json:"options,omitempty"`
|
||||
|
||||
// ProbeASN contains the probe autonomous system number
|
||||
ProbeASN string `json:"probe_asn"`
|
||||
|
||||
// ProbeCC contains the probe country code
|
||||
ProbeCC string `json:"probe_cc"`
|
||||
|
||||
// ProbeCity contains the probe city
|
||||
ProbeCity string `json:"probe_city,omitempty"`
|
||||
|
||||
// ProbeIP contains the probe IP
|
||||
ProbeIP string `json:"probe_ip,omitempty"`
|
||||
|
||||
// ProbeNetworkName contains the probe network name
|
||||
ProbeNetworkName string `json:"probe_network_name"`
|
||||
|
||||
// ReportID contains the report ID
|
||||
ReportID string `json:"report_id"`
|
||||
|
||||
// ResolverASN is the ASN of the resolver
|
||||
ResolverASN string `json:"resolver_asn"`
|
||||
|
||||
// ResolverIP is the resolver IP
|
||||
ResolverIP string `json:"resolver_ip"`
|
||||
|
||||
// ResolverNetworkName is the network name of the resolver.
|
||||
ResolverNetworkName string `json:"resolver_network_name"`
|
||||
|
||||
// SoftwareName contains the software name
|
||||
SoftwareName string `json:"software_name"`
|
||||
|
||||
// SoftwareVersion contains the software version
|
||||
SoftwareVersion string `json:"software_version"`
|
||||
|
||||
// TestHelpers contains the test helpers. It seems this structure is more
|
||||
// complex than we would like. In particular, using a map from string to
|
||||
// string does not fit into the web_connectivity use case. Hence, for now
|
||||
// we're going to represent this using interface{}. In going forward we
|
||||
// may probably want to have more uniform test helpers.
|
||||
TestHelpers map[string]interface{} `json:"test_helpers,omitempty"`
|
||||
|
||||
// TestKeys contains the real test result. This field is opaque because
|
||||
// each experiment will insert here a different structure.
|
||||
TestKeys interface{} `json:"test_keys"`
|
||||
|
||||
// TestName contains the test name
|
||||
TestName string `json:"test_name"`
|
||||
|
||||
// MeasurementRuntime contains the measurement runtime. The JSON name
|
||||
// is test_runtime because this is the name expected by the OONI backend
|
||||
// even though that name is clearly a misleading one.
|
||||
MeasurementRuntime float64 `json:"test_runtime"`
|
||||
|
||||
// TestStartTime contains the test start time
|
||||
TestStartTime string `json:"test_start_time"`
|
||||
|
||||
// TestVersion contains the test version
|
||||
TestVersion string `json:"test_version"`
|
||||
}
|
||||
|
||||
// AddAnnotations adds the annotations from input to m.Annotations.
|
||||
func (m *Measurement) AddAnnotations(input map[string]string) {
|
||||
for key, value := range input {
|
||||
m.AddAnnotation(key, value)
|
||||
}
|
||||
}
|
||||
|
||||
// AddAnnotation adds a single annotations to m.Annotations.
|
||||
func (m *Measurement) AddAnnotation(key, value string) {
|
||||
if m.Annotations == nil {
|
||||
m.Annotations = make(map[string]string)
|
||||
}
|
||||
m.Annotations[key] = value
|
||||
}
|
||||
Loading…
Reference in a new issue