Ana içeriğe geç

3.3.2. İstemci API (Client)#

Log Search uygulamasının rest api uçlarını kullanmayı sağlayan yapıdır.

Bağımlılıklar#

Gradle Bağımlılıkları

api (
        [group: 'tr.com.havelsan.framework.logger.cloud', name: 'hvl-logger-search-cloud-client']
)

YAML#

hvl:
  logger:
    search:
      url: ${LOGGER_SEARCH_URL:http://hvlloggersearch:8093}
      path: ${LOGGER_SEARCH_PATH:/es}
      indices-name: ${LOGGER_SEARCH_INDICES_NAME:hvl-*}

hvl-infra üzerinden Config Server kullanıldığı durumlarda bootstrap.yml dosyasındaki spring.cloud.config.profile pathine hvl-logger değerinin eklenmesi gerekmektedir. Böylece yukarıdaki özelliklerin ve daha fazlasının olduğu application-hvl-logger.yml dosyası projeye dahil olacaktır.

Uyarı

hvl.logger.producer.enabled değeri geliştirme ortamları için varsayılan olarak false olarak ayarlanmıştır.

Rest Servis Tanımı#

Feign client uçlarını kullanabilmek için configurasyon bean'ine asağıdaki annotasyonlar eklenmelidir.

Yukarıda anlatılan tanımlama yapıldıktan sonra kullanım için

@Autowired
private HvlLogSearchRestService logSearchRestService;

kullanılacağı sınıfa servis ile ilgili kod bloğu eklenmelidir.

Kullanım#

Example

// username == 'acuhadaroglu' && (eventType == ('event1' OR 'event2'))
final HvlLogSearchQueryModel logSearchQueryModel = HvlLogSearchQueryModel.builder()
        .withIndices("*")
        .and("username", HvlSearchOperation.STRING_EQUALS, "acuhadaroglu")
        .subCriteria(HvlLogSearchSubQueryModel.builder()
                .or("eventType", HvlSearchOperation.STRING_EQUALS, "event1")
                .or("eventType", HvlSearchOperation.STRING_EQUALS, "event2")
        )
        .build();

// (username == ('acuhadaroglu' OR 'may')) && (eventType == ('event1' OR 'event2'))
final HvlLogSearchQueryModel logSearchQueryModel = HvlLogSearchQueryModel.builder()
        .withIndices("index1*,index2*")
        .subCriteria(HvlLogSearchSubQueryModel.builder()
                .or("username", HvlSearchOperation.STRING_EQUALS, "acuhadaroglu")
                .or("username", HvlSearchOperation.STRING_EQUALS, "may")
        )
        .subCriteria(HvlLogSearchSubQueryModel.builder()
                .or("eventType", HvlSearchOperation.STRING_EQUALS, "event1")
                .or("eventType", HvlSearchOperation.STRING_EQUALS, "event2")
        )
        .build();

try {
    //list için
    List<HvlEventLogModel> = logSearchRestService.searchList(logSearchQueryModel).getBody();

    //page için
    HvlPage<HvlEventLogModel> = logSearchRestService.searchPage(logSearchQueryModel).getBody();
} catch (HvlLogSearchException e) {
    throw new HvlEventLogSearchException(e.getMessage());
}

Rest Client Kullanımı

Service metodlarının detaylarına swagger dokümanından ulaşabilirsiniz.

Sıralama#

Logger search uygulaması ile elasticsearch üzerinden sorgulama yaparken dikkat edilmesi gereken bazı durumlar vardır. Aksi durumda sonuçlar istenildiği gibi dönmeyebilir.

Varsayılan durumda elasticsearch üzerinden yapılan sorgulamalarda türkçe karakter ve büyük/küçük harfler gruplanarak sonuç dönmektedir. Örneğin; büyük harf ile başlayan kelimeler, küçük harf ile başlayanlardan önce sıralanmaktadır, veya türkçe karakterler en son gelerek yanlış sıralanmaktadır.

String alanların düzgün sıralanmasını sağlamak için sortPropertiesTypeMap alanı kullanılmalıdır.

final HvlLogSearchQueryModel logSearchQueryModel = HvlLogSearchQueryModel.builder()
        .withIndices("*")
        //some criteria
        .withPage(HvlLogSearchPage.builder()
                .withSort(new HvlSort(HvlDirection.ASC, new String[]{"username"}))
                .withSortPropertiesTypeMap(Map.of("username", HvlLogSearchDataType.STRING))
                .build())
        .build();