Ana içeriğe geç

Veri Akışı (Data Flow)

Bu bölüm, Graytool'un ana veri akışlarını açıklar.

Aktivasyon Akışı

Kullanıcı URL'yi ziyaret eder

background.ts → tabs.onUpdated dinleyicisi tetiklenir

hasPermissionForUrl() → İzin kontrol edilir
↓ (izin varsa)
checkUrlMatch() → URL, pattern listesiyle karşılaştırılır
↓ (eşleşme varsa)
injectContentScript() → Content script enjekte edilir

chrome.tabs.sendMessage({ type: "ACTIVATE", matchedPatternId })

inject/index.ts → ACTIVATE mesajını alır

activate(matchedPatternId)
├─ getConfig() → Yapılandırma yüklenir
├─ injectStyles() → Stiller enjekte edilir
├─ setupJsonViewerListener() → JSON viewer hazırlanır
├─ setupSearchHistory() → Arama geçmişi hazırlanır
├─ processExistingRows() → Mevcut satırlar işlenir
├─ startObserver() → MutationObserver başlatılır
└─ startPeriodicProcessing() → 2sn'de bir tarama başlar

Buton Enjeksiyon Akışı

Satır tespit edilir (observer / periodic / initial)

processRow(row, config, matchedPatternId)

PROCESSED_ATTR kontrolü → Zaten işlenmiş mi?
↓ (hayır)
discoverRowFields(row) → Alanlar keşfedilir
├─ Strateji 1: Data attributes
├─ Strateji 2: JSON parse
└─ Strateji 3: DOM patterns

deduplicateFields() → Tekrar edenler elenir

Satır işaretlenir: data-graytool-processed="true"

fieldMap oluşturulur: { name → value }

injectButtons(row, config, fieldMap, fields, matchedPatternId)
├─ Her buton için:
│ ├─ Buton enabled mı?
│ ├─ isButtonAllowedForPattern() → URL pattern kontrolü
│ ├─ evaluateConditions() → Koşullar geçerli mi?
│ ├─ resolveUrl() → URL template çözümlenir
│ └─ Buton DOM'a eklenir
└─ Message detail butonu eklenir

JSON Viewer Akışı

Kullanıcı 🔍 mesaj detay butonuna tıklar

CustomEvent dispatch: "graytool:open-detail"
payload: { fields, config, row }

json-viewer.ts dinleyicisi tetiklenir

defaultMessageField ayarlanmış mı?
├─ EVET → Doğrudan o alanın JSON'u parse edilir
└─ HAYIR → showFieldSelector() çağrılır
├─ Tek alan → Otomatik seçilir
└─ Birden fazla → Modal gösterilir
├─ Kullanıcı seçer
└─ "Save as default" → saveConfig()

JSON viewer paneli açılır
├─ JSON ağaç görünümü oluşturulur
├─ Arama, filtre, kopyalama hazırlanır
└─ Sekmeler (Raw, DevTools, Code) yüklenir

Yapılandırma Güncelleme Akışı

Kullanıcı ayarlar sayfasında değişiklik yapar

saveConfig(partial) → chrome.storage.sync.set()

chrome.storage.onChanged dinleyicisi tetiklenir (background.ts)

Tüm sekmelere CONFIG_UPDATED mesajı gönderilir

Her content script:
├─ Mevcut observer durdurulur
├─ İşlenmiş işaretler temizlenir
├─ Yeni yapılandırma yüklenir
└─ activate() tekrar çalıştırılır

Arama Geçmişi Akışı

Kullanıcı Graylog'da arama yapar (Enter / Ara butonu)

search-history.ts → Ace Editor dinleyicisi tetiklenir

extractAceEditorValue() → Sorgu metni çıkarılır

saveSearchQuery(patternId, query)
├─ Aynı sorgu varsa güncellenir
├─ 50 limit kontrol edilir
└─ chrome.storage.local'e kaydedilir

Kullanıcı Ctrl+H'a basar

openHistoryPanel() → Geçmiş yüklenir ve gösterilir

Kullanıcı sorguya tıklar

applySearchQuery(query)
├─ Ace Editor textarea'sına yazılır
├─ Input/change olayları dispatch edilir
├─ Arama butonu tıklanır
└─ Panel kapanır

Deaktivasyon Akışı

background.ts → URL artık eşleşmiyor / eklenti devre dışı

DEACTIVATE mesajı gönderilir

inject/index.ts → deactivate()
├─ MutationObserver durdurulur
├─ Periyodik tarama durdurulur
├─ Enjekte edilen stiller kaldırılır
└─ İşlenmiş işaretler temizlenir