tcWebHooks icon indicating copy to clipboard operation
tcWebHooks copied to clipboard

Get statistics with Inespections

Open Super8film87 opened this issue 1 year ago • 23 comments

Hey,

I've trouble to find a solution to get statics of InspectionStatsE & InspectionStatsW. If I check following url

http://<teamcity>/app/rest/builds/id:<id>/statistics

I see the correct payload:

<properties count="16">
<script/>
<property name="ArtifactsSize" value="2242155"/>
<property name="BuildDuration" value="34495"/>
<property name="BuildDurationNetTime" value="33403"/>
<property name="buildStageDuration:artifactsPublishing" value="319"/>
<property name="buildStageDuration:buildFinishing" value="500"/>
<property name="buildStageDuration:buildStepRUNNER_33274" value="30902"/>
<property name="buildStageDuration:buildStepRUNNER_33275" value="2501"/>
<property name="buildStageDuration:firstStepPreparation" value="189"/>
<property name="buildStageDuration:toolsUpdating" value="1"/>
<property name="BuildTestStatus" value="1"/>
<property name="InspectionStatsE" value="11"/>
<property name="InspectionStatsW" value="6490"/>
<property name="queueWaitReason:Waiting_for_the_build_queue_distribution_process" value="78"/>
<property name="serverSideBuildFinishing" value="701"/>
<property name="SuccessRate" value="1"/>
<property name="TimeSpentInQueue" value="85"/>
</properties>

if I try to collect the data via velocity

#set ($statsValues = $build.statisticValues)
{
#foreach ($mapEntry in $statsValues.entrySet())
  #if ( $mapEntry.key == 'InspectionStatsE' || $mapEntry.key == 'InspectionStatsW')
    "$mapEntry.key": $mapEntry.value.intValue(),
  #end
#end
"statsValues" : "$statsValues",
## or like this

"getStatisticValues": "${build.getStatisticValues()}"
}

but this only responding:

"statsValues": "{buildStageDuration:buildStepRUNNER_29664=346475, buildStageDuration:artifactsPublishing=551, buildStageDuration:buildStepRUNNER_26288=10884, buildStageDuration:buildStepRUNNER_31602=536, serverSideBuildFinishing=48, buildStageDuration:buildStepRUNNER_31601=297, buildStageDuration:buildStepRUNNER_24038=539, buildStageDuration:sourcesUpdate=681, queueWaitReason:Waiting_for_the_build_queue_distribution_process=68, buildStageDuration:buildFinishing=710, buildStageDuration:toolsUpdating=1, buildStageDuration:firstStepPreparation=2, BuildDurationNetTime=358731}",
  "getStatisticValues": "{buildStageDuration:buildStepRUNNER_29664=346475, buildStageDuration:artifactsPublishing=551, buildStageDuration:buildStepRUNNER_26288=10884, buildStageDuration:buildStepRUNNER_31602=536, serverSideBuildFinishing=48, buildStageDuration:buildStepRUNNER_31601=297, buildStageDuration:buildStepRUNNER_24038=539, buildStageDuration:sourcesUpdate=681, queueWaitReason:Waiting_for_the_build_queue_distribution_process=68, buildStageDuration:buildFinishing=710, buildStageDuration:toolsUpdating=1, buildStageDuration:firstStepPreparation=2, BuildDurationNetTime=358731}"

Additional test:

#set ($InspectionStatsE_value = $build.getStatisticValue("InspectionStatsE"))
#set ($InspectionStatsW_value = $build.getStatisticValue("InspectionStatsW"))
{
"inpsectionError" : "$InspectionStatsE_value",
"inpsectionWarnings" : "$InspectionStatsW_value"
}

If I check on Preview Template Payload

I see correct payload

{
  "inpsectionError": "11",
  "inpsectionWarnings": "6490"
}

on endpoint-viewer:

{
  "inpsectionError": "$InspectionStatsE_value",
  "inpsectionWarnings": "$InspectionStatsW_value"
}

Can you provide some guidance - #https://javadoc.jetbrains.net/teamcity/openapi/current/jetbrains/buildServer/serverSide/SBuild.html#getFullStatistics() Do I check the wrong commands?

TeamCity Server: TeamCity Enterprise 2023.05.4 (build 129421) Plugin: 1.2.5

Super8film87 avatar Mar 25 '24 18:03 Super8film87

Sorry for the delay. I'll look at this after I've fixed #236

netwolfuk avatar Mar 29 '24 21:03 netwolfuk

No worries at all. Thx for the support

Super8film87 avatar Mar 31 '24 16:03 Super8film87

Any idea?

Super8film87 avatar Apr 08 '24 06:04 Super8film87

Are you still running 2023.05.4 and tcWebhooks 1.2.5?

netwolfuk avatar Apr 08 '24 07:04 netwolfuk

Yes we do - not sure when we will move the next version.

We have on Dev (2024.03) now

Super8film87 avatar Apr 08 '24 07:04 Super8film87

Is this the result of an actual build sending to the /webhooks/endpoint.html ? Or was it from a "test" from the template preview?

on endpoint-viewer:

{
  "inpsectionError": "$InspectionStatsE_value",
  "inpsectionWarnings": "$InspectionStatsW_value"
}

netwolfuk avatar Apr 08 '24 08:04 netwolfuk

no to /webhooks/endpoint.html

Super8film87 avatar Apr 08 '24 09:04 Super8film87

I am wondering if inspections are assembled after the build completes, and perhaps are not available at the time that the webhook runs. None of my test builds appear to have inspections on them in the REST API or in webhook payload. I am not using a jetbrains inspections tool. Mine are just standard maven builds.

netwolfuk avatar Apr 08 '24 10:04 netwolfuk

Hm could be a possible. For unit tests it is working - I'll check with a small example.

Super8film87 avatar Apr 08 '24 13:04 Super8film87

Created an issue here

Super8film avatar May 16 '24 07:05 Super8film

Thanks

netwolfuk avatar May 16 '24 07:05 netwolfuk

From the issue above:

Hello folks,

The value for InspectionStatsE and InspectionStatsW parameters is calculated and published during TeamCity's event buildFinished().

The same listener is used for WebHookListener and other listeners.

It could happen that plugin's buildFinished() is exectuted before TeamCity's processing of InspectionStats* metrics.

The solution could be to implement PositionAware interface in WebHookListener and set constraint to PositionConstraint.last(), so the web hook is executed after all changes made by TeamCity itself. @Net Wolf could you do this change in the plugin?

Kind regards,
KIR

can you provide feedback?

Super8film avatar Aug 13 '24 11:08 Super8film

I'm so sorry I missed that comment. I'm looking at this today. I'll get a build ready for you to test by tomorrow.

netwolfuk avatar Aug 13 '24 19:08 netwolfuk

I have implemented the change as suggested by Kir. Can you please test a build from this branch?

You can just login as guest download the zip.

I've built this from version 2.0.1. Are you still on 1.2.5? If so, I'll need to do a new build for you.

netwolfuk avatar Aug 14 '24 08:08 netwolfuk

We are using 2.0.1 => will come to with feedback. Thx for this fast feedback.

Super8film avatar Aug 14 '24 09:08 Super8film

Sorry for the delay -

using: /plugins/tcWebHooks-2.0.1-build.506.zip

same issue to report. I dont see it correct in the endpointviewer :(

Super8film avatar Sep 02 '24 14:09 Super8film