86 lines
3.2 KiB
Markdown
86 lines
3.2 KiB
Markdown
# Process Manager OpenRPC Example
|
|
|
|
This example demonstrates how to use the Process Manager OpenRPC interface to interact with the process manager. It provides a complete working example of both server and client implementations, with a mock process manager for testing purposes.
|
|
|
|
## Overview
|
|
|
|
The example includes:
|
|
|
|
1. A server that exposes the process manager functionality via OpenRPC over a Unix socket
|
|
2. A client that connects to the server and performs various operations
|
|
3. A mock process manager implementation for testing without requiring actual processes
|
|
|
|
## Structure
|
|
|
|
- `main.go`: The main entry point that runs both the server and client in the same process
|
|
- `mock_processmanager.go`: A mock implementation of the `ProcessManagerInterface` that simulates process operations
|
|
- `example_client.go`: Client implementation demonstrating how to use the OpenRPC client to interact with the process manager
|
|
|
|
## How to Run
|
|
|
|
```bash
|
|
# From the heroagent root directory
|
|
go run ./pkg/processmanager/examples/openrpc
|
|
```
|
|
|
|
The example will:
|
|
1. Start a server using a Unix socket at `/tmp/process-manager.sock`
|
|
2. Run a series of client operations against the server
|
|
3. Display the results of each operation
|
|
4. Clean up and shut down when complete
|
|
|
|
## What It Demonstrates
|
|
|
|
This example shows:
|
|
|
|
1. How to initialize and start an OpenRPC server for the process manager
|
|
2. How to create and use an OpenRPC client to interact with the process manager
|
|
3. How to perform common operations like:
|
|
- Starting a process (`StartProcess`)
|
|
- Getting process status (`GetProcessStatus`)
|
|
- Listing all processes (`ListProcesses`)
|
|
- Getting process logs (`GetProcessLogs`)
|
|
- Restarting a process (`RestartProcess`)
|
|
- Stopping a process (`StopProcess`)
|
|
- Deleting a process (`DeleteProcess`)
|
|
4. How to handle the response types returned by each operation
|
|
5. Proper error handling for RPC operations
|
|
|
|
## Notes
|
|
|
|
- This example uses a mock process manager implementation for demonstration purposes
|
|
- In a real application, you would use the actual process manager implementation
|
|
- The server and client run in the same process for simplicity, but they could be in separate processes
|
|
- The Unix socket communication can be replaced with other transport mechanisms if needed
|
|
|
|
## Implementation Details
|
|
|
|
### Server
|
|
|
|
The server is implemented using the `openrpc.Server` type, which wraps the OpenRPC manager and Unix socket server. It:
|
|
|
|
1. Creates a Unix socket at the specified path
|
|
2. Registers handlers for each RPC method
|
|
3. Authenticates requests using a secret
|
|
4. Marshals/unmarshals JSON-RPC requests and responses
|
|
|
|
### Client
|
|
|
|
The client is implemented using the `openrpc.Client` type, which provides methods for each operation. It:
|
|
|
|
1. Connects to the Unix socket
|
|
2. Sends JSON-RPC requests with the appropriate parameters
|
|
3. Handles authentication using the secret
|
|
4. Parses the responses into appropriate result types
|
|
|
|
### Mock Process Manager
|
|
|
|
The mock process manager implements the `interfaces.ProcessManagerInterface` and simulates:
|
|
|
|
1. Process creation and management
|
|
2. Status tracking
|
|
3. Log collection
|
|
4. Error handling
|
|
|
|
This allows testing the OpenRPC interface without requiring actual processes to be run.
|