Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion user-creatable-servers/README.md
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
# User Creatable Servers (by Boy132)
# User Creatable Servers (by Boy132 & contributions from CER06)

Allow users to create their own servers within defined resource limits set by administrators.

Expand All@@ -10,6 +10,8 @@ Add the deployment tag (`user_creatable_servers` by default) to the nodes that s

- Users can create servers without admin intervention
- Configurable resource limits per user (CPU, RAM, disk, etc.)
- Configurable default CPU, memory, and disk allocations automatically assigned to newly created users
- Optional aggregate CPU, memory, and disk caps across all UCS users (`0` is unlimited and deployment remains limited by node capacity)
- Admin management of user resource allocations
- Resource usage overview widget for users
- Integration with existing server management
8 changes: 8 additions & 0 deletions user-creatable-servers/config/user-creatable-servers.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,14 @@
'allocation_limit' => (int) env('UCS_DEFAULT_ALLOCATION_LIMIT', 0),
'backup_limit' => (int) env('UCS_DEFAULT_BACKUP_LIMIT', 0),

'default_user_cpu' => (int) env('UCS_DEFAULT_USER_CPU', 0),
'default_user_memory' => (int) env('UCS_DEFAULT_USER_MEMORY', 0),
'default_user_disk' => (int) env('UCS_DEFAULT_USER_DISK', 0),

'max_cpu' => (int) env('UCS_MAX_CPU', 0),
'max_memory' => (int) env('UCS_MAX_MEMORY', 0),
'max_disk' => (int) env('UCS_MAX_DISK', 0),

'can_users_update_servers' => (bool) env('UCS_CAN_USERS_UPDATE_SERVERS', true),
'can_users_delete_servers' => (bool) env('UCS_CAN_USERS_DELETE_SERVERS', false),

Expand Down
1 change: 1 addition & 0 deletions user-creatable-servers/lang/de/strings.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,6 +26,7 @@
'notifications' => [
'server_resources_updated' => 'Server Ressourcen Limits aktualisiert',
'might_need_restart' => 'Um die neuen Ressourcen Limits vollständig zu nutzen, ist möglicherweise ein Neustart des Servers erforderlich.',
'resource_limit_reached' => 'Die angeforderten Ressourcen überschreiten die verfügbaren Benutzer- oder UCS-Zuweisungen.',
'manual_restart_needed' => 'Bitte starte deinen Server manuell neu, um die neuen Ressourcen Limits zu übernehmen.',

'server_deleted' => 'Server gelöscht',
Expand Down
1 change: 1 addition & 0 deletions user-creatable-servers/lang/en/strings.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -25,6 +25,7 @@

'notifications' => [
'server_resources_updated' => 'Server Resource Limits updated',
'resource_limit_reached' => 'The requested resources exceed the available user or UCS allocation.',
'might_need_restart' => 'To fully use the new resource limits a server restart might be required.',
'manual_restart_needed' => 'Please manually restart your server to apply the new resource limits.',

Expand Down
41 changes: 41 additions & 0 deletions user-creatable-servers/lang/no-nb/strings.php
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
<?php

return [
'user_resource_limits' => 'Brukerreessursgrense|Brukerressursgrenser',
'user' => 'Bruker|Brukere',
'cpu' => 'CPU',
'memory' => 'Minne',
'disk' => 'Diskplass',
'server_limit' => 'Servergrense',
'no_limit' => 'Ingen grense',
'unlimited' => 'Ubegrenset',
'hint_unlimited' => '0 betyr ubegrenset',
'name' => 'Servernavn',
'egg' => 'Egg',
'left' => 'igjen',
'variables' => 'Oppstartsvariabler',

'create_server' => 'Opprett server',

'modals' => [
'delete_server_confirm' => 'Er du sikker på at du vil slette denne serveren?',
'delete_server_warning' => 'Denne handlingen kan ikke angres og all data vil gå tapt permanent.',
'delete_server' => 'Slett server',
],

'notifications' => [
'server_resources_updated' => 'Serverressursgrenser oppdatert',
'resource_limit_reached' => 'De forespurte ressursene overstiger tilgjengelig bruker- eller UCS-allokering.',
'might_need_restart' => 'For å bruke de nye ressursgrensene kan det være nødvendig å starte serveren på nytt.',
'manual_restart_needed' => 'Vennligst start serveren på nytt, manuelt, for å bruke de nye ressursgrensene.',

'server_deleted' => 'Server slettet',
'server_deleted_success' => 'Serveren ble slettet.',
'server_delete_error' => 'Kunne ikke slette server',

'server_creation_failed' => 'Kunne ikke opprette server',
'no_viable_node_found' => 'Ingen tilgjengelig node ble funnet. Vennligst kontakt paneladministratoren.',
'no_viable_allocation_found' => 'Ingen tilgjengelig allokering ble funnet. Vennligst kontakt paneladministratoren.',
'unknown_server_creation_error' => 'Ukjent feil. Vennligst kontakt paneladministratoren.',
],
];
4 changes: 2 additions & 2 deletions user-creatable-servers/plugin.json
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
{
"id": "user-creatable-servers",
"name": "User Creatable Servers",
"author": "Boy132",
"version": "1.1.1",
"author": "Boy132 & CER06",
"version": "1.1.2",
"description": "Allow users to create their own servers",
"category": "plugin",
"url": "https://hub.pelican.dev/plugins/user-creatable-servers",
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -111,23 +111,23 @@ public static function form(Schema $schema): Schema
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_cpu'))
->suffix('%')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_memory'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_disk'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('server_limit')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -65,23 +65,23 @@ public function form(Schema $schema): Schema
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_cpu'))
->suffix('%')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_memory'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_disk'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('server_limit')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,9 +50,13 @@ public function form(Schema $schema): Schema

$userResourceLimits = UserResourceLimits::where('user_id', $server->owner_id)->firstOrFail();

$maxCpu = $server->cpu + $userResourceLimits->getCpuLeft();
$maxMemory = $server->memory + $userResourceLimits->getMemoryLeft();
$maxDisk = $server->disk + $userResourceLimits->getDiskLeft();
$cpuLeft = $userResourceLimits->getCpuLeft();
$memoryLeft = $userResourceLimits->getMemoryLeft();
$diskLeft = $userResourceLimits->getDiskLeft();

$maxCpu = $cpuLeft === null ? null : $server->cpu + $cpuLeft;
$maxMemory = $memoryLeft === null ? null : $server->memory + $memoryLeft;
$maxDisk = $diskLeft === null ? null : $server->disk + $diskLeft;

$suffix = config('panel.use_binary_prefix') ? 'MiB' : 'MB';

Expand All@@ -66,31 +70,31 @@ public function form(Schema $schema): Schema
->label(trans('user-creatable-servers::strings.cpu'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->cpu > 0 ? ($maxCpu - $state . '% ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->cpu > 0 && $maxCpu - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $cpuLeft !== null ? ($maxCpu - $state . '% ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $cpuLeft !== null && $maxCpu - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->cpu > 0 ? 1 : 0)
->maxValue($userResourceLimits->cpu > 0 ? $maxCpu : null)
->maxValue($maxCpu)
->suffix('%'),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->memory > 0 ? ($maxMemory - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->memory > 0 && $maxMemory - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $memoryLeft !== null ? ($maxMemory - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $memoryLeft !== null && $maxMemory - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->memory > 0 ? 1 : 0)
->maxValue($userResourceLimits->memory > 0 ? $maxMemory : null)
->maxValue($maxMemory)
->suffix($suffix),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->disk > 0 ? ($maxDisk - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->disk > 0 && $maxDisk - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $diskLeft !== null ? ($maxDisk - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $diskLeft !== null && $maxDisk - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->disk > 0 ? 1 : 0)
->maxValue($userResourceLimits->disk > 0 ? $maxDisk : null)
->maxValue($maxDisk)
->suffix($suffix),
]);
}
Expand DownExpand Up@@ -155,11 +159,20 @@ public function save(): void
/** @var Server $server */
$server = Filament::getTenant();

$server->update([
'cpu' => $data['cpu'],
'memory' => $data['memory'],
'disk' => $data['disk'],
]);
/** @var UserResourceLimits $userResourceLimits */
$userResourceLimits = UserResourceLimits::where('user_id', $server->owner_id)->firstOrFail();

$server = $userResourceLimits->updateServerResources($server, $data['cpu'], $data['memory'], $data['disk']);

if (!$server) {
Notification::make()
->title(trans('user-creatable-servers::strings.notifications.server_resources_updated'))
->body(trans('user-creatable-servers::strings.notifications.resource_limit_reached'))
->danger()
->send();

return;
}

try {
/** @var DaemonServerRepository $repository */
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Ucs default resource limits by TheOriginalCER06 · Pull Request #150 · pelican/plugins · GitHub
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion user-creatable-servers/README.md
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
# User Creatable Servers (by Boy132)
# User Creatable Servers (by Boy132 & contributions from CER06)

Allow users to create their own servers within defined resource limits set by administrators.

Expand All@@ -10,6 +10,8 @@ Add the deployment tag (`user_creatable_servers` by default) to the nodes that s

- Users can create servers without admin intervention
- Configurable resource limits per user (CPU, RAM, disk, etc.)
- Configurable default CPU, memory, and disk allocations automatically assigned to newly created users
- Optional aggregate CPU, memory, and disk caps across all UCS users (`0` is unlimited and deployment remains limited by node capacity)
- Admin management of user resource allocations
- Resource usage overview widget for users
- Integration with existing server management
8 changes: 8 additions & 0 deletions user-creatable-servers/config/user-creatable-servers.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,14 @@
'allocation_limit' => (int) env('UCS_DEFAULT_ALLOCATION_LIMIT', 0),
'backup_limit' => (int) env('UCS_DEFAULT_BACKUP_LIMIT', 0),

'default_user_cpu' => (int) env('UCS_DEFAULT_USER_CPU', 0),
'default_user_memory' => (int) env('UCS_DEFAULT_USER_MEMORY', 0),
'default_user_disk' => (int) env('UCS_DEFAULT_USER_DISK', 0),

'max_cpu' => (int) env('UCS_MAX_CPU', 0),
'max_memory' => (int) env('UCS_MAX_MEMORY', 0),
'max_disk' => (int) env('UCS_MAX_DISK', 0),

'can_users_update_servers' => (bool) env('UCS_CAN_USERS_UPDATE_SERVERS', true),
'can_users_delete_servers' => (bool) env('UCS_CAN_USERS_DELETE_SERVERS', false),

Expand Down
1 change: 1 addition & 0 deletions user-creatable-servers/lang/de/strings.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,6 +26,7 @@
'notifications' => [
'server_resources_updated' => 'Server Ressourcen Limits aktualisiert',
'might_need_restart' => 'Um die neuen Ressourcen Limits vollständig zu nutzen, ist möglicherweise ein Neustart des Servers erforderlich.',
'resource_limit_reached' => 'Die angeforderten Ressourcen überschreiten die verfügbaren Benutzer- oder UCS-Zuweisungen.',
'manual_restart_needed' => 'Bitte starte deinen Server manuell neu, um die neuen Ressourcen Limits zu übernehmen.',

'server_deleted' => 'Server gelöscht',
Expand Down
1 change: 1 addition & 0 deletions user-creatable-servers/lang/en/strings.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -25,6 +25,7 @@

'notifications' => [
'server_resources_updated' => 'Server Resource Limits updated',
'resource_limit_reached' => 'The requested resources exceed the available user or UCS allocation.',
'might_need_restart' => 'To fully use the new resource limits a server restart might be required.',
'manual_restart_needed' => 'Please manually restart your server to apply the new resource limits.',

Expand Down
41 changes: 41 additions & 0 deletions user-creatable-servers/lang/no-nb/strings.php
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
<?php

return [
'user_resource_limits' => 'Brukerreessursgrense|Brukerressursgrenser',
'user' => 'Bruker|Brukere',
'cpu' => 'CPU',
'memory' => 'Minne',
'disk' => 'Diskplass',
'server_limit' => 'Servergrense',
'no_limit' => 'Ingen grense',
'unlimited' => 'Ubegrenset',
'hint_unlimited' => '0 betyr ubegrenset',
'name' => 'Servernavn',
'egg' => 'Egg',
'left' => 'igjen',
'variables' => 'Oppstartsvariabler',

'create_server' => 'Opprett server',

'modals' => [
'delete_server_confirm' => 'Er du sikker på at du vil slette denne serveren?',
'delete_server_warning' => 'Denne handlingen kan ikke angres og all data vil gå tapt permanent.',
'delete_server' => 'Slett server',
],

'notifications' => [
'server_resources_updated' => 'Serverressursgrenser oppdatert',
'resource_limit_reached' => 'De forespurte ressursene overstiger tilgjengelig bruker- eller UCS-allokering.',
'might_need_restart' => 'For å bruke de nye ressursgrensene kan det være nødvendig å starte serveren på nytt.',
'manual_restart_needed' => 'Vennligst start serveren på nytt, manuelt, for å bruke de nye ressursgrensene.',

'server_deleted' => 'Server slettet',
'server_deleted_success' => 'Serveren ble slettet.',
'server_delete_error' => 'Kunne ikke slette server',

'server_creation_failed' => 'Kunne ikke opprette server',
'no_viable_node_found' => 'Ingen tilgjengelig node ble funnet. Vennligst kontakt paneladministratoren.',
'no_viable_allocation_found' => 'Ingen tilgjengelig allokering ble funnet. Vennligst kontakt paneladministratoren.',
'unknown_server_creation_error' => 'Ukjent feil. Vennligst kontakt paneladministratoren.',
],
];
4 changes: 2 additions & 2 deletions user-creatable-servers/plugin.json
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
{
"id": "user-creatable-servers",
"name": "User Creatable Servers",
"author": "Boy132",
"version": "1.1.1",
"author": "Boy132 & CER06",
"version": "1.1.2",
"description": "Allow users to create their own servers",
"category": "plugin",
"url": "https://hub.pelican.dev/plugins/user-creatable-servers",
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -111,23 +111,23 @@ public static function form(Schema $schema): Schema
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_cpu'))
->suffix('%')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_memory'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_disk'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('server_limit')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -65,23 +65,23 @@ public function form(Schema $schema): Schema
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_cpu'))
->suffix('%')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_memory'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_disk'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('server_limit')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,9 +50,13 @@ public function form(Schema $schema): Schema

$userResourceLimits = UserResourceLimits::where('user_id', $server->owner_id)->firstOrFail();

$maxCpu = $server->cpu + $userResourceLimits->getCpuLeft();
$maxMemory = $server->memory + $userResourceLimits->getMemoryLeft();
$maxDisk = $server->disk + $userResourceLimits->getDiskLeft();
$cpuLeft = $userResourceLimits->getCpuLeft();
$memoryLeft = $userResourceLimits->getMemoryLeft();
$diskLeft = $userResourceLimits->getDiskLeft();

$maxCpu = $cpuLeft === null ? null : $server->cpu + $cpuLeft;
$maxMemory = $memoryLeft === null ? null : $server->memory + $memoryLeft;
$maxDisk = $diskLeft === null ? null : $server->disk + $diskLeft;

$suffix = config('panel.use_binary_prefix') ? 'MiB' : 'MB';

Expand All@@ -66,31 +70,31 @@ public function form(Schema $schema): Schema
->label(trans('user-creatable-servers::strings.cpu'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->cpu > 0 ? ($maxCpu - $state . '% ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->cpu > 0 && $maxCpu - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $cpuLeft !== null ? ($maxCpu - $state . '% ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $cpuLeft !== null && $maxCpu - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->cpu > 0 ? 1 : 0)
->maxValue($userResourceLimits->cpu > 0 ? $maxCpu : null)
->maxValue($maxCpu)
->suffix('%'),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->memory > 0 ? ($maxMemory - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->memory > 0 && $maxMemory - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $memoryLeft !== null ? ($maxMemory - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $memoryLeft !== null && $maxMemory - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->memory > 0 ? 1 : 0)
->maxValue($userResourceLimits->memory > 0 ? $maxMemory : null)
->maxValue($maxMemory)
->suffix($suffix),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->disk > 0 ? ($maxDisk - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->disk > 0 && $maxDisk - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $diskLeft !== null ? ($maxDisk - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $diskLeft !== null && $maxDisk - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->disk > 0 ? 1 : 0)
->maxValue($userResourceLimits->disk > 0 ? $maxDisk : null)
->maxValue($maxDisk)
->suffix($suffix),
]);
}
Expand DownExpand Up@@ -155,11 +159,20 @@ public function save(): void
/** @var Server $server */
$server = Filament::getTenant();

$server->update([
'cpu' => $data['cpu'],
'memory' => $data['memory'],
'disk' => $data['disk'],
]);
/** @var UserResourceLimits $userResourceLimits */
$userResourceLimits = UserResourceLimits::where('user_id', $server->owner_id)->firstOrFail();

$server = $userResourceLimits->updateServerResources($server, $data['cpu'], $data['memory'], $data['disk']);

if (!$server) {
Notification::make()
->title(trans('user-creatable-servers::strings.notifications.server_resources_updated'))
->body(trans('user-creatable-servers::strings.notifications.resource_limit_reached'))
->danger()
->send();

return;
}

try {
/** @var DaemonServerRepository $repository */
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Ucs default resource limits by TheOriginalCER06 · Pull Request #150 · pelican/plugins · GitHub
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion user-creatable-servers/README.md
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
# User Creatable Servers (by Boy132)
# User Creatable Servers (by Boy132 & contributions from CER06)

Allow users to create their own servers within defined resource limits set by administrators.

Expand All@@ -10,6 +10,8 @@ Add the deployment tag (`user_creatable_servers` by default) to the nodes that s

- Users can create servers without admin intervention
- Configurable resource limits per user (CPU, RAM, disk, etc.)
- Configurable default CPU, memory, and disk allocations automatically assigned to newly created users
- Optional aggregate CPU, memory, and disk caps across all UCS users (`0` is unlimited and deployment remains limited by node capacity)
- Admin management of user resource allocations
- Resource usage overview widget for users
- Integration with existing server management
8 changes: 8 additions & 0 deletions user-creatable-servers/config/user-creatable-servers.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,14 @@
'allocation_limit' => (int) env('UCS_DEFAULT_ALLOCATION_LIMIT', 0),
'backup_limit' => (int) env('UCS_DEFAULT_BACKUP_LIMIT', 0),

'default_user_cpu' => (int) env('UCS_DEFAULT_USER_CPU', 0),
'default_user_memory' => (int) env('UCS_DEFAULT_USER_MEMORY', 0),
'default_user_disk' => (int) env('UCS_DEFAULT_USER_DISK', 0),

'max_cpu' => (int) env('UCS_MAX_CPU', 0),
'max_memory' => (int) env('UCS_MAX_MEMORY', 0),
'max_disk' => (int) env('UCS_MAX_DISK', 0),

'can_users_update_servers' => (bool) env('UCS_CAN_USERS_UPDATE_SERVERS', true),
'can_users_delete_servers' => (bool) env('UCS_CAN_USERS_DELETE_SERVERS', false),

Expand Down
1 change: 1 addition & 0 deletions user-creatable-servers/lang/de/strings.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,6 +26,7 @@
'notifications' => [
'server_resources_updated' => 'Server Ressourcen Limits aktualisiert',
'might_need_restart' => 'Um die neuen Ressourcen Limits vollständig zu nutzen, ist möglicherweise ein Neustart des Servers erforderlich.',
'resource_limit_reached' => 'Die angeforderten Ressourcen überschreiten die verfügbaren Benutzer- oder UCS-Zuweisungen.',
'manual_restart_needed' => 'Bitte starte deinen Server manuell neu, um die neuen Ressourcen Limits zu übernehmen.',

'server_deleted' => 'Server gelöscht',
Expand Down
1 change: 1 addition & 0 deletions user-creatable-servers/lang/en/strings.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -25,6 +25,7 @@

'notifications' => [
'server_resources_updated' => 'Server Resource Limits updated',
'resource_limit_reached' => 'The requested resources exceed the available user or UCS allocation.',
'might_need_restart' => 'To fully use the new resource limits a server restart might be required.',
'manual_restart_needed' => 'Please manually restart your server to apply the new resource limits.',

Expand Down
41 changes: 41 additions & 0 deletions user-creatable-servers/lang/no-nb/strings.php
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
<?php

return [
'user_resource_limits' => 'Brukerreessursgrense|Brukerressursgrenser',
'user' => 'Bruker|Brukere',
'cpu' => 'CPU',
'memory' => 'Minne',
'disk' => 'Diskplass',
'server_limit' => 'Servergrense',
'no_limit' => 'Ingen grense',
'unlimited' => 'Ubegrenset',
'hint_unlimited' => '0 betyr ubegrenset',
'name' => 'Servernavn',
'egg' => 'Egg',
'left' => 'igjen',
'variables' => 'Oppstartsvariabler',

'create_server' => 'Opprett server',

'modals' => [
'delete_server_confirm' => 'Er du sikker på at du vil slette denne serveren?',
'delete_server_warning' => 'Denne handlingen kan ikke angres og all data vil gå tapt permanent.',
'delete_server' => 'Slett server',
],

'notifications' => [
'server_resources_updated' => 'Serverressursgrenser oppdatert',
'resource_limit_reached' => 'De forespurte ressursene overstiger tilgjengelig bruker- eller UCS-allokering.',
'might_need_restart' => 'For å bruke de nye ressursgrensene kan det være nødvendig å starte serveren på nytt.',
'manual_restart_needed' => 'Vennligst start serveren på nytt, manuelt, for å bruke de nye ressursgrensene.',

'server_deleted' => 'Server slettet',
'server_deleted_success' => 'Serveren ble slettet.',
'server_delete_error' => 'Kunne ikke slette server',

'server_creation_failed' => 'Kunne ikke opprette server',
'no_viable_node_found' => 'Ingen tilgjengelig node ble funnet. Vennligst kontakt paneladministratoren.',
'no_viable_allocation_found' => 'Ingen tilgjengelig allokering ble funnet. Vennligst kontakt paneladministratoren.',
'unknown_server_creation_error' => 'Ukjent feil. Vennligst kontakt paneladministratoren.',
],
];
4 changes: 2 additions & 2 deletions user-creatable-servers/plugin.json
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
{
"id": "user-creatable-servers",
"name": "User Creatable Servers",
"author": "Boy132",
"version": "1.1.1",
"author": "Boy132 & CER06",
"version": "1.1.2",
"description": "Allow users to create their own servers",
"category": "plugin",
"url": "https://hub.pelican.dev/plugins/user-creatable-servers",
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -111,23 +111,23 @@ public static function form(Schema $schema): Schema
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_cpu'))
->suffix('%')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_memory'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_disk'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('server_limit')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -65,23 +65,23 @@ public function form(Schema $schema): Schema
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_cpu'))
->suffix('%')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_memory'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_disk'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('server_limit')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,9 +50,13 @@ public function form(Schema $schema): Schema

$userResourceLimits = UserResourceLimits::where('user_id', $server->owner_id)->firstOrFail();

$maxCpu = $server->cpu + $userResourceLimits->getCpuLeft();
$maxMemory = $server->memory + $userResourceLimits->getMemoryLeft();
$maxDisk = $server->disk + $userResourceLimits->getDiskLeft();
$cpuLeft = $userResourceLimits->getCpuLeft();
$memoryLeft = $userResourceLimits->getMemoryLeft();
$diskLeft = $userResourceLimits->getDiskLeft();

$maxCpu = $cpuLeft === null ? null : $server->cpu + $cpuLeft;
$maxMemory = $memoryLeft === null ? null : $server->memory + $memoryLeft;
$maxDisk = $diskLeft === null ? null : $server->disk + $diskLeft;

$suffix = config('panel.use_binary_prefix') ? 'MiB' : 'MB';

Expand All@@ -66,31 +70,31 @@ public function form(Schema $schema): Schema
->label(trans('user-creatable-servers::strings.cpu'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->cpu > 0 ? ($maxCpu - $state . '% ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->cpu > 0 && $maxCpu - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $cpuLeft !== null ? ($maxCpu - $state . '% ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $cpuLeft !== null && $maxCpu - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->cpu > 0 ? 1 : 0)
->maxValue($userResourceLimits->cpu > 0 ? $maxCpu : null)
->maxValue($maxCpu)
->suffix('%'),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->memory > 0 ? ($maxMemory - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->memory > 0 && $maxMemory - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $memoryLeft !== null ? ($maxMemory - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $memoryLeft !== null && $maxMemory - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->memory > 0 ? 1 : 0)
->maxValue($userResourceLimits->memory > 0 ? $maxMemory : null)
->maxValue($maxMemory)
->suffix($suffix),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->disk > 0 ? ($maxDisk - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->disk > 0 && $maxDisk - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $diskLeft !== null ? ($maxDisk - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $diskLeft !== null && $maxDisk - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->disk > 0 ? 1 : 0)
->maxValue($userResourceLimits->disk > 0 ? $maxDisk : null)
->maxValue($maxDisk)
->suffix($suffix),
]);
}
Expand DownExpand Up@@ -155,11 +159,20 @@ public function save(): void
/** @var Server $server */
$server = Filament::getTenant();

$server->update([
'cpu' => $data['cpu'],
'memory' => $data['memory'],
'disk' => $data['disk'],
]);
/** @var UserResourceLimits $userResourceLimits */
$userResourceLimits = UserResourceLimits::where('user_id', $server->owner_id)->firstOrFail();

$server = $userResourceLimits->updateServerResources($server, $data['cpu'], $data['memory'], $data['disk']);

if (!$server) {
Notification::make()
->title(trans('user-creatable-servers::strings.notifications.server_resources_updated'))
->body(trans('user-creatable-servers::strings.notifications.resource_limit_reached'))
->danger()
->send();

return;
}

try {
/** @var DaemonServerRepository $repository */
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Ucs default resource limits by TheOriginalCER06 · Pull Request #150 · pelican/plugins · GitHub
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion user-creatable-servers/README.md
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
# User Creatable Servers (by Boy132)
# User Creatable Servers (by Boy132 & contributions from CER06)

Allow users to create their own servers within defined resource limits set by administrators.

Expand All@@ -10,6 +10,8 @@ Add the deployment tag (`user_creatable_servers` by default) to the nodes that s

- Users can create servers without admin intervention
- Configurable resource limits per user (CPU, RAM, disk, etc.)
- Configurable default CPU, memory, and disk allocations automatically assigned to newly created users
- Optional aggregate CPU, memory, and disk caps across all UCS users (`0` is unlimited and deployment remains limited by node capacity)
- Admin management of user resource allocations
- Resource usage overview widget for users
- Integration with existing server management
8 changes: 8 additions & 0 deletions user-creatable-servers/config/user-creatable-servers.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,14 @@
'allocation_limit' => (int) env('UCS_DEFAULT_ALLOCATION_LIMIT', 0),
'backup_limit' => (int) env('UCS_DEFAULT_BACKUP_LIMIT', 0),

'default_user_cpu' => (int) env('UCS_DEFAULT_USER_CPU', 0),
'default_user_memory' => (int) env('UCS_DEFAULT_USER_MEMORY', 0),
'default_user_disk' => (int) env('UCS_DEFAULT_USER_DISK', 0),

'max_cpu' => (int) env('UCS_MAX_CPU', 0),
'max_memory' => (int) env('UCS_MAX_MEMORY', 0),
'max_disk' => (int) env('UCS_MAX_DISK', 0),

'can_users_update_servers' => (bool) env('UCS_CAN_USERS_UPDATE_SERVERS', true),
'can_users_delete_servers' => (bool) env('UCS_CAN_USERS_DELETE_SERVERS', false),

Expand Down
1 change: 1 addition & 0 deletions user-creatable-servers/lang/de/strings.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,6 +26,7 @@
'notifications' => [
'server_resources_updated' => 'Server Ressourcen Limits aktualisiert',
'might_need_restart' => 'Um die neuen Ressourcen Limits vollständig zu nutzen, ist möglicherweise ein Neustart des Servers erforderlich.',
'resource_limit_reached' => 'Die angeforderten Ressourcen überschreiten die verfügbaren Benutzer- oder UCS-Zuweisungen.',
'manual_restart_needed' => 'Bitte starte deinen Server manuell neu, um die neuen Ressourcen Limits zu übernehmen.',

'server_deleted' => 'Server gelöscht',
Expand Down
1 change: 1 addition & 0 deletions user-creatable-servers/lang/en/strings.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -25,6 +25,7 @@

'notifications' => [
'server_resources_updated' => 'Server Resource Limits updated',
'resource_limit_reached' => 'The requested resources exceed the available user or UCS allocation.',
'might_need_restart' => 'To fully use the new resource limits a server restart might be required.',
'manual_restart_needed' => 'Please manually restart your server to apply the new resource limits.',

Expand Down
41 changes: 41 additions & 0 deletions user-creatable-servers/lang/no-nb/strings.php
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
<?php

return [
'user_resource_limits' => 'Brukerreessursgrense|Brukerressursgrenser',
'user' => 'Bruker|Brukere',
'cpu' => 'CPU',
'memory' => 'Minne',
'disk' => 'Diskplass',
'server_limit' => 'Servergrense',
'no_limit' => 'Ingen grense',
'unlimited' => 'Ubegrenset',
'hint_unlimited' => '0 betyr ubegrenset',
'name' => 'Servernavn',
'egg' => 'Egg',
'left' => 'igjen',
'variables' => 'Oppstartsvariabler',

'create_server' => 'Opprett server',

'modals' => [
'delete_server_confirm' => 'Er du sikker på at du vil slette denne serveren?',
'delete_server_warning' => 'Denne handlingen kan ikke angres og all data vil gå tapt permanent.',
'delete_server' => 'Slett server',
],

'notifications' => [
'server_resources_updated' => 'Serverressursgrenser oppdatert',
'resource_limit_reached' => 'De forespurte ressursene overstiger tilgjengelig bruker- eller UCS-allokering.',
'might_need_restart' => 'For å bruke de nye ressursgrensene kan det være nødvendig å starte serveren på nytt.',
'manual_restart_needed' => 'Vennligst start serveren på nytt, manuelt, for å bruke de nye ressursgrensene.',

'server_deleted' => 'Server slettet',
'server_deleted_success' => 'Serveren ble slettet.',
'server_delete_error' => 'Kunne ikke slette server',

'server_creation_failed' => 'Kunne ikke opprette server',
'no_viable_node_found' => 'Ingen tilgjengelig node ble funnet. Vennligst kontakt paneladministratoren.',
'no_viable_allocation_found' => 'Ingen tilgjengelig allokering ble funnet. Vennligst kontakt paneladministratoren.',
'unknown_server_creation_error' => 'Ukjent feil. Vennligst kontakt paneladministratoren.',
],
];
4 changes: 2 additions & 2 deletions user-creatable-servers/plugin.json
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
{
"id": "user-creatable-servers",
"name": "User Creatable Servers",
"author": "Boy132",
"version": "1.1.1",
"author": "Boy132 & CER06",
"version": "1.1.2",
"description": "Allow users to create their own servers",
"category": "plugin",
"url": "https://hub.pelican.dev/plugins/user-creatable-servers",
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -111,23 +111,23 @@ public static function form(Schema $schema): Schema
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_cpu'))
->suffix('%')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_memory'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_disk'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('server_limit')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -65,23 +65,23 @@ public function form(Schema $schema): Schema
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_cpu'))
->suffix('%')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_memory'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_disk'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('server_limit')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,9 +50,13 @@ public function form(Schema $schema): Schema

$userResourceLimits = UserResourceLimits::where('user_id', $server->owner_id)->firstOrFail();

$maxCpu = $server->cpu + $userResourceLimits->getCpuLeft();
$maxMemory = $server->memory + $userResourceLimits->getMemoryLeft();
$maxDisk = $server->disk + $userResourceLimits->getDiskLeft();
$cpuLeft = $userResourceLimits->getCpuLeft();
$memoryLeft = $userResourceLimits->getMemoryLeft();
$diskLeft = $userResourceLimits->getDiskLeft();

$maxCpu = $cpuLeft === null ? null : $server->cpu + $cpuLeft;
$maxMemory = $memoryLeft === null ? null : $server->memory + $memoryLeft;
$maxDisk = $diskLeft === null ? null : $server->disk + $diskLeft;

$suffix = config('panel.use_binary_prefix') ? 'MiB' : 'MB';

Expand All@@ -66,31 +70,31 @@ public function form(Schema $schema): Schema
->label(trans('user-creatable-servers::strings.cpu'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->cpu > 0 ? ($maxCpu - $state . '% ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->cpu > 0 && $maxCpu - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $cpuLeft !== null ? ($maxCpu - $state . '% ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $cpuLeft !== null && $maxCpu - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->cpu > 0 ? 1 : 0)
->maxValue($userResourceLimits->cpu > 0 ? $maxCpu : null)
->maxValue($maxCpu)
->suffix('%'),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->memory > 0 ? ($maxMemory - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->memory > 0 && $maxMemory - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $memoryLeft !== null ? ($maxMemory - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $memoryLeft !== null && $maxMemory - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->memory > 0 ? 1 : 0)
->maxValue($userResourceLimits->memory > 0 ? $maxMemory : null)
->maxValue($maxMemory)
->suffix($suffix),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->disk > 0 ? ($maxDisk - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->disk > 0 && $maxDisk - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $diskLeft !== null ? ($maxDisk - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $diskLeft !== null && $maxDisk - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->disk > 0 ? 1 : 0)
->maxValue($userResourceLimits->disk > 0 ? $maxDisk : null)
->maxValue($maxDisk)
->suffix($suffix),
]);
}
Expand DownExpand Up@@ -155,11 +159,20 @@ public function save(): void
/** @var Server $server */
$server = Filament::getTenant();

$server->update([
'cpu' => $data['cpu'],
'memory' => $data['memory'],
'disk' => $data['disk'],
]);
/** @var UserResourceLimits $userResourceLimits */
$userResourceLimits = UserResourceLimits::where('user_id', $server->owner_id)->firstOrFail();

$server = $userResourceLimits->updateServerResources($server, $data['cpu'], $data['memory'], $data['disk']);

if (!$server) {
Notification::make()
->title(trans('user-creatable-servers::strings.notifications.server_resources_updated'))
->body(trans('user-creatable-servers::strings.notifications.resource_limit_reached'))
->danger()
->send();

return;
}

try {
/** @var DaemonServerRepository $repository */
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Ucs default resource limits by TheOriginalCER06 · Pull Request #150 · pelican/plugins · GitHub
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion user-creatable-servers/README.md
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
# User Creatable Servers (by Boy132)
# User Creatable Servers (by Boy132 & contributions from CER06)

Allow users to create their own servers within defined resource limits set by administrators.

Expand All@@ -10,6 +10,8 @@ Add the deployment tag (`user_creatable_servers` by default) to the nodes that s

- Users can create servers without admin intervention
- Configurable resource limits per user (CPU, RAM, disk, etc.)
- Configurable default CPU, memory, and disk allocations automatically assigned to newly created users
- Optional aggregate CPU, memory, and disk caps across all UCS users (`0` is unlimited and deployment remains limited by node capacity)
- Admin management of user resource allocations
- Resource usage overview widget for users
- Integration with existing server management
8 changes: 8 additions & 0 deletions user-creatable-servers/config/user-creatable-servers.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,14 @@
'allocation_limit' => (int) env('UCS_DEFAULT_ALLOCATION_LIMIT', 0),
'backup_limit' => (int) env('UCS_DEFAULT_BACKUP_LIMIT', 0),

'default_user_cpu' => (int) env('UCS_DEFAULT_USER_CPU', 0),
'default_user_memory' => (int) env('UCS_DEFAULT_USER_MEMORY', 0),
'default_user_disk' => (int) env('UCS_DEFAULT_USER_DISK', 0),

'max_cpu' => (int) env('UCS_MAX_CPU', 0),
'max_memory' => (int) env('UCS_MAX_MEMORY', 0),
'max_disk' => (int) env('UCS_MAX_DISK', 0),

'can_users_update_servers' => (bool) env('UCS_CAN_USERS_UPDATE_SERVERS', true),
'can_users_delete_servers' => (bool) env('UCS_CAN_USERS_DELETE_SERVERS', false),

Expand Down
1 change: 1 addition & 0 deletions user-creatable-servers/lang/de/strings.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,6 +26,7 @@
'notifications' => [
'server_resources_updated' => 'Server Ressourcen Limits aktualisiert',
'might_need_restart' => 'Um die neuen Ressourcen Limits vollständig zu nutzen, ist möglicherweise ein Neustart des Servers erforderlich.',
'resource_limit_reached' => 'Die angeforderten Ressourcen überschreiten die verfügbaren Benutzer- oder UCS-Zuweisungen.',
'manual_restart_needed' => 'Bitte starte deinen Server manuell neu, um die neuen Ressourcen Limits zu übernehmen.',

'server_deleted' => 'Server gelöscht',
Expand Down
1 change: 1 addition & 0 deletions user-creatable-servers/lang/en/strings.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -25,6 +25,7 @@

'notifications' => [
'server_resources_updated' => 'Server Resource Limits updated',
'resource_limit_reached' => 'The requested resources exceed the available user or UCS allocation.',
'might_need_restart' => 'To fully use the new resource limits a server restart might be required.',
'manual_restart_needed' => 'Please manually restart your server to apply the new resource limits.',

Expand Down
41 changes: 41 additions & 0 deletions user-creatable-servers/lang/no-nb/strings.php
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
<?php

return [
'user_resource_limits' => 'Brukerreessursgrense|Brukerressursgrenser',
'user' => 'Bruker|Brukere',
'cpu' => 'CPU',
'memory' => 'Minne',
'disk' => 'Diskplass',
'server_limit' => 'Servergrense',
'no_limit' => 'Ingen grense',
'unlimited' => 'Ubegrenset',
'hint_unlimited' => '0 betyr ubegrenset',
'name' => 'Servernavn',
'egg' => 'Egg',
'left' => 'igjen',
'variables' => 'Oppstartsvariabler',

'create_server' => 'Opprett server',

'modals' => [
'delete_server_confirm' => 'Er du sikker på at du vil slette denne serveren?',
'delete_server_warning' => 'Denne handlingen kan ikke angres og all data vil gå tapt permanent.',
'delete_server' => 'Slett server',
],

'notifications' => [
'server_resources_updated' => 'Serverressursgrenser oppdatert',
'resource_limit_reached' => 'De forespurte ressursene overstiger tilgjengelig bruker- eller UCS-allokering.',
'might_need_restart' => 'For å bruke de nye ressursgrensene kan det være nødvendig å starte serveren på nytt.',
'manual_restart_needed' => 'Vennligst start serveren på nytt, manuelt, for å bruke de nye ressursgrensene.',

'server_deleted' => 'Server slettet',
'server_deleted_success' => 'Serveren ble slettet.',
'server_delete_error' => 'Kunne ikke slette server',

'server_creation_failed' => 'Kunne ikke opprette server',
'no_viable_node_found' => 'Ingen tilgjengelig node ble funnet. Vennligst kontakt paneladministratoren.',
'no_viable_allocation_found' => 'Ingen tilgjengelig allokering ble funnet. Vennligst kontakt paneladministratoren.',
'unknown_server_creation_error' => 'Ukjent feil. Vennligst kontakt paneladministratoren.',
],
];
4 changes: 2 additions & 2 deletions user-creatable-servers/plugin.json
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
{
"id": "user-creatable-servers",
"name": "User Creatable Servers",
"author": "Boy132",
"version": "1.1.1",
"author": "Boy132 & CER06",
"version": "1.1.2",
"description": "Allow users to create their own servers",
"category": "plugin",
"url": "https://hub.pelican.dev/plugins/user-creatable-servers",
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -111,23 +111,23 @@ public static function form(Schema $schema): Schema
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_cpu'))
->suffix('%')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_memory'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_disk'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('server_limit')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -65,23 +65,23 @@ public function form(Schema $schema): Schema
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_cpu'))
->suffix('%')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_memory'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_disk'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('server_limit')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,9 +50,13 @@ public function form(Schema $schema): Schema

$userResourceLimits = UserResourceLimits::where('user_id', $server->owner_id)->firstOrFail();

$maxCpu = $server->cpu + $userResourceLimits->getCpuLeft();
$maxMemory = $server->memory + $userResourceLimits->getMemoryLeft();
$maxDisk = $server->disk + $userResourceLimits->getDiskLeft();
$cpuLeft = $userResourceLimits->getCpuLeft();
$memoryLeft = $userResourceLimits->getMemoryLeft();
$diskLeft = $userResourceLimits->getDiskLeft();

$maxCpu = $cpuLeft === null ? null : $server->cpu + $cpuLeft;
$maxMemory = $memoryLeft === null ? null : $server->memory + $memoryLeft;
$maxDisk = $diskLeft === null ? null : $server->disk + $diskLeft;

$suffix = config('panel.use_binary_prefix') ? 'MiB' : 'MB';

Expand All@@ -66,31 +70,31 @@ public function form(Schema $schema): Schema
->label(trans('user-creatable-servers::strings.cpu'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->cpu > 0 ? ($maxCpu - $state . '% ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->cpu > 0 && $maxCpu - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $cpuLeft !== null ? ($maxCpu - $state . '% ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $cpuLeft !== null && $maxCpu - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->cpu > 0 ? 1 : 0)
->maxValue($userResourceLimits->cpu > 0 ? $maxCpu : null)
->maxValue($maxCpu)
->suffix('%'),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->memory > 0 ? ($maxMemory - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->memory > 0 && $maxMemory - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $memoryLeft !== null ? ($maxMemory - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $memoryLeft !== null && $maxMemory - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->memory > 0 ? 1 : 0)
->maxValue($userResourceLimits->memory > 0 ? $maxMemory : null)
->maxValue($maxMemory)
->suffix($suffix),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->disk > 0 ? ($maxDisk - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->disk > 0 && $maxDisk - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $diskLeft !== null ? ($maxDisk - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $diskLeft !== null && $maxDisk - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->disk > 0 ? 1 : 0)
->maxValue($userResourceLimits->disk > 0 ? $maxDisk : null)
->maxValue($maxDisk)
->suffix($suffix),
]);
}
Expand DownExpand Up@@ -155,11 +159,20 @@ public function save(): void
/** @var Server $server */
$server = Filament::getTenant();

$server->update([
'cpu' => $data['cpu'],
'memory' => $data['memory'],
'disk' => $data['disk'],
]);
/** @var UserResourceLimits $userResourceLimits */
$userResourceLimits = UserResourceLimits::where('user_id', $server->owner_id)->firstOrFail();

$server = $userResourceLimits->updateServerResources($server, $data['cpu'], $data['memory'], $data['disk']);

if (!$server) {
Notification::make()
->title(trans('user-creatable-servers::strings.notifications.server_resources_updated'))
->body(trans('user-creatable-servers::strings.notifications.resource_limit_reached'))
->danger()
->send();

return;
}

try {
/** @var DaemonServerRepository $repository */
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Ucs default resource limits by TheOriginalCER06 · Pull Request #150 · pelican/plugins · GitHub
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion user-creatable-servers/README.md
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
# User Creatable Servers (by Boy132)
# User Creatable Servers (by Boy132 & contributions from CER06)

Allow users to create their own servers within defined resource limits set by administrators.

Expand All@@ -10,6 +10,8 @@ Add the deployment tag (`user_creatable_servers` by default) to the nodes that s

- Users can create servers without admin intervention
- Configurable resource limits per user (CPU, RAM, disk, etc.)
- Configurable default CPU, memory, and disk allocations automatically assigned to newly created users
- Optional aggregate CPU, memory, and disk caps across all UCS users (`0` is unlimited and deployment remains limited by node capacity)
- Admin management of user resource allocations
- Resource usage overview widget for users
- Integration with existing server management
8 changes: 8 additions & 0 deletions user-creatable-servers/config/user-creatable-servers.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,14 @@
'allocation_limit' => (int) env('UCS_DEFAULT_ALLOCATION_LIMIT', 0),
'backup_limit' => (int) env('UCS_DEFAULT_BACKUP_LIMIT', 0),

'default_user_cpu' => (int) env('UCS_DEFAULT_USER_CPU', 0),
'default_user_memory' => (int) env('UCS_DEFAULT_USER_MEMORY', 0),
'default_user_disk' => (int) env('UCS_DEFAULT_USER_DISK', 0),

'max_cpu' => (int) env('UCS_MAX_CPU', 0),
'max_memory' => (int) env('UCS_MAX_MEMORY', 0),
'max_disk' => (int) env('UCS_MAX_DISK', 0),

'can_users_update_servers' => (bool) env('UCS_CAN_USERS_UPDATE_SERVERS', true),
'can_users_delete_servers' => (bool) env('UCS_CAN_USERS_DELETE_SERVERS', false),

Expand Down
1 change: 1 addition & 0 deletions user-creatable-servers/lang/de/strings.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,6 +26,7 @@
'notifications' => [
'server_resources_updated' => 'Server Ressourcen Limits aktualisiert',
'might_need_restart' => 'Um die neuen Ressourcen Limits vollständig zu nutzen, ist möglicherweise ein Neustart des Servers erforderlich.',
'resource_limit_reached' => 'Die angeforderten Ressourcen überschreiten die verfügbaren Benutzer- oder UCS-Zuweisungen.',
'manual_restart_needed' => 'Bitte starte deinen Server manuell neu, um die neuen Ressourcen Limits zu übernehmen.',

'server_deleted' => 'Server gelöscht',
Expand Down
1 change: 1 addition & 0 deletions user-creatable-servers/lang/en/strings.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -25,6 +25,7 @@

'notifications' => [
'server_resources_updated' => 'Server Resource Limits updated',
'resource_limit_reached' => 'The requested resources exceed the available user or UCS allocation.',
'might_need_restart' => 'To fully use the new resource limits a server restart might be required.',
'manual_restart_needed' => 'Please manually restart your server to apply the new resource limits.',

Expand Down
41 changes: 41 additions & 0 deletions user-creatable-servers/lang/no-nb/strings.php
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
<?php

return [
'user_resource_limits' => 'Brukerreessursgrense|Brukerressursgrenser',
'user' => 'Bruker|Brukere',
'cpu' => 'CPU',
'memory' => 'Minne',
'disk' => 'Diskplass',
'server_limit' => 'Servergrense',
'no_limit' => 'Ingen grense',
'unlimited' => 'Ubegrenset',
'hint_unlimited' => '0 betyr ubegrenset',
'name' => 'Servernavn',
'egg' => 'Egg',
'left' => 'igjen',
'variables' => 'Oppstartsvariabler',

'create_server' => 'Opprett server',

'modals' => [
'delete_server_confirm' => 'Er du sikker på at du vil slette denne serveren?',
'delete_server_warning' => 'Denne handlingen kan ikke angres og all data vil gå tapt permanent.',
'delete_server' => 'Slett server',
],

'notifications' => [
'server_resources_updated' => 'Serverressursgrenser oppdatert',
'resource_limit_reached' => 'De forespurte ressursene overstiger tilgjengelig bruker- eller UCS-allokering.',
'might_need_restart' => 'For å bruke de nye ressursgrensene kan det være nødvendig å starte serveren på nytt.',
'manual_restart_needed' => 'Vennligst start serveren på nytt, manuelt, for å bruke de nye ressursgrensene.',

'server_deleted' => 'Server slettet',
'server_deleted_success' => 'Serveren ble slettet.',
'server_delete_error' => 'Kunne ikke slette server',

'server_creation_failed' => 'Kunne ikke opprette server',
'no_viable_node_found' => 'Ingen tilgjengelig node ble funnet. Vennligst kontakt paneladministratoren.',
'no_viable_allocation_found' => 'Ingen tilgjengelig allokering ble funnet. Vennligst kontakt paneladministratoren.',
'unknown_server_creation_error' => 'Ukjent feil. Vennligst kontakt paneladministratoren.',
],
];
4 changes: 2 additions & 2 deletions user-creatable-servers/plugin.json
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
{
"id": "user-creatable-servers",
"name": "User Creatable Servers",
"author": "Boy132",
"version": "1.1.1",
"author": "Boy132 & CER06",
"version": "1.1.2",
"description": "Allow users to create their own servers",
"category": "plugin",
"url": "https://hub.pelican.dev/plugins/user-creatable-servers",
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -111,23 +111,23 @@ public static function form(Schema $schema): Schema
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_cpu'))
->suffix('%')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_memory'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_disk'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('server_limit')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -65,23 +65,23 @@ public function form(Schema $schema): Schema
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_cpu'))
->suffix('%')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_memory'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_disk'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('server_limit')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,9 +50,13 @@ public function form(Schema $schema): Schema

$userResourceLimits = UserResourceLimits::where('user_id', $server->owner_id)->firstOrFail();

$maxCpu = $server->cpu + $userResourceLimits->getCpuLeft();
$maxMemory = $server->memory + $userResourceLimits->getMemoryLeft();
$maxDisk = $server->disk + $userResourceLimits->getDiskLeft();
$cpuLeft = $userResourceLimits->getCpuLeft();
$memoryLeft = $userResourceLimits->getMemoryLeft();
$diskLeft = $userResourceLimits->getDiskLeft();

$maxCpu = $cpuLeft === null ? null : $server->cpu + $cpuLeft;
$maxMemory = $memoryLeft === null ? null : $server->memory + $memoryLeft;
$maxDisk = $diskLeft === null ? null : $server->disk + $diskLeft;

$suffix = config('panel.use_binary_prefix') ? 'MiB' : 'MB';

Expand All@@ -66,31 +70,31 @@ public function form(Schema $schema): Schema
->label(trans('user-creatable-servers::strings.cpu'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->cpu > 0 ? ($maxCpu - $state . '% ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->cpu > 0 && $maxCpu - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $cpuLeft !== null ? ($maxCpu - $state . '% ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $cpuLeft !== null && $maxCpu - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->cpu > 0 ? 1 : 0)
->maxValue($userResourceLimits->cpu > 0 ? $maxCpu : null)
->maxValue($maxCpu)
->suffix('%'),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->memory > 0 ? ($maxMemory - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->memory > 0 && $maxMemory - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $memoryLeft !== null ? ($maxMemory - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $memoryLeft !== null && $maxMemory - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->memory > 0 ? 1 : 0)
->maxValue($userResourceLimits->memory > 0 ? $maxMemory : null)
->maxValue($maxMemory)
->suffix($suffix),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->disk > 0 ? ($maxDisk - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->disk > 0 && $maxDisk - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $diskLeft !== null ? ($maxDisk - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $diskLeft !== null && $maxDisk - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->disk > 0 ? 1 : 0)
->maxValue($userResourceLimits->disk > 0 ? $maxDisk : null)
->maxValue($maxDisk)
->suffix($suffix),
]);
}
Expand DownExpand Up@@ -155,11 +159,20 @@ public function save(): void
/** @var Server $server */
$server = Filament::getTenant();

$server->update([
'cpu' => $data['cpu'],
'memory' => $data['memory'],
'disk' => $data['disk'],
]);
/** @var UserResourceLimits $userResourceLimits */
$userResourceLimits = UserResourceLimits::where('user_id', $server->owner_id)->firstOrFail();

$server = $userResourceLimits->updateServerResources($server, $data['cpu'], $data['memory'], $data['disk']);

if (!$server) {
Notification::make()
->title(trans('user-creatable-servers::strings.notifications.server_resources_updated'))
->body(trans('user-creatable-servers::strings.notifications.resource_limit_reached'))
->danger()
->send();

return;
}

try {
/** @var DaemonServerRepository $repository */
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Ucs default resource limits by TheOriginalCER06 · Pull Request #150 · pelican/plugins · GitHub
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion user-creatable-servers/README.md
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
# User Creatable Servers (by Boy132)
# User Creatable Servers (by Boy132 & contributions from CER06)

Allow users to create their own servers within defined resource limits set by administrators.

Expand All@@ -10,6 +10,8 @@ Add the deployment tag (`user_creatable_servers` by default) to the nodes that s

- Users can create servers without admin intervention
- Configurable resource limits per user (CPU, RAM, disk, etc.)
- Configurable default CPU, memory, and disk allocations automatically assigned to newly created users
- Optional aggregate CPU, memory, and disk caps across all UCS users (`0` is unlimited and deployment remains limited by node capacity)
- Admin management of user resource allocations
- Resource usage overview widget for users
- Integration with existing server management
8 changes: 8 additions & 0 deletions user-creatable-servers/config/user-creatable-servers.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,14 @@
'allocation_limit' => (int) env('UCS_DEFAULT_ALLOCATION_LIMIT', 0),
'backup_limit' => (int) env('UCS_DEFAULT_BACKUP_LIMIT', 0),

'default_user_cpu' => (int) env('UCS_DEFAULT_USER_CPU', 0),
'default_user_memory' => (int) env('UCS_DEFAULT_USER_MEMORY', 0),
'default_user_disk' => (int) env('UCS_DEFAULT_USER_DISK', 0),

'max_cpu' => (int) env('UCS_MAX_CPU', 0),
'max_memory' => (int) env('UCS_MAX_MEMORY', 0),
'max_disk' => (int) env('UCS_MAX_DISK', 0),

'can_users_update_servers' => (bool) env('UCS_CAN_USERS_UPDATE_SERVERS', true),
'can_users_delete_servers' => (bool) env('UCS_CAN_USERS_DELETE_SERVERS', false),

Expand Down
1 change: 1 addition & 0 deletions user-creatable-servers/lang/de/strings.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,6 +26,7 @@
'notifications' => [
'server_resources_updated' => 'Server Ressourcen Limits aktualisiert',
'might_need_restart' => 'Um die neuen Ressourcen Limits vollständig zu nutzen, ist möglicherweise ein Neustart des Servers erforderlich.',
'resource_limit_reached' => 'Die angeforderten Ressourcen überschreiten die verfügbaren Benutzer- oder UCS-Zuweisungen.',
'manual_restart_needed' => 'Bitte starte deinen Server manuell neu, um die neuen Ressourcen Limits zu übernehmen.',

'server_deleted' => 'Server gelöscht',
Expand Down
1 change: 1 addition & 0 deletions user-creatable-servers/lang/en/strings.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -25,6 +25,7 @@

'notifications' => [
'server_resources_updated' => 'Server Resource Limits updated',
'resource_limit_reached' => 'The requested resources exceed the available user or UCS allocation.',
'might_need_restart' => 'To fully use the new resource limits a server restart might be required.',
'manual_restart_needed' => 'Please manually restart your server to apply the new resource limits.',

Expand Down
41 changes: 41 additions & 0 deletions user-creatable-servers/lang/no-nb/strings.php
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
<?php

return [
'user_resource_limits' => 'Brukerreessursgrense|Brukerressursgrenser',
'user' => 'Bruker|Brukere',
'cpu' => 'CPU',
'memory' => 'Minne',
'disk' => 'Diskplass',
'server_limit' => 'Servergrense',
'no_limit' => 'Ingen grense',
'unlimited' => 'Ubegrenset',
'hint_unlimited' => '0 betyr ubegrenset',
'name' => 'Servernavn',
'egg' => 'Egg',
'left' => 'igjen',
'variables' => 'Oppstartsvariabler',

'create_server' => 'Opprett server',

'modals' => [
'delete_server_confirm' => 'Er du sikker på at du vil slette denne serveren?',
'delete_server_warning' => 'Denne handlingen kan ikke angres og all data vil gå tapt permanent.',
'delete_server' => 'Slett server',
],

'notifications' => [
'server_resources_updated' => 'Serverressursgrenser oppdatert',
'resource_limit_reached' => 'De forespurte ressursene overstiger tilgjengelig bruker- eller UCS-allokering.',
'might_need_restart' => 'For å bruke de nye ressursgrensene kan det være nødvendig å starte serveren på nytt.',
'manual_restart_needed' => 'Vennligst start serveren på nytt, manuelt, for å bruke de nye ressursgrensene.',

'server_deleted' => 'Server slettet',
'server_deleted_success' => 'Serveren ble slettet.',
'server_delete_error' => 'Kunne ikke slette server',

'server_creation_failed' => 'Kunne ikke opprette server',
'no_viable_node_found' => 'Ingen tilgjengelig node ble funnet. Vennligst kontakt paneladministratoren.',
'no_viable_allocation_found' => 'Ingen tilgjengelig allokering ble funnet. Vennligst kontakt paneladministratoren.',
'unknown_server_creation_error' => 'Ukjent feil. Vennligst kontakt paneladministratoren.',
],
];
4 changes: 2 additions & 2 deletions user-creatable-servers/plugin.json
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
{
"id": "user-creatable-servers",
"name": "User Creatable Servers",
"author": "Boy132",
"version": "1.1.1",
"author": "Boy132 & CER06",
"version": "1.1.2",
"description": "Allow users to create their own servers",
"category": "plugin",
"url": "https://hub.pelican.dev/plugins/user-creatable-servers",
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -111,23 +111,23 @@ public static function form(Schema $schema): Schema
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_cpu'))
->suffix('%')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_memory'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_disk'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('server_limit')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -65,23 +65,23 @@ public function form(Schema $schema): Schema
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_cpu'))
->suffix('%')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_memory'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_disk'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('server_limit')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,9 +50,13 @@ public function form(Schema $schema): Schema

$userResourceLimits = UserResourceLimits::where('user_id', $server->owner_id)->firstOrFail();

$maxCpu = $server->cpu + $userResourceLimits->getCpuLeft();
$maxMemory = $server->memory + $userResourceLimits->getMemoryLeft();
$maxDisk = $server->disk + $userResourceLimits->getDiskLeft();
$cpuLeft = $userResourceLimits->getCpuLeft();
$memoryLeft = $userResourceLimits->getMemoryLeft();
$diskLeft = $userResourceLimits->getDiskLeft();

$maxCpu = $cpuLeft === null ? null : $server->cpu + $cpuLeft;
$maxMemory = $memoryLeft === null ? null : $server->memory + $memoryLeft;
$maxDisk = $diskLeft === null ? null : $server->disk + $diskLeft;

$suffix = config('panel.use_binary_prefix') ? 'MiB' : 'MB';

Expand All@@ -66,31 +70,31 @@ public function form(Schema $schema): Schema
->label(trans('user-creatable-servers::strings.cpu'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->cpu > 0 ? ($maxCpu - $state . '% ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->cpu > 0 && $maxCpu - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $cpuLeft !== null ? ($maxCpu - $state . '% ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $cpuLeft !== null && $maxCpu - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->cpu > 0 ? 1 : 0)
->maxValue($userResourceLimits->cpu > 0 ? $maxCpu : null)
->maxValue($maxCpu)
->suffix('%'),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->memory > 0 ? ($maxMemory - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->memory > 0 && $maxMemory - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $memoryLeft !== null ? ($maxMemory - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $memoryLeft !== null && $maxMemory - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->memory > 0 ? 1 : 0)
->maxValue($userResourceLimits->memory > 0 ? $maxMemory : null)
->maxValue($maxMemory)
->suffix($suffix),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->disk > 0 ? ($maxDisk - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->disk > 0 && $maxDisk - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $diskLeft !== null ? ($maxDisk - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $diskLeft !== null && $maxDisk - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->disk > 0 ? 1 : 0)
->maxValue($userResourceLimits->disk > 0 ? $maxDisk : null)
->maxValue($maxDisk)
->suffix($suffix),
]);
}
Expand DownExpand Up@@ -155,11 +159,20 @@ public function save(): void
/** @var Server $server */
$server = Filament::getTenant();

$server->update([
'cpu' => $data['cpu'],
'memory' => $data['memory'],
'disk' => $data['disk'],
]);
/** @var UserResourceLimits $userResourceLimits */
$userResourceLimits = UserResourceLimits::where('user_id', $server->owner_id)->firstOrFail();

$server = $userResourceLimits->updateServerResources($server, $data['cpu'], $data['memory'], $data['disk']);

if (!$server) {
Notification::make()
->title(trans('user-creatable-servers::strings.notifications.server_resources_updated'))
->body(trans('user-creatable-servers::strings.notifications.resource_limit_reached'))
->danger()
->send();

return;
}

try {
/** @var DaemonServerRepository $repository */
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Ucs default resource limits by TheOriginalCER06 · Pull Request #150 · pelican/plugins · GitHub
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion user-creatable-servers/README.md
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
# User Creatable Servers (by Boy132)
# User Creatable Servers (by Boy132 & contributions from CER06)

Allow users to create their own servers within defined resource limits set by administrators.

Expand All@@ -10,6 +10,8 @@ Add the deployment tag (`user_creatable_servers` by default) to the nodes that s

- Users can create servers without admin intervention
- Configurable resource limits per user (CPU, RAM, disk, etc.)
- Configurable default CPU, memory, and disk allocations automatically assigned to newly created users
- Optional aggregate CPU, memory, and disk caps across all UCS users (`0` is unlimited and deployment remains limited by node capacity)
- Admin management of user resource allocations
- Resource usage overview widget for users
- Integration with existing server management
8 changes: 8 additions & 0 deletions user-creatable-servers/config/user-creatable-servers.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,14 @@
'allocation_limit' => (int) env('UCS_DEFAULT_ALLOCATION_LIMIT', 0),
'backup_limit' => (int) env('UCS_DEFAULT_BACKUP_LIMIT', 0),

'default_user_cpu' => (int) env('UCS_DEFAULT_USER_CPU', 0),
'default_user_memory' => (int) env('UCS_DEFAULT_USER_MEMORY', 0),
'default_user_disk' => (int) env('UCS_DEFAULT_USER_DISK', 0),

'max_cpu' => (int) env('UCS_MAX_CPU', 0),
'max_memory' => (int) env('UCS_MAX_MEMORY', 0),
'max_disk' => (int) env('UCS_MAX_DISK', 0),

'can_users_update_servers' => (bool) env('UCS_CAN_USERS_UPDATE_SERVERS', true),
'can_users_delete_servers' => (bool) env('UCS_CAN_USERS_DELETE_SERVERS', false),

Expand Down
1 change: 1 addition & 0 deletions user-creatable-servers/lang/de/strings.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,6 +26,7 @@
'notifications' => [
'server_resources_updated' => 'Server Ressourcen Limits aktualisiert',
'might_need_restart' => 'Um die neuen Ressourcen Limits vollständig zu nutzen, ist möglicherweise ein Neustart des Servers erforderlich.',
'resource_limit_reached' => 'Die angeforderten Ressourcen überschreiten die verfügbaren Benutzer- oder UCS-Zuweisungen.',
'manual_restart_needed' => 'Bitte starte deinen Server manuell neu, um die neuen Ressourcen Limits zu übernehmen.',

'server_deleted' => 'Server gelöscht',
Expand Down
1 change: 1 addition & 0 deletions user-creatable-servers/lang/en/strings.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -25,6 +25,7 @@

'notifications' => [
'server_resources_updated' => 'Server Resource Limits updated',
'resource_limit_reached' => 'The requested resources exceed the available user or UCS allocation.',
'might_need_restart' => 'To fully use the new resource limits a server restart might be required.',
'manual_restart_needed' => 'Please manually restart your server to apply the new resource limits.',

Expand Down
41 changes: 41 additions & 0 deletions user-creatable-servers/lang/no-nb/strings.php
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
<?php

return [
'user_resource_limits' => 'Brukerreessursgrense|Brukerressursgrenser',
'user' => 'Bruker|Brukere',
'cpu' => 'CPU',
'memory' => 'Minne',
'disk' => 'Diskplass',
'server_limit' => 'Servergrense',
'no_limit' => 'Ingen grense',
'unlimited' => 'Ubegrenset',
'hint_unlimited' => '0 betyr ubegrenset',
'name' => 'Servernavn',
'egg' => 'Egg',
'left' => 'igjen',
'variables' => 'Oppstartsvariabler',

'create_server' => 'Opprett server',

'modals' => [
'delete_server_confirm' => 'Er du sikker på at du vil slette denne serveren?',
'delete_server_warning' => 'Denne handlingen kan ikke angres og all data vil gå tapt permanent.',
'delete_server' => 'Slett server',
],

'notifications' => [
'server_resources_updated' => 'Serverressursgrenser oppdatert',
'resource_limit_reached' => 'De forespurte ressursene overstiger tilgjengelig bruker- eller UCS-allokering.',
'might_need_restart' => 'For å bruke de nye ressursgrensene kan det være nødvendig å starte serveren på nytt.',
'manual_restart_needed' => 'Vennligst start serveren på nytt, manuelt, for å bruke de nye ressursgrensene.',

'server_deleted' => 'Server slettet',
'server_deleted_success' => 'Serveren ble slettet.',
'server_delete_error' => 'Kunne ikke slette server',

'server_creation_failed' => 'Kunne ikke opprette server',
'no_viable_node_found' => 'Ingen tilgjengelig node ble funnet. Vennligst kontakt paneladministratoren.',
'no_viable_allocation_found' => 'Ingen tilgjengelig allokering ble funnet. Vennligst kontakt paneladministratoren.',
'unknown_server_creation_error' => 'Ukjent feil. Vennligst kontakt paneladministratoren.',
],
];
4 changes: 2 additions & 2 deletions user-creatable-servers/plugin.json
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
{
"id": "user-creatable-servers",
"name": "User Creatable Servers",
"author": "Boy132",
"version": "1.1.1",
"author": "Boy132 & CER06",
"version": "1.1.2",
"description": "Allow users to create their own servers",
"category": "plugin",
"url": "https://hub.pelican.dev/plugins/user-creatable-servers",
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -111,23 +111,23 @@ public static function form(Schema $schema): Schema
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_cpu'))
->suffix('%')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_memory'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_disk'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('server_limit')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -65,23 +65,23 @@ public function form(Schema $schema): Schema
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_cpu'))
->suffix('%')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_memory'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_disk'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('server_limit')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,9 +50,13 @@ public function form(Schema $schema): Schema

$userResourceLimits = UserResourceLimits::where('user_id', $server->owner_id)->firstOrFail();

$maxCpu = $server->cpu + $userResourceLimits->getCpuLeft();
$maxMemory = $server->memory + $userResourceLimits->getMemoryLeft();
$maxDisk = $server->disk + $userResourceLimits->getDiskLeft();
$cpuLeft = $userResourceLimits->getCpuLeft();
$memoryLeft = $userResourceLimits->getMemoryLeft();
$diskLeft = $userResourceLimits->getDiskLeft();

$maxCpu = $cpuLeft === null ? null : $server->cpu + $cpuLeft;
$maxMemory = $memoryLeft === null ? null : $server->memory + $memoryLeft;
$maxDisk = $diskLeft === null ? null : $server->disk + $diskLeft;

$suffix = config('panel.use_binary_prefix') ? 'MiB' : 'MB';

Expand All@@ -66,31 +70,31 @@ public function form(Schema $schema): Schema
->label(trans('user-creatable-servers::strings.cpu'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->cpu > 0 ? ($maxCpu - $state . '% ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->cpu > 0 && $maxCpu - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $cpuLeft !== null ? ($maxCpu - $state . '% ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $cpuLeft !== null && $maxCpu - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->cpu > 0 ? 1 : 0)
->maxValue($userResourceLimits->cpu > 0 ? $maxCpu : null)
->maxValue($maxCpu)
->suffix('%'),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->memory > 0 ? ($maxMemory - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->memory > 0 && $maxMemory - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $memoryLeft !== null ? ($maxMemory - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $memoryLeft !== null && $maxMemory - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->memory > 0 ? 1 : 0)
->maxValue($userResourceLimits->memory > 0 ? $maxMemory : null)
->maxValue($maxMemory)
->suffix($suffix),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->disk > 0 ? ($maxDisk - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->disk > 0 && $maxDisk - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $diskLeft !== null ? ($maxDisk - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $diskLeft !== null && $maxDisk - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->disk > 0 ? 1 : 0)
->maxValue($userResourceLimits->disk > 0 ? $maxDisk : null)
->maxValue($maxDisk)
->suffix($suffix),
]);
}
Expand DownExpand Up@@ -155,11 +159,20 @@ public function save(): void
/** @var Server $server */
$server = Filament::getTenant();

$server->update([
'cpu' => $data['cpu'],
'memory' => $data['memory'],
'disk' => $data['disk'],
]);
/** @var UserResourceLimits $userResourceLimits */
$userResourceLimits = UserResourceLimits::where('user_id', $server->owner_id)->firstOrFail();

$server = $userResourceLimits->updateServerResources($server, $data['cpu'], $data['memory'], $data['disk']);

if (!$server) {
Notification::make()
->title(trans('user-creatable-servers::strings.notifications.server_resources_updated'))
->body(trans('user-creatable-servers::strings.notifications.resource_limit_reached'))
->danger()
->send();

return;
}

try {
/** @var DaemonServerRepository $repository */
Expand Down
Loading