Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hello,
I have an API which give me some information about my IT Infrastructure.
Here it's an example :
curl -i -k -H USER:plop -H PASSWORD:plop https://mySite.com/index.php/ApiGetInventory/nna//serveur/Linux_001"
API name is : ApiGetInventory
there are 2 mandatory parameters which are :
In my Studio i've used tSystem which give me :
VALEUR HTTP/1.1 200 OK Date: Tue, 28 Apr 2020 07:52:35 GMT Server: Apache Set-Cookie: PHPSESSID=xyzazertyuiiop; path=/; HttpOnly Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: _pk_ses.5.8853=%2A; expires=Tue, 28-Apr-2020 08:22:35 GMT; Max-Age=1800; path=/ Set-Cookie: _pk_id.5.8853=f67b95e276009301.1588060355.1.1588060355..; expires=Wed, 26-May-2021 07:52:35 GMT; Max-Age=33955200; path=/ Set-Cookie: _pk_cvar.5.8853=false; expires=Tue, 28-Apr-2020 08:22:35 GMT; Max-Age=1800; path=/ Vary: Accept-Encoding Content-Length: 731 Connection: close Content-Type: application/json { "nom_api": "ApiGetInventory", "skip": 0, "resultats": [ { "servicePack": "", "uptime": "243 jour(s), 09:58", "version": "Red Hat Linux Server 5.4", "zone": "Area-51", "type": "Physical", "hostname": "Linux_001", "site": "Baie-4", "nna": [], "application": [], "osComplet": "Red Hat Enterprise Linux Server 5.4", "env": "Sandbox", "kbs": [], "dateInventaire": "2020-03-27 07:06:06", "os": "Red Hat Enterprise Linux Server 5.4" } ], "nb_serveurs_traites": 1, "requete": { "os": "Linux", "nna": "", "serveur": "Linux_001" }, "code_retour": 0, "information_erreur": "", "nb_resultats": 0 }
Is it the right component to use ? Can i do it with tRest/tRestClient/tHttpRequest ?
How can I easily exploit these results (all information in "resultats": [ { ..........}]) ?
Do i need to create a JSON file ? and exploit it, with tFileInputJson, (to put it in database) ?
I thank you in advance
i will answer myself :
Here it's my job design :
I do not know if it's the correct way but it's almost working
I connected my tSystem component to a tJava via OnSubjobOK.
Tjava : Empty code
tJavaRow :
tExtractJSONFields :
tJavaRow : Transform String in String[]
i did that, bc length of my string is > 255. So i've created a column as array in postgreSQL
String strName = input_row.kbs; String[] strArray = new String[] {strName}; //System.out.println(strArray[0]); output_row.kbs = strArray; output_row.servicePack = input_row.servicePack ; output_row.uptime = input_row.uptime; output_row.version = input_row.version; output_row.zone = input_row.zone; output_row.type = input_row.type; output_row.hostname = input_row.hostname; output_row.site = input_row.site; output_row.osComplet = input_row.osComplet; output_row.env = input_row.env; output_row.dateInventaire = input_row.dateInventaire; output_row.os = input_row.os; output_row.nna = input_row.nna;
Is this the right way to proceed ? All suggestions are welcome
weird behaviour : when i put this url in my web broswer, i've got the answer in 30sec (80.000+ records)
https://mySite.com/index.php/ApiGetInventory/nna//serveur//
But via Talend after 2H it's not finish and there is an error : SyntaxError: JSON Parse error: Unexpected EOF
Can I expect to get some answers/suggestions now that most of the work has been done?
I will answer myself :
First of all to remove header just remove option -i
Here my (final ?) job design :
I do not know if it's correct, but it's almost working ...
I connected my component tSystem to a tJava with "OnSubjobOk". is it correct ?!
In my tJava, code is empty
In my tJavaRow
row4.json = (String)globalMap.get("tSystem_1_OUTPUT");
in my tExtractJSONFields
in my tJavaRow_3 :
I did that because the value of my KBS column exceeds 255 characters. and I'm inserting, for the time being, as is...
"kbs": [ { "kb": "KB3192137", "installedBy": "", "description": "Update", "dateInstall": "9/12/2016" }, { "kb": "KB4091664", "installedBy": "", "description": "Update", "dateInstall": "10/24/2019" }]
CODE :
String strName = input_row.kbs; String[] strArray = new String[] {strName}; //System.out.println(strArray[0]); output_row.kbs = strArray; output_row.servicePack = input_row.servicePack ; output_row.uptime = input_row.uptime; output_row.version = input_row.version; output_row.zone = input_row.zone; output_row.type = input_row.type; output_row.hostname = input_row.hostname; output_row.site = input_row.site; output_row.osComplet = input_row.osComplet; output_row.env = input_row.env; output_row.dateInventaire = input_row.dateInventaire; output_row.os = input_row.os; output_row.nna = input_row.nna;
it works for my example
strange thing :
when i put this URL in my web browser :
https://mySite.com/index.php/ApiGetInventory/nna//serveur//
I've got the anwser within 30 seconds (same when i use cmd prompt in Windows). But when I do it via Talend, it takes me 2 hours and I have an error of the type : net.minidev.json.parser.ParseException: Unexpected End Of File position 12910591: null
There are, only, 80.000+ records
any idea ? Can I expect to get some answers/suggestions now that most of the work has been done?