-
Bug
-
Resolution: Unresolved
-
Major
-
None
-
Jenkins pipeline 2.150.2
InfluxDB 1.6.2
I have below code which reads each 'stage' data from a jenkins_pipeline project json output and sends each stage data to influxDB.
Issue: It sends only last stage data to influx db but I noticed it iterating on each stages
Any suggestions would be helpful. //Methods for InfluxData begins //Maps for Field type columns myDataField1 = [:] myDataField2 = [:] myDataField3 = [:] //Maps for Custom Field measurements myCustomDataFields1 = [:] myCustomDataFields2 = [:] myCustomDataFields3 = [:] //Maps for Tag type columns myDataTag1 = [:] myDataTag2 = [:] myDataTag3 = [:] //Maps for Custom Tag measurements myCustomDataTags1 = [:] myCustomDataTags2 = [:] myCustomDataTags3 = [:] @NonCPS def pushStageData() { def url_string = "${JENKINS_URL}job/ENO_ENG_TP/job/R421/13/wfapi/describe" def replaced = url_string.replaceAll(' ', '%20'); get = null; def get = new URL(replaced).openConnection(); get.addRequestProperty ("User-Agent","Mozilla/4.0"); get.addRequestProperty("Authorization", "Basic dZXZvceDIwMTk="); //fetching the contents of the endpoint URL def jsonText = get.getInputStream().getText(); //converting the text into JSON object using JsonSlurperClassic def jsonObject = new JsonSlurperClassic().parseText(jsonText) // Extracting the details of all the stages present in that particular build number for (int i=0; i<jsonObject.stages.size()-1; i++){ //size-1 to ignore the post stage //populating the field type columns of InfluxDB measurements and pushing them to the map called myDataField1 def size = jsonObject.stages.size()-1 myDataField1['result'] = jsonObject.stages[i].status myDataField1['duration'] = jsonObject.stages[i].durationMillis myDataField1['stage_name'] = jsonObject.stages[i].name //populating the tag type columns of InfluxDB measurements and pushing them to the map called myDataTag1 myDataTag1['result_tag'] = jsonObject.stages[i].status myDataTag1['stage_name_tag'] = jsonObject.stages[i].name //assigning field type columns to the measurement called CustomData myCustomDataFields1['CustomData'] = myDataField1 //assigning tag type columns to the measurement called CustomData myCustomDataTags1['CustomData'] = myDataTag1 //Push the data into influx instance try { step([$class: 'InfluxDbPublisher', target: 'jenkins_data', customPrefix: null, customDataMapTags: myCustomDataTags1]) } catch (err) { println ("pushStagData exception: " + err) } } }
- is duplicated by
-
JENKINS-60906 Write list data to <customDataMap>
-
- Closed
-
Time is the primary key in InfluxDB. Now you write all points at some specific point in your job instead of spreading them out when you get the data. This causes InfluxDB to overwrite the point which have the exact same timestamp (this is a feature of InfluxDB itself, not the plugin).
A quick workaround is to sleep for a millisecond after each write to force a new timestamp.