Не удается правильно преобразовать с помощью Elasticsearch Watcher {{ctx.payload.hits.hits}}
Я имею конфигурацию наблюдателя следующим образом:
{
"trigger": {
"schedule": {
"interval": "5s"
}
},
"input" : {
"search" : {
"request" : {
"indices" : [ "my_index" ],
"types" : [ "my_type" ],
"body" : {
"query" : {
"match_all" : {}
}
}
}
}
},
"transform" : {
"script" : "return [ body: groovy.json.JsonOutput.toJson(ctx.payload.hits.hits)]"
},
"actions" : {
"hbase_webhook" : {
"webhook" : {
"method" : "POST",
"host" : "<some_ip>",
"port" : <some_port>,
"path": "/v0.1/_events",
"body" : "data: {{ctx.payload.body}}"
}
}
}
}
Данные, размещенные в теле, не являются действительными JSON: что-то вроде:
{ 'data: ': { '{"_index":"my_index","_type":"my_type","_source":{"key":"val"}},"_id":"<some_id>","_score":1.0}': '' } }
Я не знаю, как проанализировать этот вывод, так как JSON.parse в Node.js все равно не будет правильно его анализировать.
2 ответа
Решение
Никогда. Забудьте. Заголовки.
Я забыл:
"headers" {
"Content-type": "application/json"
}
Так что было невозможно разобрать с любым инструментом.
Разберитесь с этим, создавая оповещение для конечной точки, где мы просто хотели отправить фактические записи, соответствующие определенным критериям. См. Образец ниже:
"actions": {
"my_webhook": {
"webhook": {
"scheme": "https",
"host": "webhook.site",
"port": 443,
"method": "post",
"path": "/webhooksiteguidwouldbehere",
"params": {},
"headers": {
"Content-type": "application/json"
},
"body": "{{#toJson}}ctx.payload.hits.hits{{/toJson}}"
}
}
}
Второе примечание: если размер тела установлен на 0, ваши обращения будут возвращены как null. :)