Server-side scenario execution: effects client replaces local engine

- client.Effects: typed effects + completion methods posting scenario callbacks
- client.Scenario reduced to TriggerAsync
- pending polling via Update() pump: 30s heartbeat + wait-deadline checks
- local engine, plan persistence (IPlanStateStore) and resume removed
- RealtimeService and realtime transports removed (relay never deployed)
- dead IPlanScheduler leftover removed
- models regenerated from openapi (ExecutionPlan/BoundaryNode gone, PendingEffect added)
This commit is contained in:
edmand46
2026-09-04 14:03:41 +03:00
parent 05dd30f31d
commit 6c590ca520
52 changed files with 1304 additions and 2040 deletions
-11
View File
@@ -1,11 +0,0 @@
// Code generated by apigen. DO NOT EDIT.
using Newtonsoft.Json;
namespace RudderSdk.Core.Models.Scenarios;
public class GetScenarioRunRequest
{
[JsonProperty("runId")]
public string? RunId { get; set; }
}
-18
View File
@@ -1,18 +0,0 @@
// Code generated by apigen. DO NOT EDIT.
using Newtonsoft.Json;
using RudderSdk.Core.Models;
namespace RudderSdk.Core.Models.Scenarios;
public class GetScenarioRunResponse
{
[JsonProperty("plan")]
public ExecutionPlan? Plan { get; set; }
[JsonProperty("runId")]
public string? RunId { get; set; }
[JsonProperty("status")]
public string? Status { get; set; }
}
+3 -3
View File
@@ -1,12 +1,12 @@
// Code generated by apigen. DO NOT EDIT.
using Newtonsoft.Json;
using RudderSdk.Core.Models;
using Newtonsoft.Json.Linq;
namespace RudderSdk.Core.Models.Scenarios;
public class HandleScenarioCallbackResponse
{
[JsonProperty("plan")]
public ExecutionPlan? Plan { get; set; }
[JsonProperty("effect")]
public JToken? Effect { get; set; }
}
@@ -0,0 +1,12 @@
// Code generated by apigen. DO NOT EDIT.
using Newtonsoft.Json;
using System.Collections.Generic;
namespace RudderSdk.Core.Models.Scenarios;
public class ListPendingScenarioEffectsResponse
{
[JsonProperty("effects")]
public List<PendingEffect> Effects { get; set; } = null!;
}
+28
View File
@@ -0,0 +1,28 @@
// Code generated by apigen. DO NOT EDIT.
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
namespace RudderSdk.Core.Models.Scenarios;
public class PendingEffect
{
[JsonProperty("data")]
public JToken Data { get; set; } = null!;
[JsonProperty("nodeId")]
public string NodeId { get; set; } = null!;
[JsonProperty("runId")]
public string RunId { get; set; } = null!;
[JsonProperty("scenarioId")]
public string ScenarioId { get; set; } = null!;
[JsonProperty("type")]
public string Type { get; set; } = null!;
[JsonProperty("waitDeadline")]
public DateTimeOffset? WaitDeadline { get; set; }
}
+2 -3
View File
@@ -1,13 +1,12 @@
// Code generated by apigen. DO NOT EDIT.
using Newtonsoft.Json;
using System.Collections.Generic;
using RudderSdk.Core.Models;
namespace RudderSdk.Core.Models.Scenarios;
public class TriggerScenarioResponse
{
[JsonProperty("plans")]
public List<ExecutionPlan>? Plans { get; set; }
[JsonProperty("effects")]
public List<PendingEffect> Effects { get; set; } = null!;
}
+3 -3
View File
@@ -1,6 +1,6 @@
// Code generated by apigen. DO NOT EDIT.
using Newtonsoft.Json;
using RudderSdk.Core.Models;
using Newtonsoft.Json.Linq;
namespace RudderSdk.Core.Models.Scenarios;
@@ -9,7 +9,7 @@ public class UpdateScenarioCounterResponse
[JsonProperty("completed")]
public bool? Completed { get; set; }
[JsonProperty("plan")]
public ExecutionPlan? Plan { get; set; }
[JsonProperty("effect")]
public JToken? Effect { get; set; }
}