download_backup.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package jobs
  2. import (
  3. "encoding/json"
  4. "gadmin/utility"
  5. "github.com/sirupsen/logrus"
  6. "io/ioutil"
  7. "net/http"
  8. "os"
  9. "strings"
  10. )
  11. var DownloadBackup = new(jDownloadBackup)
  12. type jDownloadBackup struct{}
  13. func (j *jDownloadBackup) Run() {
  14. //logrus.Info("jDownloadBackup Run.....")
  15. //if os.Getenv("GIN_MODE") != "release" {
  16. // j.redisHistoryKeys()
  17. //} else {
  18. // logrus.Warn("正式环境无需进行下载备份,跳过..")
  19. //}
  20. }
  21. // redisHistoryKeys redis历史key
  22. func (j *jDownloadBackup) redisHistoryKeys() {
  23. var (
  24. downloadURL = os.Getenv("DOWNLOAD_BACKUP_URL") + RedisBackupPath // 下载备份链接地址前缀
  25. savePath = os.Getenv("DOWNLOAD_BACKUP_PATH") + RedisBackupPath // 下载保存路径
  26. sourceURL = downloadURL + "download.json" // 拉取下载列表源
  27. jsonData []string
  28. )
  29. utility.CreateDir(savePath) // 创建保存路径
  30. res, err := http.Get(sourceURL)
  31. defer res.Body.Close()
  32. if err != nil {
  33. logrus.Errorf("http.Get err:%v", err)
  34. }
  35. data, err := ioutil.ReadAll(res.Body)
  36. if err != nil {
  37. logrus.Errorf("ioutil.ReadAll err:%v", err)
  38. }
  39. if err = json.Unmarshal(data, &jsonData); err != nil {
  40. logrus.Errorf("json.Unmarshal err:%v", err)
  41. }
  42. for i := 0; i < len(jsonData); i++ {
  43. j.downLoadSaveResources(savePath, downloadURL+jsonData[i])
  44. }
  45. }
  46. func (j *jDownloadBackup) downLoadSaveResources(base string, url string) {
  47. pic := base
  48. idx := strings.LastIndex(url, "/")
  49. if idx < 0 {
  50. pic += "/" + url
  51. } else {
  52. pic += url[idx+1:]
  53. }
  54. v, err := http.Get(url)
  55. if err != nil {
  56. logrus.Errorf("Http get [%v] failed! %v", url, err)
  57. return
  58. }
  59. defer v.Body.Close()
  60. content, err := ioutil.ReadAll(v.Body)
  61. if err != nil {
  62. logrus.Errorf("Read http response failed! %v", err)
  63. return
  64. }
  65. err = ioutil.WriteFile(pic, content, 0666)
  66. if err != nil {
  67. logrus.Errorf("Save to file failed! %v", err)
  68. return
  69. }
  70. logrus.Info("Download and save successfully:", url)
  71. return
  72. }