// GetNode returns the container node definition func GetNode(w rest.ResponseWriter, r *rest.Request) { dbConn, err := util.GetConnection(CLUSTERADMIN_DB) if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), 400) return } defer dbConn.Close() err = secimpl.Authorize(dbConn, r.PathParam("Token"), "perm-read") if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), http.StatusUnauthorized) return } ID := r.PathParam("ID") if ID == "" { logit.Error.Println("error node ID required") rest.Error(w, "node ID required", http.StatusBadRequest) return } node, err2 := admindb.GetContainer(dbConn, ID) if node.ID == "" { rest.NotFound(w, r) return } if err2 != nil { logit.Error.Println(err2.Error()) rest.Error(w, err2.Error(), http.StatusBadRequest) return } var currentStatus = "UNKNOWN" request := &swarmapi.DockerInspectRequest{} var inspectInfo swarmapi.DockerInspectResponse request.ContainerName = node.Name inspectInfo, err = swarmapi.DockerInspect(request) if err != nil { logit.Error.Println(err.Error()) currentStatus = CONTAINER_NOT_FOUND } if currentStatus != "CONTAINER NOT FOUND" { var pgport types.Setting pgport, err = admindb.GetSetting(dbConn, "PG-PORT") if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), http.StatusBadRequest) return } currentStatus, err = util.FastPing(pgport.Value, node.Name) if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), http.StatusBadRequest) return } //logit.Info.Println("pinging db finished") } clusternode := new(types.ClusterNode) clusternode.ID = node.ID clusternode.ClusterID = node.ClusterID clusternode.Name = node.Name clusternode.Role = node.Role clusternode.Image = node.Image clusternode.CreateDate = node.CreateDate clusternode.Status = currentStatus clusternode.ProjectID = node.ProjectID clusternode.ProjectName = node.ProjectName clusternode.ClusterName = node.ClusterName clusternode.ServerID = inspectInfo.ServerID clusternode.IPAddress = inspectInfo.IPAddress w.WriteJson(clusternode) }