Exemplo n.º 1
0
        public bool Setup(string serverType, string bootstrapUri, string assemblyImportRoot, IServerConfig config, string startupConfigFile)
        {
            m_AssemblyImporter = new AssemblyImport(assemblyImportRoot);

            if (!string.IsNullOrEmpty(startupConfigFile))
            {
                AppDomain.CurrentDomain.ResetConfiguration(startupConfigFile);
            }

            var serviceType = Type.GetType(serverType);

            m_AppServer = (IManagedApp)Activator.CreateInstance(serviceType);

            var bootstrap = (IBootstrap)Activator.GetObject(typeof(IBootstrap), bootstrapUri);

            var ret = m_AppServer.Setup(bootstrap, config);

            if (ret)
            {
                m_Log = ((IAppServer)m_AppServer).Logger;
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
            }

            return(ret);
        }
        public bool NeedBeRecycled(IManagedApp app, StatusInfoCollection status)
        {
            var state = (app as IsolationApp).AssemblyUpdateState;

            // not in running state
            if (state == null)
            {
                return(false);
            }

            if (state.LastUpdatedTime > state.CurrentAssemblyTime)
            {
                // check to see if there is any latest update
                // if yes, deplay much longer time
                state.TryCheckUpdate();
                return(IsDeplayOverdue(state.LastUpdatedTime));
            }

            // next check time has not reached yet
            if (state.LastCheckTime.AddMinutes(m_CheckInterval) > DateTime.Now)
            {
                return(false);
            }

            if (!state.TryCheckUpdate())
            {
                return(false);
            }

            return(IsDeplayOverdue(state.LastUpdatedTime));
        }
        public bool NeedBeRecycled(IManagedApp app, StatusInfoCollection status)
        {
            var state = (app as IsolationApp).AssemblyUpdateState;

            // not in running state
            if (state == null)
                return false;

            if (state.LastUpdatedTime > state.CurrentAssemblyTime)
            {
                // check to see if there is any latest update
                // if yes, deplay much longer time
                state.TryCheckUpdate();
                return IsDeplayOverdue(state.LastUpdatedTime);
            }

            // next check time has not reached yet
            if (state.LastCheckTime.AddMinutes(m_CheckInterval) > DateTime.Now)
                return false;

            if (!state.TryCheckUpdate())
                return false;

            return IsDeplayOverdue(state.LastUpdatedTime);
        }
Exemplo n.º 4
0
        public bool NeedBeRecycled(IManagedApp app, StatusInfoCollection status)
        {
            var memoryUsage = status[StatusInfoKeys.MemoryUsage];

            if (memoryUsage == null)
                return false;

            return (long)memoryUsage >= m_MaxMemoryUsage;
        }
Exemplo n.º 5
0
        protected override bool Setup(IManagedApp managedApp, IServerConfig config)
        {
            var ret = base.Setup(managedApp, config);

            if (!ret)
                return false;

            SetupRecycleTriggers(managedApp, config);
            return ret;
        }
Exemplo n.º 6
0
        protected override bool Setup(IManagedApp managedApp, IServerConfig config)
        {
            var ret = managedApp.Setup(m_RemoteBootstrapWrap, config);

            if (!ret)
                return false;

            SetupRecycleTriggers(managedApp, config);
            return ret;
        }
Exemplo n.º 7
0
        public bool NeedBeRecycled(IManagedApp app, StatusInfoCollection status)
        {
            var memoryUsage = status[StatusInfoKeys.MemoryUsage];

            if (memoryUsage == null)
            {
                return(false);
            }

            return((long)memoryUsage >= m_MaxMemoryUsage);
        }
Exemplo n.º 8
0
        protected override bool Setup(IManagedApp managedApp, IServerConfig config)
        {
            var ret = managedApp.Setup(m_RemoteBootstrapWrap, config);

            if (!ret)
            {
                return(false);
            }

            SetupRecycleTriggers(managedApp, config);
            return(ret);
        }
Exemplo n.º 9
0
        public PerformanceMonitor(IRootConfig config, IEnumerable <IManagedApp> appServers, IManagedApp serverManager, ILogFactory logFactory)
        {
            m_PerfLog = logFactory.GetLog("Performance");

            m_AppServers = appServers.ToArray();

            m_ServerManager = serverManager;

            m_Helper = new ProcessPerformanceCounterHelper(Process.GetCurrentProcess());

            m_TimerInterval    = config.PerformanceDataCollectInterval * 1000;
            m_PerformanceTimer = new Timer(OnPerformanceTimerCallback);
        }
Exemplo n.º 10
0
        public PerformanceMonitor(IRootConfig config, IEnumerable<IManagedApp> appServers, IManagedApp serverManager, ILoggerFactory logFactory)
        {
            m_PerfLogger = logFactory.GetLogger("Performance");

            m_AppServers = appServers.ToArray();

            m_ServerManager = serverManager;

            m_Helper = new ProcessPerformanceCounterHelper(Process.GetCurrentProcess());

            m_TimerInterval = config.PerformanceDataCollectInterval * 1000;
            m_PerformanceTimer = new Timer(OnPerformanceTimerCallback);
        }
Exemplo n.º 11
0
        void SetupRecycleTriggers(IManagedApp managedApp, IServerConfig config)
        {
            try
            {
                var recycleTriggers = config.OptionElements.GetChildConfig<RecycleTriggerConfigCollection>("recycleTriggers");

                if (recycleTriggers != null && recycleTriggers.Count > 0)
                {
                    var exportProvider = AppDomain.CurrentDomain.GetCurrentAppDomainExportProvider();
                    var recycleTriggerTypes = exportProvider.GetExports<IRecycleTrigger, IProviderMetadata>();

                    var triggers = new List<IRecycleTrigger>();

                    foreach (var triggerConfig in recycleTriggers)
                    {
                        var triggerType = recycleTriggerTypes.FirstOrDefault(t =>
                                t.Metadata.Name.Equals(triggerConfig.Name, StringComparison.OrdinalIgnoreCase));

                        if (triggerType == null)
                        {
                            Log.ErrorFormat("We cannot find a RecycleTrigger with the name '{0}'.", triggerConfig.Name);
                            continue;
                        }

                        var trigger = triggerType.Value;

                        if (!trigger.Initialize(triggerConfig.Options))
                        {
                            Log.ErrorFormat("Failed to initialize the RecycleTrigger '{0}'.", triggerConfig.Name);
                            continue;
                        }

                        triggers.Add(trigger);
                    }

                    if (triggers.Any())
                    {
                        (managedApp as IsolationApp).RecycleTriggers = triggers.ToArray();
                    }
                }
            }
            catch (Exception e)
            {
                Log.Error("Failed to load recycle triggers.", e);
            }
        }
Exemplo n.º 12
0
        void SetupRecycleTriggers(IManagedApp managedApp, IServerConfig config)
        {
            try
            {
                var recycleTriggers = config.OptionElements.GetChildConfig <RecycleTriggerConfigCollection>("recycleTriggers");

                if (recycleTriggers == null || !recycleTriggers.Any())
                {
                    return;
                }

                var triggers = new List <IRecycleTrigger>();

                foreach (var triggerConfig in recycleTriggers)
                {
                    var triggerType = m_RecycleTriggers.FirstOrDefault(t =>
                                                                       t.Metadata.Name.Equals(triggerConfig.Name, StringComparison.OrdinalIgnoreCase));

                    if (triggerType == null)
                    {
                        Logger.ErrorFormat("We cannot find a RecycleTrigger with the name '{0}'.", triggerConfig.Name);
                        continue;
                    }

                    var trigger = triggerType.Value;

                    if (!trigger.Initialize(triggerConfig.Options))
                    {
                        Logger.ErrorFormat("Failed to initialize the RecycleTrigger '{0}'.", triggerConfig.Name);
                        continue;
                    }

                    triggers.Add(trigger);
                }

                if (triggers.Any())
                {
                    (managedApp as IsolationApp).RecycleTriggers = triggers.ToArray();
                }
            }
            catch (Exception e)
            {
                Logger.Error("Failed to load recycle triggers.", e);
            }
        }
Exemplo n.º 13
0
        public bool Setup(string serverType, string bootstrapUri, string assemblyImportRoot, IServerConfig config)
        {
            m_AssemblyImporter = new AssemblyImport(assemblyImportRoot);

            var serviceType = Type.GetType(serverType);
            m_AppServer = (IManagedApp)Activator.CreateInstance(serviceType);

            var bootstrap = (IBootstrap)Activator.GetObject(typeof(IBootstrap), bootstrapUri);

            var ret = m_AppServer.Setup(bootstrap, config);

            if (ret)
            {
                m_Log = ((IAppServer)m_AppServer).Logger;
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
            }

            return ret;
        }
Exemplo n.º 14
0
 internal virtual bool SetupWorkItemInstance(IManagedApp workItem, IServerConfig serverConfig)
 {
     return(workItem.Setup(this, serverConfig));
 }
Exemplo n.º 15
0
        /// <summary>
        /// Initializes the bootstrap with the configuration, config resolver and log factory.
        /// </summary>
        /// <param name="serverConfigResolver">The server config resolver.</param>
        /// <param name="logFactory">The log factory.</param>
        /// <returns></returns>
        public virtual bool Initialize(Func <IServerConfig, IServerConfig> serverConfigResolver, ILogFactory logFactory)
        {
            if (m_Initialized)
            {
                throw new Exception("The server had been initialized already, you cannot initialize it again!");
            }

            if (logFactory != null && !string.IsNullOrEmpty(m_Config.LogFactory))
            {
                throw new ArgumentException("You cannot pass in a logFactory parameter, if you have configured a root log factory.", "logFactory");
            }

            if (logFactory == null)
            {
                logFactory = GetBootstrapLogFactory(m_Config.LogFactory);
            }

            m_GlobalLog = logFactory.GetLog(this.GetType().Name);

            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

            m_AppServers = new List <IManagedApp>(m_Config.Servers.Count());

            IManagedApp serverManager = null;

            //Initialize servers
            foreach (var config in m_Config.Servers)
            {
                var serverConfig = config;

                if (serverConfigResolver != null)
                {
                    serverConfig = serverConfigResolver(config);
                }

                IManagedApp appServer;

                try
                {
                    var serverType = serverConfig.ServerType;

                    if (string.IsNullOrEmpty(serverType) && !string.IsNullOrEmpty(serverConfig.ServerTypeName))
                    {
                        var serverTypeProvider = m_Config.ServerTypes.FirstOrDefault(
                            t => t.Name.Equals(serverConfig.ServerTypeName, StringComparison.OrdinalIgnoreCase));

                        if (serverTypeProvider != null)
                        {
                            serverType = serverTypeProvider.Type;
                        }
                    }

                    if (string.IsNullOrEmpty(serverType))
                    {
                        throw new Exception("No server type configured or the configured server type was not found.");
                    }

                    appServer = CreateWorkItemInstance(serverType);

                    var serverMetadata = appServer.GetAppServerMetadata();

                    if (serverMetadata.IsServerManager)
                    {
                        serverManager = appServer;
                    }

                    if (m_GlobalLog.IsDebugEnabled)
                    {
                        m_GlobalLog.DebugFormat("The server instance {0} has been created!", serverConfig.Name);
                    }
                }
                catch (Exception e)
                {
                    if (m_GlobalLog.IsErrorEnabled)
                    {
                        m_GlobalLog.Error(string.Format("Failed to create server instance {0}!", serverConfig.Name), e);
                    }
                    return(false);
                }

                var exceptionSource = appServer as IExceptionSource;

                if (exceptionSource != null)
                {
                    exceptionSource.ExceptionThrown += new EventHandler <ErrorEventArgs>(exceptionSource_ExceptionThrown);
                }


                var setupResult = false;

                try
                {
                    setupResult = SetupWorkItemInstance(appServer, serverConfig);

                    if (m_GlobalLog.IsDebugEnabled)
                    {
                        m_GlobalLog.DebugFormat("The server instance {0} has been initialized!", appServer.Name);
                    }
                }
                catch (Exception e)
                {
                    m_GlobalLog.Error(e);
                    setupResult = false;
                }

                if (!setupResult)
                {
                    if (m_GlobalLog.IsErrorEnabled)
                    {
                        m_GlobalLog.Error("Failed to setup server instance!");
                    }
                    return(false);
                }

                m_AppServers.Add(appServer);
            }

            if (!m_Config.DisablePerformanceDataCollector)
            {
                m_PerfMonitor = new PerformanceMonitor(m_Config, m_AppServers, serverManager, logFactory);

                if (m_GlobalLog.IsDebugEnabled)
                {
                    m_GlobalLog.Debug("The PerformanceMonitor has been initialized!");
                }
            }

            if (m_GlobalLog.IsDebugEnabled)
            {
                m_GlobalLog.Debug("The Bootstrap has been initialized!");
            }

            try
            {
                RegisterRemotingService();
            }
            catch (Exception e)
            {
                if (m_GlobalLog.IsErrorEnabled)
                {
                    m_GlobalLog.Error("Failed to register remoting access service!", e);
                }

                return(false);
            }

            m_Initialized = true;

            return(true);
        }
Exemplo n.º 16
0
 public ServerProxy(IManagedApp app)
 {
     m_ManagedApp = app;
 }
Exemplo n.º 17
0
        private ManagedAppVersion UpdateAppVersion(IManagedPlatform platform, IManagedTenant tenant, AvailableApplication app, ICollection <ManagedApp> existingApps)
        {
            using (Profiler.Measure("PlatformService.UpdateAppVersion"))
            {
                IManagedApp        managedApp        = existingApps.FirstOrDefault(e => e.ApplicationId == app.ApplicationId);
                IManagedAppVersion managedAppVersion = null;

                // does it exit on the platform?
                if (platform != null)
                {
                    managedAppVersion = platform.AvailableAppVersions.FirstOrDefault(v => v.VersionId == app.ApplicationVersionId) ??
                                        GetAppVersion(app.ApplicationVersionId);
                }

                // or the tenant?
                if (tenant != null && managedAppVersion == null)
                {
                    managedAppVersion = tenant.HasAppsInstalled.FirstOrDefault(i => i.VersionId == app.ApplicationVersionId);
                }

                // or in amongst the list of apps just being created?
                if (managedAppVersion == null)
                {
                    managedAppVersion = existingApps.SelectMany(a => a.Versions).FirstOrDefault(v =>
                                                                                                (v.VersionId == app.ApplicationVersionId) &&
                                                                                                (v.Version == app.PackageVersion) &&
                                                                                                (v.Name == app.Name));
                }

                if (managedAppVersion != null)
                {
                    managedAppVersion = managedAppVersion.AsWritable <ManagedAppVersion>();

                    // it should have an app
                    if (managedAppVersion.Application != null)
                    {
                        managedApp = managedAppVersion.Application;
                    }
                }
                else
                {
                    managedAppVersion           = CastEntityHelper.CreateAppVersion();
                    managedAppVersion.VersionId = app.ApplicationVersionId;
                }

                managedAppVersion.Name        = app.Name;
                managedAppVersion.Version     = app.PackageVersion;
                managedAppVersion.PublishDate = app.ReleaseDate;

                // does the app exist then?
                if (managedApp == null)
                {
                    managedApp = UpdateApp(app);
                }

                if (managedApp != null)
                {
                    managedApp = managedApp.AsWritable <ManagedApp>();
                    managedApp.Versions.Add((ManagedAppVersion)managedAppVersion);

                    managedAppVersion.Application = managedApp;

                    existingApps.Add((ManagedApp)managedApp);
                }

                if (platform != null || tenant != null)
                {
                    if (platform != null)
                    {
                        platform.AvailableAppVersions.Add((ManagedAppVersion)managedAppVersion);
                    }

                    if (tenant != null)
                    {
                        tenant.HasAppsInstalled.Add((ManagedAppVersion)managedAppVersion);
                    }
                }

                return((ManagedAppVersion)managedAppVersion);
            }
        }
Exemplo n.º 18
0
 internal override bool SetupWorkItemInstance(IManagedApp workItem, IServerConfig serverConfig)
 {
     return(workItem.Setup(m_Bootstrap, serverConfig));
 }
Exemplo n.º 19
0
 public MarshalManagedApp(string appTypeName)
 {
     var appType = Type.GetType(appTypeName);
     m_ManagedApp = (IManagedApp)Activator.CreateInstance(appType);
 }
Exemplo n.º 20
0
 internal virtual bool SetupWorkItemInstance(IManagedApp workItem, IServerConfig serverConfig)
 {
     return workItem.Setup(this, serverConfig);
 }
Exemplo n.º 21
0
        public virtual bool Initialize()
        {
            AnyLog.LoggerFactory.Configurate(ExportProvider, ConfigSource.LogFactory);
            var loggerFactory = AnyLog.LoggerFactory.Current;

            if (loggerFactory == null)
            {
                throw new Exception("Failed to load loggerFactory.");
            }

            LoggerFactory = loggerFactory;
            Logger        = loggerFactory.GetLogger(this.GetType().Name);

            AppDomain.CurrentDomain.SetData("Bootstrap", this);

            foreach (var config in ConfigSource.Servers.Where(s => s.StartupType != StartupType.Disabled))
            {
                IManagedApp server = null;

                try
                {
                    server = CreateAppInstance(config);
                    Logger.InfoFormat("The app server instance [{0}] is created.", config.Name);
                }
                catch (Exception e)
                {
                    Logger.Error(string.Format("Failed to create the app server instance [{0}].", config.Name), e);
                    return(false);
                }

                if (server == null)
                {
                    Logger.Error(string.Format("Failed to create  the server instance [{0}]", config.Name));
                    return(false);
                }

                try
                {
                    if (!Setup(server, config))
                    {
                        throw new Exception(string.Format("The app server instance [{0}] failed to be setup.", config.Name));
                    }

                    Logger.InfoFormat("The app server instance [{0}] is setup successfully.", config.Name);
                }
                catch (Exception e)
                {
                    Logger.Error(string.Format("Failed to setup the app server instance [{0}]", config.Name), e);
                    return(false);
                }

                ManagedApps.Add(server);
            }

            try
            {
                RegisterRemotingService();
            }
            catch (Exception e)
            {
                if (Logger.IsErrorEnabled)
                {
                    Logger.Error("Failed to register remoting access service!", e);
                }

                return(false);
            }

            return(true);
        }
Exemplo n.º 22
0
 public ServerProxy(IManagedApp server)
 {
     m_Server = server;
 }
Exemplo n.º 23
0
 internal override bool SetupWorkItemInstance(IManagedApp workItem, IServerConfig serverConfig)
 {
     return workItem.Setup(m_Bootstrap, serverConfig);
 }
Exemplo n.º 24
0
 protected override bool Setup(IManagedApp managedApp, IServerConfig config)
 {
     return managedApp.Setup(m_RemoteBootstrapWrap, config);
 }
Exemplo n.º 25
0
 protected virtual bool Setup(IManagedApp managedApp, IServerConfig config)
 {
     return managedApp.Setup(this, config);
 }
Exemplo n.º 26
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AppDomainAppServer"/> class.
        /// </summary>
        /// <param name="serviceTypeName">Name of the service type.</param>
        public MarshalAppServer(string serviceTypeName)
        {
            var serviceType = Type.GetType(serviceTypeName);

            m_AppServer = (IManagedApp)Activator.CreateInstance(serviceType);
        }
Exemplo n.º 27
0
 public ServerProxy(IManagedApp app)
 {
     m_ManagedApp = app;
 }
Exemplo n.º 28
0
 public ServerProxy(IManagedApp server)
 {
     m_Server = server;
 }
Exemplo n.º 29
0
        public MarshalManagedApp(string appTypeName)
        {
            var appType = Type.GetType(appTypeName);

            m_ManagedApp = (IManagedApp)Activator.CreateInstance(appType);
        }
Exemplo n.º 30
0
 protected virtual bool Setup(IManagedApp managedApp, IServerConfig config)
 {
     return(managedApp.Setup(this, config));
 }