Я делаю следующее: мне нужно получить файл XML с сервера. Этот XML содержит множество журналов, каждый из которых анализируется и превращается в событие beat.event
. Я хочу отправить все журналы в elasticsearch или не отправить ни одного. Могу ли я организовать масштабное мероприятие и опубликовать sh все сразу? Или создайте очередь для хранения всех событий, которые необходимо отправить, так что если одно событие не может быть отправлено, транзакция завершилась и elasticsearch откатился?
Слово здесь - транзакция. Я хочу опубликовать sh все или ничего. Есть ли способ добиться этого?
Мой код ниже:
for i := 0; i < len(s.List); i++ {
//fmt.Printf("Starting to build the event %v \n", i)
event := beat.Event{
Timestamp: time.Now(),
Fields: common.MapStr{
"id": s.List[i].Id,
"sipCallId": s.List[i].SipCallId,
"originNumber": s.List[i].OriginNumber,
"targetNumber": s.List[i].TargetNumber,
"originDDD": s.List[i].OriginDDD,
"targetDDD": s.List[i].TargetDDD,
"originInstitution": s.List[i].OriginInstitution,
"targetInstitution": s.List[i].TargetInstitution,
"setupTime": s.List[i].SetupTime.SetupTime,
"connectTime": s.List[i].ConnectTime.ConnectTime,
"disconnectTime": s.List[i].DisconnectTime.DisconnectTime,
"duration": s.List[i].Duration,
"originType": s.List[i].OriginType,
"targetType": s.List[i].TargetType,
"answered": s.List[i].Answered,
"callCompleted": s.List[i].CallCompleted,
"sipJustification": s.List[i].SipJustification,
//Dados adicionados como argumentos pra chamada do programa.
"tipoDoEquipamento": bt.config.TipoEquipamento,
"versaoDoEquipamento": bt.config.Versao,
"nivelDoEquipamento": bt.config.Nivel,
"instituição": bt.config.Instituicao,
"enderecoIP": bt.config.Ip,
"timestampColeta": time.Now(),
"consolidado": bt.config.Consolidado,
"timestampConsolidado": bt.config.TimestampConsolidado,
},
}
bt.client.Publish(event)
logp.Info("Event sent")
//fmt.Printf("Event %v published \n", i)