From 22782affe98d5bacb729318b0df1fa0db4fd6140 Mon Sep 17 00:00:00 2001 From: nicklenstra-wf Date: Thu, 31 Jul 2014 14:19:56 -0600 Subject: [PATCH] Added chain graph --- api/task_chain.go | 69 +++++++++++++++++++++++++++++++++++++++++++++++ rest/router.go | 2 ++ rest/task.go | 14 ++++++++++ 3 files changed, 85 insertions(+) create mode 100644 api/task_chain.go diff --git a/api/task_chain.go b/api/task_chain.go new file mode 100644 index 0000000..ee1daa1 --- /dev/null +++ b/api/task_chain.go @@ -0,0 +1,69 @@ +package api + +import "fmt" + +type NodeLink struct { + Node *Node + Parent *NodeLink +} + +func (a *TaskAPI) GetFullGraph(requestId string, endId string) ([]*Node, error) { + graph, e := a.GetRequestTaskGraph(requestId) + + if e != nil { + return nil, e + } + + nodeLink := &NodeLink{graph, nil} + + fmt.Println("endId = ", endId) + node := FindNode(endId, nodeLink) + fmt.Println("FindNode Results = ", node) + + var slice []*Node + slice = append(slice, node.Node) + + chain := ParentList(slice, node) + fmt.Println("Chain: ", chain) + + // TODO: Return the list of nodes + + return chain, nil +} + +func ParentList(slice []*Node, node *NodeLink) []*Node { + //parentLink := NodeLink{node.Parent.Node, node.Parent.Parent} + + if node.Parent == nil { + return slice + } else { + slice = append(slice, node.Parent.Node) + //fmt.Println(slice) + result := ParentList(slice, node.Parent) + if result != nil { + return result + } + } + return slice +} + +func FindNode(nodeId string, parent *NodeLink) *NodeLink { + for _, child := range parent.Node.Children { + childLink := NodeLink{child, parent} + + task := *child.task + fmt.Println("$$$", task["task_id"]) + + if task["task_id"] == nodeId { + return &childLink + } else { + fmt.Println("***", task["task_id"]) + result := FindNode(nodeId, &childLink) + if result != nil { + return result + } + } + } + + return nil +} diff --git a/rest/router.go b/rest/router.go index 6924c8d..0f736f7 100644 --- a/rest/router.go +++ b/rest/router.go @@ -28,6 +28,8 @@ func SetupTaskRouter(pool db.DBPool, prefix string, writeToFile bool, middleware middleware(taskServices.getRequestsForAddress)) router.Get(prefix+"addresses/:address/requests/:requestid/tasks", middleware(taskServices.getTaskKeysForRequests)) + router.Get(prefix+"addresses/:address/requests/:requestid/chain/:endid", + middleware(taskServices.getTaskGraphChain)) router.Get(prefix+"addresses/:address/requests/:requestid/taskgraph", middleware(taskServices.getTaskGraphForRequest)) router.Get(prefix+"task/:taskKey", middleware(taskServices.getTaskByKey)) diff --git a/rest/task.go b/rest/task.go index 694890c..9363a61 100644 --- a/rest/task.go +++ b/rest/task.go @@ -103,6 +103,20 @@ func (s *TaskServices) getTaskGraphForRequest(w http.ResponseWriter, r *http.Req SendJsonResponse(w, graph, err) } +func (s *TaskServices) getTaskGraphChain(w http.ResponseWriter, r *http.Request) { + requestid := r.URL.Query().Get(":requestid") + endid := r.URL.Query().Get(":endid") + + if requestid == "" { + SendJsonErrorResponse(w, nil, "No request id passed in.") + return + } + + chain, err := s.api.GetFullGraph(requestid, endid) + + SendJsonResponse(w, chain, err) +} + func (s *TaskServices) getAllTasks(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Send it")) }