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