Health Score iCall - Dynamic Modification of a Pool Member's Ratio

Problem this snippet solves:

Code Use Case: This iApp can be used to control an iCall script that will dynamically modify a pool member's ratio based on the result of a header received from each individual pool member. The iApp exposes a list of typical questions that will in turn modify the iCall scripts behavior without having to dive into the iCall code itself. The most common example and what the original iCall script was written and tested against is SharePoint web servers will return a header called X-SharePointHealthScore with a value ranging from 0-10(0 being best) based on internal monitored metrics. The iApp managed iCall will then look at this value on an interval and apply a ratio to the pool member ranging from 10-1 as the inverse to the score above. This allows for a more in-tune approach to load balancing.

Note: This will work against a pool managed by another iApp (tested with SharePoint 2010/2013/2016 iApp) as well as a manually configured pool (or a pool managed by an iApp with strict updates turned off).

Link to Original iCall:

How to use this snippet:

Unzip the file, then upload the iApp template to Big-IP. Then create an application service using the template.

Code :


Tested this on version:

Published Apr 13, 2016
Version 1.0

Was this article helpful?


  • Hi, I tried to implement this. When making the application service amongst the uploaded template, I get the error below:


    Error parsing template:can't eval proc: "script::run" version conflict for package "iapp": have 1.1.2, need 1.1.3 while executing "package require iapp 1.1.3" (procedure "script::run" line 2) invoked from within "script::run" line:1


    I am on F5 LTM 11.6 but this shouldn't matter?


  • JamesSevedge_23's avatar
    Historic F5 Account

    I cannot figure out how to remove the old attachment for the moment, but I uploaded a new template as attachment 2 that should fix your problem. Please let me know if you run into any other issues.


  • That worked, thanks! I have a question:


    There is a field to determine the SharePoint URL, and this is:




    However, I have multiple host named site collections e.g. , , etc.


    What would $sp_fqdn be?


    And I assume this does not effect my Virtual Server, IE I still need that seperately.


    Great add-in though!


  • JamesSevedge_23's avatar
    Historic F5 Account

    Ah, so a couple things to note. One is that $sp_fqdn in the icall itself is based on a reverse dns lookup of the pool members and that fqdn is substituted into sp_fqdn. This would not affect the virtual server, only the pool members ratio. The other main thing to note is this is a standalone prototype that was specifically tested against the sharepoint 2010_2013 iapp. My suggestion is to test in conjunction with that, however it could/should also work against f5.http if wanting to implement for a generic "header response" based pool member ratio modification.


  • Hi, Yeah that's fine I have the 2013 iApp. The first thing is a concern as the reverse lookup would bring up server names e.g. glosps01 when we have host named sites e.g. . Can I substitute this value and what would I do for more than one site?


  • JamesSevedge_23's avatar
    Historic F5 Account

    The primary reason for querying individual server by it's FQDN is if you input host name site address then big ip on the control plane would resolve that FQDN (such as likely back to the VIP address created using sharepoint 2013 iApp and as such would be load balanced back to the exact pool you are trying to dynamically determine/modify ratio for and as such be unable to perform a "per server" health score check. This should not be an issue because the whole goal is to retrieve back a response that contains the X-SharePointHealthScore header, which does not require using a public-facing FQDN and the recommendation when using this iApp (and even the current design built into 2016 iApp) is to create a "sharepoint web app" with anonymous auth enabled using a specific port and point the URL in this healthscore iapp to use that. Now I agree that this limits the per sharepoint web application health score monitoring, but if you look at the metrics used to determine score...they are system metrics such that any specific web application health score header returned would match any other web application hosted on that specific server.


  • Does this work on v13.1 or 14.1? I can't get it to update the ratio. I'm not sure how to troubleshoot this either. Any tips? We want to implement this, it's a great idea, but we can't get it working. Please help!