// MakeReport makes a clean report, ready to Merge() other reports into. func MakeReport() Report { return Report{ Endpoint: MakeTopology(), Process: MakeTopology(). WithShape(Square). WithLabel("process", "processes"), Container: MakeTopology(). WithShape(Hexagon). WithLabel("container", "containers"), ContainerImage: MakeTopology(). WithShape(Hexagon). WithLabel("image", "images"), Host: MakeTopology(). WithShape(Circle). WithLabel("host", "hosts"), Pod: MakeTopology(). WithShape(Heptagon). WithLabel("pod", "pods"), Service: MakeTopology(). WithShape(Heptagon). WithLabel("service", "services"), Deployment: MakeTopology(). WithShape(Heptagon). WithLabel("deployment", "deployments"), ReplicaSet: MakeTopology(). WithShape(Heptagon). WithLabel("replica set", "replica sets"), Overlay: MakeTopology(), Sampling: Sampling{}, Window: 0, Plugins: xfer.MakePluginSpecs(), ID: fmt.Sprintf("%d", rand.Int63()), } }
// Report gets the latest report from the plugin func (p *Plugin) Report() (result report.Report, err error) { result = report.MakeReport() defer func() { p.setStatus(err) result.Plugins = result.Plugins.Add(p.PluginSpec) if err != nil { result = report.MakeReport() result.Plugins = xfer.MakePluginSpecs(p.PluginSpec) } }() if err := p.get("/report", p.handshakeMetadata, &result); err != nil { return result, err } if result.Plugins.Size() != 1 { return result, fmt.Errorf("report must contain exactly one plugin (found %d)", result.Plugins.Size()) } key := result.Plugins.Keys()[0] spec, _ := result.Plugins.Lookup(key) p.PluginSpec = spec foundReporter := false for _, i := range spec.Interfaces { if i == "reporter" { foundReporter = true break } } switch { case spec.APIVersion != p.expectedAPIVersion: err = fmt.Errorf("incorrect API version: expected %q, got %q", p.expectedAPIVersion, spec.APIVersion) case spec.ID == "": err = fmt.Errorf("spec must contain an id") case spec.Label == "": err = fmt.Errorf("spec must contain a label") case !foundReporter: err = fmt.Errorf("spec must implement the \"reporter\" interface") } return result, err }