Documentation
¶
Overview ¶
Package model defines shared data structures and interfaces.
Index ¶
- Constants
- Variables
- type ExperimentCallbacks
- type ExperimentMeasurer
- type ExperimentOrchestraClient
- type ExperimentSession
- type KeyValueStore
- type LocationInfo
- type Logger
- type Measurement
- type MeasurementTarget
- type PrinterCallbacks
- type PrivacySettings
- type Service
- type TorTarget
- type URLInfo
- type URLListConfig
Constants ¶
const ( // DefaultProbeASN is the default probe ASN as number. DefaultProbeASN uint = 0 // DefaultProbeCC is the default probe CC. DefaultProbeCC = "ZZ" // DefaultProbeIP is the default probe IP. DefaultProbeIP = "127.0.0.1" // DefaultProbeNetworkName is the default probe network name. DefaultProbeNetworkName = "" // DefaultResolverASN is the default resolver ASN. DefaultResolverASN uint = 0 // DefaultResolverIP is the default resolver IP. DefaultResolverIP = "127.0.0.2" // DefaultResolverNetworkName is the default resolver network name. DefaultResolverNetworkName = "" )
Variables ¶
var ( // DefaultProbeASNString is the default probe ASN as a string. DefaultProbeASNString = fmt.Sprintf("AS%d", DefaultProbeASN) // DefaultResolverASNString is the default resolver ASN as a string. DefaultResolverASNString = fmt.Sprintf("AS%d", DefaultResolverASN) )
Functions ¶
This section is empty.
Types ¶
type ExperimentCallbacks ¶ added in v0.8.0
type ExperimentCallbacks interface {
// OnDataUsage provides information about data usage.
//
// This callback is deprecated and will be removed once we have
// removed the dependency on Measurement Kit.
OnDataUsage(dloadKiB, uploadKiB float64)
// OnProgress provides information about an experiment progress.
OnProgress(percentage float64, message string)
}
ExperimentCallbacks contains experiment event-handling callbacks
type ExperimentMeasurer ¶ added in v0.8.0
type ExperimentMeasurer interface {
// ExperimentName returns the experiment name.
ExperimentName() string
// ExperimentVersion returns the experiment version.
ExperimentVersion() string
// Run runs the experiment with the specified context, session,
// measurement, and experiment calbacks.
Run(
ctx context.Context, sess ExperimentSession,
measurement *Measurement, callbacks ExperimentCallbacks,
) error
}
ExperimentMeasurer is the interface that allows to run a measurement for a specific experiment.
type ExperimentOrchestraClient ¶ added in v0.8.0
type ExperimentOrchestraClient interface {
FetchPsiphonConfig(ctx context.Context) ([]byte, error)
FetchTorTargets(ctx context.Context, cc string) (map[string]TorTarget, error)
FetchURLList(ctx context.Context, config URLListConfig) ([]URLInfo, error)
}
ExperimentOrchestraClient is the experiment's view of a client for querying the OONI orchestra API.
type ExperimentSession ¶ added in v0.8.0
type ExperimentSession interface {
ASNDatabasePath() string
GetTestHelpersByName(name string) ([]Service, bool)
DefaultHTTPClient() *http.Client
Logger() Logger
MaybeStartTunnel(ctx context.Context, name string) error
NewOrchestraClient(ctx context.Context) (ExperimentOrchestraClient, error)
ProbeCC() string
ProxyURL() *url.URL
MaybeResolverIP() string
TempDir() string
TunnelBootstrapTime() time.Duration
UserAgent() string
}
ExperimentSession is the experiment's view of a session.
type KeyValueStore ¶ added in v0.3.0
type KeyValueStore interface {
Get(key string) (value []byte, err error)
Set(key string, value []byte) (err error)
}
KeyValueStore is a key-value store used by the session.
type LocationInfo ¶
type LocationInfo struct {
// ASN is the autonomous system number
ASN uint
// CountryCode is the country code
CountryCode string
// NetworkName is the network name
NetworkName string
// IP is the probe IP
ProbeIP string
// ResolverASN is the resolver ASN
ResolverASN uint
// ResolverIP is the resolver IP
ResolverIP string
// ResolverNetworkName is the resolver network name
ResolverNetworkName string
}
LocationInfo contains location information
type Logger ¶ added in v0.8.0
type Logger interface {
// Debug emits a debug message.
Debug(msg string)
// Debugf formats and emits a debug message.
Debugf(format string, v ...interface{})
// Info emits an informational message.
Info(msg string)
// Infof format and emits an informational message.
Infof(format string, v ...interface{})
// Warn emits a warning message.
Warn(msg string)
// Warnf formats and emits a warning message.
Warnf(format string, v ...interface{})
}
Logger defines the common interface that a logger should have. It is out of the box compatible with `log.Log` in `apex/log`.
type Measurement ¶
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:"-"`
// OOID is the measurement ID stamped by the OONI collector.
OOID string `json:"ooid,omitempty"`
// 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"`
}
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.
func (*Measurement) AddAnnotation ¶
func (m *Measurement) AddAnnotation(key, value string)
AddAnnotation adds a single annotations to m.Annotations.
func (*Measurement) AddAnnotations ¶
func (m *Measurement) AddAnnotations(input map[string]string)
AddAnnotations adds the annotations from input to m.Annotations.
func (*Measurement) MakeGenericTestKeys ¶ added in v0.8.0
func (m *Measurement) MakeGenericTestKeys() (map[string]interface{}, error)
MakeGenericTestKeys casts the m.TestKeys to a map[string]interface{}.
Ideally, all tests should have a clear Go structure, well defined, that will be stored in m.TestKeys as an interface. This is not already the case and it's just valid for tests written in Go. Until all tests will be written in Go, we'll keep this glue here to make sure we convert from the engine format to the cli format.
This function will first attempt to cast directly to map[string]interface{}, which is possible for MK tests, and then use JSON serialization and de-serialization only if that's required.
type MeasurementTarget ¶ added in v0.10.0
type MeasurementTarget string
MeasurementTarget is the target of a OONI measurement.
func (MeasurementTarget) MarshalJSON ¶ added in v0.10.0
func (t MeasurementTarget) MarshalJSON() ([]byte, error)
MarshalJSON serializes the MeasurementTarget.
type PrinterCallbacks ¶ added in v0.17.0
type PrinterCallbacks struct {
Logger
}
PrinterCallbacks is the default event handler
func NewPrinterCallbacks ¶ added in v0.17.0
func NewPrinterCallbacks(logger Logger) PrinterCallbacks
NewPrinterCallbacks returns a new default callback handler
func (PrinterCallbacks) OnDataUsage ¶ added in v0.17.0
func (d PrinterCallbacks) OnDataUsage(dloadKiB, uploadKiB float64)
OnDataUsage provides information about data usage.
func (PrinterCallbacks) OnProgress ¶ added in v0.17.0
func (d PrinterCallbacks) OnProgress(percentage float64, message string)
OnProgress provides information about an experiment progress.
type PrivacySettings ¶
type PrivacySettings struct {
// IncludeASN indicates whether to include the ASN
IncludeASN bool
// IncludeCountry indicates whether to include the country
IncludeCountry bool
// IncludeIP indicates whether to include the IP
IncludeIP bool
}
PrivacySettings contains privacy settings for submitting measurements.
func (PrivacySettings) Apply ¶
func (ps PrivacySettings) Apply(m *Measurement, probeIP string) (err error)
Apply applies the privacy settings to the measurement, possibly scrubbing the probeIP out of it.
func (PrivacySettings) MaybeRewriteTestKeys ¶
func (ps PrivacySettings) MaybeRewriteTestKeys( m *Measurement, currentIP string, marshal func(interface{}) ([]byte, error), ) error
MaybeRewriteTestKeys is the function called by Apply that ensures that m's serialization doesn't include the IP
type Service ¶
type Service struct {
// Address is the address of the server.
Address string `json:"address"`
// Type is the type of the service.
Type string `json:"type"`
// Front is the front to use with "cloudfront" type entries.
Front string `json:"front,omitempty"`
}
Service describes a backend service.
The fields of this struct have the meaning described in v2.0.0 of the OONI bouncer specification defined by https://github.com/ooni/spec/blob/master/backends/bk-004-bouncer.md.
type TorTarget ¶ added in v0.5.0
type TorTarget struct {
// Address is the address of the target.
Address string `json:"address"`
// Name is the name of the target.
Name string `json:"name"`
// Params contains optional params for, e.g., pluggable transports.
Params map[string][]string `json:"params"`
// Protocol is the protocol to use with the target.
Protocol string `json:"protocol"`
// Source is the source from which we fetched this specific
// target. Whenever the source is non-empty, we will treat
// this specific target as a private target.
Source string `json:"source"`
}
TorTarget is a target for the tor experiment.
type URLInfo ¶ added in v0.3.0
type URLInfo struct {
CategoryCode string `json:"category_code"`
CountryCode string `json:"country_code"`
URL string `json:"url"`
}
URLInfo contains info on a test lists URL
type URLListConfig ¶ added in v0.14.0
type URLListConfig struct {
Categories []string // Categories to query for (empty means all)
CountryCode string // CountryCode is the optional country code
Limit int64 // Max number of URLs (<= 0 means no limit)
}
URLListConfig contains configuration for fetching the URL list.