nginx.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. package nginx_controller
  2. import (
  3. "encoding/json"
  4. "github.com/astaxie/beego/logs"
  5. "github.com/astaxie/beego/orm"
  6. "nginx-ui/server/constants"
  7. "nginx-ui/server/models"
  8. "nginx-ui/server/modules/nginx/nginx_service"
  9. ngx "nginx-ui/server/nginx"
  10. )
  11. var ngxService = nginx_service.NewNginxService()
  12. type NginxController struct {
  13. BaseController
  14. }
  15. // Get getAll,
  16. // 管理员获取全部,非管理员或者自己名下的
  17. func (c *NginxController) Get() {
  18. current := c.RequiredUser()
  19. if current == nil {
  20. return
  21. }
  22. o := orm.NewOrm()
  23. qs := o.QueryTable("nginx")
  24. if !current.IsAdmin() {
  25. qs = qs.Filter("Uid", current.Account)
  26. }
  27. var list []*models.Nginx
  28. _, err := qs.All(&list)
  29. for i := range list {
  30. item := list[i]
  31. if item.Password != "" {
  32. item.Password = constants.ReplacePassword
  33. }
  34. }
  35. if err != nil {
  36. c.ErrorJson(err)
  37. return
  38. } else {
  39. c.SetData(list).Json()
  40. }
  41. }
  42. // Post add nginx instance
  43. func (c *NginxController) Post() {
  44. current := c.RequiredUser()
  45. if current == nil {
  46. return
  47. }
  48. var nginx models.Nginx
  49. err := json.Unmarshal(c.Ctx.Input.RequestBody, &nginx)
  50. if err != nil {
  51. logs.Error(err, string(c.Ctx.Input.RequestBody))
  52. c.ErrorJson(err)
  53. return
  54. }
  55. nginx.Check()
  56. o := orm.NewOrm()
  57. nginx.Uid = current.Account
  58. nginx.NginxPath = "/usr/sbin/nginx"
  59. nginx.NginxDir = "/etc/nginx"
  60. if nginx.IsLocal {
  61. nginx.IsServer = true
  62. }
  63. nginx.DataDir = "/app/data"
  64. _, err = o.Insert(&nginx)
  65. if err != nil {
  66. c.ErrorJson(err)
  67. return
  68. }
  69. logs.Info("post", nginx)
  70. instance := ngx.GetInstance(&nginx)
  71. err = instance.Connect()
  72. if err != nil {
  73. c.SetCode(1).SetMsg(err.Error()).SetData(nginx)
  74. c.Json()
  75. return
  76. }
  77. out, err := instance.GetVersion()
  78. if err != nil {
  79. c.SetCode(1).SetMsg(err.Error()).SetData(nginx)
  80. c.Json()
  81. return
  82. }
  83. nginx.VersionInfo = out
  84. _, _ = o.Update(&nginx, "VersionInfo")
  85. c.SetData(nginx).Json()
  86. }
  87. // Update modify nginx instance
  88. // post /nginx/:id
  89. func (c *NginxController) Update() {
  90. exist, err := c.CheckNginxPermission()
  91. if err != nil {
  92. return
  93. }
  94. var nginx models.Nginx
  95. err = json.Unmarshal(c.Ctx.Input.RequestBody, &nginx)
  96. if err != nil {
  97. logs.Error(err, string(c.Ctx.Input.RequestBody))
  98. c.ErrorJson(err)
  99. return
  100. }
  101. nginx.Id = exist.Id
  102. nginx.Uid = exist.Uid
  103. nginx.Check()
  104. o := orm.NewOrm()
  105. if nginx.Password == constants.ReplacePassword {
  106. nginx.Password = exist.Password
  107. }
  108. nginx.HttpConf = exist.HttpConf
  109. _, err = o.Update(&nginx)
  110. if err != nil {
  111. c.ErrorJson(err)
  112. return
  113. }
  114. logs.Info("post", nginx)
  115. instance := ngx.GetInstance(&nginx)
  116. err = instance.Connect()
  117. if err != nil {
  118. c.SetCode(1).SetMsg(err.Error()).SetData(nginx)
  119. c.Json()
  120. return
  121. }
  122. out, err := instance.GetVersion()
  123. if err != nil {
  124. c.SetCode(1).SetMsg(err.Error()).SetData(nginx)
  125. c.Json()
  126. return
  127. }
  128. nginx.VersionInfo = out
  129. _, _ = o.Update(&nginx, "VersionInfo")
  130. c.SetData(nginx).Json()
  131. }
  132. // StartNginx startNginx
  133. // post /nginx/:id/start
  134. func (c *NginxController) StartNginx() {
  135. nginx, err := c.CheckNginxPermission()
  136. if err != nil {
  137. return
  138. }
  139. instance := ngx.GetInstance(nginx)
  140. err = instance.Start()
  141. isRun, msg := instance.Status()
  142. c.SetData(isRun).SetMsg(msg).Json()
  143. }
  144. // StopNginx add nginx instance
  145. // post /nginx/:id/stop
  146. func (c *NginxController) StopNginx() {
  147. nginx, err := c.CheckNginxPermission()
  148. if err != nil {
  149. return
  150. }
  151. instance := ngx.GetInstance(nginx)
  152. err = instance.Stop()
  153. isRun, msg := instance.Status()
  154. c.SetData(isRun).SetMsg(msg).Json()
  155. }
  156. // RefreshHttp nginx detail data
  157. // post /nginx/:id/http/refresh
  158. func (c *NginxController) RefreshHttp() {
  159. exist, err := c.CheckNginxPermission()
  160. if err != nil {
  161. return
  162. }
  163. var nginx models.Nginx
  164. err = json.Unmarshal(c.Ctx.Input.RequestBody, &nginx)
  165. if err != nil {
  166. logs.Error(err, string(c.Ctx.Input.RequestBody))
  167. c.ErrorJson(err)
  168. return
  169. }
  170. logs.Info("id", nginx)
  171. o := orm.NewOrm()
  172. if nginx.HttpConf != "" {
  173. _, err = o.Update(&nginx, "HttpConf", "HttpData")
  174. if err != nil {
  175. c.ErrorJson(err)
  176. return
  177. }
  178. exist.HttpConf = nginx.HttpConf
  179. exist.HttpData = nginx.HttpData
  180. }
  181. ins := ngx.GetInstance(exist)
  182. err = ins.RefreshHttp(*exist)
  183. if err != nil {
  184. c.ErrorJson(err)
  185. return
  186. }
  187. c.Json()
  188. }
  189. // GetNginx nginx detail data
  190. // get /nginx/:id
  191. func (c *NginxController) GetNginx() {
  192. nginx, err := c.CheckNginxPermission()
  193. if err != nil {
  194. return
  195. }
  196. if nginx.Password != "" {
  197. nginx.Password = constants.ReplacePassword
  198. }
  199. c.AddRespData("nginx", nginx)
  200. o := orm.NewOrm()
  201. var servers []models.ServerHost
  202. _, err = o.QueryTable((*models.ServerHost)(nil)).Filter("NginxId", nginx.Id).All(&servers)
  203. if err != nil {
  204. c.ErrorJson(err)
  205. return
  206. }
  207. c.AddRespData("servers", servers)
  208. c.Json()
  209. }
  210. // DelNginx delete a instance
  211. // delete /nginx/:id
  212. func (c *NginxController) DelNginx() {
  213. nginx, err := c.CheckNginxPermission()
  214. if err != nil {
  215. return
  216. }
  217. o := orm.NewOrm()
  218. count, err := o.Delete(nginx, "Id")
  219. if err != nil {
  220. c.ErrorJson(err)
  221. } else {
  222. c.SetData(count).Json()
  223. }
  224. }
  225. // StatusNginx add nginx instance
  226. // post /nginx/:id/status
  227. func (c *NginxController) StatusNginx() {
  228. nginx, err := c.CheckNginxPermission()
  229. if err != nil {
  230. return
  231. }
  232. instance := ngx.GetInstance(nginx)
  233. isRun, msg := instance.Status()
  234. c.SetData(isRun).SetMsg(msg).Json()
  235. }