preview_manager.go 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package services
  2. import (
  3. "context"
  4. "git.linuxforward.com/byop/byop-engine/clients"
  5. "git.linuxforward.com/byop/byop-engine/cloud"
  6. "git.linuxforward.com/byop/byop-engine/config"
  7. "git.linuxforward.com/byop/byop-engine/dbstore"
  8. "git.linuxforward.com/byop/byop-engine/models"
  9. "github.com/sirupsen/logrus"
  10. )
  11. // PreviewServiceManager manages both local and remote preview services
  12. type PreviewServiceManager struct {
  13. localService *LocalPreviewService
  14. remoteService *RemotePreviewService
  15. useLocal bool // Configuration flag to determine which service to use
  16. config *config.Config
  17. entry *logrus.Entry
  18. }
  19. // NewPreviewServiceManager creates a new preview service manager
  20. func NewPreviewServiceManager(store *dbstore.SQLiteStore, ovhProvider cloud.Provider, useLocal bool, cfg *config.Config, registryClient clients.RegistryClient, registryURL, registryUser, registryPass string) *PreviewServiceManager {
  21. entry := logrus.WithField("service", "PreviewServiceManager")
  22. // Warn if using local preview (development/testing only)
  23. if useLocal {
  24. entry.Warn("Using local preview service - this is for development/testing only, not recommended for production")
  25. } else {
  26. entry.Info("Using remote VPS preview service for production deployment")
  27. }
  28. return &PreviewServiceManager{
  29. localService: NewLocalPreviewService(store, cfg, registryClient, registryURL, registryUser, registryPass),
  30. remoteService: NewRemotePreviewService(store, ovhProvider, cfg, registryClient, registryURL, registryUser, registryPass),
  31. useLocal: useLocal,
  32. config: cfg,
  33. entry: entry,
  34. }
  35. }
  36. // CreatePreview creates a preview using the configured service
  37. func (psm *PreviewServiceManager) CreatePreview(ctx context.Context, appId int) (*models.Preview, error) {
  38. if psm.useLocal {
  39. psm.entry.WithField("app_id", appId).Debug("Creating preview using local service (development mode)")
  40. return psm.localService.CreatePreview(ctx, appId)
  41. }
  42. psm.entry.WithField("app_id", appId).Debug("Creating preview using remote VPS service (production mode)")
  43. return psm.remoteService.CreatePreview(ctx, appId)
  44. }
  45. // DeletePreview deletes a preview using the configured service
  46. func (psm *PreviewServiceManager) DeletePreview(ctx context.Context, appID int) error {
  47. if psm.useLocal {
  48. return psm.localService.DeletePreview(ctx, appID)
  49. }
  50. return psm.remoteService.DeletePreview(ctx, appID)
  51. }
  52. // StopPreview stops a preview using the configured service
  53. func (psm *PreviewServiceManager) StopPreview(ctx context.Context, previewID int) error {
  54. if psm.useLocal {
  55. return psm.localService.StopPreview(ctx, previewID)
  56. }
  57. return psm.remoteService.StopPreview(ctx, previewID)
  58. }
  59. // Close cleans up both services
  60. func (psm *PreviewServiceManager) Close(ctx context.Context) {
  61. if psm.useLocal {
  62. psm.entry.Info("Closing local preview service")
  63. psm.localService.Close(ctx)
  64. return
  65. }
  66. psm.entry.Info("Closing remote preview service")
  67. psm.remoteService.Close(ctx)
  68. }
  69. // GetLocalService returns the local preview service (for direct access if needed)
  70. func (psm *PreviewServiceManager) GetLocalService() *LocalPreviewService {
  71. return psm.localService
  72. }
  73. // GetRemoteService returns the remote preview service (for direct access if needed)
  74. func (psm *PreviewServiceManager) GetRemoteService() *RemotePreviewService {
  75. return psm.remoteService
  76. }
  77. // SetUseLocal configures whether to use local or remote service
  78. func (psm *PreviewServiceManager) SetUseLocal(useLocal bool) {
  79. psm.useLocal = useLocal
  80. }
  81. // IsUsingLocal returns true if using local service
  82. func (psm *PreviewServiceManager) IsUsingLocal() bool {
  83. return psm.useLocal
  84. }