in pkg/skoop/nodemanager/net_node_manager.go [48:108]
func (m *defaultNetNodeManager) GetNetNodeFromID(nodeType model.NetNodeType, id string) (model.NetNodeAction, error) {
key := m.cacheKey(nodeType, id)
if node, ok := m.cache.Load(key); ok {
return node.(model.NetNodeAction), nil
}
var ret model.NetNodeAction
switch nodeType {
case model.NetNodeTypePod:
k8sPod, err := m.ipCache.GetPodFromIP(id)
if err != nil {
return nil, err
}
if k8sPod == nil {
return nil, fmt.Errorf("k8s pod not found from ip %s", id)
}
podInfo, err := m.collectorManager.CollectPod(k8sPod.Namespace, k8sPod.Name)
if err != nil {
return nil, fmt.Errorf("error run collector for pod: %v", err)
}
ret, err = m.plugin.CreatePod(podInfo)
if err != nil {
return nil, fmt.Errorf("error create pod: %v", err)
}
case model.NetNodeTypeNode:
nodeInfo, err := m.collectorManager.CollectNode(id)
if err != nil {
return nil, fmt.Errorf("error run collector for node: %v", err)
}
ret, err = m.plugin.CreateNode(nodeInfo)
if err != nil {
return nil, fmt.Errorf("error create node: %v", err)
}
default:
if m.parent != nil {
var err error
ret, err = m.parent.GetNetNodeFromID(nodeType, id)
if err != nil {
return nil, err
}
} else {
ret = &plugin.GenericNetNode{
NetNode: &model.NetNode{
Type: model.NetNodeTypeGeneric,
ID: id,
Actions: map[*model.Link]*model.Action{},
},
}
}
}
if ret != nil {
m.cache.Store(key, ret)
}
return ret, nil
}