type Config … type nodeTime … type Observer … type JSONDuration … type NodeDuration … type Results … // NewObserver creates a new observer given a handle to the Clientset func NewObserver(clientSet *clientset.Clientset, numNodes int) *Observer { … } // StartObserving starts an asynchronous loop to monitor for node changes. // Call Results() to get the test results after starting observer. func (o *Observer) StartObserving() error { … } // Results returns the test results. It waits for the observer to finish // and returns the computed results of the observations. func (o *Observer) Results(name string, config *Config) *Results { … } func (o *Observer) monitor() { … } // String implements the Stringer interface and returns a multi-line representation // of the test results. func (results *Results) String() string { … } // MarshalJSON implements the json.Marshaler interface func (jDuration *JSONDuration) MarshalJSON() ([]byte, error) { … } // UnmarshalJSON implements the json.Unmarshaler interface func (jDuration *JSONDuration) UnmarshalJSON(b []byte) (err error) { … }