nginx.go 4.9 KB

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