Cockpit Arama Fonksiyonu
Bu doküman Cockpit arama fonksiyonu ile ilgili bilgileri içermektedir.
Cockpit'te yer alan arama fonksiyonu ile müşteri adı, bayi adı, kullanıcı adı, müşteri telefon numarası ile arama yapılabilmesi sağlanmaktadır. Böylelikle Cockpit kullanıcılarının müşteri bilgilerini daha hızlı ve kolay bir şekilde bulmasını sağlamaktadır.
Cockpit arama fonksiyonunu sağlamak amacıyla bir OpenSearch (Elasticsearch forku)
kullanılmıştır. OpenSearch'e ait dokümantasyon için buraya
tıklayabilirsiniz. OpenSearch kullanılarak Subscriber, Users, Distributors
ve Subscriptions tabloları arasında arama yapılabilir. Bunu sağlamak için
senkronizasyon servisleri bulunmaktadır. Senkronizasyon servisleri ile
bahsi geçen tablolar OS (OpenSearch) ile senkronize edilmektedir.
Arama fonksiyonunu sağlayan servis find adı altında bulunmaktadır. Bu servis ile
yalnızca aranacak ifadeyi istek gövdesinde (body) göndermeniz yeterlidir.
Index Yapısı
OpenSearch'de arama yapılabilmesi için öncelikle indexler oluşturulmalıdır. Cockpit arama fonksiyonu için oluşturulan indexler şunlardır:
subscriberssubscriptionsdistributorsusers
Bu indexlerin doküman yapısında OS'te dokumana ait bir ID atanmaktadır, bu ID'lerin karşılıkları şunlardır:
subscribers: Subscribers.idsubscriptions: Subscriptions.iddistributors: Distributors.idusers: Users.id
Arama Servisi
POST /v2/cockpit/search/find
curl --request POST \
--url https://bisu.com.tr/api/v2/cockpit/search/find \
--header 'Accept-Encoding: gzip, deflate, br' \
--header 'Authorization: cockpitUserToken' \
--header 'Content-Type: application/json' \
--data '{
"query": "Kerim Kaan Donmez"
}'
Bu örnekte Kerim Kaan Donmez ifadesi aranmıştır. Arama sonucunda bulunan kayıtlar
cevap gövdesinde (body) dönmektedir. Gövde içinde yer alan result objesi içinde
subscribers, distributors ve users dizileri bulunmaktadır. Bu diziler sonuçları
içermektedir. Yine gövde içinde sonuçların ayrı ayrı adetleri ile OS'nin sonuç
süresi bulunmaktadır.
Arama servisi (find) ile maksimum 25 kayıt dönmektedir.
Bunun haricinde gerektiğinde direkt olarak OpenSearch'teki bir kayda ulaşılması mümkündür.
Bunun için GET /v2/cockpit/search/document/:indexName/:documentId servisi kullanılabilir.
Doküman Getirme Servisi
GET /v2/cockpit/search/document/:indexName/:documentId
curl --request GET \
--url https://bisu.com.tr/api/v2/cockpit/search/document/subscribers/fuUZV0emXH0GxRdUEJ4THjvKzSnDmNIF \
--header 'Accept-Encoding: gzip, deflate, br' \
--header 'Authorization: cockpitUserToken'
Çağrı sonucunda ilgili doküman OS'den dönmektedir.
Senkronizasyon Servisleri ve Akış
Senkronizasyon servisleri ile OS ile tablolar arasında senkronizasyon sağlanmaktadır. 2015'ten günümüze tüm aboneler ve abonelik bilgileri OS'e aktarılmıştır. Bunun haricinde devamlı senkronizasyonu sağlayacak servisler geliştirilmiştir. Senkronizasyon servisleri devamlı olarak çalışacak şekilde ayarlanmıştır.
Senkronizasyon servisleri tam ve devamlı olarak iki grupta incelenebilir. Tam senkronizasyon servisleri tüm kayıtları OS'e aktarmak için kullanılır. Devamlı senkronizasyon servisleri yeni kayıtları OS'e aktarmak için kullanılır. Tam senkronizasyon servislerinin tekrar çalıştırılması gerekmemektedir. Devamlı senkronizasyon servisleri ise tekrar çalıştırılabilir.
Tam senkronizasyon servisleri şunlardır:
GET /v2/cockpit/search/subscriber-sync: Tüm Aboneleri OS'e aktarır.GET /v2/cockpit/search/subscription-sync: Tüm Abonelikleri OS'e aktarır.GET /v2/cockpit/search/distributor-sync: Tüm Bayileri OS'e aktarır.GET /v2/cockpit/search/user-sync: Tüm Kullanıcıları OS'e aktarır.
Devamlı senkronizasyon servisleri şunlardır:
GET /v2/cockpit/search/continuously-sync: Abone ve abonelik kayıtlarını bulunan ayın ilk gününden bulunan güne kadar OS'e aktarır.GET /v2/cockpit/search/users-distributors-sync: Tüm kullanıcı ve bayi kayıtlarını OS'e aktarır. Bu servis kullanıcı ve bayi kayıtlarının güncellenmesi durumunda OS'e aktarılması için kullanılabilir.GET /v2/cockpit/search/sync-cronjob: Abone ve abonelik kayıtlarını mevcut saatten 2 saat geriye giderek OS'e aktarır.
OS'te mevcut kayıtların tekrardan işlenmesi durumunda OS'teki kayıtlar override edilerek güncellenmiş olur.
Senkronizasyon servisleri için bir RabbitMQ kuyruğu (BULK_SYNC_SERVICE) bulunmaktadır.
Bu kuyrukta istenilen index için istenilen tarih aralığında senkronizasyon işlemi
gerçekleştirilebilmektedir.
Örnek olarak subscribers indexini 2018-01-01 tarihinden 2018-01-31 tarihine kadar
olan kayıtlarını OS'e aktarmak için aşağıdaki gibi bir RabbitMQ mesajı gönderilebilir:
{
"index": "subscribers",
"gte": "2018-01-01 00:00:00",
"lte": "2018-01-31 23:59:59"
}
Örnekte görülebileceği gibi aralık saniye cinsine kadar detaylandırılabilir.
Devamlı senkronizasyonun sağlanması için sync-cronjob ve continuously-sync servisleri devamlı olarak çalıştırılmaktadır. Bunun için bu servisleri tetikleyen birer Lambda fonksiyonu Eventbridge üzerinden çalıştırılmaktadır. Fonksiyonlar AWS Lambda arayüzünden bulunabilir.
Bunun haricinde bir abone bilgisini güncellemek veya yoksa OS'e aktarmak için de
bir servis bulunmaktadır. Bu servis POST /v2/cockpit/search/subscriber-sync/:subscriberId
adı altında bulunmaktadır. Bu servis ile abone bilgileri OS'e aktarılabilir.
Tekil Abone Senkronizasyonu Servisi
POST /v2/cockpit/search/subscriber-sync/:subscriberId
curl --request POST \
--url https://bisu.com.tr/api/v2/cockpit/search/subscriber-sync/fuUZV0emXH0GxRdUEJ4THjvKzSnDmNIF \
--header 'token: cronKey'
Bu servis ile abone bilgileri OS'e aktarılabilir. Servis çağrısı sonucunda abone bilgileri OS'e aktarılmış olur. Abone bilgileri OS'e aktarılmadan önce abone bilgileri güncellenmiş ise güncellenmiş bilgiler OS'e aktarılır.
Doküman ve Index Silme Servisleri
OS'ten doküman silme ve index silme ihtiyaçlarını karşılamak için iki ayrı servis bulunmaktadır.
Doküman Silme Servisi
DELETE /v2/cockpit/search/document/:indexName/:documentId
curl --request DELETE \
--url https://bisu.com.tr/api/v2/cockpit/search/document/users/106701 \
--header 'token: cronKey'
Index Silme Servisi
DELETE /v2/cockpit/search/index/:indexName
curl --request DELETE \
--url https://bisu.com.tr/api/v2/cockpit/search/index/destiny \
--header 'token: cronKey'
Index ve doküman silme işlemi geri alınamaz. Bu işlemi yapmadan önce mutlaka gerekli kontrolleri yapınız.
Olası Hata Durumları ve Çözümleri
- Tabloda var olan kullanıcı aramada çıkmıyor ne yapmalıyım?
Bu durumda ilgili abone kaydı OS'te bulunmamaktadır sonucu çıkmaktadır. Şayet Doküman Getirme Servisi ile de ulaşılamıyorsa, abone kaydı Tekil Abone Senkronizasyonu Servisi ile OS'e aktarılabilir.
- Hiçbir arama cevabı alamıyorum ne yapmalıyım?
Bu durumda OS servisine erişilemiyor olabilir. OS servisine erişilemiyorsa AWS OpenSearch Console üzerinden kontrol sağlanmalıdır. Kibana ve API erişimi sağlanıyorsa OpenSearch'te bir sorun olmadığı çıkarımı yapılabilir.
- CPU ve RAM kullanımı yüksek ne yapmalıyım?
OS zaman zaman bu alarmı verip normale dönüyor olabilir, bu durumda alarmı takip edip bir süre sonra normale dönmüyor ise ekibe bildirilmelidir.
| Ek Bilgiler | Açıklama |
|---|---|
| İlgili JIRA kart(lar)ı | PAE-93 |