-
Notifications
You must be signed in to change notification settings - Fork 90
/
SimpleStateStatus.scala
151 lines (127 loc) · 6.85 KB
/
SimpleStateStatus.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
package pl.touk.nussknacker.engine.api.deployment.simple
import pl.touk.nussknacker.engine.api.deployment.StateStatus.StatusName
import pl.touk.nussknacker.engine.api.deployment.simple.SimpleStateStatus.ProblemStateStatus.defaultActions
import pl.touk.nussknacker.engine.api.deployment.{ScenarioActionName, StateDefinitionDetails, StateStatus}
import pl.touk.nussknacker.engine.api.process.VersionId
import java.net.URI
object SimpleStateStatus {
// Represents general problem.
final case class ProblemStateStatus(description: String, allowedActions: List[ScenarioActionName] = defaultActions)
extends StateStatus {
override def name: StatusName = ProblemStateStatus.name
}
object ProblemStateStatus {
val name: String = "PROBLEM"
def isProblemStatus(status: StateStatus): Boolean = status.name == name
val icon: URI = URI.create("/assets/states/error.svg")
val defaultDescription = "There are some problems with scenario."
val defaultActions: List[ScenarioActionName] =
List(ScenarioActionName.Deploy, ScenarioActionName.Cancel)
// Problem factory methods
val Failed: ProblemStateStatus = ProblemStateStatus(defaultDescription)
val ArchivedShouldBeCanceled: ProblemStateStatus =
ProblemStateStatus("Archived scenario should be canceled.", List(ScenarioActionName.Cancel))
val FailedToGet: ProblemStateStatus =
ProblemStateStatus(s"Failed to get a state of the scenario.")
def shouldBeRunning(deployedVersionId: VersionId, user: String): ProblemStateStatus =
ProblemStateStatus(s"Scenario deployed in version $deployedVersionId by $user is not running.")
def mismatchDeployedVersion(
deployedVersionId: VersionId,
exceptedVersionId: VersionId,
user: String
): ProblemStateStatus =
ProblemStateStatus(
s"Scenario deployed in version $deployedVersionId by $user, expected version $exceptedVersionId."
)
def shouldNotBeRunning(deployed: Boolean): ProblemStateStatus = {
val shouldNotBeRunningMessage =
if (deployed) "Scenario has been canceled but still is running."
else "Scenario has been never deployed but now is running."
ProblemStateStatus(shouldNotBeRunningMessage)
}
def missingDeployedVersion(exceptedVersionId: VersionId, user: String): ProblemStateStatus =
ProblemStateStatus(s"Scenario deployed without version by $user, expected version $exceptedVersionId.")
val ProcessWithoutAction: ProblemStateStatus =
ProblemStateStatus("Scenario state error - no actions found.")
val MultipleJobsRunning: ProblemStateStatus =
ProblemStateStatus("More than one deployment is running.", List(ScenarioActionName.Cancel))
}
val NotDeployed: StateStatus = StateStatus("NOT_DEPLOYED")
val DuringDeploy: StateStatus = StateStatus("DURING_DEPLOY")
val Running: StateStatus = StateStatus("RUNNING")
val Finished: StateStatus = StateStatus("FINISHED")
val Restarting: StateStatus = StateStatus("RESTARTING")
val DuringCancel: StateStatus = StateStatus("DURING_CANCEL")
val Canceled: StateStatus = StateStatus("CANCELED")
val DefaultFollowingDeployStatuses: Set[StateStatus] = Set(DuringDeploy, Running)
def isFinalStatus(status: StateStatus): Boolean =
List(SimpleStateStatus.Finished, SimpleStateStatus.Canceled).contains(status) || ProblemStateStatus.isProblemStatus(
status
)
val statusActionsPF: PartialFunction[StateStatus, List[ScenarioActionName]] = {
case SimpleStateStatus.NotDeployed =>
List(ScenarioActionName.Deploy, ScenarioActionName.Archive, ScenarioActionName.Rename)
case SimpleStateStatus.DuringDeploy => List(ScenarioActionName.Deploy, ScenarioActionName.Cancel)
case SimpleStateStatus.Running =>
List(ScenarioActionName.Cancel, ScenarioActionName.Pause, ScenarioActionName.Deploy)
case SimpleStateStatus.Canceled =>
List(ScenarioActionName.Deploy, ScenarioActionName.Archive, ScenarioActionName.Rename)
case SimpleStateStatus.Restarting => List(ScenarioActionName.Deploy, ScenarioActionName.Cancel)
case SimpleStateStatus.Finished =>
List(ScenarioActionName.Deploy, ScenarioActionName.Archive, ScenarioActionName.Rename)
case SimpleStateStatus.DuringCancel => List(ScenarioActionName.Deploy, ScenarioActionName.Cancel)
// When Failed - process is in terminal state in Flink and it doesn't require any cleanup in Flink, but in NK it does
// - that's why Cancel action is available
case SimpleStateStatus.ProblemStateStatus(_, allowedActions) => allowedActions
}
val definitions: Map[StatusName, StateDefinitionDetails] = Map(
SimpleStateStatus.ProblemStateStatus.name -> StateDefinitionDetails(
displayableName = "Problem",
icon = ProblemStateStatus.icon,
tooltip = ProblemStateStatus.defaultDescription,
description = ProblemStateStatus.defaultDescription
),
SimpleStateStatus.NotDeployed.name -> StateDefinitionDetails(
displayableName = "Not deployed",
icon = URI.create("/assets/states/not-deployed.svg"),
tooltip = "The scenario is not deployed.",
description = "The scenario is not deployed."
),
SimpleStateStatus.DuringDeploy.name -> StateDefinitionDetails(
displayableName = "During deploy",
icon = URI.create("/assets/states/deploy-running-animated.svg"),
tooltip = "The scenario has been already started and currently is being deployed.",
description = "The scenario is being deployed."
),
SimpleStateStatus.Running.name -> StateDefinitionDetails(
displayableName = "Running",
icon = URI.create("/assets/states/deploy-success.svg"),
tooltip = "The scenario has been successfully deployed and currently is running.",
description = "The scenario is running."
),
SimpleStateStatus.Canceled.name -> StateDefinitionDetails(
displayableName = "Canceled",
icon = URI.create("/assets/states/stopping-success.svg"),
tooltip = "The scenario has been successfully cancelled.",
description = "The scenario is canceled."
),
SimpleStateStatus.Restarting.name -> StateDefinitionDetails(
displayableName = "Restarting",
icon = URI.create("/assets/states/deploy-restart-animated.svg"),
tooltip = "Scenario was deployed but now is restarting...",
description = "Scenario is restarting..."
),
SimpleStateStatus.DuringCancel.name -> StateDefinitionDetails(
displayableName = "During cancel",
icon = URI.create("/assets/states/stopping-running-animated.svg"),
tooltip = "The scenario currently is being canceled.",
description = "The scenario is being canceled."
),
SimpleStateStatus.Finished.name -> StateDefinitionDetails(
displayableName = "Finished",
icon = URI.create("/assets/states/success.svg"),
tooltip = "The scenario completed successfully.",
description = "The scenario has finished."
),
)
}