Genel Bakış
Uygulama durumunu ve hataları gerçek zamanlı izleyin.
Hata Trendi
Son 7 güne ait hata olayları
Hızlı Bildirim Gönder
Tüm kullanıcılara anlık mesaj yayınlayın.
Kritik Aktif Hatalar
Çözüm bekleyen kritik olaylar
Detayları Görmek İçin Bir Hata Seçin
Yanda bulunan listeden herhangi bir hata kaydına tıklayarak tüm stack trace, aygıt parametreleri ve etkilenen kullanıcı bilgilerini inceleyebilirsiniz.
Push Bildirim Kampanyası
Firebase Cloud Messaging (FCM) API ile bildirim gönderin.
Cihaz / OS Dağılımı
Hataların platformlara göre yüzdesi
Hata Seviyesi Dağılımı
Critical / Warning / Info oranları
Teknik Mimari ve Kurulum Rehberi
Uygulamadan bu panele nasıl veri gönderebileceğinizi öğrenin.
3 Adımda Gerçek Zamanlı İzleme
İstemci Hata Yakalama
Uygulamada (Flutter, React Native, Web) oluşan yakalanmamış hatalar global hata dinleyicisiyle yakalanır ve POST /api/errors/report endpoint'ine gönderilir.
Backend Loglama & FCM
PulseMonitor sunucusu hatayı SQLite'a kaydeder. Kritik hata ise Firebase Admin SDK aracılığıyla yöneticiye anlık FCM push bildirimi tetiklenir.
Bu Panel
Hata günlükleri gerçek zamanlı listelenir, filtrelenir ve çözümlenir. Panel üzerinden etkilenen kullanıcılara veya tüm kitleye push bildirimi gönderilebilir.
Hata Raporlama API
İstemci uygulamanızdan bu endpoint'e POST isteği gönderin:
POST /api/errors/report
Headers:
Content-Type: application/json
X-API-Key: YOUR_REPORT_API_KEY
Body:
{
"title": "TypeError: null is not an object",
"message": "Cannot read property 'avatar' of null",
"stack": "at UserHeader.js:14:28\n at ...",
"level": "critical", // critical | warning | info
"os": "iOS",
"os_version": "17.4",
"device": "iPhone 15 Pro",
"app_version": "1.2.0",
"userId": "usr_12345",
"userToken": "fcm_token_..."
}
Aynı başlıklı hata tekrar geldiğinde count otomatik artar (deduplication).
Flutter ile Otomatik Hata Yakalama
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:flutter/foundation.dart';
import 'package:device_info_plus/device_info_plus.dart';
Future<void> reportError(Object error, StackTrace stack) async {
final info = await DeviceInfoPlugin().deviceInfo;
await http.post(
Uri.parse('https://YOUR_SERVER/api/errors/report'),
headers: {
'Content-Type': 'application/json',
'X-API-Key': 'YOUR_REPORT_API_KEY',
},
body: jsonEncode({
'title': error.runtimeType.toString(),
'message': error.toString(),
'stack': stack.toString(),
'level': 'critical',
'os': defaultTargetPlatform == TargetPlatform.iOS ? 'iOS' : 'Android',
'app_version': '1.0.0',
}),
);
}
// main.dart'ta:
void main() {
FlutterError.onError = (details) {
reportError(details.exception, details.stack ?? StackTrace.empty);
};
runZonedGuarded(() => runApp(MyApp()), (error, stack) {
reportError(error, stack);
});
}
Firebase FCM Kurulumu
Sunucu .env Yapılandırması
Firebase Console → Project Settings → Service Accounts → Generate new private key
FIREBASE_PROJECT_ID=berber-app-xxxxx
FIREBASE_CLIENT_EMAIL=firebase-adminsdk@berber-app.iam.gserviceaccount.com
FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
ADMIN_FCM_TOKEN=your_device_fcm_token_here
Flutter FCM Topic Aboneliği
Uygulamanız başlarken FCM topic'e abone olun. PulseMonitor "all-users" topic'ine gönderim yapar.
import 'package:firebase_messaging/firebase_messaging.dart';
// Kullanıcı girişinden sonra:
await FirebaseMessaging.instance.subscribeToTopic('all-users');
// iOS kullanıcıları için:
await FirebaseMessaging.instance.subscribeToTopic('ios-users');