# Raporlama federasyonu

> Panoların ve raporların saklanan değerleri cihaz, Edge Gateway, kural ve alarm listeleriyle nasıl birleştirdiği; federasyon durumu ve kapatılması.

Kaynak: https://proxus.io/tr/docs/analyze/reporting-federation

Proxus iki tür veriyi iki ayrı veritabanında tutar. Saklanan veri noktası değerleri (telemetri) telemetri
veritabanında durur; varsayılan telemetri veritabanı ClickHouse'tur. Merkez sunucuda tanımladığınız listeler (uç
cihazlar, cihazlar, profiller, veri noktaları, alarm kuralları, alarmlar, planlı rapor gönderimleri) ise merkez
sunucunun PostgreSQL veritabanındadır. "Cihaz adına göre ortalama sıcaklık" gösteren bir pano ya da rapor, her iki
veritabanına da ihtiyaç duyar.

**Raporlama federasyonu**, merkez sunucudaki listelerin telemetri veritabanından okunabilmesini sağlar. Böylece tek
bir sorgu iki kaynağı birleştirebilir. Federasyon, birden çok merkez sunucuyu ya da tesisi birbirine bağlamaz;
yalnızca tek bir merkez sunucunun içinde çalışır.

## Merkez sunucunun yaptığı kurulum

Telemetri veritabanı ClickHouse ise ve federasyon açıksa merkez sunucu, başlatıldıktan kısa süre sonra şunları
yapar:

1. PostgreSQL'de `proxus_reporting` adlı, salt okunur bir kullanıcı oluşturur. Bu kullanıcı yalnızca belirli
   tabloları okuyabilir.
2. ClickHouse'ta `proxus_reporting` adlı bir veritabanı oluşturur. Bu veritabanındaki tablolar, PostgreSQL
   tablolarını doğrudan okur.
3. İki taraf da çalışıyorsa federasyonu **Hazır** olarak işaretler, hazır raporları ve panoları ekler ya da
   günceller.

Tablolar şunlardır: `Gateway`, `Device`, `DeviceProfile`, `DeviceProfileRegister` (veri noktaları),
`DeviceStatistics`, `Alert`, `Rule`, `ScheduledDelivery`, `ScheduledExecution` ve `DeliveryAttempt`. Sorguda bu
tabloları veritabanı adıyla birlikte yazın. Örnek:

```sql
SELECT d.DeviceName, count() AS Samples
FROM DeviceRawData AS v
INNER JOIN proxus_reporting.Device AS d ON v.DeviceId = toUInt32(d.Oid)
WHERE v.Time > now() - INTERVAL 24 HOUR
GROUP BY d.DeviceName
ORDER BY Samples DESC
```

Veriler sorgunun çalıştığı anda okunur ve hiçbir veri kopyalanmaz. Bu yüzden sorgu her zaman listelerin güncel
hâlini görür.

## Durum ekranı

**Raporlama > Raporlama federasyonu** ekranında tek bir satır bulunur: federasyonun bu merkez sunucudaki durumu.
Ekran salt okunurdur.

*Ekran görüntüsü: Katalog sürümü 1 ile Hazır durumunu gösteren Raporlama federasyonu ekranı*

| Durum | Anlamı |
| --- | --- |
| **Hazır** | İki taraf da çalışıyor. Panolar ve raporlar `proxus_reporting` tablolarını kullanabilir. Hazır içerik yüklenmiştir. |
| **Bekliyor** | Merkez sunucu kurulumu sürdürüyor. |
| **Kısmen çalışıyor** | Kurulum başarısız oldu. Merkez sunucu iki dakikada bir yeniden dener. Bir sonraki denemenin zamanı **Yeniden deneme zamanı (UTC)** alanında yazar. |
| **Devre dışı** | Federasyon, yapılandırma dosyasında kapatılmış. |

**Neden kodu** alanı durumun nedenini gösterir. Örnekler: `ready`, `initializing`, `federation_disabled`,
`postgres_provisioning_denied` (merkez sunucunun veritabanı kullanıcısının raporlama kullanıcısını oluşturma izni
yok), `postgres_provisioning_failed`, `clickhouse_mapping_failed` (ClickHouse, PostgreSQL'e ulaşamadı) ya da
`federation_initialization_failed`. **Doğrulama zamanı (UTC)**, son başarılı kontrolün zamanını gösterir. **Katalog
sürümü** ise tablo listesinin sürümüdür.

Federasyon **Hazır** durumunda değilse `proxus_reporting` tabloları pano ve rapor tasarımcılarında görünmez; hazır
raporlar ve panolar da yüklenmez.

## Federasyonu açın ya da kapatın

```toml
[Reports.ClickHouse]
# Offers the ClickHouse telemetry connection in the report designer.
Enabled = true

[Reports.PostgreSqlFederation]
# Creates the read-only reporting user and the ClickHouse tables that read the hub database.
Enabled = true
```

| Anahtar | Varsayılan | Anlamı |
| --- | --- | --- |
| `[Reports.ClickHouse] Enabled` | `true` | Rapor tasarımcısında telemetri veritabanını veri kaynağı olarak ve **Yeni telemetri SQL raporu** komutunu sunar. |
| `[Reports.PostgreSqlFederation] Enabled` | `true` | Federasyonu kurar. `false` değeri federasyonu durdurur ve `proxus_reporting` tablolarını tasarımcılarda gizler. |

Aynı ayarların ortam değişkeni adları `Reports__ClickHouse__Enabled` ve `Reports__PostgreSqlFederation__Enabled`
biçimindedir. Değişiklikten sonra merkez sunucuyu yeniden başlatın. Ayrıntılar için
[Yapılandırma anahtarları](https://proxus.io/tr/docs/reference/configuration) sayfasına bakın.

Federasyon yalnızca telemetri veritabanı ClickHouse olduğunda çalışır. ClickHouse, merkez sunucunun veritabanı
bağlantı dizesindeki adres üzerinden PostgreSQL'e ağdan erişebilmelidir (`localhost` adresine
`host.docker.internal` olarak erişilir). Ayrıca merkez sunucunun PostgreSQL kullanıcısının kullanıcı oluşturma izni
olmalıdır.

## Sonraki adımlar

- [Panolar](https://proxus.io/tr/docs/analyze/dashboards): federasyon tablolarını kullanan panolar hazırlayın.
- [Raporlar](https://proxus.io/tr/docs/analyze/reports): hazır raporları çalıştırın ve dışa aktarın.
- [Mimari](https://proxus.io/tr/docs/concepts/architecture): Proxus'un hangi veriyi nerede tuttuğu.
