4.0 KiB
Network Resurrector
Everything should be manageable remotely—even powered-off servers. This need led to the creation of Network Resurrector, a tool I developed to wake up machines that don't need to be powered on at all times.
The system consists of five core components that provide essential functionality. Additional components can be integrated to enhance features like notifications and logging.
Core Components
Frontend
The frontend is a React.js-based web application that provides a user-friendly interface for managing the system.
API
The API is a .NET 8 REST API responsible for handling communication between the frontend, database, and server components. It facilitates data exchange and enables actions such as waking or shutting down machines.
Server
The server component is a .NET 8 service that performs Wake-on-LAN, Ping, and Shutdown actions for machines within its network or any accessible network.
Agent
The agent is a .NET 8 service that can execute various power-related actions on the host machine, including:
- Shutdown
- Restart
- Sleep
- Logout
- Lock
These actions can be executed immediately or scheduled with a delay, allowing cancellation before execution.
How It Works
- A user triggers an action (e.g., wake or shutdown) via the UI.
- The frontend sends the request to the API.
- The API determines whether the Agent or Server should execute the action and forwards the request.
- The responsible component executes the action and returns the result.
The agent can be installed on multiple machines as needed.
Tuitio
Tuitio is my personal identity server, handling user authentication and request authorization. For more details, refer to the Tuitio documentation.
All communication between the core components is done via HTTP.
Secondary Components
- NATS Streaming: Publishes notifications regarding executed actions.
- Correo: Handles email notifications.
- Seq: Collects and displays system logs.
Notification System
The notification system is designed to inform users about system actions (e.g., wake, shutdown). Notifications are configurable and follow a customizable template structure, as shown below:
{
"To": [ "user@homelab.com" ],
"Subject": "Network Resurrector: Machine {MACHINE_NAME} has been powered on. Status: {ACTION_STATUS}",
"Body": "Hello,{NEWLINE:2}Network Resurrector processed a command to start machine {MACHINE_FULLNAME} with IP {MACHINE_IP} at {SYSTEM_DATETIME}.{NEWLINE}The assigned performer for this action was {ACTION_PERFORMER}.{NEWLINE}Action status: {ACTION_STATUS}{NEWLINE:2}Best regards,{NEWLINE}Network Resurrector Notification System."
}
Placeholders
Users can customize notification texts using the following placeholders:
{MACHINE_NAME}
{MACHINE_FULLNAME}
{MACHINE_IP}
{ACTION_STATUS}
{ACTION_PERFORMER}
{SYSTEM_DATETIME}
{ERROR_MESSAGE}
{NEWLINE}
(Adds a single newline){NEWLINE:x}
(Addsx
new lines)
Database
Currently, Microsoft SQL Server is the only supported database. Future versions will include support for PostgreSQL and SQLite.
Logging
Logging is managed with Serilog, configurable via appsettings.json
. Logs can be stored in:
- SQL Server
- Seq
These logging destinations can be enabled or disabled based on requirements. If console logging is sufficient, all additional logging can be disabled.
Configuration Example
"Logs": {
"SqlServer": {
"Enabled": false,
"Connection": "Server=<server>;Database=<database>;User Id=<user>;Password=<password>;"
},
"Seq": {
"Enabled": false,
"Url": "",
"ApiKey": ""
}
}
Hosting
All components of Network Resurrector are built using cross-platform technologies, allowing deployment in any environment that supports them.