Alastor Posté(e) le 1 octobre 2015 Partager Posté(e) le 1 octobre 2015 Bonjour amis codeurs, pour les besoins d'une mise à disposition d'informations sur un site intranet, j'ai besoin d'intégrer des informations provenant de Kibana (pas de SQL donc, moteur ElasticSearch). Les requêtes se font donc sous la forme de commandes CURL : Exemple : curl -XGET 'XXX -d '{ "facets": { "terms": { "terms": { "field": "app_info2", "size": 50, "order": "count", "exclude": [] }, "facet_filter": { "fquery": { "query": { "filtered": { "query": { "bool": { "should": [ { "query_string": { "query": "app_priority: \"2\"" } } ] } }, "filter": { "bool": { "must": [ { "range": { "@timestamp": { "from": 1443684216839, "to": 1443705816839 } } }, { "fquery": { "query": { "query_string": { "query": "host:(XXXX XXXX)" } }, "_cache": true } }, { "fquery": { "query": { "query_string": { "query": "_type:(\"syslog\")" } }, "_cache": true } } ] } } } } } } } }, "size": 0 }' J'ai déjà bossé avec CURL et PHP, mais c'était uniquement pour récupérer le code source d'une page, donc relativement plus simple à développer. Là j'ai un peu plus de mal... Si quelqu'un peut me filer un coup de main, ce serait sympa :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Arcy Posté(e) le 1 octobre 2015 Partager Posté(e) le 1 octobre 2015 J'peux juste te souhaiter bonne chance (et te conseiller d'utiliser la balise pour le code). Lien vers le commentaire Partager sur d’autres sites More sharing options...
Alastor Posté(e) le 1 octobre 2015 Auteur Partager Posté(e) le 1 octobre 2015 Haha, merci Bon j'ai peut être une piste, j'avais pas fait attention mais ça ressemble quand même pas mal à du JSON, je vais voir s'il y a pas quelque chose à faire de ce côté. Mais je reste preneur de toute piste pouvant m'aider ^^ Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cara62 Posté(e) le 2 octobre 2015 Partager Posté(e) le 2 octobre 2015 Tiens tu trouveras peut être ton bonheur ici Après je sais pas essaie d'en faire un fichier, de récupérer le contenu pour voir ce que tu récupères en php :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Alastor Posté(e) le 2 octobre 2015 Auteur Partager Posté(e) le 2 octobre 2015 Je veux pouvoir récupérer le résultat de la commande CURL. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cara62 Posté(e) le 2 octobre 2015 Partager Posté(e) le 2 octobre 2015 Je veux pouvoir récupérer le résultat de la commande CURL. Et ça ? Après nativement je pense pas que tu puisses récupérer le résultat de curl, Après ce que tu peux faire c'est de voir si tu peux stocker tes résultats de requêtes dans un fichier, json par exemple, ça sera largement plus simple comme ça. (certes c'est chiant, et plus lourd) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Alastor Posté(e) le 2 octobre 2015 Auteur Partager Posté(e) le 2 octobre 2015 Ah c'est bon ça, bon pour le coup c'est vrai que j'aurais pu rechercher directement sur leur site pour trouver quelque chose ... Merci, je vais aller tester ça :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
RinDman Posté(e) le 2 octobre 2015 Partager Posté(e) le 2 octobre 2015 Je suppose que tu récupère les résultats sous forme d'entête http ou autre ? Tu peux également faire un echo de ces résulats ... J'ai travaillé sur le web client d'hadoop à l'arrache : https://github.com/CamilleGR/Wada/tree/master/uploadOnHdfs Le client en Js contient les commandes curl, les options surtout. Et le fichier php exécute ces commandes. Ensuite faut voir la doc pour interpréter les résultats PS : Le truc sur elastic chez nous ne marche pas Lien vers le commentaire Partager sur d’autres sites More sharing options...
Alastor Posté(e) le 2 octobre 2015 Auteur Partager Posté(e) le 2 octobre 2015 Oui, je pensais récupérer tout le contenu dans une variable PHP et faire le tri ensuite, vu que côté curl ça reste un XGET avec options. Effectivement, j'ai regardé un peu ce matin comment configurer/installer/utiliser leur API et ça a l'air assez usine à gaz, si en plus tu me dis que ça marche pas, je vais ptet essayer de trouver une autre solution En fait je pense que je bloque juste sur l'équivalence en PHP de l'option "-d" de curl, je ne sais pas trop quelle option utiliser dans le curl_setopt(), j'ai rien trouvé concernant un paramètre DATA ou SETDATA... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cara62 Posté(e) le 2 octobre 2015 Partager Posté(e) le 2 octobre 2015 Oui, je pensais récupérer tout le contenu dans une variable PHP et faire le tri ensuite, vu que côté curl ça reste un XGET avec options. Effectivement, j'ai regardé un peu ce matin comment configurer/installer/utiliser leur API et ça a l'air assez usine à gaz, si en plus tu me dis que ça marche pas, je vais ptet essayer de trouver une autre solution En fait je pense que je bloque juste sur l'équivalence en PHP de l'option "-d" de curl, je ne sais pas trop quelle option utiliser dans le curl_setopt(), j'ai rien trouvé concernant un paramètre DATA ou SETDATA... T'as cherché sur stackoverflow ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Alastor Posté(e) le 2 octobre 2015 Auteur Partager Posté(e) le 2 octobre 2015 J'ai pas mal avancé grâce à StackOverflow oui :) Bon, pour info, voilà ce que j'ai codé : <?php$json = '{ "facets": { "terms": { "terms": { "field": "app_info2", "size": 50, "order": "count", "exclude": [] }, "facet_filter": { "fquery": { "query": { "filtered": { "query": { "bool": { "should": [ { "query_string": { "query": "app_priority: \"2\"" } } ] } }, "filter": { "bool": { "must": [ { "range": { "@timestamp": { "from": 1443757510673, "to": 1443779110673 } } }, { "fquery": { "query": { "query_string": { "query": "host:(XXXX XXXX)" } }, "_cache": true } }, { "fquery": { "query": { "query_string": { "query": "_type:(\"syslog\")" } }, "_cache": true } } ] } } } } } } } }, "size": 0}';$url = 'XXX';$jsonDataEncoded = json_encode($json, true);$ch = curl_init();// Définition des paramètres CURL (URL,données POST,retours du CURL,user-agent)curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);$data = curl_exec($ch);echo $data;curl_close($ch); Et le résultat obtenu : { "error" : "SearchPhaseExecutionException[Failed to execute phase [query_fetch], all shards failed; shardFailures {[yMpf2sP6QFe_hnXU2JglNA][trz-traceo-2015.10.02][0]: SearchParseException[[trz-traceo-2015.10.02][0]: from[-1],size[-1]: Parse Failure [Failed to parse source [\"{\\r\\n \\\"facets\\\": {\\r\\n \\\"terms\\\": {\\r\\n \\\"terms\\\": {\\r\\n \\\"field\\\": \\\"app_info2\\\",\\r\\n \\\"size\\\": 50,\\r\\n \\\"order\\\": \\\"count\\\",\\r\\n \\\"exclude\\\": []\\r\\n },\\r\\n \\\"facet_filter\\\": {\\r\\n \\\"fquery\\\": {\\r\\n \\\"query\\\": {\\r\\n \\\"filtered\\\": {\\r\\n \\\"query\\\": {\\r\\n \\\"bool\\\": {\\r\\n \\\"should\\\": [\\r\\n {\\r\\n \\\"query_string\\\": {\\r\\n \\\"query\\\": \\\"app_priority: \\\\\\\"2\\\\\\\"\\\"\\r\\n }\\r\\n }\\r\\n ]\\r\\n }\\r\\n },\\r\\n \\\"filter\\\": {\\r\\n \\\"bool\\\": {\\r\\n \\\"must\\\": [\\r\\n {\\r\\n \\\"range\\\": {\\r\\n \\\"@timestamp\\\": {\\r\\n \\\"from\\\": 1443757510673,\\r\\n \\\"to\\\": 1443779110673\\r\\n }\\r\\n }\\r\\n },\\r\\n {\\r\\n \\\"fquery\\\": {\\r\\n \\\"query\\\": {\\r\\n \\\"query_string\\\": {\\r\\n \\\"query\\\": \\\"host:(CPY00702 CPY00718)\\\"\\r\\n }\\r\\n },\\r\\n \\\"_cache\\\": true\\r\\n }\\r\\n },\\r\\n {\\r\\n \\\"fquery\\\": {\\r\\n \\\"query\\\": {\\r\\n \\\"query_string\\\": {\\r\\n \\\"query\\\": \\\"_type:(\\\\\\\"syslog\\\\\\\")\\\"\\r\\n }\\r\\n },\\r\\n \\\"_cache\\\": true\\r\\n }\\r\\n }\\r\\n ]\\r\\n }\\r\\n }\\r\\n }\\r\\n }\\r\\n }\\r\\n }\\r\\n }\\r\\n },\\r\\n \\\"size\\\": 0\\r\\n}\"]]]; nested: ElasticsearchParseException[Expected START_OBJECT but got VALUE_STRING null]; }]", "status" : 400 } Je pense que je suis pas loin, un problème d'encodage ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
maximeK Posté(e) le 2 octobre 2015 Partager Posté(e) le 2 octobre 2015 Toutes tes valeurs sont en UTF8 ? car le json_encode retourne false si c'est pas de l'utf8. Ensuite je pense que tu confond les choses (facile a dire quand on écrit pas le code hein :) ) $jsonDataEncoded = json_encode($json, true); Ton erreur viens du fait que tu lui passe une chaîne de caractère, alors que tu peux très bien lui passer un Array, la tu encode un Json en Json d'ou ton problème au final de l'encodage de tes sauts de ligne \r\n en \\r\\n Parse Failure [Failed to parse source [\"{\\r\\n \\\"facets\\\": {\\r\\n \\\"terms\\\": {\\r\\n \\\"terms\\\": {\\r\\n \\\"field\\\": \\\"app_info2\\\",\\r\\n \\\"size\\\": 50,\\r\\n \\\"order\\\": \\\"count\\\",\\r\\n \\\"exclude\\\": []\\r\\n },\\r\\n \\\"facet_filter\\\": {\\r\\n \\\"fquery\\\": {\\r\\n \\\"query\\\": {\\r\\n \\\"filtered\\\": {\\r\\n \\\"query\\\": {\\r\\n \\\"bool\\\": {\\r\\n \\\"should\\\": [\\r\\n {\\r\\n \\\"query_string\\\": {\\r\\n \\\"query\\\": \\\"app_priority: \\\\\\\"2\\\\\\\"\\\"\\r\\n }\\r\\n }\\r\\n ]\\r\\n }\\r\\n },\\r\\n \\\"filter\\\": {\\r\\n \\\"bool\\\": {\\r\\n \\\"must\\\": [\\r\\n {\\r\\n \\\"range\\\": {\\r\\n \\\"@timestamp\\\": {\\r\\n \\\"from\\\": 1443757510673,\\r\\n \\\"to\\\": 1443779110673\\r\\n }\\r\\n }\\r\\n },\\r\\n {\\r\\n \\\"fquery\\\": {\\r\\n \\\"query\\\": {\\r\\n \\\"query_string\\\": {\\r\\n \\\"query\\\": \\\"host:(CPY00702 CPY00718)\\\"\\r\\n }\\r\\n },\\r\\n \\\"_cache\\\": true\\r\\n }\\r\\n },\\r\\n {\\r\\n \\\"fquery\\\": {\\r\\n \\\"query\\\": {\\r\\n \\\"query_string\\\": {\\r\\n \\\"query\\\": \\\"_type:(\\\\\\\"syslog\\\\\\\")\\\"\\r\\n }\\r\\n },\\r\\n \\\"_cache\\\": true\\r\\n }\\r\\n }\\r\\n ]\\r\\n }\\r\\n }\\r\\n }\\r\\n }\\r\\n }\\r\\n }\\r\\n }\\r\\n },\\r\\n \\\"size\\\": 0\\r\\n}\"]]]; nested: ElasticsearchParseException[Expected START_OBJECT but got VALUE_STRING null]; }]", "status" : 400 } Tranforme ton $Json en array et sa va marcher du tonnerre :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Alastor Posté(e) le 2 octobre 2015 Auteur Partager Posté(e) le 2 octobre 2015 Oula, j'ai un peu la tête dans le guidon, le weekend va faire du bien... Je teste ça lundi, merci pour le coup de main ! Edit : Bon du coup, avec les idées claires, ça va mieux ! J'ai juste retiré le json_encode comme me l'a préconisé maximeK et effectivement ça fonctionne beaucoup mieux. Merci à toi ! Il ne me reste plus qu'à modifier la partie Timestamp de la requête pour que ça ne me renvoie les données que sur la période de temps que je veux et j'aurais plus qu'à mettre en forme les résultats. Je passe le topic en résolu du coup, merci à tous ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.