nginx.go 4.8 KB

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