# Sunucu Kayıt Kancaları

https://dev.wisecp.com/tr/sunucu-kayit-kancalari

Sunucu kayıtları, sunucu grupları ve içe aktarmanın sekiz kancası.

## Genel Bakış

Sunucu kayıtları, hizmetlerin üzerinde kurulduğu makinelerin bilgisini taşır. Kaydetme, güncelleme, silme ve içe aktarma adımlarının hepsi burada.

? Bir ayrım hayati: **kayıt filtresinde parola açık metindir**, olaylarda ise şifrelidir. Filtre, şifrelemenin öncesinde durur.

## Referans

### Kaydedilecek sunucu verisini değiştirme

filterproduct.server_save_data

`AdminProducts` parola AÇIK METİN

Sunucu kaydı yazılmadan önce çalışır. Erişim bilgilerinin şifrelenmesinden **önceki** noktadır.

Parametreler 3

$set_dataarraybağlaYazılacak sunucu verisi: adı, adresi, kullanıcı adı, **parolası**, ad sunucuları, kapasitesi ve erişim anahtarı. ? Parola burada **açık metindir** (şifreleme bu filtreden sonra yapılır). Kaydı olduğu gibi günlüğe, dış servise ya da kendi tablonuza yazmak parolayı düz metin sızdırır.

$typestringSunucu modülünün tipi.

$detailarrayMevcut kayıt; yeni kayıtta boştur.

Dönüş 1

voidDönüş yoksayılır; verinin üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:product.server_save_data', 10, function (&$set_data, $type, $detail) {
    // PAROLA BURADA ACIK METIN: kaydi oldugu gibi hicbir yere yazmayin.
    $set_data['ns1'] = Acme::defaultNs(1);
    $set_data['ns2'] = Acme::defaultNs(2);
});
```

### Sunucu eklenmesini izleme

actionproduct.server_created

`AdminProducts` parola şifreli

Yeni bir sunucu kaydı oluşturulduktan sonra çalışır.

Parametreler 3

$idintYeni sunucunun kimliği.

$set_dataarrayKaydedilen veri. Filtrenin aksine parola burada **şifrelidir**: okuyarak kullanamazsınız.

$typestringSunucu modülünün tipi.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:product.server_created', 10, function ($id, $set_data, $type) {
    // Parola burada sifreli: izleme sistemine yalniz adresi verin.
    Acme::addMonitor($id, $set_data['ip'] ?? '');
});
```

### Sunucu güncellemesini izleme

actionproduct.server_updated

`AdminProducts` önce ve sonra elinizde

Bir sunucu kaydı güncellendikten sonra çalışır.

Parametreler 4

$idintSunucunun kimliği.

$set_dataarrayYeni veri; parola şifrelidir.

$typestringYeni modül tipi.

$detailarrayGüncelleme **öncesi** kayıt; farkı ölçmek içindir.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:product.server_updated', 10, function ($id, $set_data, $type, $detail) {
    // Adres degistiyse izlemeyi tasiyin.
    if (($detail['ip'] ?? '') !== ($set_data['ip'] ?? ''))
        Acme::moveMonitor($id, $set_data['ip'] ?? '');
});
```

### Sunucu silmeyi durdurma

gateproduct.server_delete

`AdminProducts` yazımdan önce

Bir sunucu kaydı silinmeden önce çalışır. Kayıt gider, **sunucunun kendisi ve üstündeki hesaplar kalır**.

Parametreler 2

$idintSilinecek sunucunun kimliği.

$detailarraySunucunun kaydı: adı, adresi ve tipi.

Dönüş 1

string|null**Boş olmayan bir metin işlemi engeller** ve yöneticiye hata olarak gösterilir. Boş dönüş devam ettirir.

Dinleyici PHP

```php
Hook::add('gate:product.server_delete', 10, function ($id, $detail) {
    // Kayit gider ama sunucudaki hesaplar kalir.
    if (Acme::serverHasServices($id)) return 'Bu sunucuda calisan hizmetler var.';

    return null;
});
```

### Sunucu silinmesini izleme

actionproduct.server_deleted

`AdminProducts` silme sonrası

Sunucu kaydı silindikten sonra çalışır.

Parametreler 2

$iintSilinen sunucunun kimliği.

$detailarraySilme anındaki son kayıt.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:product.server_deleted', 10, function ($i, $detail) {
    Acme::dropMonitor($i);
});
```

### Sunucudan içe aktarmayı izleme

actionproduct.server_imported

`AdminProducts` özet metin listesi

Bir sunucudaki hesaplar hizmet olarak içe aktarıldıktan sonra çalışır.

Parametreler 2

$serverarrayİçe aktarmanın yapıldığı sunucu kaydı.

$importedarrayOluşan hizmetlerin özeti. Her eleman bir **metindir**, kayıt değil: ad ve kimliği bir arada taşır. Kimlik gerekiyorsa metinden ayrıştırmak yerine hizmeti sorgulayın.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:product.server_imported', 10, function ($server, $imported) {
    // Elemanlar METINDIR, kayit degil.
    Acme::notifyOps(count($imported) . ' hizmet ice aktarildi: ' . ($server['name'] ?? ''));
});
```

### Sunucu grubu verisini değiştirme

filterproduct.server_group_save_data

`AdminProducts` sunucular metin listesi

Sunucu grubu kaydedilmeden önce çalışır.

Parametreler 2

$dataarraybağlaYazılacak grup verisi: adı, doldurma biçimi ve sunucuları. Sunucu listesi **dizi değil, virgülle ayrılmış metindir**: dizi gibi işlemeden önce ayırın.

$detailarrayMevcut kayıt; yeni kayıtta boştur.

Dönüş 1

voidDönüş yoksayılır; verinin üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:product.server_group_save_data', 10, function (&$data, $detail) {
    // Sunucu listesi VIRGULLU METIN, dizi degil.
    $ids = array_filter(explode(',', (string) ($data['servers'] ?? '')));
    $data['servers'] = implode(',', Acme::onlyHealthy($ids));
});
```

### Sunucu grubu silmeyi durdurma

gateproduct.server_group_delete

`AdminProducts` yazımdan önce

Bir sunucu grubu silinmeden önce çalışır.

Parametreler 2

$idintSilinecek grubun kimliği.

$detailarrayGrubun kaydı.

Dönüş 1

string|null**Boş olmayan bir metin işlemi engeller** ve yöneticiye hata olarak gösterilir. Boş dönüş devam ettirir.

Dinleyici PHP

```php
Hook::add('gate:product.server_group_delete', 10, function ($id, $detail) {
    if (Acme::groupBoundToProducts($id)) return 'Bu gruba bagli urunler var.';

    return null;
});
```

## Tuzaklar

> **Kayıt filtresinde parola açık metindir**
> 
> Sunucu kayıt filtresi **şifrelemeden önce** çalışır: parola alanı düz metin taşır. O diziyi olduğu gibi günlüğe yazmak, dış servise göndermek ya da kendi tablonuza kopyalamak, sunucu parolasını düz metin sızdırmaktır. Olaylarda aynı alan şifrelidir.

> **Sunucu kaydını silmek makineyi boşaltmaz**
> 
> Silme yalnız **kaydı** kaldırır. Sunucudaki hesaplar, alanlar ve veriler yerinde kalır; sistem onları artık tanımaz. Silme kapısı, bunu fark edebileceğiniz son noktadır.

## İlgili Makaleler

- Ürün Kancaları
- [Hizmet Kancaları](https://dev.wisecp.com/tr/hizmet-yasam-dongusu-kancalari)
- [Kancalar Nasıl Çalışır](https://dev.wisecp.com/tr/kancalar-nasil-calisir)
