# WingsEvent events

> 22 FeatherPanel plugin events on WingsEvent (22 emitted by the core): the event names, the arguments each listener gets, where they fire and a PHP listener for each.

Source: https://featherpanel.com/docs/plugins/events/wings/

Part of the [plugin events reference](https://featherpanel.com/docs/plugins/events/). Listeners get the payload values as positional arguments in the order shown, cannot cancel the action, and must catch their own exceptions.

## Setup

Import `WingsEvent` in your entry class and register listeners in `processEvents()`:

```php
<?php

namespace App\Addons\myplugin;

use App\App;
use App\Plugins\AppPlugin;
use App\Plugins\PluginEvents;
use App\Plugins\Events\Events\WingsEvent;

class MyPlugin implements AppPlugin
{
    public static function processEvents(PluginEvents $event): void
    {
        $event->on(WingsEvent::onWingsServerError(), function ($serverUuid, $error): void {
            App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:server:error ' . json_encode(['server_uuid' => $serverUuid, 'error' => $error]));
        });
    }

    public static function pluginInstall(): void
    {
    }

    public static function pluginUninstall(): void
    {
    }
}
```

## `WingsEvent::onWingsActivityLogged()`

- Name: `featherpanel:wings:activity:logged`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L151)

Docblock: array activity data. (the emitter passes 5 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `node` | `$node` | not declared |
| 2 | `activities` | `$activities` | not declared |
| 3 | `processed_count` | `$processedCount` | `int` |
| 4 | `error_count` | `$errorCount` | `int` |
| 5 | `errors` | `$errors` | `array` |

When it fires (1 site)

-   [`WingsActivityController::logActivity`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Activity/WingsActivityController.php#L240)[`POST /api/remote/activity`](https://featherpanel.com/docs/api/reference/wings/remote/#post-remote-activity)

```php
$event->on(WingsEvent::onWingsActivityLogged(), function ($node, $activities, $processedCount, $errorCount, $errors): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:activity:logged ' . json_encode(['processed_count' => $processedCount, 'error_count' => $errorCount, 'errors' => $errors]));
});
```

## `WingsEvent::onWingsBackupCompletionReported()`

- Name: `featherpanel:wings:backup:completion:reported`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L134)

Docblock: string backup uuid, array completion data. (the emitter passes 5 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `backup_uuid` | `$backupUuid` | `string` |
| 2 | `backup` | `$backup` | not declared |
| 3 | `server` | `$server` | not declared |
| 4 | `node` | `$node` | not declared |
| 5 | `completion_data` | `$completionData` | not declared |

When it fires (1 site)

-   [`WingsBackupController::reportBackupCompletion`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Backup/WingsBackupController.php#L256)[`POST /api/remote/backups/{backupUuid}`](https://featherpanel.com/docs/api/reference/wings/remote/#post-remote-backups-backupUuid)

```php
$event->on(WingsEvent::onWingsBackupCompletionReported(), function ($backupUuid, $backup, $server, $node, $completionData): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:backup:completion:reported ' . json_encode(['backup_uuid' => $backupUuid]));
});
```

## `WingsEvent::onWingsBackupRestorationReported()`

- Name: `featherpanel:wings:backup:restoration:reported`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L142)

Docblock: string backup uuid, array restoration data. (the emitter passes 5 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `backup_uuid` | `$backupUuid` | `string` |
| 2 | `backup` | `$backup` | not declared |
| 3 | `server` | `$server` | not declared |
| 4 | `node` | `$node` | not declared |
| 5 | `restoration_data` | `$restorationData` | not declared |

When it fires (1 site)

-   [`WingsBackupController::reportBackupRestoration`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Backup/WingsBackupController.php#L349)[`POST /api/remote/backups/{backupUuid}/restore`](https://featherpanel.com/docs/api/reference/wings/remote/#post-remote-backups-backupUuid-restore)

```php
$event->on(WingsEvent::onWingsBackupRestorationReported(), function ($backupUuid, $backup, $server, $node, $restorationData): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:backup:restoration:reported ' . json_encode(['backup_uuid' => $backupUuid]));
});
```

## `WingsEvent::onWingsBackupUploadInfoRetrieved()`

- Name: `featherpanel:wings:backup:upload:info:retrieved`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L126)

Docblock: string backup uuid, array upload info. (the emitter passes 5 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `backup_uuid` | `$backupUuid` | `string` |
| 2 | `backup` | `$backup` | not declared |
| 3 | `server` | `$server` | not declared |
| 4 | `node` | `$node` | not declared |
| 5 | `upload_info` | `$uploadInfo` | `array` |

When it fires (1 site)

-   [`WingsBackupController::getBackupUploadInfo`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Backup/WingsBackupController.php#L145)[`GET /api/remote/backups/{backupUuid}`](https://featherpanel.com/docs/api/reference/wings/remote/#get-remote-backups-backupUuid)

```php
$event->on(WingsEvent::onWingsBackupUploadInfoRetrieved(), function ($backupUuid, $backup, $server, $node, $uploadInfo): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:backup:upload:info:retrieved ' . json_encode(['backup_uuid' => $backupUuid, 'upload_info' => $uploadInfo]));
});
```

## `WingsEvent::onWingsDockerDiskUsageRetrieved()`

- Name: `featherpanel:wings:docker:disk:usage:retrieved`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L36)

Docblock: int node id, array disk usage data. (the emitter passes 3 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `node_id` | `$nodeId` | `int` |
| 2 | `node` | `$node` | not declared |
| 3 | `docker_disk_usage` | `$dockerDiskUsage` | not declared |

When it fires (1 site)

-   [`WingsAdminController::getDockerDiskUsage`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsAdminController.php#L227)[`GET /api/wings/admin/node/{id}/docker/disk`](https://featherpanel.com/docs/api/reference/wings/nodes/#get-wings-admin-node-id-docker-disk)

```php
$event->on(WingsEvent::onWingsDockerDiskUsageRetrieved(), function ($nodeId, $node, $dockerDiskUsage): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:docker:disk:usage:retrieved ' . json_encode(['node_id' => $nodeId]));
});
```

## `WingsEvent::onWingsDockerPruneCompleted()`

- Name: `featherpanel:wings:docker:prune:completed`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L44)

Docblock: int node id, array prune results. (the emitter passes 3 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `node_id` | `$nodeId` | `int` |
| 2 | `node` | `$node` | not declared |
| 3 | `docker_prune` | `$dockerPrune` | not declared |

When it fires (1 site)

-   [`WingsAdminController::getDockerPrune`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsAdminController.php#L298)[`DELETE /api/wings/admin/node/{id}/docker/prune`](https://featherpanel.com/docs/api/reference/wings/nodes/#delete-wings-admin-node-id-docker-prune)

```php
$event->on(WingsEvent::onWingsDockerPruneCompleted(), function ($nodeId, $node, $dockerPrune): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:docker:prune:completed ' . json_encode(['node_id' => $nodeId]));
});
```

## `WingsEvent::onWingsError()`

- Name: `featherpanel:wings:error`
- emitted at 3 sites
- 3 payload shapes
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L169)

Docblock: string error message, array context. (the emitter passes 3 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `error` | `$error` | `string` |
| 2 | `message` | `$message` | `string` |
| 3 | `server_uuid` | `$serverUuid`not at every site | not declared |

| Arguments passed | Emitted from |
| --- | --- |
| `error`, `message`, `server_uuid` | 
`WingsServerInfoController::getServer`

 |
| `error`, `message` | 

`WingsMiddleware::handle`

 |
| `error`, `message`, `token_id` | 

`WingsMiddleware::handle`

 |

When it fires (3 sites)

-   [`WingsServerInfoController::getServer`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Server/WingsServerInfoController.php#L502)[`GET /api/remote/servers/{uuid}`](https://featherpanel.com/docs/api/reference/wings/remote/#get-remote-servers-uuid)
-   [`WingsMiddleware::handle`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Middleware/WingsMiddleware.php#L39) via `emitWings()`
-   [`WingsMiddleware::handle`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Middleware/WingsMiddleware.php#L55) via `emitWings()`

```php
$event->on(WingsEvent::onWingsError(), function ($error, $message, ...$rest): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:error ' . json_encode(['error' => $error, 'message' => $message]));
});
```

## `WingsEvent::onWingsNodeConnectionStatus()`

- Name: `featherpanel:wings:node:connection:status`
- emitted at 3 sites
- 2 payload shapes
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L194)

Docblock: int node id, string status.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `node_id` | `$nodeId` | `null` |
| 2 | `status` | `$status` | `string` |

| Arguments passed | Emitted from |
| --- | --- |
| `node_id`, `status` | 
`WingsHealthController::getHealth`

`WingsMiddleware::handle`

 |
| `node_id`, `status`, `token_id` | 

`WingsMiddleware::handle`

 |

When it fires (3 sites)

-   [`WingsHealthController::getHealth`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsHealthController.php#L61)[`GET /api/remote/health`](https://featherpanel.com/docs/api/reference/wings/remote/#get-remote-health)
-   [`WingsMiddleware::handle`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Middleware/WingsMiddleware.php#L60) via `emitWings()`
-   [`WingsMiddleware::handle`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Middleware/WingsMiddleware.php#L69) via `emitWings()`

```php
$event->on(WingsEvent::onWingsNodeConnectionStatus(), function ($nodeId, $status, ...$rest): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:node:connection:status ' . json_encode(['status' => $status]));
});
```

## `WingsEvent::onWingsNodeError()`

- Name: `featherpanel:wings:node:error`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L185)

Docblock: int node id, string error message.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `node_id` | `$nodeId` | `null` |
| 2 | `error` | `$error` | `string` |

When it fires (1 site)

-   [`WingsHealthController::getHealth`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsHealthController.php#L43)[`GET /api/remote/health`](https://featherpanel.com/docs/api/reference/wings/remote/#get-remote-health)

```php
$event->on(WingsEvent::onWingsNodeError(), function ($nodeId, $error): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:node:error ' . json_encode(['error' => $error]));
});
```

## `WingsEvent::onWingsNodeIpsRetrieved()`

- Name: `featherpanel:wings:node:ips:retrieved`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L52)

Docblock: int node id, array ip addresses. (the emitter passes 3 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `node_id` | `$nodeId` | `int` |
| 2 | `node` | `$node` | not declared |
| 3 | `ips` | `$ips` | not declared |

When it fires (1 site)

-   [`WingsAdminController::getIps`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsAdminController.php#L377)[`GET /api/wings/admin/node/{id}/ips`](https://featherpanel.com/docs/api/reference/wings/nodes/#get-wings-admin-node-id-ips)

```php
$event->on(WingsEvent::onWingsNodeIpsRetrieved(), function ($nodeId, $node, $ips): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:node:ips:retrieved ' . json_encode(['node_id' => $nodeId]));
});
```

## `WingsEvent::onWingsNodeSystemInfoRetrieved()`

- Name: `featherpanel:wings:node:system:info:retrieved`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L60)

Docblock: int node id, array system info. (the emitter passes 3 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `node_id` | `$nodeId` | `int` |
| 2 | `node` | `$node` | not declared |
| 3 | `system_info` | `$systemInfo` | not declared |

When it fires (1 site)

-   [`WingsAdminController::system`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsAdminController.php#L463)[`GET /api/wings/admin/node/{id}/system`](https://featherpanel.com/docs/api/reference/wings/nodes/#get-wings-admin-node-id-system)

```php
$event->on(WingsEvent::onWingsNodeSystemInfoRetrieved(), function ($nodeId, $node, $systemInfo): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:node:system:info:retrieved ' . json_encode(['node_id' => $nodeId]));
});
```

## `WingsEvent::onWingsNodeUtilizationRetrieved()`

- Name: `featherpanel:wings:node:utilization:retrieved`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L28)

Docblock: int node id, array utilization data. (the emitter passes 3 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `node_id` | `$nodeId` | `int` |
| 2 | `node` | `$node` | not declared |
| 3 | `utilization` | `$utilization` | not declared |

When it fires (1 site)

-   [`WingsAdminController::utilization`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsAdminController.php#L156)[`GET /api/wings/admin/node/{id}/utilization`](https://featherpanel.com/docs/api/reference/wings/nodes/#get-wings-admin-node-id-utilization)

```php
$event->on(WingsEvent::onWingsNodeUtilizationRetrieved(), function ($nodeId, $node, $utilization): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:node:utilization:retrieved ' . json_encode(['node_id' => $nodeId]));
});
```

## `WingsEvent::onWingsServerConnectionStatus()`

- Name: `featherpanel:wings:server:connection:status`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L202)

Docblock: string server uuid, string status. (the emitter passes 3 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `server_uuid` | `$serverUuid` | `string` |
| 2 | `status` | `$status` | not declared |
| 3 | `node_id` | `$nodeId` | not declared |

When it fires (1 site)

-   [`WingsServerStatusController::updateContainerStatus`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Server/WingsServerStatusController.php#L244)[`POST /api/remote/servers/{uuid}/container/status`](https://featherpanel.com/docs/api/reference/wings/remote/#post-remote-servers-uuid-container-status)

```php
$event->on(WingsEvent::onWingsServerConnectionStatus(), function ($serverUuid, $status, $nodeId): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:server:connection:status ' . json_encode(['server_uuid' => $serverUuid]));
});
```

## `WingsEvent::onWingsServerError()`

- Name: `featherpanel:wings:server:error`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L177)

Docblock: string server uuid, string error message.

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `server_uuid` | `$serverUuid` | `string`from docblock |
| 2 | `error` | `$error` | `string`from docblock |

When it fires (1 site)

-   [`WingsServerInfoController::getServer`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Server/WingsServerInfoController.php#L498)[`GET /api/remote/servers/{uuid}`](https://featherpanel.com/docs/api/reference/wings/remote/#get-remote-servers-uuid)

```php
$event->on(WingsEvent::onWingsServerError(), function ($serverUuid, $error): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:server:error ' . json_encode(['server_uuid' => $serverUuid, 'error' => $error]));
});
```

## `WingsEvent::onWingsServerInfoRetrieved()`

- Name: `featherpanel:wings:server:info:retrieved`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L69)

Docblock: string server uuid, array server info. (the emitter passes 6 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `server_uuid` | `$serverUuid` | not declared |
| 2 | `server` | `$server` | not declared |
| 3 | `node` | `$node` | not declared |
| 4 | `spell` | `$spell` | not declared |
| 5 | `realm` | `$realm` | not declared |
| 6 | `allocation` | `$allocation` | not declared |

When it fires (1 site)

-   [`WingsServerInfoController::getServer`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Server/WingsServerInfoController.php#L515)[`GET /api/remote/servers/{uuid}`](https://featherpanel.com/docs/api/reference/wings/remote/#get-remote-servers-uuid)

```php
$event->on(WingsEvent::onWingsServerInfoRetrieved(), function ($serverUuid, $server, $node, $spell, $realm, $allocation): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:server:info:retrieved');
});
```

## `WingsEvent::onWingsServerInstallCompleted()`

- Name: `featherpanel:wings:server:install:completed`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L85)

Docblock: string server uuid, array install results. (the emitter passes 7 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `server_uuid` | `$serverUuid` | `string` |
| 2 | `server` | `$server` | not declared |
| 3 | `node` | `$node` | not declared |
| 4 | `successful` | `$successful` | `bool` |
| 5 | `reinstall` | `$reinstall` | not declared |
| 6 | `status` | `$status` | `string` |
| 7 | `installed_at` | `$installedAt` | not declared |

When it fires (1 site)

-   [`WingsServerInstallController::postServerInstall`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Server/WingsServerInstallController.php#L262)[`POST /api/remote/servers/{uuid}/install`](https://featherpanel.com/docs/api/reference/wings/remote/#post-remote-servers-uuid-install)

```php
$event->on(WingsEvent::onWingsServerInstallCompleted(), function ($serverUuid, $server, $node, $successful, $reinstall, $status, $installedAt): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:server:install:completed ' . json_encode(['server_uuid' => $serverUuid, 'successful' => $successful, 'status' => $status]));
});
```

## `WingsEvent::onWingsServerInstallRetrieved()`

- Name: `featherpanel:wings:server:install:retrieved`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L77)

Docblock: string server uuid, array install data. (the emitter passes 5 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `server_uuid` | `$serverUuid` | `string` |
| 2 | `server` | `$server` | not declared |
| 3 | `node` | `$node` | not declared |
| 4 | `spell` | `$spell` | not declared |
| 5 | `install_config` | `$installConfig` | `array` |

When it fires (1 site)

-   [`WingsServerInstallController::getServerInstall`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Server/WingsServerInstallController.php#L153)[`GET /api/remote/servers/{uuid}/install`](https://featherpanel.com/docs/api/reference/wings/remote/#get-remote-servers-uuid-install)

```php
$event->on(WingsEvent::onWingsServerInstallRetrieved(), function ($serverUuid, $server, $node, $spell, $installConfig): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:server:install:retrieved ' . json_encode(['server_uuid' => $serverUuid, 'install_config' => $installConfig]));
});
```

## `WingsEvent::onWingsServerStatusRetrieved()`

- Name: `featherpanel:wings:server:status:retrieved`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L117)

Docblock: string server uuid, array status data. (the emitter passes 4 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `server_uuid` | `$serverUuid` | `string` |
| 2 | `server` | `$server` | not declared |
| 3 | `node` | `$node` | not declared |
| 4 | `state` | `$state` | not declared |

When it fires (1 site)

-   [`WingsServerStatusController::getContainerStatus`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Server/WingsServerStatusController.php#L312)

```php
$event->on(WingsEvent::onWingsServerStatusRetrieved(), function ($serverUuid, $server, $node, $state): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:server:status:retrieved ' . json_encode(['server_uuid' => $serverUuid]));
});
```

## `WingsEvent::onWingsServerStatusUpdated()`

- Name: `featherpanel:wings:server:status:updated`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L109)

Docblock: string server uuid, array status data. (the emitter passes 6 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `server_uuid` | `$serverUuid` | `string` |
| 2 | `server` | `$server` | not declared |
| 3 | `node` | `$node` | not declared |
| 4 | `old_state` | `$oldState` | not declared |
| 5 | `new_state` | `$newState` | not declared |
| 6 | `update_data` | `$updateData` | `array` |

When it fires (1 site)

-   [`WingsServerStatusController::updateContainerStatus`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Server/WingsServerStatusController.php#L232)[`POST /api/remote/servers/{uuid}/container/status`](https://featherpanel.com/docs/api/reference/wings/remote/#post-remote-servers-uuid-container-status)

```php
$event->on(WingsEvent::onWingsServerStatusUpdated(), function ($serverUuid, $server, $node, $oldState, $newState, $updateData): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:server:status:updated ' . json_encode(['server_uuid' => $serverUuid, 'update_data' => $updateData]));
});
```

## `WingsEvent::onWingsRemoteServersRetrieved()`

- Name: `featherpanel:wings:servers:remote:retrieved`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L93)

Docblock: array servers list. (the emitter passes 4 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `node` | `$node` | not declared |
| 2 | `servers` | `$servers` | not declared |
| 3 | `pagination` | `$pagination` | `array` |
| 4 | `total` | `$total` | not declared |

When it fires (1 site)

-   [`WingsServerListController::getRemoteServers`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Server/WingsServerListController.php#L446)[`GET /api/remote/servers`](https://featherpanel.com/docs/api/reference/wings/remote/#get-remote-servers)

```php
$event->on(WingsEvent::onWingsRemoteServersRetrieved(), function ($node, $servers, $pagination, $total): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:servers:remote:retrieved ' . json_encode(['pagination' => $pagination]));
});
```

## `WingsEvent::onWingsServersResetCompleted()`

- Name: `featherpanel:wings:servers:reset:completed`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L101)

Docblock: array reset results. (the emitter passes 3 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `node` | `$node` | not declared |
| 2 | `reset_result` | `$resetResult` | not declared |
| 3 | `queued_auto_starts` | `$queuedAutoStarts` | not declared |

When it fires (1 site)

-   [`WingsServersResetController::resetServers`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Server/WingsServersResetController.php#L87)[`POST /api/remote/servers/reset`](https://featherpanel.com/docs/api/reference/wings/remote/#post-remote-servers-reset)

```php
$event->on(WingsEvent::onWingsServersResetCompleted(), function ($node, $resetResult, $queuedAutoStarts): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:servers:reset:completed');
});
```

## `WingsEvent::onWingsSftpAuthentication()`

- Name: `featherpanel:wings:sftp:authentication`
- emitted at 1 site
- Cancel or modify: no
- [definition](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Plugins/Events/Events/WingsEvent.php#L160)

Docblock: array auth data. (the emitter passes 7 values, see the table)

| # | Payload key | Listener parameter | Type |
| --- | --- | --- | --- |
| 1 | `server` | `$server` | not declared |
| 2 | `user` | `$user` | not declared |
| 3 | `permissions` | `$permissions` | not declared |
| 4 | `auth_type` | `$authType` | not declared |
| 5 | `ip` | `$ip` | not declared |
| 6 | `session_id` | `$sessionId` | not declared |
| 7 | `client_version` | `$clientVersion` | not declared |

When it fires (1 site)

-   [`SftpAuthController::authenticate`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Sftp/SftpAuthController.php#L175)[`POST /api/remote/sftp/auth`](https://featherpanel.com/docs/api/reference/wings/remote/#post-remote-sftp-auth)

```php
$event->on(WingsEvent::onWingsSftpAuthentication(), function ($server, $user, $permissions, $authType, $ip, $sessionId, $clientVersion): void {
    App::getInstance(true)->getLogger()->info('[myplugin] featherpanel:wings:sftp:authentication');
});
```
