wafmanage.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package admin
  2. import (
  3. "context"
  4. "fmt"
  5. v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
  6. adminApi "github.com/go-nunu/nunu-layout-advanced/api/v1/admin"
  7. "github.com/go-nunu/nunu-layout-advanced/internal/repository"
  8. "github.com/go-nunu/nunu-layout-advanced/internal/repository/admin"
  9. wafRep "github.com/go-nunu/nunu-layout-advanced/internal/repository/api/waf"
  10. "github.com/go-nunu/nunu-layout-advanced/internal/service"
  11. "slices"
  12. "time"
  13. )
  14. type WafManageService interface {
  15. GetWafManageList(ctx context.Context,req adminApi.WafManageList) (*v1.PaginatedResponse[adminApi.WafManageListRes], error)
  16. RecoverWaf(ctx context.Context,req adminApi.RecoverWafRequest) error
  17. SyncExecuteRenewalActions(ctx context.Context,req adminApi.RecoverWafRequest) error
  18. }
  19. func NewWafManageService(
  20. service *service.Service,
  21. wafManageRepository admin.WafManageRepository,
  22. globalLimitRep wafRep.GlobalLimitRepository,
  23. wafOperations WafOperationsService,
  24. hostRep repository.HostRepository,
  25. ) WafManageService {
  26. return &wafManageService{
  27. Service: service,
  28. wafManageRepository: wafManageRepository,
  29. globalLimitRep: globalLimitRep,
  30. wafOperations: wafOperations,
  31. hostRep: hostRep,
  32. }
  33. }
  34. type wafManageService struct {
  35. *service.Service
  36. wafManageRepository admin.WafManageRepository
  37. globalLimitRep wafRep.GlobalLimitRepository
  38. wafOperations WafOperationsService
  39. hostRep repository.HostRepository
  40. }
  41. func (s *wafManageService) GetWafManageList(ctx context.Context,req adminApi.WafManageList) (*v1.PaginatedResponse[adminApi.WafManageListRes], error) {
  42. return s.wafManageRepository.GetWafManageList(ctx, req)
  43. }
  44. func (s *wafManageService) RecoverWaf(ctx context.Context,req adminApi.RecoverWafRequest) error {
  45. wafModels, err := s.globalLimitRep.GetGlobalLimitsByHostIds(ctx, req.HostIds)
  46. if err != nil {
  47. return err
  48. }
  49. err = s.wafOperations.RecoverPlans(ctx, *wafModels, "closed")
  50. if err != nil {
  51. return err
  52. }
  53. return nil
  54. }
  55. func (s *wafManageService) SyncExecuteRenewalActions(ctx context.Context,req adminApi.RecoverWafRequest) error {
  56. wafData, err := s.hostRep.GetExpireTimeByHostId(ctx, req.HostIds)
  57. if err != nil {
  58. return err
  59. }
  60. wafExpireTime, err := s.globalLimitRep.GetGlobalLimitsByHostIds(ctx, req.HostIds)
  61. if err != nil {
  62. return err
  63. }
  64. var notExpiredHostIds []int
  65. for _, limit := range *wafExpireTime {
  66. if limit.ExpiredAt >= time.Now().Unix() - 1 * 60 * 60 {
  67. notExpiredHostIds = append(notExpiredHostIds, limit.HostId)
  68. }
  69. }
  70. var renewalRequest []RenewalRequest
  71. for i := range wafData {
  72. if slices.Contains(notExpiredHostIds, wafData[i].HostId) {
  73. continue
  74. }
  75. renewalRequest = append(renewalRequest, RenewalRequest{
  76. HostId: wafData[i].HostId,
  77. ExpiredAt: wafData[i].ExpiredAt,
  78. })
  79. }
  80. err = s.wafOperations.ExecuteRenewalActions(ctx, renewalRequest)
  81. if err != nil {
  82. return err
  83. }
  84. if len(notExpiredHostIds) != 0 {
  85. return fmt.Errorf("续费失败,套餐距离到期时间不能小于一小时,实例ID:%v", notExpiredHostIds)
  86. }
  87. return nil
  88. }