/// <summary>
        /// Uses a native <see cref="IWorkflowRuntime"/>
        /// </summary>
        /// <param name="app">The <see cref="ISynapseApplicationBuilder"/> to configure</param>
        /// <returns>The configured <see cref="ISynapseApplicationBuilder"/></returns>
        public static ISynapseApplicationBuilder UseNativeRuntimeHost(this ISynapseApplicationBuilder app)
        {
            var runtimeHostOptions = new NativeRuntimeOptions();

            app.Configuration.Bind("native", runtimeHostOptions);
            app.Services.AddSingleton <NativeRuntimeHost>();
            app.Services.AddSingleton <IWorkflowRuntime>(provider => provider.GetRequiredService <NativeRuntimeHost>());
            app.Services.AddSingleton <IHostedService>(provider => provider.GetRequiredService <NativeRuntimeHost>());
            return(app);
        }
Exemple #2
0
        /// <summary>
        /// Uses a Docker-base <see cref="IWorkflowRuntime"/>
        /// </summary>
        /// <param name="app">The <see cref="ISynapseApplicationBuilder"/> to configure</param>
        /// <returns>The configured <see cref="ISynapseApplicationBuilder"/></returns>
        public static ISynapseApplicationBuilder UseDockerRuntimeHost(this ISynapseApplicationBuilder app)
        {
            var runtimeHostOptions = new DockerRuntimeHostOptions();

            app.Configuration.Bind("docker", runtimeHostOptions);
            app.Services.AddSingleton <DockerRuntimeHost>();
            app.Services.AddSingleton <IWorkflowRuntime>(provider => provider.GetRequiredService <DockerRuntimeHost>());
            app.Services.AddSingleton <IHostedService>(provider => provider.GetRequiredService <DockerRuntimeHost>());
            app.Services.AddSingleton <IDockerClient>(provider =>
            {
                return(new DockerClientConfiguration(new Uri("unix:///var/run/docker.sock")).CreateClient());
            });
            app.Services.TryAddSingleton(Options.Create(runtimeHostOptions));
            return(app);
        }
Exemple #3
0
     /// <summary>
     /// Configures Synapse to use the Http REST API port
     /// </summary>
     /// <param name="synapse">The <see cref="ISynapseApplicationBuilder"/> to configure</param>
     /// <returns>The configured <see cref="ISynapseApplicationBuilder"/></returns>
     public static ISynapseApplicationBuilder UseWebSocketMonitoringApi(this ISynapseApplicationBuilder synapse)
     {
         synapse.Services.AddSignalR()
         .AddNewtonsoftJsonProtocol(options =>
         {
             options.PayloadSerializerSettings = new()
             {
                 ContractResolver  = new NonPublicSetterContractResolver(),
                 NullValueHandling = NullValueHandling.Ignore
             };
         });
         synapse.Services.AddIntegrationEventBus(async(provider, e) =>
         {
             var mapper = provider.GetRequiredService <IMapper>();
             var hub    = provider.GetRequiredService <IHubContext <SynapseWebSocketMonitoringApi, ISynapseMonitoringApiClient> >();
             await hub.Clients.All.PublishIntegrationEvent(mapper.Map <V1Event>(e));
         });
         return(synapse);
     }
 }
Exemple #4
0
        /// <summary>
        /// Uses a Kubernetes-base <see cref="IWorkflowRuntime"/>
        /// </summary>
        /// <param name="app">The <see cref="ISynapseApplicationBuilder"/> to configure</param>
        /// <returns>The configured <see cref="ISynapseApplicationBuilder"/></returns>
        public static ISynapseApplicationBuilder UseKubernetesRuntimeHost(this ISynapseApplicationBuilder app)
        {
            var runtimeHostOptions = new KubernetesRuntimeOptions();

            app.Configuration.Bind("kubernetes", runtimeHostOptions);
            app.Services.AddSingleton <KubernetesRuntimeHost>();
            app.Services.AddSingleton <IWorkflowRuntime>(provider => provider.GetRequiredService <KubernetesRuntimeHost>());
            app.Services.AddSingleton <IHostedService>(provider => provider.GetRequiredService <KubernetesRuntimeHost>());
            var config = null as KubernetesClientConfiguration;

            if (KubernetesClientConfiguration.IsInCluster())
            {
                config = KubernetesClientConfiguration.InClusterConfig();
            }
            else
            {
                config = KubernetesClientConfiguration.BuildDefaultConfig();
            }
            app.Services.AddKubernetesClient(config);
            app.Services.TryAddSingleton(Options.Create(runtimeHostOptions));
            return(app);
        }
 /// <summary>
 /// Configures Synapse to use the Http REST API port
 /// </summary>
 /// <param name="synapse">The <see cref="ISynapseApplicationBuilder"/> to configure</param>
 /// <returns>The configured <see cref="ISynapseApplicationBuilder"/></returns>
 public static ISynapseApplicationBuilder UseHttpManagementApi(this ISynapseApplicationBuilder synapse)
 {
     synapse.Services
     .AddControllers()
     .AddNewtonsoftJson(options =>
     {
         options.SerializerSettings.ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor;
         options.SerializerSettings.ContractResolver    = new Newtonsoft.Json.Serialization.NonPublicSetterContractResolver();
         options.SerializerSettings.NullValueHandling   = NullValueHandling.Ignore;
         options.SerializerSettings.DateFormatHandling  = DateFormatHandling.IsoDateFormat;
     })
     .AddOData((options, provider) =>
     {
         IEdmModelBuilder builder = provider.GetRequiredService <IEdmModelBuilder>();
         options.AddRouteComponents("api/odata", builder.Build())
         .EnableQueryFeatures(50);
         options.RouteOptions.EnableControllerNameCaseInsensitive = true;
     })
     .AddODataNewtonsoftJson()
     .AddApplicationPart(typeof(ISynapseApplicationBuilderExtensions).Assembly)
     .AddApplicationPart(typeof(MetadataController).Assembly);
     synapse.Services.AddSwaggerGen(builder =>
     {
         builder.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
         builder.SwaggerDoc("v1", new OpenApiInfo
         {
             Title       = "Synapse API",
             Version     = "v1",
             Description = "The Open API documentation for the Synapse API",
             Contact     = new()
             {
                 Name = "The Synapse Authors",
                 Url  = new Uri("https://github.com/serverlessworkflow/synapse/")
             }
         });
         builder.IncludeXmlComments(typeof(ISynapseApplicationBuilderExtensions).Assembly.Location.Replace(".dll", ".xml"));
         builder.IncludeXmlComments(typeof(Integration.Models.V1Workflow).Assembly.Location.Replace(".dll", ".xml"));
     });