/// <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); }
/// <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); }
/// <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); } }
/// <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")); });