func()

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
}