| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793 |
- // Code generated by Wire. DO NOT EDIT.
- //go:generate go run -mod=mod github.com/google/wire/cmd/wire
- //go:build !wireinject
- // +build !wireinject
- package main
- import (
- "context"
- "github.com/Wei-Shaw/sub2api/ent"
- "github.com/Wei-Shaw/sub2api/internal/config"
- "github.com/Wei-Shaw/sub2api/internal/handler"
- "github.com/Wei-Shaw/sub2api/internal/handler/admin"
- "github.com/Wei-Shaw/sub2api/internal/payment"
- "github.com/Wei-Shaw/sub2api/internal/repository"
- "github.com/Wei-Shaw/sub2api/internal/securityaudit"
- "github.com/Wei-Shaw/sub2api/internal/server"
- "github.com/Wei-Shaw/sub2api/internal/server/middleware"
- "github.com/Wei-Shaw/sub2api/internal/service"
- "github.com/redis/go-redis/v9"
- "log"
- "net/http"
- "sync"
- "time"
- )
- import (
- _ "embed"
- _ "github.com/Wei-Shaw/sub2api/ent/runtime"
- )
- // Injectors from wire.go:
- func initializeApplication(buildInfo handler.BuildInfo) (*Application, error) {
- configConfig, err := config.ProvideConfig()
- if err != nil {
- return nil, err
- }
- client, err := repository.ProvideEnt(configConfig)
- if err != nil {
- return nil, err
- }
- db, err := repository.ProvideSQLDB(client)
- if err != nil {
- return nil, err
- }
- userRepository := repository.NewUserRepository(client, db)
- redeemCodeRepository := repository.NewRedeemCodeRepository(client)
- redisClient := repository.ProvideRedis(configConfig)
- refreshTokenCache := repository.NewRefreshTokenCache(redisClient)
- settingRepository := repository.NewSettingRepository(client)
- groupRepository := repository.NewGroupRepository(client, db)
- proxyRepository := repository.NewProxyRepository(client, db)
- settingService := service.ProvideSettingService(settingRepository, groupRepository, proxyRepository, configConfig)
- emailCache := repository.NewEmailCache(redisClient)
- emailService := service.NewEmailService(settingRepository, emailCache)
- turnstileVerifier := repository.NewTurnstileVerifier()
- turnstileService := service.NewTurnstileService(settingService, turnstileVerifier)
- tencentCaptchaVerifier := repository.NewTencentCaptchaVerifier()
- tencentCaptchaService := service.NewTencentCaptchaService(settingService, tencentCaptchaVerifier)
- aliyunCaptchaVerifier := repository.NewAliyunCaptchaVerifier()
- aliyunCaptchaService := service.NewAliyunCaptchaService(settingService, aliyunCaptchaVerifier)
- emailQueueService := service.ProvideEmailQueueService(emailService)
- promoCodeRepository := repository.NewPromoCodeRepository(client)
- billingCache := repository.NewBillingCache(redisClient)
- userSubscriptionRepository := repository.NewUserSubscriptionRepository(client)
- apiKeyRepository := repository.NewAPIKeyRepository(client, db)
- userRPMCache := repository.NewUserRPMCache(redisClient)
- userGroupRateRepository := repository.NewUserGroupRateRepository(db)
- userPlatformQuotaRepository := repository.NewUserPlatformQuotaRepository(client)
- serviceUserPlatformQuotaRepository := repository.NewUserPlatformQuotaServiceAdapter(userPlatformQuotaRepository)
- billingCacheService := service.ProvideBillingCacheService(billingCache, userRepository, userSubscriptionRepository, apiKeyRepository, userRPMCache, userGroupRateRepository, configConfig, serviceUserPlatformQuotaRepository)
- apiKeyCache := repository.NewAPIKeyCache(redisClient)
- concurrencyCache := repository.ProvideConcurrencyCache(redisClient, configConfig)
- schedulerCache := repository.ProvideSchedulerCache(redisClient, configConfig)
- accountRepository := repository.NewAccountRepository(client, db, schedulerCache)
- concurrencyService := service.ProvideConcurrencyService(concurrencyCache, accountRepository, configConfig)
- apiKeyService := service.ProvideAPIKeyService(apiKeyRepository, userRepository, groupRepository, userSubscriptionRepository, userGroupRateRepository, apiKeyCache, configConfig, billingCacheService, concurrencyService)
- apiKeyAuthCacheInvalidator := service.ProvideAPIKeyAuthCacheInvalidator(apiKeyService)
- promoService := service.NewPromoService(promoCodeRepository, userRepository, billingCacheService, client, apiKeyAuthCacheInvalidator)
- subscriptionService := service.NewSubscriptionService(groupRepository, userSubscriptionRepository, billingCacheService, client, configConfig)
- affiliateRepository := repository.NewAffiliateRepository(client, db)
- affiliateService := service.NewAffiliateService(affiliateRepository, settingService, apiKeyAuthCacheInvalidator, billingCacheService)
- authService := service.ProvideAuthService(client, userRepository, redeemCodeRepository, refreshTokenCache, configConfig, settingService, emailService, turnstileService, tencentCaptchaService, aliyunCaptchaService, emailQueueService, promoService, subscriptionService, affiliateService, serviceUserPlatformQuotaRepository)
- userService := service.NewUserService(userRepository, settingRepository, apiKeyAuthCacheInvalidator, billingCache)
- redeemCache := repository.NewRedeemCache(redisClient)
- redeemService := service.NewRedeemService(redeemCodeRepository, userRepository, subscriptionService, redeemCache, billingCacheService, client, apiKeyAuthCacheInvalidator, affiliateService)
- secretEncryptor, err := repository.NewAESEncryptor(configConfig)
- if err != nil {
- return nil, err
- }
- totpCache := repository.NewTotpCache(redisClient)
- totpService := service.NewTotpService(userRepository, secretEncryptor, totpCache, settingService, emailService, emailQueueService)
- userAttributeDefinitionRepository := repository.NewUserAttributeDefinitionRepository(client)
- userAttributeValueRepository := repository.NewUserAttributeValueRepository(client)
- userAttributeService := service.NewUserAttributeService(userAttributeDefinitionRepository, userAttributeValueRepository)
- authHandler := handler.NewAuthHandler(configConfig, authService, userService, settingService, promoService, redeemService, totpService, userAttributeService)
- userHandler := handler.NewUserHandler(userService, authService, emailService, emailCache, affiliateService, serviceUserPlatformQuotaRepository)
- apiKeyHandler := handler.NewAPIKeyHandler(apiKeyService)
- usageLogRepository := repository.NewUsageLogRepository(client, db)
- usageService := service.NewUsageService(usageLogRepository, userRepository, client, apiKeyAuthCacheInvalidator)
- opsRepository := repository.NewOpsRepository(db)
- usageBillingRepository := repository.NewUsageBillingRepository(client, db)
- gatewayCache := repository.NewGatewayCache(redisClient)
- schedulerOutboxRepository := repository.NewSchedulerOutboxRepository(db)
- schedulerSnapshotService := service.ProvideSchedulerSnapshotService(schedulerCache, schedulerOutboxRepository, accountRepository, groupRepository, configConfig)
- pricingRemoteClient := repository.ProvidePricingRemoteClient(configConfig)
- pricingService, err := service.ProvidePricingService(configConfig, pricingRemoteClient)
- if err != nil {
- return nil, err
- }
- billingService := service.NewBillingService(configConfig, pricingService)
- geminiQuotaService := service.NewGeminiQuotaService(configConfig, settingRepository)
- tempUnschedCache := repository.NewTempUnschedCache(redisClient)
- timeoutCounterCache := repository.NewTimeoutCounterCache(redisClient)
- openAI403CounterCache := repository.NewOpenAI403CounterCache(redisClient)
- geminiTokenCache := repository.NewGeminiTokenCache(redisClient)
- compositeTokenCacheInvalidator := service.NewCompositeTokenCacheInvalidator(geminiTokenCache)
- rateLimitService := service.ProvideRateLimitService(accountRepository, usageLogRepository, configConfig, geminiQuotaService, tempUnschedCache, timeoutCounterCache, openAI403CounterCache, settingService, compositeTokenCacheInvalidator)
- identityCache := repository.NewIdentityCache(redisClient)
- identityService := service.NewIdentityService(identityCache)
- accountTrafficCache := repository.NewAccountTrafficCache(redisClient)
- accountTrafficService := service.NewAccountTrafficService(accountTrafficCache)
- httpUpstream := repository.NewControlledHTTPUpstream(configConfig, accountTrafficService)
- timingWheelService, err := service.ProvideTimingWheelService()
- if err != nil {
- return nil, err
- }
- deferredService := service.ProvideDeferredService(accountRepository, timingWheelService)
- claudeOAuthClient := repository.NewClaudeOAuthClient()
- oAuthService := service.NewOAuthService(proxyRepository, claudeOAuthClient)
- oAuthRefreshAPI := service.ProvideOAuthRefreshAPI(accountRepository, geminiTokenCache)
- claudeTokenProvider := service.ProvideClaudeTokenProvider(accountRepository, geminiTokenCache, oAuthService, oAuthRefreshAPI)
- sessionLimitCache := repository.ProvideSessionLimitCache(redisClient, configConfig)
- rpmCache := repository.NewRPMCache(redisClient)
- digestSessionStore := service.NewDigestSessionStore()
- tlsFingerprintProfileRepository := repository.NewTLSFingerprintProfileRepository(client)
- tlsFingerprintProfileCache := repository.NewTLSFingerprintProfileCache(redisClient)
- tlsFingerprintProfileService := service.ProvideTLSFingerprintProfileService(tlsFingerprintProfileRepository, tlsFingerprintProfileCache, configConfig)
- channelRepository := repository.NewChannelRepository(db)
- channelCachePubSub := repository.NewChannelCache(redisClient)
- channelService := service.NewChannelService(channelRepository, groupRepository, apiKeyAuthCacheInvalidator, pricingService, channelCachePubSub)
- globalModelPricingRepository := repository.NewGlobalModelPricingRepository(db)
- globalModelPricingService := service.NewGlobalModelPricingService(globalModelPricingRepository)
- modelPricingResolver := service.NewModelPricingResolverWithGlobal(channelService, billingService, globalModelPricingService)
- compositeModelRouteRepository := repository.NewCompositeModelRouteRepository(client)
- compositeRouteResolver := service.NewCompositeRouteResolver(compositeModelRouteRepository)
- notificationEmailService := service.NewNotificationEmailService(settingRepository, emailService)
- balanceNotifyService := service.ProvideBalanceNotifyService(emailService, settingRepository, accountRepository, notificationEmailService)
- gatewayService := service.NewGatewayService(accountRepository, groupRepository, usageLogRepository, usageBillingRepository, userRepository, userSubscriptionRepository, userGroupRateRepository, gatewayCache, configConfig, schedulerSnapshotService, concurrencyService, billingService, rateLimitService, billingCacheService, identityService, httpUpstream, deferredService, claudeTokenProvider, sessionLimitCache, rpmCache, digestSessionStore, settingService, tlsFingerprintProfileService, channelService, modelPricingResolver, compositeRouteResolver, balanceNotifyService, serviceUserPlatformQuotaRepository)
- openAIOAuthClient := repository.NewOpenAIOAuthClient()
- privacyClientFactory := providePrivacyClientFactory()
- openAIOAuthService := service.ProvideOpenAIOAuthService(proxyRepository, openAIOAuthClient, privacyClientFactory)
- openAITokenProvider := service.ProvideOpenAITokenProvider(accountRepository, geminiTokenCache, openAIOAuthService, oAuthRefreshAPI)
- grokOAuthClient := repository.NewGrokOAuthClient()
- grokOAuthService := service.ProvideGrokOAuthService(proxyRepository, grokOAuthClient, configConfig, redisClient)
- grokTokenProvider := service.ProvideGrokTokenProvider(accountRepository, geminiTokenCache, grokOAuthService, oAuthRefreshAPI, tempUnschedCache)
- openAIGatewayService := service.NewOpenAIGatewayService(accountRepository, usageLogRepository, usageBillingRepository, userRepository, userSubscriptionRepository, userGroupRateRepository, gatewayCache, configConfig, schedulerSnapshotService, concurrencyService, billingService, rateLimitService, billingCacheService, httpUpstream, deferredService, openAITokenProvider, grokTokenProvider, modelPricingResolver, channelService, balanceNotifyService, settingService, serviceUserPlatformQuotaRepository)
- geminiOAuthClient := repository.NewGeminiOAuthClient(configConfig)
- geminiCliCodeAssistClient := repository.NewGeminiCliCodeAssistClient()
- driveClient := repository.NewGeminiDriveClient()
- geminiOAuthService := service.NewGeminiOAuthService(proxyRepository, geminiOAuthClient, geminiCliCodeAssistClient, driveClient, configConfig)
- geminiTokenProvider := service.ProvideGeminiTokenProvider(accountRepository, geminiTokenCache, geminiOAuthService, oAuthRefreshAPI)
- antigravityOAuthService := service.NewAntigravityOAuthService(proxyRepository)
- antigravityTokenProvider := service.ProvideAntigravityTokenProvider(accountRepository, geminiTokenCache, antigravityOAuthService, oAuthRefreshAPI, tempUnschedCache)
- internal500CounterCache := repository.NewInternal500CounterCache(redisClient)
- antigravityGatewayService := service.NewAntigravityGatewayService(accountRepository, gatewayCache, schedulerSnapshotService, antigravityTokenProvider, rateLimitService, httpUpstream, settingService, internal500CounterCache)
- geminiMessagesCompatService := service.NewGeminiMessagesCompatService(accountRepository, groupRepository, gatewayCache, schedulerSnapshotService, geminiTokenProvider, rateLimitService, httpUpstream, antigravityGatewayService, configConfig)
- opsSystemLogSink := service.ProvideOpsSystemLogSink(opsRepository)
- authCacheInvalidationOutboxRepository := repository.NewAuthCacheInvalidationOutboxRepository(db)
- authCacheInvalidationWorker := service.ProvideAuthCacheInvalidationWorker(authCacheInvalidationOutboxRepository, apiKeyCache, apiKeyService)
- opsService := service.ProvideOpsService(opsRepository, settingRepository, configConfig, accountRepository, userRepository, concurrencyService, gatewayService, openAIGatewayService, geminiMessagesCompatService, antigravityGatewayService, opsSystemLogSink, settingService, authCacheInvalidationWorker, apiKeyService)
- usageHandler := handler.NewUsageHandler(usageService, apiKeyService, opsService, settingService)
- redeemHandler := handler.NewRedeemHandler(redeemService)
- subscriptionHandler := handler.NewSubscriptionHandler(subscriptionService)
- announcementRepository := repository.NewAnnouncementRepository(client)
- announcementReadRepository := repository.NewAnnouncementReadRepository(client)
- announcementService := service.NewAnnouncementService(announcementRepository, announcementReadRepository, userRepository, userSubscriptionRepository)
- announcementHandler := handler.NewAnnouncementHandler(announcementService)
- channelMonitorRepository := repository.NewChannelMonitorRepository(client, db)
- channelMonitorService := service.ProvideChannelMonitorService(channelMonitorRepository, secretEncryptor, settingService)
- channelMonitorUserHandler := handler.NewChannelMonitorUserHandler(channelMonitorService, settingService)
- channelMonitorV2Repository := repository.NewChannelMonitorV2Repository(db)
- channelMonitorV2Service := service.ProvideChannelMonitorV2Service(channelMonitorV2Repository, settingService)
- channelMonitorV2Handler := handler.NewChannelMonitorV2Handler(channelMonitorV2Service, apiKeyService)
- dashboardAggregationRepository := repository.NewDashboardAggregationRepository(db)
- dashboardStatsCache := repository.NewDashboardCache(redisClient, configConfig)
- dashboardService := service.NewDashboardService(usageLogRepository, dashboardAggregationRepository, dashboardStatsCache, configConfig)
- leaderLockCache := repository.NewLeaderLockCache(redisClient)
- dashboardAggregationService := service.ProvideDashboardAggregationService(dashboardAggregationRepository, timingWheelService, leaderLockCache, db, configConfig)
- dashboardHandler := admin.NewDashboardHandler(dashboardService, dashboardAggregationService)
- adminGroupRepository := repository.NewAdminGroupRepository(client, db)
- adminAccountRepository := repository.NewAdminAccountRepository(client, db, schedulerCache)
- proxyExitInfoProber := repository.NewProxyExitInfoProber(configConfig)
- proxyLatencyCache := repository.NewProxyLatencyCache(redisClient)
- adminService := service.NewAdminService(configConfig, userRepository, adminGroupRepository, adminAccountRepository, proxyRepository, apiKeyRepository, redeemCodeRepository, userGroupRateRepository, userRPMCache, billingCacheService, proxyExitInfoProber, proxyLatencyCache, apiKeyAuthCacheInvalidator, client, settingService, subscriptionService, userSubscriptionRepository, privacyClientFactory, openAIGatewayService, affiliateService, compositeModelRouteRepository, compositeRouteResolver, channelService)
- adminUserHandler := admin.NewUserHandler(adminService, concurrencyService, serviceUserPlatformQuotaRepository, billingCache, totpService, userService, settingService)
- userCleanupService := service.NewUserCleanupService(db, apiKeyAuthCacheInvalidator)
- userCleanupHandler := admin.NewUserCleanupHandler(userCleanupService)
- intelligentTestRepository := repository.NewIntelligentTestRepository(db)
- pluginRepository := repository.NewPluginRepository(db)
- pluginHostInfo := providePluginHostInfo(buildInfo)
- pluginManager := service.NewPluginManager(pluginRepository, secretEncryptor, configConfig, pluginHostInfo)
- accountTestService := service.ProvideAccountTestService(concurrencyService, accountRepository, geminiTokenProvider, claudeTokenProvider, grokTokenProvider, antigravityGatewayService, httpUpstream, configConfig, tlsFingerprintProfileService, openAIGatewayService, settingService, pluginManager)
- intelligentTestService := service.ProvideIntelligentTestService(intelligentTestRepository, accountTestService)
- intelligentTestHandler := admin.NewIntelligentTestHandler(intelligentTestService)
- groupCapacityService := service.NewGroupCapacityService(accountRepository, groupRepository, concurrencyService, sessionLimitCache, rpmCache)
- groupHandler := admin.NewGroupHandlerWithConfig(adminService, dashboardService, groupCapacityService, configConfig)
- claudeUsageFetcher := repository.NewClaudeUsageFetcher(httpUpstream)
- antigravityQuotaFetcher := service.NewAntigravityQuotaFetcher(proxyRepository, configConfig)
- grokQuotaFetcher := service.NewGrokQuotaFetcher()
- grokQuotaService := service.ProvideGrokQuotaService(accountRepository, proxyRepository, grokTokenProvider, httpUpstream, configConfig, usageLogRepository, settingService)
- openAIQuotaService := service.ProvideOpenAIQuotaService(accountRepository, proxyRepository, openAITokenProvider, privacyClientFactory, openAIGatewayService)
- usageCache := service.NewUsageCache()
- accountUsageService := service.ProvideAccountUsageService(accountRepository, usageLogRepository, claudeUsageFetcher, geminiQuotaService, antigravityQuotaFetcher, grokQuotaFetcher, grokQuotaService, openAIQuotaService, usageCache, identityCache, tlsFingerprintProfileService, openAIGatewayService)
- crsSyncService := service.NewCRSSyncService(accountRepository, proxyRepository, oAuthService, openAIOAuthService, geminiOAuthService, configConfig)
- accountHandler := admin.ProvideAccountHandler(configConfig, adminService, oAuthService, openAIOAuthService, geminiOAuthService, antigravityOAuthService, grokOAuthService, rateLimitService, accountUsageService, accountTestService, concurrencyService, crsSyncService, sessionLimitCache, rpmCache, compositeTokenCacheInvalidator, grokQuotaService)
- accountTrafficHandler := admin.NewAccountTrafficHandler(adminService, accountTrafficService)
- adminAnnouncementHandler := admin.NewAnnouncementHandler(announcementService)
- dataManagementService := service.NewDataManagementService()
- dataManagementHandler := admin.NewDataManagementHandler(dataManagementService)
- backupObjectStoreFactory := repository.NewS3BackupStoreFactory()
- dbDumper := repository.NewPgDumper(configConfig, db)
- backupService := service.ProvideBackupService(settingRepository, configConfig, secretEncryptor, backupObjectStoreFactory, dbDumper, leaderLockCache, db)
- imageStorageFactory := repository.ProvideImageStorageFactory()
- imageStorageSettingService := service.ProvideImageStorageSettingService(settingRepository, secretEncryptor, backupService, imageStorageFactory, configConfig)
- backupHandler := admin.NewBackupHandler(backupService, userService, imageStorageSettingService)
- oAuthHandler := admin.NewOAuthHandler(oAuthService)
- openAIOAuthHandler := admin.NewOpenAIOAuthHandler(openAIOAuthService, adminService, openAIQuotaService, rateLimitService)
- geminiOAuthHandler := admin.NewGeminiOAuthHandler(geminiOAuthService)
- antigravityOAuthHandler := admin.NewAntigravityOAuthHandler(antigravityOAuthService)
- tokenRefreshService := service.ProvideTokenRefreshService(accountRepository, oAuthService, openAIOAuthService, geminiOAuthService, antigravityOAuthService, grokOAuthService, compositeTokenCacheInvalidator, schedulerCache, configConfig, tempUnschedCache, privacyClientFactory, proxyRepository, oAuthRefreshAPI, openAIGatewayService)
- grokOAuthHandler := admin.NewGrokOAuthHandler(grokOAuthService, adminService, grokQuotaService, tokenRefreshService)
- cnProviderQuotaService := service.ProvideCNProviderQuotaService(accountRepository, proxyRepository, httpUpstream, configConfig)
- cnProviderBalanceService := service.ProvideCNProviderBalanceService(accountRepository, proxyRepository, httpUpstream, configConfig)
- cnProviderHandler := admin.NewCNProviderHandler(cnProviderQuotaService, cnProviderBalanceService)
- proxyHandler := admin.NewProxyHandler(adminService)
- adminRedeemHandler := admin.NewRedeemHandler(adminService, redeemService)
- promoHandler := admin.NewPromoHandler(promoService)
- encryptionKey, err := payment.ProvideEncryptionKey(configConfig)
- if err != nil {
- return nil, err
- }
- paymentConfigService := service.ProvidePaymentConfigService(client, settingRepository, encryptionKey)
- registry := payment.ProvideRegistry()
- defaultLoadBalancer := payment.ProvideDefaultLoadBalancer(client, encryptionKey)
- paymentService := service.ProvidePaymentService(client, registry, defaultLoadBalancer, redeemService, subscriptionService, paymentConfigService, userRepository, groupRepository, affiliateService, notificationEmailService)
- settingHandler := handler.ProvideAdminSettingHandler(settingService, emailService, turnstileService, aliyunCaptchaService, opsService, paymentConfigService, paymentService, userAttributeService, notificationEmailService, totpService, userService)
- opsHandler := admin.NewOpsHandler(opsService)
- updateCache := repository.NewUpdateCache(redisClient)
- gitHubReleaseClient := repository.ProvideGitHubReleaseClient(configConfig)
- serviceBuildInfo := provideServiceBuildInfo(buildInfo)
- updateService := service.ProvideUpdateService(updateCache, gitHubReleaseClient, serviceBuildInfo)
- idempotencyRepository := repository.NewIdempotencyRepository(client, db)
- systemOperationLockService := service.ProvideSystemOperationLockService(idempotencyRepository, configConfig)
- systemHandler := handler.ProvideSystemHandler(updateService, systemOperationLockService)
- adminSubscriptionHandler := admin.NewSubscriptionHandler(subscriptionService)
- usageCleanupRepository := repository.NewUsageCleanupRepository(client, db)
- usageCleanupService := service.ProvideUsageCleanupService(usageCleanupRepository, timingWheelService, dashboardAggregationService, configConfig)
- adminUsageHandler := admin.NewUsageHandler(usageService, apiKeyService, adminService, usageCleanupService)
- userAttributeHandler := admin.NewUserAttributeHandler(userAttributeService)
- errorPassthroughRepository := repository.NewErrorPassthroughRepository(client)
- errorPassthroughCache := repository.NewErrorPassthroughCache(redisClient)
- errorPassthroughService := service.NewErrorPassthroughService(errorPassthroughRepository, errorPassthroughCache)
- errorPassthroughHandler := admin.NewErrorPassthroughHandler(errorPassthroughService)
- tlsFingerprintProfileHandler := admin.NewTLSFingerprintProfileHandler(tlsFingerprintProfileService)
- pluginHandler := admin.NewPluginHandler(pluginManager)
- adminAPIKeyHandler := admin.NewAdminAPIKeyHandler(adminService)
- scheduledTestPlanRepository := repository.NewScheduledTestPlanRepository(db)
- scheduledTestResultRepository := repository.NewScheduledTestResultRepository(db)
- scheduledTestService := service.ProvideScheduledTestService(scheduledTestPlanRepository, scheduledTestResultRepository)
- scheduledTestHandler := admin.NewScheduledTestHandler(scheduledTestService)
- channelHandler := admin.NewChannelHandler(channelService, billingService, pricingService)
- channelMonitorHandler := admin.NewChannelMonitorHandler(channelMonitorService)
- channelMonitorRequestTemplateRepository := repository.NewChannelMonitorRequestTemplateRepository(client, db)
- channelMonitorRequestTemplateService := service.NewChannelMonitorRequestTemplateService(channelMonitorRequestTemplateRepository)
- channelMonitorRequestTemplateHandler := admin.NewChannelMonitorRequestTemplateHandler(channelMonitorRequestTemplateService)
- contentModerationRepository := repository.NewContentModerationRepository(db)
- contentModerationHashCache := repository.NewContentModerationHashCache(redisClient)
- contentModerationService := service.NewContentModerationService(settingRepository, contentModerationRepository, contentModerationHashCache, groupRepository, userRepository, proxyRepository, apiKeyAuthCacheInvalidator, emailService)
- contentModerationHandler := admin.NewContentModerationHandler(contentModerationService)
- securityPolicyRepository := repository.NewSecurityPolicyRepository(client, db)
- securityPolicySessionStore := repository.NewSecurityPolicySessionStore(redisClient)
- securityPolicyService := service.NewSecurityPolicyService(contentModerationService, securityPolicyRepository, securityPolicySessionStore, contentModerationRepository, settingRepository, groupRepository, emailService)
- securityPolicyHandler := admin.NewSecurityPolicyHandler(securityPolicyService)
- globalPricingHandler := admin.NewGlobalPricingHandler(globalModelPricingService)
- accountHealthService := service.ProvideAccountHealthService(db, accountRepository, settingRepository)
- accountHealthHandler := admin.NewAccountHealthHandler(accountHealthService)
- marginService := service.ProvideMarginService(db, channelService, billingService, settingRepository)
- marginHandler := admin.NewMarginHandler(marginService)
- tieredRoutingService := service.NewTieredRoutingService(settingRepository)
- tieredRoutingHandler := admin.NewTieredRoutingHandler(tieredRoutingService)
- spendGuardService := service.ProvideSpendGuardService(db, apiKeyService, settingRepository)
- spendGuardHandler := admin.NewSpendGuardHandler(spendGuardService)
- ticketService := service.NewTicketService(db)
- ticketHandler := admin.NewTicketHandler(ticketService)
- billingExportService := service.NewBillingExportService(db)
- billingExportHandler := admin.NewBillingExportHandler(billingExportService)
- antiDegradeService := service.ProvideAntiDegradeService(adminService, configConfig, pluginManager)
- antiDegradeHandler := admin.NewAntiDegradeHandler(antiDegradeService)
- configManager := securityaudit.NewConfigManager(db, settingRepository, redisClient, secretEncryptor, configConfig)
- postgreSQLRepository := securityaudit.NewPostgreSQLRepository(db)
- redisPayloadStore := securityaudit.NewRedisPayloadStore(redisClient)
- openAICompatibleScanner := securityaudit.NewOpenAICompatibleScanner()
- atomicMetrics := securityaudit.NewAtomicMetrics()
- promptService := securityaudit.NewPromptService(configManager, postgreSQLRepository, redisPayloadStore, openAICompatibleScanner, atomicMetrics)
- promptAdminHandler := securityaudit.NewPromptAdminHandler(promptService)
- paymentHandler := admin.NewPaymentHandler(paymentService, paymentConfigService)
- affiliateHandler := admin.NewAffiliateHandler(affiliateService, adminService)
- complianceHandler := admin.NewComplianceHandler(settingService)
- auditLogRepository := repository.NewAuditLogRepository(db)
- auditLogService := service.ProvideAuditLogService(auditLogRepository, settingService)
- auditLogHandler := admin.NewAuditLogHandler(auditLogService, totpService)
- upstreamBillingProbeService := service.ProvideUpstreamBillingProbeService(accountRepository, accountTestService, settingService, leaderLockCache, db)
- ollamaCloudUsageService := service.ProvideOllamaCloudUsageService(accountRepository, httpUpstream, settingService, secretEncryptor, configConfig, leaderLockCache, db)
- adminHandlers := handler.ProvideAdminHandlers(dashboardHandler, adminUserHandler, userCleanupHandler, intelligentTestHandler, groupHandler, accountHandler, accountTrafficHandler, adminAnnouncementHandler, dataManagementHandler, backupHandler, oAuthHandler, openAIOAuthHandler, geminiOAuthHandler, antigravityOAuthHandler, grokOAuthHandler, cnProviderHandler, proxyHandler, adminRedeemHandler, promoHandler, settingHandler, opsHandler, systemHandler, adminSubscriptionHandler, adminUsageHandler, userAttributeHandler, errorPassthroughHandler, tlsFingerprintProfileHandler, pluginHandler, adminAPIKeyHandler, scheduledTestHandler, channelHandler, channelMonitorHandler, channelMonitorRequestTemplateHandler, contentModerationHandler, securityPolicyHandler, globalPricingHandler, accountHealthHandler, marginHandler, tieredRoutingHandler, spendGuardHandler, ticketHandler, billingExportHandler, antiDegradeHandler, promptAdminHandler, paymentHandler, affiliateHandler, complianceHandler, auditLogHandler, upstreamBillingProbeService, ollamaCloudUsageService)
- usageRecordWorkerPool := service.NewUsageRecordWorkerPool(configConfig)
- userMsgQueueCache := repository.NewUserMsgQueueCache(redisClient)
- userMessageQueueService := service.ProvideUserMessageQueueService(userMsgQueueCache, rpmCache, configConfig)
- legacyEngine := securityaudit.NewLegacyModerationAdapter(contentModerationService)
- coordinator := securityaudit.NewCoordinator(legacyEngine, promptService)
- gatewayHandler := handler.ProvideGatewayHandler(gatewayService, openAIGatewayService, geminiMessagesCompatService, antigravityGatewayService, userService, concurrencyService, billingCacheService, usageService, apiKeyService, usageRecordWorkerPool, errorPassthroughService, contentModerationService, userMessageQueueService, configConfig, settingService, coordinator, securityPolicyService)
- openAIGatewayHandler := handler.ProvideOpenAIGatewayHandler(openAIGatewayService, pluginManager, concurrencyService, billingCacheService, apiKeyService, usageRecordWorkerPool, errorPassthroughService, contentModerationService, opsService, grokQuotaService, configConfig, coordinator, securityPolicyService)
- handlerSettingHandler := handler.ProvideSettingHandler(settingService, buildInfo, notificationEmailService)
- totpHandler := handler.NewTotpHandler(totpService)
- passkeyRepository := repository.NewPasskeyRepository(db)
- passkeySessionStore := repository.NewPasskeySessionStore(redisClient)
- passkeyService, err := service.NewPasskeyService(configConfig, passkeyRepository, passkeySessionStore, userRepository)
- if err != nil {
- return nil, err
- }
- passkeyHandler := handler.NewPasskeyHandler(passkeyService, authService, settingService)
- handlerPaymentHandler := handler.NewPaymentHandler(paymentService, paymentConfigService)
- paymentWebhookHandler := handler.NewPaymentWebhookHandler(paymentService, registry)
- availableChannelHandler := handler.NewAvailableChannelHandler(channelService, apiKeyService, settingService)
- modelPlazaService := service.NewModelPlazaService(channelRepository, groupRepository, pricingService, billingService, modelPricingResolver)
- modelPlazaHandler := handler.NewModelPlazaHandler(modelPlazaService, apiKeyService, settingService)
- imageTaskStore := repository.NewImageTaskStore(redisClient)
- imageTaskService := service.ProvideImageTaskService(imageTaskStore, imageStorageSettingService)
- asyncImageHandler := handler.NewAsyncImageHandler(imageTaskService, openAIGatewayHandler)
- batchImageRepository := repository.NewBatchImageRepository(db)
- batchImageQueue := repository.NewBatchImageQueue(redisClient, configConfig)
- batchImageModelPricingResolver := service.ProvideBatchImageModelPricingResolver(modelPricingResolver)
- batchImagePublicService := service.NewBatchImagePublicService(batchImageRepository, accountRepository, groupRepository, userGroupRateRepository, batchImageQueue, batchImageModelPricingResolver, usageBillingRepository, apiKeyAuthCacheInvalidator, configConfig)
- batchImageDownloadLimiter := repository.NewBatchImageDownloadLimiter(redisClient, configConfig)
- batchImageDownloadService := service.NewBatchImageDownloadService(batchImageRepository, accountRepository, batchImageDownloadLimiter, configConfig)
- batchImageCleanupService := service.ProvideBatchImageCleanupService(batchImageRepository, accountRepository, configConfig)
- batchImageHandler := handler.ProvideBatchImageHandler(batchImagePublicService, batchImageDownloadService, batchImageCleanupService, openAIGatewayHandler)
- accountCapabilityHandler := handler.NewAccountCapabilityHandler(intelligentTestService)
- idempotencyCoordinator := service.ProvideIdempotencyCoordinator(idempotencyRepository, configConfig)
- idempotencyCleanupService := service.ProvideIdempotencyCleanupService(idempotencyRepository, configConfig)
- openAIQuotaAutoResetService := service.ProvideOpenAIQuotaAutoResetService(accountRepository, openAIQuotaService, rateLimitService, idempotencyCoordinator, auditLogService, settingService, leaderLockCache)
- handlers := handler.ProvideHandlers(authHandler, userHandler, apiKeyHandler, usageHandler, redeemHandler, subscriptionHandler, announcementHandler, channelMonitorUserHandler, channelMonitorV2Handler, adminHandlers, gatewayHandler, openAIGatewayHandler, handlerSettingHandler, totpHandler, passkeyHandler, handlerPaymentHandler, paymentWebhookHandler, availableChannelHandler, modelPlazaHandler, asyncImageHandler, batchImageHandler, accountCapabilityHandler, idempotencyCoordinator, idempotencyCleanupService, openAIQuotaAutoResetService)
- jwtAuthMiddleware := middleware.NewJWTAuthMiddleware(authService, userService, settingService, auditLogService)
- optionalJWTAuthMiddleware := middleware.NewOptionalJWTAuthMiddleware(authService, userService, settingService, auditLogService)
- adminAuthMiddleware := middleware.NewAdminAuthMiddleware(authService, userService, settingService, auditLogService)
- apiKeyAuthMiddleware := middleware.ProvideAPIKeyAuthMiddleware(apiKeyService, subscriptionService, configConfig, tieredRoutingService)
- auditLogMiddleware := middleware.NewAuditLogMiddleware(auditLogService)
- stepUpAuthMiddleware := middleware.NewStepUpAuthMiddleware(totpService, userService, settingService)
- engine := server.ProvideRouter(configConfig, handlers, jwtAuthMiddleware, optionalJWTAuthMiddleware, adminAuthMiddleware, apiKeyAuthMiddleware, auditLogMiddleware, stepUpAuthMiddleware, apiKeyService, subscriptionService, opsService, settingService, userService, compositeRouteResolver, redisClient)
- httpServer := server.ProvideHTTPServer(configConfig, engine)
- opsMetricsCollector := service.ProvideOpsMetricsCollector(opsRepository, settingRepository, accountRepository, concurrencyService, db, redisClient, configConfig)
- opsAggregationService := service.ProvideOpsAggregationService(opsRepository, settingRepository, db, redisClient, configConfig)
- opsAlertEvaluatorService := service.ProvideOpsAlertEvaluatorService(opsService, opsRepository, emailService, redisClient, configConfig, proxyRepository)
- opsCleanupService := service.ProvideOpsCleanupService(opsRepository, db, redisClient, configConfig, channelMonitorService, settingRepository, opsService)
- opsScheduledReportService := service.ProvideOpsScheduledReportService(opsService, userService, emailService, redisClient, configConfig)
- opsIngressRejectAggregator := service.ProvideOpsIngressRejectAggregator(opsRepository, opsService)
- accountExpiryService := service.ProvideAccountExpiryService(accountRepository)
- cnProviderBalanceCheckService := service.ProvideCNProviderBalanceCheckService(accountRepository, cnProviderBalanceService, cnProviderQuotaService, configConfig)
- openAICodexVersionSyncService := service.ProvideOpenAICodexVersionSyncService(settingRepository, settingService, gitHubReleaseClient)
- proxyExpiryService := service.ProvideProxyExpiryService(proxyRepository)
- subscriptionExpiryService := service.ProvideSubscriptionExpiryService(userSubscriptionRepository, settingRepository, notificationEmailService, leaderLockCache, db)
- batchImageWorkerRuntime := service.ProvideBatchImageWorkerRuntime(batchImageRepository, accountRepository, batchImageQueue, usageBillingRepository, usageLogRepository, batchImageModelPricingResolver, apiKeyAuthCacheInvalidator, configConfig)
- scheduledTestRunnerService := service.ProvideScheduledTestRunnerService(scheduledTestPlanRepository, scheduledTestService, accountTestService, rateLimitService, configConfig)
- paymentOrderExpiryService := service.ProvidePaymentOrderExpiryService(paymentService, leaderLockCache, db)
- channelMonitorQuotaFetcher := service.NewChannelMonitorQuotaFetcher(accountUsageService, cnProviderQuotaService, cnProviderBalanceService, accountRepository, configConfig)
- channelMonitorRunner := service.ProvideChannelMonitorRunner(channelMonitorService, settingService, channelMonitorQuotaFetcher)
- channelMonitorV2Aggregator := service.ProvideChannelMonitorV2Aggregator(channelMonitorV2Repository, db, settingService)
- userPlatformQuotaUsageFlusher := service.ProvideUserPlatformQuotaUsageFlusher(configConfig, billingCache, serviceUserPlatformQuotaRepository, timingWheelService)
- v := provideCleanup(client, redisClient, opsMetricsCollector, opsAggregationService, opsAlertEvaluatorService, opsCleanupService, opsScheduledReportService, opsSystemLogSink, opsService, opsIngressRejectAggregator, apiKeyService, authCacheInvalidationWorker, schedulerSnapshotService, tokenRefreshService, accountExpiryService, cnProviderBalanceCheckService, openAICodexVersionSyncService, proxyExpiryService, accountHealthService, marginService, spendGuardService, subscriptionExpiryService, usageCleanupService, idempotencyCleanupService, batchImageCleanupService, batchImageWorkerRuntime, pricingService, emailQueueService, billingCacheService, usageRecordWorkerPool, subscriptionService, oAuthService, openAIOAuthService, geminiOAuthService, antigravityOAuthService, grokOAuthService, openAIGatewayService, scheduledTestRunnerService, intelligentTestService, backupService, paymentOrderExpiryService, channelMonitorRunner, channelMonitorV2Aggregator, userPlatformQuotaUsageFlusher, upstreamBillingProbeService, ollamaCloudUsageService, auditLogService, openAIQuotaAutoResetService, promptService, pluginManager)
- application := &Application{
- Server: httpServer,
- PromptAudit: promptService,
- PluginManager: pluginManager,
- Cleanup: v,
- }
- return application, nil
- }
- // wire.go:
- type Application struct {
- Server *http.Server
- PromptAudit *securityaudit.PromptService
- PluginManager *service.PluginManager
- Cleanup func()
- }
- func providePrivacyClientFactory() service.PrivacyClientFactory {
- return repository.CreatePrivacyReqClient
- }
- func provideServiceBuildInfo(buildInfo handler.BuildInfo) service.BuildInfo {
- return service.BuildInfo{
- Version: buildInfo.Version,
- BuildType: buildInfo.BuildType,
- }
- }
- func providePluginHostInfo(buildInfo handler.BuildInfo) service.PluginHostInfo {
- return service.PluginHostInfo{
- Version: buildInfo.Version,
- BuildType: buildInfo.BuildType,
- }
- }
- func provideCleanup(
- entClient *ent.Client,
- rdb *redis.Client,
- opsMetricsCollector *service.OpsMetricsCollector,
- opsAggregation *service.OpsAggregationService,
- opsAlertEvaluator *service.OpsAlertEvaluatorService,
- opsCleanup *service.OpsCleanupService,
- opsScheduledReport *service.OpsScheduledReportService,
- opsSystemLogSink *service.OpsSystemLogSink,
- opsService *service.OpsService,
- opsIngressReject *service.OpsIngressRejectAggregator,
- apiKeyService *service.APIKeyService,
- authCacheInvalidationWorker *service.AuthCacheInvalidationWorker,
- schedulerSnapshot *service.SchedulerSnapshotService,
- tokenRefresh *service.TokenRefreshService,
- accountExpiry *service.AccountExpiryService,
- cnProviderBalanceCheck *service.CNProviderBalanceCheckService,
- codexVersionSync *service.OpenAICodexVersionSyncService,
- proxyExpiry *service.ProxyExpiryService,
- accountHealth *service.AccountHealthService,
- margin *service.MarginService,
- spendGuard *service.SpendGuardService,
- subscriptionExpiry *service.SubscriptionExpiryService,
- usageCleanup *service.UsageCleanupService,
- idempotencyCleanup *service.IdempotencyCleanupService,
- batchImageCleanup *service.BatchImageCleanupService,
- batchImageWorker *service.BatchImageWorkerRuntime,
- pricing *service.PricingService,
- emailQueue *service.EmailQueueService,
- billingCache *service.BillingCacheService,
- usageRecordWorkerPool *service.UsageRecordWorkerPool,
- subscriptionService *service.SubscriptionService,
- oauth *service.OAuthService,
- openaiOAuth *service.OpenAIOAuthService,
- geminiOAuth *service.GeminiOAuthService,
- antigravityOAuth *service.AntigravityOAuthService,
- grokOAuth *service.GrokOAuthService,
- openAIGateway *service.OpenAIGatewayService,
- scheduledTestRunner *service.ScheduledTestRunnerService,
- intelligentTests *service.IntelligentTestService,
- backupSvc *service.BackupService,
- paymentOrderExpiry *service.PaymentOrderExpiryService,
- channelMonitorRunner *service.ChannelMonitorRunner,
- channelMonitorV2Aggregator *service.ChannelMonitorV2Aggregator,
- quotaFlusher *service.UserPlatformQuotaUsageFlusher,
- upstreamBillingProbe *service.UpstreamBillingProbeService,
- ollamaCloudUsage *service.OllamaCloudUsageService,
- auditLog *service.AuditLogService,
- openAIAutoReset *service.OpenAIQuotaAutoResetService,
- promptAudit *securityaudit.PromptService,
- pluginManager *service.PluginManager,
- ) func() {
- return func() {
- ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
- defer cancel()
- type cleanupStep struct {
- name string
- fn func() error
- }
- parallelSteps := []cleanupStep{
- {"IntelligentTests", func() error {
- if intelligentTests != nil {
- intelligentTests.Stop()
- }
- return nil
- }},
- {"PluginManager", func() error {
- if pluginManager != nil {
- pluginManager.Stop()
- }
- return nil
- }},
- {"OpenAIQuotaAutoResetService", func() error {
- if openAIAutoReset != nil {
- openAIAutoReset.Stop()
- }
- return nil
- }},
- {"OpsIngressRejectAggregator", func() error {
- if opsIngressReject != nil {
- opsIngressReject.Stop()
- }
- return nil
- }},
- {"AuthCacheInvalidationWorker", func() error {
- if authCacheInvalidationWorker != nil {
- authCacheInvalidationWorker.Stop()
- }
- return nil
- }},
- {"AuthCacheInvalidationSubscriber", func() error {
- if apiKeyService != nil {
- apiKeyService.StopAuthCacheInvalidationSubscriber()
- }
- return nil
- }},
- {"OpsRuntimeSettingsRefresh", func() error {
- if opsService != nil {
- opsService.StopRuntimeSettingsRefresh()
- }
- return nil
- }},
- {"PromptAuditService", func() error {
- if promptAudit != nil {
- return promptAudit.Shutdown(ctx)
- }
- return nil
- }},
- {"OpsScheduledReportService", func() error {
- if opsScheduledReport != nil {
- opsScheduledReport.Stop()
- }
- return nil
- }},
- {"OpsCleanupService", func() error {
- if opsCleanup != nil {
- opsCleanup.Stop()
- }
- return nil
- }},
- {"OpsSystemLogSink", func() error {
- if opsSystemLogSink != nil {
- opsSystemLogSink.Stop()
- }
- return nil
- }},
- {"AuditLogService", func() error {
- if auditLog != nil {
- auditLog.Stop()
- }
- return nil
- }},
- {"OpsAlertEvaluatorService", func() error {
- if opsAlertEvaluator != nil {
- opsAlertEvaluator.Stop()
- }
- return nil
- }},
- {"OpsAggregationService", func() error {
- if opsAggregation != nil {
- opsAggregation.Stop()
- }
- return nil
- }},
- {"OpsMetricsCollector", func() error {
- if opsMetricsCollector != nil {
- opsMetricsCollector.Stop()
- }
- return nil
- }},
- {"SchedulerSnapshotService", func() error {
- if schedulerSnapshot != nil {
- schedulerSnapshot.Stop()
- }
- return nil
- }},
- {"UsageCleanupService", func() error {
- if usageCleanup != nil {
- usageCleanup.Stop()
- }
- return nil
- }},
- {"IdempotencyCleanupService", func() error {
- if idempotencyCleanup != nil {
- idempotencyCleanup.Stop()
- }
- return nil
- }},
- {"BatchImageCleanupService", func() error {
- if batchImageCleanup != nil {
- batchImageCleanup.Stop()
- }
- return nil
- }},
- {"BatchImageWorkerRuntime", func() error {
- if batchImageWorker != nil {
- batchImageWorker.Stop()
- }
- return nil
- }},
- {"TokenRefreshService", func() error {
- tokenRefresh.Stop()
- return nil
- }},
- {"AccountExpiryService", func() error {
- accountExpiry.Stop()
- return nil
- }},
- {"CNProviderBalanceCheckService", func() error {
- if cnProviderBalanceCheck != nil {
- cnProviderBalanceCheck.Stop()
- }
- return nil
- }},
- {"OpenAICodexVersionSyncService", func() error {
- codexVersionSync.Stop()
- return nil
- }},
- {"ProxyExpiryService", func() error {
- proxyExpiry.Stop()
- return nil
- }},
- {"AccountHealthService", func() error {
- accountHealth.Stop()
- return nil
- }},
- {"MarginService", func() error {
- margin.Stop()
- return nil
- }},
- {"SpendGuardService", func() error {
- spendGuard.Stop()
- return nil
- }},
- {"SubscriptionExpiryService", func() error {
- subscriptionExpiry.Stop()
- return nil
- }},
- {"SubscriptionService", func() error {
- if subscriptionService != nil {
- subscriptionService.Stop()
- }
- return nil
- }},
- {"PricingService", func() error {
- pricing.Stop()
- return nil
- }},
- {"EmailQueueService", func() error {
- emailQueue.Stop()
- return nil
- }},
- {"BillingCacheService", func() error {
- billingCache.Stop()
- return nil
- }},
- {"UsageRecordWorkerPool", func() error {
- if usageRecordWorkerPool != nil {
- usageRecordWorkerPool.Stop()
- }
- return nil
- }},
- {"OAuthService", func() error {
- oauth.Stop()
- return nil
- }},
- {"OpenAIOAuthService", func() error {
- openaiOAuth.Stop()
- return nil
- }},
- {"GeminiOAuthService", func() error {
- geminiOAuth.Stop()
- return nil
- }},
- {"AntigravityOAuthService", func() error {
- antigravityOAuth.Stop()
- return nil
- }},
- {"GrokOAuthService", func() error {
- if grokOAuth != nil {
- grokOAuth.Stop()
- }
- return nil
- }},
- {"OpenAIWSPool", func() error {
- if openAIGateway != nil {
- openAIGateway.CloseOpenAIWSPool()
- }
- return nil
- }},
- {"ScheduledTestRunnerService", func() error {
- if scheduledTestRunner != nil {
- scheduledTestRunner.Stop()
- }
- return nil
- }},
- {"BackupService", func() error {
- if backupSvc != nil {
- backupSvc.Stop()
- }
- return nil
- }},
- {"PaymentOrderExpiryService", func() error {
- if paymentOrderExpiry != nil {
- paymentOrderExpiry.Stop()
- }
- return nil
- }},
- {"ChannelMonitorV2Aggregator", func() error {
- if channelMonitorV2Aggregator != nil {
- channelMonitorV2Aggregator.Stop()
- }
- return nil
- }},
- {"ChannelMonitorRunner", func() error {
- if channelMonitorRunner != nil {
- channelMonitorRunner.Stop()
- }
- return nil
- }},
- {"UserPlatformQuotaUsageFlusher", func() error {
- if quotaFlusher != nil {
- quotaFlusher.Stop()
- }
- return nil
- }},
- {"UpstreamBillingProbeService", func() error {
- if upstreamBillingProbe != nil {
- upstreamBillingProbe.Stop()
- }
- return nil
- }},
- {"OllamaCloudUsageService", func() error {
- if ollamaCloudUsage != nil {
- ollamaCloudUsage.Stop()
- }
- return nil
- }},
- }
- infraSteps := []cleanupStep{
- {"Redis", func() error {
- if rdb == nil {
- return nil
- }
- return rdb.Close()
- }},
- {"Ent", func() error {
- if entClient == nil {
- return nil
- }
- return entClient.Close()
- }},
- }
- runParallel := func(steps []cleanupStep) {
- var wg sync.WaitGroup
- for i := range steps {
- step := steps[i]
- wg.Add(1)
- go func() {
- defer wg.Done()
- if err := step.fn(); err != nil {
- log.Printf("[Cleanup] %s failed: %v", step.name, err)
- return
- }
- log.Printf("[Cleanup] %s succeeded", step.name)
- }()
- }
- wg.Wait()
- }
- runSequential := func(steps []cleanupStep) {
- for i := range steps {
- step := steps[i]
- if err := step.fn(); err != nil {
- log.Printf("[Cleanup] %s failed: %v", step.name, err)
- continue
- }
- log.Printf("[Cleanup] %s succeeded", step.name)
- }
- }
- runParallel(parallelSteps)
- runSequential(infraSteps)
- select {
- case <-ctx.Done():
- log.Printf("[Cleanup] Warning: cleanup timed out after 10 seconds")
- default:
- log.Printf("[Cleanup] All cleanup steps completed")
- }
- }
- }
|