cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Getter Chain

Maria.Garcia
Builder

Hi team,

 

We have the following custom code created in order to monitor calls to IBM MQs:

...

private String component, process, activity, sentTo, origin, message, response;

public String init(String component, String process, String activity, String payload, String regex, String queueOrigin) {

 

That method returns a "message".

 

Then the following "get" methods have been created for each case, for example to capture the size of the message:

 

...

           public int getMessageSizeBytes(){

            return message.getBytes().length;

      }

...

How to use them as getter chains to capture those information on Data Collectors? How to capture the result of getMessageSizeBytes?

I mean, the first method returns a message, that is already captured but... how to obtain its size?

The method getMessageSizeBytes is already added on the code, but the getter chain is not capturing that value...

Which configuration should be used? Please kindly check attached image

Thanks!

14 REPLIES 14

Peter.Holditch
Moderator
Moderator

Moco,

 

You need to define a data collector on a method that is called as part of the processing of the BT.

 

That data collector can access methods on any of:

  • the object instance on which the instrumented method is run
  • the object(s) passed to the instrumented method as parameters
  • the object returned from the instrumented method

The key here is that a data collector is passive - it needs to be placed on a method that will be run in the course of the processing of the BT in order that it can step in and collect the data you need.

 

Warm regards,

Peter

 

 



Found something helpful? Click the Accept as Solution button to help others find answers faster.
Liked something? Click the Thumbs Up button.

Thanks Petter,

 

As you can see in the attached image, we are trying to define the getter chains on a method invocation data collector for the initial method "init"... is this configuration correct, please?

The input parameters and the return message are properly detected, however the value returned by the get size function is not properly obtained... do you know why?

Which getter chain expression shuld we use exactly?

Thanks a lot!  

So when during the BT execution is your init method called?  Can you provide a snippet of the application code that shows the context of that call?

 

Warm regards,

Peter

 

 



Found something helpful? Click the Accept as Solution button to help others find answers faster.
Liked something? Click the Thumbs Up button.

Hi,

Yes, init method is being captured in AppDynamics BTs.

In fact the returned message is properly displayed as data collector (please see attached image with all the parameters), using the "ReturnValue.toString()" configured as Method Data Invocation:

- Collection Data From: Return Value

- Operation on Invoked Object: Use toString()

 

But the issue heer is which getter chain expression should be used to capture the size of the message, calculated with

public int getMessageSizeBytes(){

            return message.getBytes().length;

      }.

Sorry, but I do not have access all the code, just that related to those method (please find it attached)

Thanks

Hi,

Yes, init method is being captured in AppDynamics BTs.

In fact the returned message is properly displayed as data collector (please see attached image with all the parameters), using the "ReturnValue.toString()" configured as Method Data Invocation:

- Collection Data From: Return Value

- Operation on Invoked Object: Use toString()

 

But the issue heer is which getter chain expression should be used to capture the size of the message, calculated with

public int getMessageSizeBytes(){

            return message.getBytes().length;

      }.

Sorry, but I do not have access all the code, just that related to those method (please find it attached)

Thanks

Ah, OK.  That validates that the collector is getting called, which is what I wanted to confirm.

 

I think the problem you're running in to is that the getter chain wants to get the data value as a string, and since your method returns an un-boxed int, it can't do the necessary type conversion.

 

It should work if you change your method to return the length as a String, or an an Integer (which has a toString method that could be used to yield a string result)

 

Warm regards,
Peter



Found something helpful? Click the Accept as Solution button to help others find answers faster.
Liked something? Click the Thumbs Up button.

Public Class Order {

      public string ClOrdID

      {
           get;
            set;
       }

}

 

public Order SendOrder(Order ord) {}

 

What will be getter chain for collecting value of ClOrdID.  Remember its .net property and there is no getClordID() method defined explicitly. 

Alex.Fedotyev
AppDynamics Team (Retired)

For .NET properties, you can just use the property name and the agent will automatically use the get internally: ClOrdID

Another scenarios: How to achive it.

1) private bool SendBulkOrders(List<Order> orders) {}

 

how to collect data from parameter which is collection of data. In above example i want to cllect orders[0].BucketId  

 

2) private bool SendObject(Object sender) {}

 

In above example, i want to typecast sender to Employee type and collect employe id. like ((Employe)sender).EmpId