Files
weave-scope/app/origin_node.go
2015-05-22 13:27:14 +02:00

66 lines
1.7 KiB
Go

package main
import "github.com/weaveworks/scope/report"
// OriginNode is a node in the originating report topology. It's a process ID
// or network host. It's used by the /api/topology/{topology}/{nodeID} handler
// to generate detailed information. One node from a rendered topology may
// have multiple origin nodes.
type OriginNode struct {
Table report.Table
}
func getOriginNode(t report.Topology, id string) (OriginNode, bool) {
node, ok := t.NodeMetadatas[id]
if !ok {
return OriginNode{}, false
}
// The node represents different actual things depending on the topology.
// So we deduce what it is, based on the metadata.
if _, ok := node["pid"]; ok {
return originNodeForProcess(node), true
}
// Assume network host. Could strengthen this guess by adding a
// special key in the probe spying procedure.
return originNodeForNetworkHost(node), true
}
func originNodeForProcess(node report.NodeMetadata) OriginNode {
rows := []report.Row{
{Key: "Host", ValueMajor: node["domain"], ValueMinor: ""},
{Key: "PID", ValueMajor: node["pid"], ValueMinor: ""},
{Key: "Process name", ValueMajor: node["name"], ValueMinor: ""},
}
for key, human := range map[string]string{
"docker_id": "Container ID",
"docker_name": "Container name",
"cgroup": "cgroup",
} {
if val, ok := node[key]; ok {
rows = append(rows, report.Row{Key: human, ValueMajor: val, ValueMinor: ""})
}
}
return OriginNode{
Table: report.Table{
Title: "Origin Process",
Numeric: false,
Rows: rows,
},
}
}
func originNodeForNetworkHost(node report.NodeMetadata) OriginNode {
rows := []report.Row{
{"Hostname", node["name"], ""},
}
return OriginNode{
Table: report.Table{
Title: "Origin Host",
Numeric: false,
Rows: rows,
},
}
}