Ejemplo n.º 1
0
        public Task <ViewBag> BuildViewBag(BehaviorGraph graph, IActivationDiagnostics diagnostics, IFubuApplicationFiles files)
        {
            return(diagnostics.Timer.RecordTask("Building the View Bag", () =>
            {
                var viewFinders = _facilities.Select(x =>
                {
                    return Task.Factory.StartNew(() =>
                    {
                        x.Fill(this, graph, diagnostics.Timer, files);
                        return x.AllViews();
                    });
                });

                var views = viewFinders.SelectMany(x => x.Result).ToList();
                _viewPolicies.Each(x => x.Alter(views));

                var logger = TemplateLogger.Default(diagnostics);
                var types = new ViewTypePool(graph);

                // Attaching the view models

                _facilities.Each(x => x.AttachViewModels(types, logger));

                _facilities.Each(x => x.AttachLayouts(this));

                return new ViewBag(views);
            }));
        }
Ejemplo n.º 2
0
 /// <summary>
 /// A static method that should be exposed, to allow you to
 /// take an action when there has been a failure in the system.
 /// </summary>
 /// <param name="failure">The action to perform</param>
 public static void AssertNoFailures(this IActivationDiagnostics diagnostics, Action failure)
 {
     if (diagnostics.HasErrors())
     {
         failure();
     }
 }
Ejemplo n.º 3
0
 public static IEnumerable<Assembly> FindModuleAssemblies(IActivationDiagnostics diagnostics)
 {
     return FindAssemblies(file =>
     {
         diagnostics.LogFor(typeof(FubuRuntime)).Trace("Unable to load assembly from file " + file);
     }).Where(x => x.HasAttribute<FubuModuleAttribute>()).ToArray();
 }
Ejemplo n.º 4
0
 public static IEnumerable <Assembly> FindModuleAssemblies(IActivationDiagnostics diagnostics)
 {
     return(FindAssemblies(file =>
     {
         diagnostics.LogFor(typeof(FubuRuntime)).Trace("Unable to load assembly from file " + file);
     }).Where(x => x.HasAttribute <FubuModuleAttribute>()).ToArray());
 }
Ejemplo n.º 5
0
 public static void LogExecutionOnEach <TItem>(this IActivationDiagnostics diagnostics, IEnumerable <TItem> targets, Action <TItem, IActivationLog> continuation)
 {
     targets.Each(currentTarget =>
     {
         var log = diagnostics.LogFor(currentTarget);
         diagnostics.LogExecution(currentTarget, () => continuation(currentTarget, log));
     });
 }
Ejemplo n.º 6
0
        public static BehaviorGraph Build(FubuRegistry registry, IPerfTimer perfTimer,
                                          IEnumerable <Assembly> packageAssemblies, IActivationDiagnostics diagnostics, IFubuApplicationFiles files)
        {
            var featureLoader = new FeatureLoader();

            featureLoader.LookForFeatures();

            if (registry.Mode.InDevelopment())
            {
                registry.AlterSettings <DiagnosticsSettings>(_ => _.TraceLevel = TraceLevel.Verbose);
                registry.AlterSettings <AssetSettings>(_ => _.SetupForDevelopment());
            }



            var graph = new BehaviorGraph
            {
                ApplicationAssembly = registry.ApplicationAssembly,
                PackageAssemblies   = packageAssemblies
            };

            var accessorRules         = AccessorRulesCompiler.Compile(graph, perfTimer);
            var validationCompilation = ValidationCompiler.Compile(graph, perfTimer, registry);



            var config = registry.Config;

            perfTimer.Record("Applying Settings", () => applySettings(config, graph, diagnostics, files));

            perfTimer.Record("Enable built in polling jobs", () => enableBuiltInJobs(graph));
            perfTimer.Record("Applying Feature Settings", () => featureLoader.ApplyAll(graph.Settings, registry).Wait(30.Seconds()).AssertFinished());


            config.Add(new ActionlessViewChainSource());
            perfTimer.Record("Local Application BehaviorGraph", () => config.BuildLocal(graph, perfTimer));

            perfTimer.Record("Explicit Configuration", () => config.Global.Explicits.RunActions(graph));
            perfTimer.Record("Global Policies", () => config.Global.Policies.RunActions(graph));

            perfTimer.Record("Inserting Conneg and Authorization Nodes",
                             () => insertConnegAndAuthorizationNodes(graph));

            perfTimer.Record("Applying Global Reorderings", () => config.ApplyGlobalReorderings(graph));


            if (registry.Mode.InDevelopment() || graph.Settings.Get <DiagnosticsSettings>().TraceLevel != TraceLevel.None)
            {
                perfTimer.Record("Applying Tracing", () => ApplyTracing.Configure(graph));
            }


            Task.WaitAll(new Task[] { accessorRules, validationCompilation }, 30.Seconds()).AssertFinished();

            new AutoImportModelNamespacesConvention().Configure(graph);

            return(graph);
        }
Ejemplo n.º 7
0
        private void applyFubuExtensionsFromPackages(IActivationDiagnostics diagnostics,
                                                     IEnumerable <Assembly> packageAssemblies, FubuRegistry registry)
        {
            // THIS IS NEW, ONLY ASSEMBLIES MARKED AS [FubuModule] will be scanned
            var importers = packageAssemblies.Where(a => a.HasAttribute <FubuModuleAttribute>()).Select(
                assem => Task.Factory.StartNew(() => assem.FindAllExtensions(diagnostics))).ToArray();

            Task.WaitAll(importers, 5.Seconds());

            importers.SelectMany(x => x.Result).Each(x => x.Apply(registry));
        }
Ejemplo n.º 8
0
        public static void LogExecutionOnEachInParallel <TItem>(this IActivationDiagnostics diagnostics, IEnumerable <TItem> targets, Action <TItem, IActivationLog> continuation)
        {
            var tasks = targets.Select(currentTarget => {
                return(Task.Factory.StartNew(() => {
                    var log = diagnostics.LogFor(currentTarget);
                    diagnostics.LogExecution(currentTarget, () => continuation(currentTarget, log));
                }));
            }).ToArray();

            Task.WaitAll(tasks, 10.Seconds());
        }
Ejemplo n.º 9
0
        public static BehaviorGraph Build(FubuRegistry registry, IPerfTimer perfTimer,
            IEnumerable<Assembly> packageAssemblies, IActivationDiagnostics diagnostics, IFubuApplicationFiles files)
        {
            var featureLoader = new FeatureLoader();
            featureLoader.LookForFeatures();

            if (registry.Mode.InDevelopment())
            {
                registry.AlterSettings<DiagnosticsSettings>(_ => _.TraceLevel = TraceLevel.Verbose);
                registry.AlterSettings<AssetSettings>(_ => _.SetupForDevelopment());
            }

            
            

            var graph = new BehaviorGraph
            {
                ApplicationAssembly = registry.ApplicationAssembly,
                PackageAssemblies = packageAssemblies
            };

            var accessorRules = AccessorRulesCompiler.Compile(graph, perfTimer);



            var config = registry.Config;

            perfTimer.Record("Applying Settings", () => applySettings(config, graph, diagnostics, files));

            perfTimer.Record("Enable built in polling jobs", () => enableBuiltInJobs(graph));
            perfTimer.Record("Applying Feature Settings", () => featureLoader.ApplyAll(graph.Settings, registry).Wait());

            perfTimer.Record("Local Application BehaviorGraph", () => config.BuildLocal(graph, perfTimer));

            perfTimer.Record("Explicit Configuration", () => config.Global.Explicits.RunActions(graph));
            perfTimer.Record("Global Policies", () => config.Global.Policies.RunActions(graph));

            perfTimer.Record("Inserting Conneg and Authorization Nodes",
                () => insertConnegAndAuthorizationNodes(graph));

            perfTimer.Record("Applying Global Reorderings", () => config.ApplyGlobalReorderings(graph));


            if (registry.Mode.InDevelopment() || graph.Settings.Get<DiagnosticsSettings>().TraceLevel != TraceLevel.None)
            {
                perfTimer.Record("Applying Tracing", () => ApplyTracing.Configure(graph));
            }

            accessorRules.Wait();

            new AutoImportModelNamespacesConvention().Configure(graph);

            return graph;
        }
        public static string WriteDescription(IActivationDiagnostics diagnostics, FubuRuntime runtime)
        {
            var writer = new System.IO.StringWriter();

            writeProperties(writer, runtime);

            writeErrors(writer, diagnostics);

            writeAssemblies(writer);

            writeLogs(writer, diagnostics);

            return writer.ToString();
        }
Ejemplo n.º 11
0
        public static string WriteDescription(IActivationDiagnostics diagnostics, FubuRuntime runtime)
        {
            var writer = new System.IO.StringWriter();

            writeProperties(writer, runtime);

            writeErrors(writer, diagnostics);

            writeAssemblies(writer);

            writeLogs(writer, diagnostics);

            return(writer.ToString());
        }
Ejemplo n.º 12
0
        private static void applySettings(ConfigGraph config, BehaviorGraph graph, IActivationDiagnostics diagnostics, IFubuApplicationFiles files)
        {
            // Might come back to this.
            config.Imports.Each(x => x.InitializeSettings(graph));
            config.Settings.Each(x => x.Alter(graph.Settings));

            var viewSettings = graph.Settings.Get<ViewEngineSettings>();

            var views = viewSettings.BuildViewBag(graph, diagnostics, files);

            var conneg = graph.Settings.Get<ConnegSettings>();

            conneg.ReadConnegGraph(graph);
            conneg.StoreViews(views);
        }
Ejemplo n.º 13
0
        private static void applySettings(ConfigGraph config, BehaviorGraph graph, IActivationDiagnostics diagnostics, IFubuApplicationFiles files)
        {
            // Might come back to this.
            config.Imports.Each(x => x.InitializeSettings(graph));
            config.Settings.Each(x => x.Alter(graph.Settings));

            var viewSettings = graph.Settings.Get <ViewEngineSettings>();


            var views = viewSettings.BuildViewBag(graph, diagnostics, files);

            var conneg = graph.Settings.Get <ConnegSettings>();


            conneg.ReadConnegGraph(graph);
            conneg.StoreViews(views);
        }
Ejemplo n.º 14
0
        private static void writeErrors(StringWriter writer, IActivationDiagnostics diagnostics)
        {
            writer.WriteLine("------------------------------------------------------------------------------------------------");
            writer.WriteLine("Errors");
            writer.WriteLine("------------------------------------------------------------------------------------------------");

            diagnostics.EachLog((o, log) =>
            {
                if (!log.Success)
                {
                    writer.WriteLine(o.ToString());
                    writer.WriteLine(log.FullTraceText());
                    writer.WriteLine("------------------------------------------------------------------------------------------------");
                }
            });

            writer.WriteLine();
        }
        private static void writeLogs(StringWriter writer, IActivationDiagnostics diagnostics)
        {
            writer.WriteLine("------------------------------------------------------------------------------------------------");
            writer.WriteLine("Logs");
            writer.WriteLine("------------------------------------------------------------------------------------------------");

            diagnostics.EachLog((o, log) =>
            {
                if (log.Success)
                {
                    writer.WriteLine(o.ToString());
                    writer.WriteLine(log.FullTraceText());
                    writer.WriteLine("------------------------------------------------------------------------------------------------");
                }
            });

            writer.WriteLine();
        }
Ejemplo n.º 16
0
        /// <summary>
        /// Default AssertNoFailures
        /// </summary>
        public static void AssertNoFailures(this IActivationDiagnostics diagnostics)
        {
            diagnostics.AssertNoFailures(() =>
            {
                var writer = new StringWriter();
                writer.WriteLine("Package loading and application bootstrapping failed");
                writer.WriteLine();
                diagnostics.EachLog((o, log) =>
                {
                    if (!log.Success)
                    {
                        writer.WriteLine(o.ToString());
                        writer.WriteLine(log.FullTraceText());
                        writer.WriteLine(
                            "------------------------------------------------------------------------------------------------");
                    }
                });

                throw new FubuException(1, writer.GetStringBuilder().ToString());
            });
        }
Ejemplo n.º 17
0
        public static IEnumerable <IImporter> FindAllExtensions(this Assembly assembly, IActivationDiagnostics diagnostics)
        {
            // Yeah, it really does have to be this way
            // TODO -- use TypeRepository here.
            var log = diagnostics.LogFor(assembly);

            return(assembly.GetExportedTypes().Where(isExtension).Select(type => typeof(Importer <>).CloseAndBuildAs <IImporter>(log, type)));
        }
Ejemplo n.º 18
0
 public static ITemplateLogger Default(IActivationDiagnostics diagnostics)
 {
     return(new TemplateLogger(diagnostics));
 }
Ejemplo n.º 19
0
 public static ITemplateLogger Default(IActivationDiagnostics diagnostics)
 {
     return new TemplateLogger(diagnostics);
 }
Ejemplo n.º 20
0
 public TemplateLogger(IActivationDiagnostics diagnostics)
 {
     _diagnostics = diagnostics;
 }
Ejemplo n.º 21
0
 public TemplateLogger(IActivationDiagnostics diagnostics)
 {
     _diagnostics = diagnostics;
 }