44	"app/library/ginutil" 
55	"app/library/types/convert" 
66	"app/models" 
7+ 	"errors" 
78	"github.com/gin-gonic/gin" 
89	jsoniter "github.com/json-iterator/go" 
910	"strings" 
@@ -14,7 +15,7 @@ type valInfos struct {
1415	Ids  []uint32  `json:"ids" form:"ids" binding:"required"` 
1516}
1617
17- func  getNodeRemoteShellResult (c  * gin.Context ,  shell   string ) (res  gin.H , err  error ) {
18+ func  DockerVersion (c  * gin.Context ) (res  gin.H , err  error ) {
1819	res  =  gin.H {}
1920	var  val  valInfos 
2021	if  err  =  ginutil .ShouldBind (c , & val ); err  !=  nil  {
@@ -24,14 +25,13 @@ func getNodeRemoteShellResult(c *gin.Context, shell string) (res gin.H, err erro
2425	if  err  =  models .DB ().Find (& list , "id IN (?)" , val .Ids ).Error ; err  !=  nil  {
2526		return 
2627	}
27- 	//并发 
2828	var  maps  sync.Map 
2929	var  wg  sync.WaitGroup 
3030	for  _ , v  :=  range  list  {
3131		wg .Add (1 )
3232		go  func (i  models.Node ) {
3333			defer  wg .Done ()
34- 			bytes , er  :=  i .Exec (shell )
34+ 			bytes , er  :=  i .Exec ("docker version --format='{{json .}}'" )
3535			var  item  =  gin.H {"id" : i .ID , "content" : string (bytes ), "error" : "" }
3636			if  er  !=  nil  {
3737				item ["error" ] =  er .Error ()
@@ -48,26 +48,54 @@ func getNodeRemoteShellResult(c *gin.Context, shell string) (res gin.H, err erro
4848	return 
4949}
5050
51- func  GetDockerVersion (c  * gin.Context ) (res  gin.H , err  error ) {
52- 	return  getNodeRemoteShellResult (c , "docker version --format='{{json .}}'" )
51+ func  DockerPs (c  * gin.Context ) (res  []interface {}, err  error ) {
52+ 	var  node  =  models .GetNode (c )
53+ 	bytes , err  :=  node .Exec ("docker ps --format='{{json .}}'" )
54+ 	if  err  !=  nil  {
55+ 		return 
56+ 	}
57+ 	res  =  make ([]interface {}, 0 )
58+ 	for  _ , strItem  :=  range  strings .Split (string (bytes ), "\n " ) {
59+ 		var  resItem  gin.H 
60+ 		if  jsoniter .Unmarshal ([]byte (strItem ), & resItem ) ==  nil  {
61+ 			res  =  append (res , resItem )
62+ 		}
63+ 	}
64+ 	return 
5365}
5466
55- func  GetDockerStats (c  * gin.Context ) (res  gin.H , err  error ) {
56- 	res , err  =  getNodeRemoteShellResult (c , "docker stats --no-stream --format='{{json .}}'" )
67+ func  DockerRestart (c  * gin.Context ) (err  error ) {
68+ 	var  name  =  ginutil .Input (c , "name" )
69+ 	if  name  ==  ""  {
70+ 		return  errors .New ("name is nil" )
71+ 	}
72+ 	var  node  =  models .GetNode (c )
73+ 	_ , err  =  node .Exec ("docker restart "  +  name )
74+ 	return 
75+ }
76+ 
77+ func  DockerRm (c  * gin.Context ) (err  error ) {
78+ 	var  name  =  ginutil .Input (c , "name" )
79+ 	if  name  ==  ""  {
80+ 		return  errors .New ("name is nil" )
81+ 	}
82+ 	var  node  =  models .GetNode (c )
83+ 	_ , err  =  node .Exec ("docker rm -f "  +  name )
84+ 	return 
85+ }
86+ 
87+ func  DockerStats (c  * gin.Context ) (res  []interface {}, err  error ) {
88+ 	var  node  =  models .GetNode (c )
89+ 	bytes , err  :=  node .Exec ("docker stats --no-stream --format='{{json .}}'" )
5790	if  err  !=  nil  {
5891		return 
5992	}
60- 	for  k , v  :=  range  res  {
61- 		var  item  =  v .(gin.H )
62- 		var  content  =  convert .MustString (item ["content" ])
63- 		var  jsonItemList  =  []gin.H {}
64- 		for  _ , i  :=  range  strings .Split (content , "\n " ) {
65- 			var  jsonItem  gin.H 
66- 			if  er  :=  jsoniter .Unmarshal ([]byte (i ), & jsonItem ); er  ==  nil  {
67- 				jsonItemList  =  append (jsonItemList , jsonItem )
68- 			}
93+ 	res  =  make ([]interface {}, 0 )
94+ 	for  _ , strItem  :=  range  strings .Split (string (bytes ), "\n " ) {
95+ 		var  resItem  gin.H 
96+ 		if  jsoniter .Unmarshal ([]byte (strItem ), & resItem ) ==  nil  {
97+ 			res  =  append (res , resItem )
6998		}
70- 		res [k ] =  jsonItemList 
7199	}
72100	return 
73101}
0 commit comments