Beispiel #1
0
    static async Task RunDFrameControllerAsync(WebApplicationBuilder appBuilder, DFrameControllerOptions options, Action <WebHostBuilderContext, DFrameControllerOptions> configureOptions)
    {
        appBuilder.WebHost.ConfigureServices((WebHostBuilderContext ctx, IServiceCollection services) =>
        {
            services.AddGrpc();
            services.AddMagicOnion(x =>
            {
                // Should use same options between DFrame.Controller(this) and DFrame.Worker
                x.SerializerOptions = MessagePackSerializerOptions.Standard;
            });
            services.AddSingleton <IMagicOnionLogger, MagicOnionLogToLogger>();

            services.AddRazorPages()
            .ConfigureApplicationPartManager(manager =>
            {
                // import libraries razor pages
                var assembly     = typeof(DFrameControllerWebApplicationBuilderExtensions).Assembly;
                var assemblyPart = new CompiledRazorAssemblyPart(assembly);
                manager.ApplicationParts.Add(assemblyPart);
            });

            services.AddServerSideBlazor();

            // DFrame Options
            services.TryAddSingleton <DFrameControllerExecutionEngine>();
            services.TryAddSingleton <DFrameControllerLogBuffer>();
            services.AddSingleton <ILoggerProvider, DFrameControllerLoggerProvider>();
            services.AddScoped <LocalStorageAccessor>();
            configureOptions(ctx, options);
            services.AddSingleton(options);

            // If user sets custom provdier, use it.
            services.TryAddSingleton <IExecutionResultHistoryProvider, InMemoryExecutionResultHistoryProvider>();

            services.AddMessagePipe();
        });

        var app = appBuilder.Build();

        app.UseStaticFiles();
        app.UseRouting();

        app.MapBlazorHub();
        app.MapFallbackToPage("/_Host");

        app.MapMagicOnionService();

        DisplayConfiguration(app);

        if (!options.DisableRestApi)
        {
            RestApi.RegisterRestApi(app);
        }

        await app.RunAsync();
    }
 public SummarizedExecutionResult(WorkerId workerId, int workloadCount, Dictionary <string, string> metadata, DFrameControllerOptions options)
 {
     this.elapsedValues   = new FixedSizeList <TimeSpan>(options.CompleteElapsedBufferCount);
     this.WorkerId        = workerId;
     this.WorkloadCount   = workloadCount;
     this.ExecutionStatus = ExecutionStatus.Running;
     this.Metadata        = metadata;
 }
Beispiel #3
0
 public static Task RunDFrameControllerAsync(this WebApplicationBuilder appBuilder, DFrameControllerOptions options)
 {
     return(RunDFrameControllerAsync(appBuilder, options, (_, __) => { }));
 }
Beispiel #4
0
 public DFrameControllerLogBuffer(DFrameControllerOptions options)
 {
     ringBuffer = new ObservableFixedSizeRingBuffer <string>(options.ServerLogBufferCount);
 }