Class NodeGroupIIAR
- All Implemented Interfaces:
com.scivicslab.pojoactor.core.CallableByActionName, AutoCloseable
NodeGroupInterpreter instances.
This class provides a concrete implementation of IIActorRef
specifically for NodeGroupInterpreter objects. It manages groups of infrastructure
nodes and can apply actions to all nodes in a group using wildcard patterns.
NodeGroupInterpreter extends Interpreter, so this class can execute main workflows that orchestrate multiple nodes.
Supported actions:
Workflow actions (from Interpreter):
runWorkflow- Loads and runs a workflow filereadYaml- Reads a YAML workflow definitionrunUntilEnd- Executes the workflow until completion
NodeGroup actions:
hasInventory- Returns true if inventory is loaded (for conditional branching)createNodeActors- Creates child actors for all nodes in a specified groupapply- Applies an action to child actors matching a wildcard patternhasAccumulator- Returns true if accumulator exists (for idempotent workflows)createAccumulator- Creates an accumulator for result collectiongetAccumulatorSummary- Gets the collected results
Node Actor Hierarchy:
When createNodeActors is called, it creates a parent-child relationship:
NodeGroup (parent) ├─ node-web-01 (child NodeIIAR) ├─ node-web-02 (child NodeIIAR) └─ node-db-01 (child NodeIIAR)
Example YAML Workflow:
name: setup-nodegroup
steps:
# Step 1: Create node actors
- states: [0, 1]
actions:
- actor: nodeGroup
method: createNodeActors
arguments: ["web-servers"]
# Step 2: Run workflow on all nodes (load and execute in one step)
- states: [1, end]
actions:
- actor: nodeGroup
method: apply
arguments: ['{"actor": "node-*", "method": "runWorkflow", "arguments": ["deploy.yaml"]}']
- Author:
- devteam@scivics-lab.com
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static classHelper class to hold verification results for a step. -
Field Summary
FieldsFields inherited from class com.scivicslab.pojoactor.core.ActorRef
actorName, actorSystem, object -
Constructor Summary
ConstructorsConstructorDescriptionNodeGroupIIAR(String actorName, NodeGroupInterpreter object) Constructs a new NodeGroupIIAR with the specified actor name and nodeGroupInterpreter object.NodeGroupIIAR(String actorName, NodeGroupInterpreter object, com.scivicslab.pojoactor.workflow.IIActorSystem system) Constructs a new NodeGroupIIAR with the specified actor name, nodeGroupInterpreter object, and actor system. -
Method Summary
Modifier and TypeMethodDescriptionprivate com.scivicslab.pojoactor.core.ActionResultApplies an action to child actors matching a wildcard pattern.com.scivicslab.pojoactor.core.ActionResultcallByActionName(String actionName, String arg) Invokes an action on the node group by name with the given arguments.private intcountOccurrences(String text, String sub) Counts occurrences of a substring in a string.private voidcreateAccumulator(String type) Creates an accumulator as a child actor.private voidcreateNodeActors(String groupName) Creates child node actors for all nodes in the specified group.executeCommandOnAllNodes(String command) Executes a single command on all child node actors.private StringExtracts a single argument from JSON array format.private voidextractSpecialInfo(String message, NodeGroupIIAR.VerifyResult result) Extracts special information from log messages (like document count, cluster health).private List<com.scivicslab.pojoactor.workflow.IIActorRef<?>> findMatchingChildActors(String pattern) Finds child actors matching a wildcard pattern.private StringFormats the status string for a verification result.private com.scivicslab.pojoactor.core.ActionResultGets the summary from the accumulator.private com.scivicslab.pojoactor.core.ActionResulthandleNodeGroupAction(String actionName, String arg) Handles NodeGroup-specific actions.private com.scivicslab.pojoactor.core.ActionResulthandleReadYaml(String arg) private com.scivicslab.pojoactor.core.ActionResulthandleWorkflowAction(String actionName, String arg) Handles workflow-related actions (from Interpreter).private intparseMaxIterations(String arg, int defaultValue) private com.scivicslab.pojoactor.core.ActionResultPrints a summary of the current session's verification results.Methods inherited from class com.scivicslab.pojoactor.core.ActorRef
ask, ask, askNow, clearJsonState, clearPendingMessages, close, createChild, getJsonBoolean, getJsonInt, getJsonString, getJsonString, getName, getNamesOfChildren, getParentName, hasJson, hasJsonState, initLogger, isAlive, json, putJson, setParentName, system, tell, tell, tellNow
-
Field Details
-
logger
-
accumulatorActor
-
-
Constructor Details
-
NodeGroupIIAR
Constructs a new NodeGroupIIAR with the specified actor name and nodeGroupInterpreter object.- Parameters:
actorName- the name of this actorobject- theNodeGroupInterpreterinstance managed by this actor reference
-
NodeGroupIIAR
public NodeGroupIIAR(String actorName, NodeGroupInterpreter object, com.scivicslab.pojoactor.workflow.IIActorSystem system) Constructs a new NodeGroupIIAR with the specified actor name, nodeGroupInterpreter object, and actor system.- Parameters:
actorName- the name of this actorobject- theNodeGroupInterpreterinstance managed by this actor referencesystem- the actor system managing this actor
-
-
Method Details
-
callByActionName
Invokes an action on the node group by name with the given arguments.This method dispatches to specialized handler methods based on the action type:
- Workflow actions:
handleWorkflowAction(String, String) - NodeGroup-specific actions:
handleNodeGroupAction(String, String)
- Specified by:
callByActionNamein interfacecom.scivicslab.pojoactor.core.CallableByActionName- Specified by:
callByActionNamein classcom.scivicslab.pojoactor.workflow.IIActorRef<NodeGroupInterpreter>- Parameters:
actionName- the name of the action to executearg- the argument string (JSON array format)- Returns:
- an
ActionResultindicating success or failure with a message
- Workflow actions:
-
handleWorkflowAction
private com.scivicslab.pojoactor.core.ActionResult handleWorkflowAction(String actionName, String arg) throws InterruptedException, ExecutionException Handles workflow-related actions (from Interpreter).- Parameters:
actionName- the action namearg- the argument string- Returns:
- ActionResult if handled, null if not a workflow action
- Throws:
InterruptedExceptionExecutionException
-
handleNodeGroupAction
private com.scivicslab.pojoactor.core.ActionResult handleNodeGroupAction(String actionName, String arg) throws InterruptedException, ExecutionException Handles NodeGroup-specific actions.- Parameters:
actionName- the action namearg- the argument string- Returns:
- ActionResult if handled, null if not a NodeGroup action
- Throws:
InterruptedExceptionExecutionException
-
handleReadYaml
private com.scivicslab.pojoactor.core.ActionResult handleReadYaml(String arg) throws InterruptedException, ExecutionException -
parseMaxIterations
-
createNodeActors
Creates child node actors for all nodes in the specified group.This method creates Node POJOs using the NodeGroup's inventory, wraps each in a NodeInterpreter (for workflow capabilities), then wraps in a NodeIIAR, and registers them as children of this actor using the parent-child relationship mechanism.
Special handling for "local" group: creates a localhost node without requiring an inventory file. This is useful for development and testing.
- Parameters:
groupName- the name of the group from the inventory file, or "local" for localhost
-
apply
Applies an action to child actors matching a wildcard pattern.This method parses an action definition JSON and executes the specified method on all child actors whose names match the pattern.
Action definition format:
{ "actor": "node-*", // Wildcard pattern for actor names "method": "executeCommand", // Method to call "arguments": ["ls -la"] // Arguments (optional) }Supported wildcard patterns:
*- Matches all child actorsnode-*- Matches actors starting with "node-"*-web- Matches actors ending with "-web"
- Parameters:
actionDef- JSON string defining the action to apply- Returns:
- ActionResult indicating success or failure
-
findMatchingChildActors
private List<com.scivicslab.pojoactor.workflow.IIActorRef<?>> findMatchingChildActors(String pattern) Finds child actors matching a wildcard pattern.- Parameters:
pattern- the wildcard pattern (e.g., "node-*", "*-web", "*")- Returns:
- list of matching child actors
-
executeCommandOnAllNodes
private List<String> executeCommandOnAllNodes(String command) throws ExecutionException, InterruptedException Executes a single command on all child node actors.- Parameters:
command- the command to execute- Returns:
- list of results from each node
- Throws:
ExecutionException- if command execution failsInterruptedException- if the operation is interrupted
-
extractSingleArgument
Extracts a single argument from JSON array format.- Parameters:
arg- the JSON array argument string- Returns:
- the extracted argument
-
createAccumulator
Creates an accumulator as a child actor.If a log store is configured in the NodeGroupInterpreter, creates a LoggingAccumulatorIIAR that also writes to the H2 database.
- Parameters:
type- the accumulator type ("streaming", "buffered", "table", "json")
-
getAccumulatorSummary
Gets the summary from the accumulator.- Returns:
- ActionResult with the summary or error
-
printSessionSummary
Prints a summary of the current session's verification results.Groups results by vertex name (step) and displays a formatted table.
- Returns:
- ActionResult with success status and summary text
-
formatStatus
Formats the status string for a verification result. -
extractSpecialInfo
Extracts special information from log messages (like document count, cluster health). -
countOccurrences
Counts occurrences of a substring in a string.
-