Skip to content

Commit e470950

Browse files
feat: Update orchestration termination method to return detailed result and improve error handling
1 parent 91d1326 commit e470950

4 files changed

Lines changed: 12 additions & 11 deletions

File tree

src/XtremeIdiots.Portal.Web/Controllers/MapRotationsController.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -848,15 +848,15 @@ public async Task<IActionResult> TerminateOrchestration(string instanceId, Guid
848848
if (authResult != null)
849849
return authResult;
850850

851-
var terminated = await syncApiClient.TerminateOrchestration(instanceId, cancellationToken).ConfigureAwait(false);
851+
var terminateResult = await syncApiClient.TerminateOrchestration(instanceId, cancellationToken).ConfigureAwait(false);
852852

853-
if (terminated)
853+
if (terminateResult.Success)
854854
{
855855
this.AddAlertSuccess($"Orchestration '{instanceId}' terminated. You can now re-trigger the operation.");
856856
}
857857
else
858858
{
859-
this.AddAlertDanger($"Failed to terminate orchestration '{instanceId}'. It may have already completed or the sync service is unavailable.");
859+
this.AddAlertDanger($"Failed to terminate orchestration '{instanceId}': {terminateResult.Error}");
860860
}
861861

862862
return RedirectToAction(nameof(AssignmentStatus), new { id = assignmentId });

src/XtremeIdiots.Portal.Web/Services/ISyncApiClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ public interface ISyncApiClient
77
Task<SyncTriggerResult> TriggerDeactivate(Guid assignmentId, CancellationToken cancellationToken = default);
88
Task<SyncTriggerResult> TriggerRemove(Guid assignmentId, CancellationToken cancellationToken = default);
99
Task<OrchestrationStatusQueryResult> GetOrchestrationStatus(string instanceId, CancellationToken cancellationToken = default);
10-
Task<bool> TerminateOrchestration(string instanceId, CancellationToken cancellationToken = default);
10+
Task<SyncTriggerResult> TerminateOrchestration(string instanceId, CancellationToken cancellationToken = default);
1111
}
1212

1313
public record SyncTriggerResult(bool Success, string? InstanceId = null, string? Error = null);

src/XtremeIdiots.Portal.Web/Services/NoOpSyncApiClient.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ public Task<OrchestrationStatusQueryResult> GetOrchestrationStatus(string instan
2727
return Task.FromResult(new OrchestrationStatusQueryResult(OrchestrationStatusQueryOutcome.Error));
2828
}
2929

30-
public Task<bool> TerminateOrchestration(string instanceId, CancellationToken cancellationToken = default)
30+
public Task<SyncTriggerResult> TerminateOrchestration(string instanceId, CancellationToken cancellationToken = default)
3131
{
32-
return Task.FromResult(false);
32+
return Task.FromResult(new SyncTriggerResult(false, Error: "Sync API not configured"));
3333
}
3434
}

src/XtremeIdiots.Portal.Web/Services/SyncApiClient.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public async Task<OrchestrationStatusQueryResult> GetOrchestrationStatus(string
6363
}
6464
}
6565

66-
public async Task<bool> TerminateOrchestration(string instanceId, CancellationToken cancellationToken = default)
66+
public async Task<SyncTriggerResult> TerminateOrchestration(string instanceId, CancellationToken cancellationToken = default)
6767
{
6868
try
6969
{
@@ -78,16 +78,17 @@ public async Task<bool> TerminateOrchestration(string instanceId, CancellationTo
7878
if (response.IsSuccessStatusCode)
7979
{
8080
logger.LogInformation("Successfully terminated orchestration {InstanceId}", instanceId);
81-
return true;
81+
return new SyncTriggerResult(true);
8282
}
8383

84-
logger.LogWarning("Failed to terminate orchestration {InstanceId}, status {StatusCode}", instanceId, (int)response.StatusCode);
85-
return false;
84+
var errorBody = await response.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false);
85+
logger.LogWarning("Failed to terminate orchestration {InstanceId}, status {StatusCode}: {ErrorBody}", instanceId, (int)response.StatusCode, errorBody);
86+
return new SyncTriggerResult(false, Error: $"Sync service returned HTTP {(int)response.StatusCode}: {errorBody}");
8687
}
8788
catch (Exception ex)
8889
{
8990
logger.LogError(ex, "Failed to terminate orchestration {InstanceId}", instanceId);
90-
return false;
91+
return new SyncTriggerResult(false, Error: ex.Message);
9192
}
9293
}
9394

0 commit comments

Comments
 (0)