Skip to main content

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:

  • subscribers
  • subscriptions
  • distributors
  • users

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.id
  • subscriptions: Subscriptions.id
  • distributors: Distributors.id
  • users: 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'
UYARI

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 BilgilerAçıklama
İlgili JIRA kart(lar)ıPAE-93