Skip to content

Commit 3de8a94

Browse files
feat: always keep the last executed scenariorun in any situation
1 parent 0b99331 commit 3de8a94

File tree

4 files changed

+114
-54
lines changed

4 files changed

+114
-54
lines changed

doc/Apis/ScenariorunApi.md

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ All URIs are relative to *https://dev.api.cosmotech.com*
55
Method | HTTP request | Description
66
------------- | ------------- | -------------
77
[**deleteHistoricalDataOrganization**](ScenariorunApi.md#deleteHistoricalDataOrganization) | **DELETE** /organizations/{organization_id}/scenarioruns/historicaldata | Delete all historical ScenarioRuns in the Organization
8+
[**deleteHistoricalDataScenario**](ScenariorunApi.md#deleteHistoricalDataScenario) | **DELETE** /organizations/{organization_id}/workspaces/{workspace_id}/scenarios/{scenario_id}/scenarioruns/historicaldata | Delete all historical ScenarioRuns in the Scenario
89
[**deleteHistoricalDataWorkspace**](ScenariorunApi.md#deleteHistoricalDataWorkspace) | **DELETE** /organizations/{organization_id}/workspaces/{workspace_id}/scenarioruns/historicaldata | Delete all historical ScenarioRuns in the Workspace
9-
[**deleteHistoricalScenarioRunsByScenario**](ScenariorunApi.md#deleteHistoricalScenarioRunsByScenario) | **DELETE** /organizations/{organization_id}/workspaces/{workspace_id}/scenarios/{scenario_id}/scenarioruns | Delete all historical ScenarioRuns for the Scenario
1010
[**deleteScenarioRun**](ScenariorunApi.md#deleteScenarioRun) | **DELETE** /organizations/{organization_id}/scenarioruns/{scenariorun_id} | Delete a scenariorun
1111
[**findScenarioRunById**](ScenariorunApi.md#findScenarioRunById) | **GET** /organizations/{organization_id}/scenarioruns/{scenariorun_id} | Get the details of a scenariorun
1212
[**getScenarioRunCumulatedLogs**](ScenariorunApi.md#getScenarioRunCumulatedLogs) | **GET** /organizations/{organization_id}/scenarioruns/{scenariorun_id}/cumulatedlogs | Get the cumulated logs of a scenariorun
@@ -22,7 +22,7 @@ Method | HTTP request | Description
2222

2323
<a name="deleteHistoricalDataOrganization"></a>
2424
# **deleteHistoricalDataOrganization**
25-
> deleteHistoricalDataOrganization(organization\_id)
25+
> deleteHistoricalDataOrganization(organization\_id, deleteUnknown)
2626
2727
Delete all historical ScenarioRuns in the Organization
2828

@@ -31,6 +31,7 @@ Delete all historical ScenarioRuns in the Organization
3131
Name | Type | Description | Notes
3232
------------- | ------------- | ------------- | -------------
3333
**organization\_id** | **String**| the Organization identifier | [default to null]
34+
**deleteUnknown** | **Boolean**| condition to delete runs with an Unknown status | [optional] [default to false]
3435

3536
### Return type
3637

@@ -45,18 +46,20 @@ null (empty response body)
4546
- **Content-Type**: Not defined
4647
- **Accept**: Not defined
4748

48-
<a name="deleteHistoricalDataWorkspace"></a>
49-
# **deleteHistoricalDataWorkspace**
50-
> deleteHistoricalDataWorkspace(organization\_id, workspace\_id)
49+
<a name="deleteHistoricalDataScenario"></a>
50+
# **deleteHistoricalDataScenario**
51+
> deleteHistoricalDataScenario(organization\_id, workspace\_id, scenario\_id, deleteUnknown)
5152
52-
Delete all historical ScenarioRuns in the Workspace
53+
Delete all historical ScenarioRuns in the Scenario
5354

5455
### Parameters
5556

5657
Name | Type | Description | Notes
5758
------------- | ------------- | ------------- | -------------
5859
**organization\_id** | **String**| the Organization identifier | [default to null]
5960
**workspace\_id** | **String**| the Workspace identifier | [default to null]
61+
**scenario\_id** | **String**| the Scenario identifier | [default to null]
62+
**deleteUnknown** | **Boolean**| condition to delete runs with an Unknown status | [optional] [default to false]
6063

6164
### Return type
6265

@@ -71,19 +74,19 @@ null (empty response body)
7174
- **Content-Type**: Not defined
7275
- **Accept**: Not defined
7376

74-
<a name="deleteHistoricalScenarioRunsByScenario"></a>
75-
# **deleteHistoricalScenarioRunsByScenario**
76-
> deleteHistoricalScenarioRunsByScenario(organization\_id, workspace\_id, scenario\_id)
77+
<a name="deleteHistoricalDataWorkspace"></a>
78+
# **deleteHistoricalDataWorkspace**
79+
> deleteHistoricalDataWorkspace(organization\_id, workspace\_id, deleteUnknown)
7780
78-
Delete all historical ScenarioRuns for the Scenario
81+
Delete all historical ScenarioRuns in the Workspace
7982

8083
### Parameters
8184

8285
Name | Type | Description | Notes
8386
------------- | ------------- | ------------- | -------------
8487
**organization\_id** | **String**| the Organization identifier | [default to null]
8588
**workspace\_id** | **String**| the Workspace identifier | [default to null]
86-
**scenario\_id** | **String**| the Scenario identifier | [default to null]
89+
**deleteUnknown** | **Boolean**| condition to delete runs with an Unknown status | [optional] [default to false]
8790

8891
### Return type
8992

doc/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ Class | Method | HTTP request | Description
6060
*ScenarioApi* | [**updateScenario**](Apis/ScenarioApi.md#updatescenario) | **PATCH** /organizations/{organization_id}/workspaces/{workspace_id}/scenarios/{scenario_id} | Update a scenario
6161
*ScenarioApi* | [**updateScenarioAccessControl**](Apis/ScenarioApi.md#updatescenarioaccesscontrol) | **PATCH** /organizations/{organization_id}/workspaces/{workspace_id}/scenarios/{scenario_id}/security/access/{identity_id} | Update the specified access to User for a Scenario
6262
*ScenariorunApi* | [**deleteHistoricalDataOrganization**](Apis/ScenariorunApi.md#deletehistoricaldataorganization) | **DELETE** /organizations/{organization_id}/scenarioruns/historicaldata | Delete all historical ScenarioRuns in the Organization
63+
*ScenariorunApi* | [**deleteHistoricalDataScenario**](Apis/ScenariorunApi.md#deletehistoricaldatascenario) | **DELETE** /organizations/{organization_id}/workspaces/{workspace_id}/scenarios/{scenario_id}/scenarioruns/historicaldata | Delete all historical ScenarioRuns in the Scenario
6364
*ScenariorunApi* | [**deleteHistoricalDataWorkspace**](Apis/ScenariorunApi.md#deletehistoricaldataworkspace) | **DELETE** /organizations/{organization_id}/workspaces/{workspace_id}/scenarioruns/historicaldata | Delete all historical ScenarioRuns in the Workspace
64-
*ScenariorunApi* | [**deleteHistoricalScenarioRunsByScenario**](Apis/ScenariorunApi.md#deletehistoricalscenariorunsbyscenario) | **DELETE** /organizations/{organization_id}/workspaces/{workspace_id}/scenarios/{scenario_id}/scenarioruns | Delete all historical ScenarioRuns for the Scenario
6565
*ScenariorunApi* | [**deleteScenarioRun**](Apis/ScenariorunApi.md#deletescenariorun) | **DELETE** /organizations/{organization_id}/scenarioruns/{scenariorun_id} | Delete a scenariorun
6666
*ScenariorunApi* | [**findScenarioRunById**](Apis/ScenariorunApi.md#findscenariorunbyid) | **GET** /organizations/{organization_id}/scenarioruns/{scenariorun_id} | Get the details of a scenariorun
6767
*ScenariorunApi* | [**getScenarioRunCumulatedLogs**](Apis/ScenariorunApi.md#getscenarioruncumulatedlogs) | **GET** /organizations/{organization_id}/scenarioruns/{scenariorun_id}/cumulatedlogs | Get the cumulated logs of a scenariorun

scenariorun/src/main/kotlin/com/cosmotech/scenariorun/azure/ScenarioRunServiceImpl.kt

Lines changed: 46 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -148,49 +148,70 @@ internal class ScenarioRunServiceImpl(
148148
}
149149
}
150150

151-
override fun deleteHistoricalScenarioRunsByScenario(
151+
override fun deleteHistoricalDataOrganization(organizationId: String, deleteUnknown: Boolean) {
152+
this.eventPublisher.publishEvent(
153+
DeleteHistoricalDataOrganization(this, organizationId = organizationId, deleteUnknown))
154+
}
155+
156+
override fun deleteHistoricalDataWorkspace(
152157
organizationId: String,
153158
workspaceId: String,
154-
scenarioId: String
159+
deleteUnknown: Boolean
155160
) {
161+
this.eventPublisher.publishEvent(
162+
DeleteHistoricalDataWorkspace(
163+
this, organizationId = organizationId, workspaceId = workspaceId, deleteUnknown))
164+
}
156165

166+
override fun deleteHistoricalDataScenario(
167+
organizationId: String,
168+
workspaceId: String,
169+
scenarioId: String,
170+
deleteUnknown: Boolean
171+
) {
157172
GlobalScope.launch {
158173
this@ScenarioRunServiceImpl.deleteScenarioRunsByScenarioWithoutAccessEnforcement(
159-
organizationId, workspaceId, scenarioId)
174+
organizationId, workspaceId, scenarioId, deleteUnknown)
160175
}
161176
}
162177

178+
@EventListener(DeleteHistoricalDataScenario::class)
179+
fun deleteHistoricalDataScenarioRun(data: DeleteHistoricalDataScenario) {
180+
deleteHistoricalDataScenario(
181+
data.organizationId, data.workspaceId, data.scenarioId, data.deleteUnknown)
182+
}
183+
163184
private fun deleteScenarioRunsByScenarioWithoutAccessEnforcement(
164185
organizationId: String,
165186
workspaceId: String,
166-
scenarioId: String
187+
scenarioId: String,
188+
deleteUnknown: Boolean?
167189
) {
168190
val scenarioRuns = getScenarioRuns(organizationId, workspaceId, scenarioId).toMutableList()
169191

170-
scenarioRuns.filter { it.state == ScenarioRunState.Failed }.forEach {
171-
deleteScenarioRunWithoutAccessEnforcement(it)
172-
}
173-
174192
val lastRunId =
175193
scenarioApiService.findScenarioById(organizationId, workspaceId, scenarioId).lastRun!!
176194
.scenarioRunId
177195

178-
for (run in scenarioRuns.filter { it.state == ScenarioRunState.Successful }) {
179-
if (run.id != lastRunId) {
180-
deleteScenarioRunWithoutAccessEnforcement(run)
196+
scenarioRuns.filter { it.state == ScenarioRunState.Failed }.forEach {
197+
if (it.id != lastRunId) {
198+
deleteScenarioRunWithoutAccessEnforcement(it)
181199
}
182200
}
183-
}
184201

185-
override fun deleteHistoricalDataOrganization(organizationId: String) {
186-
this.eventPublisher.publishEvent(
187-
DeleteHistoricalDataOrganization(this, organizationId = organizationId))
188-
}
202+
if (deleteUnknown == true) {
203+
scenarioRuns.filter { it.state == ScenarioRunState.Unknown }.forEach {
204+
if (it.id != lastRunId) {
205+
deleteScenarioRunWithoutAccessEnforcement(it)
206+
}
207+
}
208+
}
189209

190-
override fun deleteHistoricalDataWorkspace(organizationId: String, workspaceId: String) {
191-
this.eventPublisher.publishEvent(
192-
DeleteHistoricalDataWorkspace(
193-
this, organizationId = organizationId, workspaceId = workspaceId))
210+
scenarioRuns.filter { it.state == ScenarioRunState.Successful }.forEach {
211+
if (it.id != lastRunId) {
212+
deleteScenarioRunWithoutAccessEnforcement(it)
213+
}
214+
}
194215
}
195216

196217
override fun findScenarioRunById(organizationId: String, scenariorunId: String) =
@@ -313,11 +334,6 @@ internal class ScenarioRunServiceImpl(
313334
}
314335
.toList()
315336

316-
@EventListener(DeleteHistoricalDataScenario::class)
317-
fun deleteHistoricalDataScenarioRun(data: DeleteHistoricalDataScenario) {
318-
deleteHistoricalScenarioRunsByScenario(data.organizationId, data.workspaceId, data.scenarioId)
319-
}
320-
321337
@EventListener(ScenarioDataDownloadRequest::class)
322338
fun onScenarioDataDownloadRequest(scenarioDataDownloadRequest: ScenarioDataDownloadRequest) {
323339
val startInfo =
@@ -463,7 +479,7 @@ internal class ScenarioRunServiceImpl(
463479
sendScenarioRunMetaData(organizationId, workspace, scenarioId, scenarioRun.csmSimulationRun)
464480

465481
val purgeHistoricalDataConfiguration =
466-
startInfo.runTemplate?.deleteHistoricalData ?: DeleteHistoricalData()
482+
startInfo.runTemplate.deleteHistoricalData ?: DeleteHistoricalData()
467483
if (purgeHistoricalDataConfiguration.enable) {
468484
logger.debug("Start coroutine to poll simulation status")
469485
GlobalScope.launch {
@@ -499,7 +515,8 @@ internal class ScenarioRunServiceImpl(
499515
}
500516
if (scenarioRunStatus == ScenarioRunState.Successful.value) {
501517
logger.info("ScenarioRun {} is Successfull => purging data", csmSimulationRun)
502-
deleteScenarioRunsByScenarioWithoutAccessEnforcement(organizationId, workspaceId, scenarioId)
518+
deleteScenarioRunsByScenarioWithoutAccessEnforcement(
519+
organizationId, workspaceId, scenarioId, false)
503520
} else {
504521
logger.info(
505522
"ScenarioRun {} is in error {} => no purging data", csmSimulationRun, scenarioRunStatus)
@@ -636,9 +653,8 @@ internal class ScenarioRunServiceImpl(
636653
// >= 8.5
637654
var versionWithDataIngestionState = true
638655
if (scenarioRun.sdkVersion != null) {
639-
logger.debug(
640-
"SDK version for scenario run status detected: {}", scenarioRun.sdkVersion ?: "ERROR")
641-
val splitVersion = scenarioRun.sdkVersion?.split(".") ?: listOf()
656+
logger.debug("SDK version for scenario run status detected: {}", scenarioRun.sdkVersion)
657+
val splitVersion = scenarioRun.sdkVersion.split(".") ?: listOf()
642658
if (splitVersion.size < 2) {
643659
logger.error("Malformed SDK version for scenario run status data ingestion check")
644660
} else {

scenariorun/src/main/openapi/scenariorun.yaml

Lines changed: 53 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@ paths:
2525
required: true
2626
schema:
2727
type: string
28+
- name: deleteUnknown
29+
in: query
30+
description: condition to delete runs with an Unknown status
31+
required: false
32+
schema:
33+
type: boolean
34+
default: false
2835
delete:
2936
operationId: deleteHistoricalDataOrganization
3037
tags:
@@ -51,6 +58,13 @@ paths:
5158
required: true
5259
schema:
5360
type: string
61+
- name: deleteUnknown
62+
in: query
63+
description: condition to delete runs with an Unknown status
64+
required: false
65+
schema:
66+
type: boolean
67+
default: false
5468
delete:
5569
operationId: deleteHistoricalDataWorkspace
5670
tags:
@@ -63,6 +77,45 @@ paths:
6377
description: Bad request
6478
"404":
6579
description: the Organization or Workspace specified is unknown or you don't have access to it
80+
/organizations/{organization_id}/workspaces/{workspace_id}/scenarios/{scenario_id}/scenarioruns/historicaldata:
81+
parameters:
82+
- name: organization_id
83+
in: path
84+
description: the Organization identifier
85+
required: true
86+
schema:
87+
type: string
88+
- name: workspace_id
89+
in: path
90+
description: the Workspace identifier
91+
required: true
92+
schema:
93+
type: string
94+
- name: scenario_id
95+
in: path
96+
description: the Scenario identifier
97+
required: true
98+
schema:
99+
type: string
100+
- name: deleteUnknown
101+
in: query
102+
description: condition to delete runs with an Unknown status
103+
required: false
104+
schema:
105+
type: boolean
106+
default: false
107+
delete:
108+
operationId: deleteHistoricalDataScenario
109+
tags:
110+
- scenariorun
111+
summary: Delete all historical ScenarioRuns in the Scenario
112+
responses:
113+
"204":
114+
description: Request succeeded
115+
"400":
116+
description: Bad request
117+
"404":
118+
description: the Scenario specified is unknown or you don't have access to it
66119
/organizations/{organization_id}/scenarioruns/search:
67120
parameters:
68121
- name: organization_id
@@ -348,18 +401,6 @@ paths:
348401
examples:
349402
OneScenarioRun:
350403
$ref: '#/components/examples/OneScenarioRun'
351-
delete:
352-
operationId: deleteHistoricalScenarioRunsByScenario
353-
tags:
354-
- scenariorun
355-
summary: Delete all historical ScenarioRuns for the Scenario
356-
responses:
357-
"204":
358-
description: Request succeeded
359-
"400":
360-
description: Bad request
361-
"404":
362-
description: the Scenario specified is unknown or you don't have access to it
363404
/organizations/{organization_id}/workspaces/{workspace_id}/scenarios/{scenario_id}/run:
364405
parameters:
365406
- name: organization_id

0 commit comments

Comments
 (0)