in pkg/controller/service/capture.go [131:196]
func (c *controller) Capture(ctx context.Context, capture *CaptureArgs) (int, error) {
taskID := int(getTaskIdx())
var tasksToCommit []*rpc.CaptureInfo
for _, captureItem := range capture.CaptureList {
task := &rpc.CaptureInfo{
CaptureDurationSeconds: int32(capture.CaptureDurationSeconds),
Filter: capture.Filter,
}
switch captureItem.Type {
case typePod:
var err error
task.Pod, task.Node, _, err = c.getPodInfo(ctx, captureItem.Namespace, captureItem.Name)
if err != nil {
return 0, err
}
task.CaptureType = typePod
case typeNode:
task.Node = &rpc.NodeInfo{
Name: captureItem.Name,
}
task.CaptureType = typeNode
default:
return 0, fmt.Errorf("invalid capture type: %v", captureItem.Type)
}
tasksToCommit = append(tasksToCommit, task)
}
var resultList []*CaptureTaskResult
for _, captureInfo := range tasksToCommit {
_, err := c.commitTask(captureInfo.Node.Name, &rpc.Task{
Type: rpc.TaskType_Capture,
Id: strconv.Itoa(taskID),
TaskInfo: &rpc.Task_Capture{
Capture: captureInfo,
},
})
if err != nil {
return 0, err
}
var spec *TaskSpec
if captureInfo.GetCaptureType() == typePod {
spec = &TaskSpec{
TaskType: captureInfo.CaptureType,
Name: captureInfo.GetPod().Name,
Namespace: captureInfo.GetPod().Namespace,
}
} else {
spec = &TaskSpec{
TaskType: captureInfo.CaptureType,
Name: captureInfo.GetNode().Name,
}
}
resultList = append(resultList, &CaptureTaskResult{
TaskID: taskID,
Spec: spec,
Status: "running",
Result: "",
Message: "",
})
}
captureTasks.Store(taskID, resultList)
return taskID, nil
}