Recently JDS was given a good reminder of why VuGen’s Download Filters are an important product feature.

Someone created a BPM script to monitor the performance and availability of the JDS website.

Suddenly our website traffic looked like this on Google Analytics…

Google Analytics for the JDS website

The VuGen script was requesting http://www.google-analytics.com/__utm.gif and http://www.google-analytics.com/ga.js each time it ran, which was polluting our usage statistics.

One of the key issues with BPM scripts is separating synthetic transactions from real transactions when application owners retrive usage statistics for their system. Different solutions are used depending on the type of application, and the method of statistics collection.

Here are some techniques we have used in the past:

  • Use a special account number that will be excluded from reports
  • Add a special SOAP header that will differentiate BPM requests from other requests
  • Use a special queue for requests for BPM requests
  • Change the User-Agent string that is sent with each HTTP request to identify the request as coming from a BPM

But the most common thing to do is to add a Download Filter to your VuGen script so that resources that are used to track usage (like http://www.google-analytics.com/__utm.gif) are never downloaded by the script.

Internet Protocol Download Filters

Problem solved.

One comment on “Why your BPM scripts should use Download Filters

  1. I actually like to add download filters using the web_add_auto_filter function, rather than the script runtime settings. This allows me to put a comment in the script saying *why* the download filter is necessary.

    Syntax for an “exclude” filter is:

    1
    2
    
      // Exclude requests to Google Analytics, so BPM script will not mess up usage metrics
      web_add_auto_filter("Action=Exclude", "Host=www.google-analytics.com", LAST);

    It is actually best practice to use “include” filters instead of “exclude” filters. This allows you to whitelist acceptable hosts, rather than continue to maintain a blacklist of hosts that should not be accessed.

    The syntax for an “include” filter is:

    1
    2
    
      // Only allow requests to www.jds.net.au to exclude any ads or tracking code from other servers (e.g. Google Analytics)
      web_add_auto_filter("Action=Include", "Host=www.jds.net.au", LAST);

Leave a Reply