1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package services
- import (
- "context"
- "git.linuxforward.com/byop/byop-engine/clients"
- "git.linuxforward.com/byop/byop-engine/cloud"
- "git.linuxforward.com/byop/byop-engine/config"
- "git.linuxforward.com/byop/byop-engine/dbstore"
- "git.linuxforward.com/byop/byop-engine/models"
- "github.com/sirupsen/logrus"
- )
- // PreviewServiceManager manages both local and remote preview services
- type PreviewServiceManager struct {
- localService *LocalPreviewService
- remoteService *RemotePreviewService
- useLocal bool // Configuration flag to determine which service to use
- config *config.Config
- entry *logrus.Entry
- }
- // NewPreviewServiceManager creates a new preview service manager
- func NewPreviewServiceManager(store *dbstore.SQLiteStore, ovhProvider cloud.Provider, useLocal bool, cfg *config.Config, registryClient clients.RegistryClient, registryURL, registryUser, registryPass string) *PreviewServiceManager {
- entry := logrus.WithField("service", "PreviewServiceManager")
- // Warn if using local preview (development/testing only)
- if useLocal {
- entry.Warn("Using local preview service - this is for development/testing only, not recommended for production")
- } else {
- entry.Info("Using remote VPS preview service for production deployment")
- }
- return &PreviewServiceManager{
- localService: NewLocalPreviewService(store, cfg, registryClient, registryURL, registryUser, registryPass),
- remoteService: NewRemotePreviewService(store, ovhProvider, cfg, registryClient, registryURL, registryUser, registryPass),
- useLocal: useLocal,
- config: cfg,
- entry: entry,
- }
- }
- // CreatePreview creates a preview using the configured service
- func (psm *PreviewServiceManager) CreatePreview(ctx context.Context, appId int) (*models.Preview, error) {
- if psm.useLocal {
- psm.entry.WithField("app_id", appId).Debug("Creating preview using local service (development mode)")
- return psm.localService.CreatePreview(ctx, appId)
- }
- psm.entry.WithField("app_id", appId).Debug("Creating preview using remote VPS service (production mode)")
- return psm.remoteService.CreatePreview(ctx, appId)
- }
- // DeletePreview deletes a preview using the configured service
- func (psm *PreviewServiceManager) DeletePreview(ctx context.Context, appID int) error {
- if psm.useLocal {
- return psm.localService.DeletePreview(ctx, appID)
- }
- return psm.remoteService.DeletePreview(ctx, appID)
- }
- // StopPreview stops a preview using the configured service
- func (psm *PreviewServiceManager) StopPreview(ctx context.Context, previewID int) error {
- if psm.useLocal {
- return psm.localService.StopPreview(ctx, previewID)
- }
- return psm.remoteService.StopPreview(ctx, previewID)
- }
- // Close cleans up both services
- func (psm *PreviewServiceManager) Close(ctx context.Context) {
- if psm.useLocal {
- psm.entry.Info("Closing local preview service")
- psm.localService.Close(ctx)
- return
- }
- psm.entry.Info("Closing remote preview service")
- psm.remoteService.Close(ctx)
- }
- // GetLocalService returns the local preview service (for direct access if needed)
- func (psm *PreviewServiceManager) GetLocalService() *LocalPreviewService {
- return psm.localService
- }
- // GetRemoteService returns the remote preview service (for direct access if needed)
- func (psm *PreviewServiceManager) GetRemoteService() *RemotePreviewService {
- return psm.remoteService
- }
- // SetUseLocal configures whether to use local or remote service
- func (psm *PreviewServiceManager) SetUseLocal(useLocal bool) {
- psm.useLocal = useLocal
- }
- // IsUsingLocal returns true if using local service
- func (psm *PreviewServiceManager) IsUsingLocal() bool {
- return psm.useLocal
- }
|