Skip to content

Commit

Permalink
Replace ProcessActionType with ScenarioActionName, rename actionType …
Browse files Browse the repository at this point in the history
…to actionName (#5795)
  • Loading branch information
gskrobisz committed Mar 28, 2024
1 parent 5fa0896 commit 4800d99
Show file tree
Hide file tree
Showing 59 changed files with 371 additions and 382 deletions.
8 changes: 4 additions & 4 deletions designer/client/src/components/Process/ProcessStateUtils.ts
@@ -1,4 +1,4 @@
import { ActionType, ProcessStateType, Scenario } from "./types";
import { PredefinedActionName, ProcessStateType, Scenario } from "./types";
import {
descriptionProcessArchived,
descriptionFragment,
Expand All @@ -12,11 +12,11 @@ const fragmentIcon = "/assets/process/fragment.svg";
const archivedIcon = "/assets/process/archived.svg";

class ProcessStateUtils {
public canDeploy = (state: ProcessStateType): boolean => state?.allowedActions.includes(ActionType.Deploy);
public canDeploy = (state: ProcessStateType): boolean => state?.allowedActions.includes(PredefinedActionName.Deploy);

public canCancel = (state: ProcessStateType): boolean => state?.allowedActions.includes(ActionType.Cancel);
public canCancel = (state: ProcessStateType): boolean => state?.allowedActions.includes(PredefinedActionName.Cancel);

public canArchive = (state: ProcessStateType): boolean => state?.allowedActions.includes(ActionType.Archive);
public canArchive = (state: ProcessStateType): boolean => state?.allowedActions.includes(PredefinedActionName.Archive);

getStateDescription({ isArchived, isFragment }: Scenario, processState: ProcessStateType): string {
if (isArchived) {
Expand Down
8 changes: 5 additions & 3 deletions designer/client/src/components/Process/types.ts
Expand Up @@ -3,14 +3,16 @@ import { UnknownRecord, Instant } from "../../types/common";
import { ScenarioGraph, ValidationResult } from "../../types";
import { ProcessingMode } from "../../http/HttpService";

export enum ActionType {
export enum PredefinedActionName {
Deploy = "DEPLOY",
Cancel = "CANCEL",
Archive = "ARCHIVE",
UnArchive = "UNARCHIVE",
Pause = "PAUSE",
}

export type ActionName = string;

export type ProcessVersionId = number;

export type BuildInfoType = {
Expand All @@ -23,7 +25,7 @@ export type BuildInfoType = {
export type ProcessActionType = {
performedAt: Instant;
user: string;
actionType: ActionType;
actionName: ActionName;
commentId?: number;
comment?: string;
buildInfo?: BuildInfoType;
Expand Down Expand Up @@ -67,7 +69,7 @@ export type ProcessName = Scenario["name"];
export type ProcessStateType = {
status: StatusType;
externalDeploymentId?: string;
allowedActions: Array<ActionType>;
allowedActions: Array<ActionName>;
icon: string;
tooltip: string;
description: string;
Expand Down
4 changes: 2 additions & 2 deletions designer/client/src/components/history/HistoryItem.tsx
@@ -1,7 +1,7 @@
import React from "react";
import { useTranslation } from "react-i18next";
import Date from "../common/Date";
import { ActionType, ProcessVersionType } from "../Process/types";
import { PredefinedActionName, ProcessVersionType } from "../Process/types";
import { HistoryItemStyled, StyledBadge } from "./StyledHistory";
import WarningAmber from "@mui/icons-material/WarningAmber";
import { Box, Typography } from "@mui/material";
Expand Down Expand Up @@ -58,7 +58,7 @@ export function HistoryItem({ onClick, version, type, isLatest, isDeployed }: Hi
<br />
<HDate date={createDate} />
<br />
{isDeployed && <HDate date={actions.find((a) => a.actionType === ActionType.Deploy)?.performedAt} />}
{isDeployed && <HDate date={actions.find((a) => a.actionName === PredefinedActionName.Deploy)?.performedAt} />}
</Typography>
{isDeployed && <StyledBadge />}
</HistoryItemStyled>
Expand Down
8 changes: 6 additions & 2 deletions designer/client/src/http/HttpService.ts
Expand Up @@ -7,6 +7,8 @@ import { ProcessingType, SettingsData, ValidationData, ValidationRequest } from
import api from "../api";
import { UserData } from "../common/models/User";
import {
ActionName,
PredefinedActionName,
ProcessActionType,
ProcessName,
ProcessStateType,
Expand Down Expand Up @@ -285,10 +287,12 @@ class HttpService {
.get<
{
performedAt: string;
actionType: "UNARCHIVE" | "ARCHIVE" | "CANCEL" | "DEPLOY";
actionName: ActionName;
}[]
>(`/processes/${encodeURIComponent(processName)}/deployments`)
.then((res) => res.data.filter(({ actionType }) => actionType === "DEPLOY").map(({ performedAt }) => performedAt));
.then((res) =>
res.data.filter(({ actionName }) => actionName === PredefinedActionName.Deploy).map(({ performedAt }) => performedAt),
);
}

deploy(processName: string, comment?: string): Promise<{ isSuccess: boolean }> {
Expand Down
Expand Up @@ -3,8 +3,6 @@ package pl.touk.nussknacker.engine.api.deployment
import pl.touk.nussknacker.engine.api.deployment.simple.SimpleProcessStateDefinitionManager
import pl.touk.nussknacker.engine.deployment.CustomActionDefinition

import scala.concurrent.Future

trait BaseDeploymentManager extends DeploymentManager {

override def processStateDefinitionManager: ProcessStateDefinitionManager = SimpleProcessStateDefinitionManager
Expand Down
@@ -1,19 +1,8 @@
package pl.touk.nussknacker.engine.api.deployment

import pl.touk.nussknacker.engine.api.ProcessVersion
import pl.touk.nussknacker.engine.api.deployment.inconsistency.InconsistentStateDetector
import pl.touk.nussknacker.engine.api.process.{ProcessIdWithName, ProcessName}
import pl.touk.nussknacker.engine.api.test.ScenarioTestData
import pl.touk.nussknacker.engine.canonicalgraph.CanonicalProcess
import pl.touk.nussknacker.engine.deployment.{
CustomActionDefinition,
CustomActionResult,
DeploymentData,
DeploymentId,
ExternalDeploymentId,
User
}
import pl.touk.nussknacker.engine.testmode.TestProcess.TestResults
import pl.touk.nussknacker.engine.deployment.CustomActionDefinition

import scala.concurrent.ExecutionContext.Implicits._
import scala.concurrent.Future
Expand Down
@@ -1,6 +1,5 @@
package pl.touk.nussknacker.engine.api.deployment

import pl.touk.nussknacker.engine.api.deployment.ProcessActionType.ProcessActionType
import pl.touk.nussknacker.engine.api.deployment.StateStatus.StatusName

import java.net.URI
Expand All @@ -21,14 +20,14 @@ import java.net.URI
*/
class OverridingProcessStateDefinitionManager(
delegate: ProcessStateDefinitionManager,
statusActionsPF: PartialFunction[StateStatus, List[ProcessActionType]] = PartialFunction.empty,
statusActionsPF: PartialFunction[StateStatus, List[ScenarioActionName]] = PartialFunction.empty,
statusIconsPF: PartialFunction[StateStatus, URI] = PartialFunction.empty,
statusTooltipsPF: PartialFunction[StateStatus, String] = PartialFunction.empty,
statusDescriptionsPF: PartialFunction[StateStatus, String] = PartialFunction.empty,
customStateDefinitions: Map[StatusName, StateDefinitionDetails] = Map.empty
) extends ProcessStateDefinitionManager {

override def statusActions(stateStatus: StateStatus): List[ProcessActionType] =
override def statusActions(stateStatus: StateStatus): List[ScenarioActionName] =
statusActionsPF.applyOrElse(stateStatus, delegate.statusActions)

override def statusIcon(stateStatus: StateStatus): URI =
Expand Down
@@ -1,6 +1,5 @@
package pl.touk.nussknacker.engine.api.deployment

import pl.touk.nussknacker.engine.api.deployment.ProcessActionType.ProcessActionType
import pl.touk.nussknacker.engine.api.deployment.StateStatus.StatusName

import java.net.URI
Expand Down Expand Up @@ -40,7 +39,7 @@ trait ProcessStateDefinitionManager {
/**
* Allowed transitions between states.
*/
def statusActions(stateStatus: StateStatus): List[ProcessActionType]
def statusActions(stateStatus: StateStatus): List[ScenarioActionName]

/**
* Enhances raw [[StateStatus]] with scenario properties, including deployment info.
Expand Down
@@ -1,7 +1,7 @@
package pl.touk.nussknacker.engine.api.deployment

import pl.touk.nussknacker.engine.api.ProcessVersion
import pl.touk.nussknacker.engine.api.process.{ProcessId, ProcessName}
import pl.touk.nussknacker.engine.api.process.ProcessId
import pl.touk.nussknacker.engine.canonicalgraph.CanonicalProcess
import pl.touk.nussknacker.engine.deployment.DeploymentData

Expand Down
Expand Up @@ -3,7 +3,7 @@ package pl.touk.nussknacker.engine.api.deployment.inconsistency
import com.typesafe.scalalogging.LazyLogging
import pl.touk.nussknacker.engine.api.deployment.simple.SimpleStateStatus
import pl.touk.nussknacker.engine.api.deployment.simple.SimpleStateStatus.ProblemStateStatus
import pl.touk.nussknacker.engine.api.deployment.{ProcessAction, ProcessActionState, ProcessActionType, StatusDetails}
import pl.touk.nussknacker.engine.api.deployment.{ProcessAction, ProcessActionState, ScenarioActionName, StatusDetails}
import pl.touk.nussknacker.engine.deployment.DeploymentId

object InconsistentStateDetector extends InconsistentStateDetector
Expand All @@ -17,13 +17,13 @@ class InconsistentStateDetector extends LazyLogging {
case (Right(Some(state)), _) if state.status == SimpleStateStatus.Restarting =>
handleRestartingState(state, lastStateAction)
case (Right(statusDetailsOpt), Some(action))
if action.actionType == ProcessActionType.Deploy && action.state == ProcessActionState.ExecutionFinished =>
if action.actionName == ScenarioActionName.Deploy && action.state == ProcessActionState.ExecutionFinished =>
handleLastActionFinishedDeploy(statusDetailsOpt, action)
case (Right(statusDetailsOpt), Some(action)) if action.actionType == ProcessActionType.Deploy =>
case (Right(statusDetailsOpt), Some(action)) if action.actionName == ScenarioActionName.Deploy =>
handleLastActionDeploy(statusDetailsOpt, action)
case (Right(Some(state)), _) if isFollowingDeployStatus(state) =>
handleFollowingDeployState(state, lastStateAction)
case (Right(statusDetailsOpt), Some(action)) if action.actionType == ProcessActionType.Cancel =>
case (Right(statusDetailsOpt), Some(action)) if action.actionName == ScenarioActionName.Cancel =>
handleCanceledState(statusDetailsOpt)
case (Right(Some(state)), _) => handleState(state, lastStateAction)
case (Right(None), Some(a)) => StatusDetails(SimpleStateStatus.NotDeployed, Some(DeploymentId.fromActionId(a.id)))
Expand Down Expand Up @@ -77,8 +77,8 @@ class InconsistentStateDetector extends LazyLogging {
lastStateAction: Option[ProcessAction]
): StatusDetails =
lastStateAction match {
case Some(action) if action.actionType.equals(ProcessActionType.Deploy) => statusDetails
case _ => handleState(statusDetails, lastStateAction)
case Some(action) if action.actionName == ScenarioActionName.Deploy => statusDetails
case _ => handleState(statusDetails, lastStateAction)
}

// This method handles some corner cases for following deploy state mismatch last action version
Expand All @@ -87,7 +87,7 @@ class InconsistentStateDetector extends LazyLogging {
lastStateAction: Option[ProcessAction]
): StatusDetails =
lastStateAction match {
case Some(action) if !action.actionType.equals(ProcessActionType.Deploy) =>
case Some(action) if action.actionName != ScenarioActionName.Deploy =>
statusDetails.copy(status = ProblemStateStatus.shouldNotBeRunning(true))
case Some(_) =>
statusDetails
Expand Down
@@ -1,12 +1,13 @@
package pl.touk.nussknacker.engine.api.deployment.simple

import pl.touk.nussknacker.engine.api.deployment.ProcessActionType.{DefaultActions, ProcessActionType}
import pl.touk.nussknacker.engine.api.deployment.ScenarioActionName.DefaultActions
import pl.touk.nussknacker.engine.api.deployment.StateStatus.StatusName
import pl.touk.nussknacker.engine.api.deployment.simple.SimpleStateStatus.ProblemStateStatus._
import pl.touk.nussknacker.engine.api.deployment.simple.SimpleStateStatus.{ProblemStateStatus, statusActionsPF}
import pl.touk.nussknacker.engine.api.deployment.{
ProcessState,
ProcessStateDefinitionManager,
ScenarioActionName,
StateDefinitionDetails,
StateStatus,
StatusDetails
Expand All @@ -19,7 +20,7 @@ import pl.touk.nussknacker.engine.api.deployment.{
*/
object SimpleProcessStateDefinitionManager extends ProcessStateDefinitionManager {

override def statusActions(stateStatus: StateStatus): List[ProcessActionType] =
override def statusActions(stateStatus: StateStatus): List[ScenarioActionName] =
statusActionsPF.applyOrElse(stateStatus, (_: StateStatus) => DefaultActions)

override def statusDescription(stateStatus: StateStatus): String = stateStatus match {
Expand Down
@@ -1,18 +1,16 @@
package pl.touk.nussknacker.engine.api.deployment.simple

import pl.touk.nussknacker.engine.api.deployment
import pl.touk.nussknacker.engine.api.deployment.ProcessActionType.ProcessActionType
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.{ProcessActionType, StateDefinitionDetails, StateStatus}
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[ProcessActionType] = defaultActions)
final case class ProblemStateStatus(description: String, allowedActions: List[ScenarioActionName] = defaultActions)
extends StateStatus {
override def name: StatusName = ProblemStateStatus.name
}
Expand All @@ -24,15 +22,15 @@ object SimpleStateStatus {

val icon: URI = URI.create("/assets/states/error.svg")
val defaultDescription = "There are some problems with scenario."
val defaultActions: List[deployment.ProcessActionType.Value] =
List(ProcessActionType.Deploy, ProcessActionType.Cancel)
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(ProcessActionType.Cancel))
ProblemStateStatus("Archived scenario should be canceled.", List(ScenarioActionName.Cancel))

val FailedToGet: ProblemStateStatus =
ProblemStateStatus(s"Failed to get a state of the scenario.")
Expand Down Expand Up @@ -63,7 +61,7 @@ object SimpleStateStatus {
ProblemStateStatus("Scenario state error - no actions found.")

val MultipleJobsRunning: ProblemStateStatus =
ProblemStateStatus("More than one deployment is running.", List(ProcessActionType.Cancel))
ProblemStateStatus("More than one deployment is running.", List(ScenarioActionName.Cancel))

}

Expand All @@ -82,17 +80,18 @@ object SimpleStateStatus {
status
)

val statusActionsPF: PartialFunction[StateStatus, List[ProcessActionType]] = {
val statusActionsPF: PartialFunction[StateStatus, List[ScenarioActionName]] = {
case SimpleStateStatus.NotDeployed =>
List(ProcessActionType.Deploy, ProcessActionType.Archive, ProcessActionType.Rename)
case SimpleStateStatus.DuringDeploy => List(ProcessActionType.Deploy, ProcessActionType.Cancel)
case SimpleStateStatus.Running => List(ProcessActionType.Cancel, ProcessActionType.Pause, ProcessActionType.Deploy)
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(ProcessActionType.Deploy, ProcessActionType.Archive, ProcessActionType.Rename)
case SimpleStateStatus.Restarting => List(ProcessActionType.Deploy, ProcessActionType.Cancel)
List(ScenarioActionName.Deploy, ScenarioActionName.Archive, ScenarioActionName.Rename)
case SimpleStateStatus.Restarting => List(ScenarioActionName.Deploy, ScenarioActionName.Cancel)
case SimpleStateStatus.Finished =>
List(ProcessActionType.Deploy, ProcessActionType.Archive, ProcessActionType.Rename)
case SimpleStateStatus.DuringCancel => List(ProcessActionType.Deploy, ProcessActionType.Cancel)
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
Expand Down
Expand Up @@ -28,9 +28,9 @@ class DeploymentManagerStub extends BaseDeploymentManager with StubbingCommands
lastStateAction: Option[ProcessAction]
): Future[ProcessState] = {
val lastStateActionStatus = lastStateAction match {
case Some(action) if action.actionType.equals(ProcessActionType.Deploy) =>
case Some(action) if action.actionName == ScenarioActionName.Deploy =>
SimpleStateStatus.Running
case Some(action) if action.actionType.equals(ProcessActionType.Cancel) =>
case Some(action) if action.actionName == ScenarioActionName.Cancel =>
SimpleStateStatus.Canceled
case _ =>
SimpleStateStatus.NotDeployed
Expand Down
Expand Up @@ -2,7 +2,6 @@ package pl.touk.nussknacker.engine.api.deployment

import org.scalatest.funsuite.AnyFunSuite
import org.scalatest.matchers.should.Matchers
import pl.touk.nussknacker.engine.api.deployment.ProcessActionType.ProcessActionType
import pl.touk.nussknacker.engine.api.deployment.StateDefinitionDetails.UnknownIcon
import pl.touk.nussknacker.engine.api.deployment.StateStatus.StatusName

Expand All @@ -28,7 +27,7 @@ class OverridingProcessStateDefinitionManagerTest extends AnyFunSuite with Match
)
)

override def statusActions(stateStatus: StateStatus): List[ProcessActionType] = Nil
override def statusActions(stateStatus: StateStatus): List[ScenarioActionName] = Nil
}

test("should combine delegate state definitions with custom overrides") {
Expand Down
Expand Up @@ -15,17 +15,17 @@ class SimpleProcessStateSpec extends AnyFunSpec with Matchers with Inside {

it("scenario state should be during deploy") {
val state = createProcessState(SimpleStateStatus.DuringDeploy)
state.allowedActions shouldBe List(ProcessActionType.Deploy, ProcessActionType.Cancel)
state.allowedActions shouldBe List(ScenarioActionName.Deploy, ScenarioActionName.Cancel)
}

it("scenario state should be running") {
val state = createProcessState(SimpleStateStatus.Running)
state.allowedActions shouldBe List(ProcessActionType.Cancel, ProcessActionType.Pause, ProcessActionType.Deploy)
state.allowedActions shouldBe List(ScenarioActionName.Cancel, ScenarioActionName.Pause, ScenarioActionName.Deploy)
}

it("scenario state should be finished") {
val state = createProcessState(SimpleStateStatus.Finished)
state.allowedActions shouldBe List(ProcessActionType.Deploy, ProcessActionType.Archive, ProcessActionType.Rename)
state.allowedActions shouldBe List(ScenarioActionName.Deploy, ScenarioActionName.Archive, ScenarioActionName.Rename)
}

}
@@ -1,7 +1,7 @@
package pl.touk.nussknacker.ui.listener

import pl.touk.nussknacker.engine.api.deployment.ProcessActionId
import pl.touk.nussknacker.engine.api.deployment.ProcessActionType.ProcessActionType
import pl.touk.nussknacker.engine.api.deployment.ScenarioActionName
import pl.touk.nussknacker.engine.api.process.{ProcessId, ProcessName, VersionId}

import java.time.Instant
Expand All @@ -27,7 +27,7 @@ object ProcessChangeEvent {
version: VersionId,
deploymentComment: Option[Comment],
deployedAt: Instant,
action: ProcessActionType
actionName: ScenarioActionName
) extends ProcessChangeEvent

final case class OnDeployActionFailed(processId: ProcessId, reason: Throwable) extends ProcessChangeEvent
Expand Down

0 comments on commit 4800d99

Please sign in to comment.