func (*Scamper) DontTrace() {
	tracesNotPerformed.WithLabelValues("scamper").Inc()
}
DontTrace is called when a previous trace that we were waiting for
fails. It increments a counter that tracks the number of these failures.
package tracer
import (
	"bytes"
	"context"
	"errors"
	"io/ioutil"
	"log"
	"strconv"
	"strings"
	"time"
	"github.com/m-lab/go/shx"
	"github.com/m-lab/uuid"
)
type Scamper struct {
	Binary           string
	OutputPath       string
	ScamperTimeout   time.Duration
	TracelbPTR       bool
	TracelbWaitProbe int
}
func (s *Scamper) Trace(remoteIP, cookie, uuid string, t time.Time) (out []byte, err error) {
	tracesInProgress.WithLabelValues("scamper").Inc()
	defer tracesInProgress.WithLabelValues("scamper").Dec()
	return s.trace(remoteIP, cookie, uuid, t)
}
func (s *Scamper) TraceFromCachedTrace(uuid, cookie string, t time.Time, cachedTest []byte) error {
	filename, err := generateFilename(s.OutputPath, cookie, t)
	if err != nil {
		log.Printf("failed to generate filename (error: %v)\n", err)
		tracerCacheErrors.WithLabelValues("scamper", err.Error()).Inc()
		return err
	}
	split := bytes.Index(cachedTest, []byte{'\n'})
	if split <= 0 || split == len(cachedTest) {
		log.Printf("failed to split cached test (split: %v)\n", split)
		tracerCacheErrors.WithLabelValues("scamper", "badcache").Inc()
		return errors.New("invalid cached test")
	}
	newTest := append(createMetaline(uuid, true, extractUUID(cachedTest[:split])), cachedTest[split+1:]...)
	return ioutil.WriteFile(filename, []byte(newTest), 0666)
}