wafmanage.go 3.0 KB

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