Beacons
Beacons are not to be confused with bacon.
The 2Pint Software StifleR Beacon service can run on any Windows OS (talk to us if you want to run it on Linux). It acts as the end point to which the StifleR Client Red Leaders send test packets. This allows the Red Leaders to accurately measure the maximum bandwidth available between the a Subnet/Location and the content source. Typically, you will install this component on a server in a location where clients obtain the bulk of their content. If using Configuration Manager, this would be a Distribution Point. If content is mostly downloaded from the Internet, and the Internet breakout is in a major datacenter, the Beacon server can be installed on any server in the same location. The StifleR Beacon Service may be installed on the StifleR Server if desired.
StifleR Beacon InstallationBeacon Service Logic
Service polls list of Beacon locations every 2 minutes, if MaxBW is configured on the server.
NOTE: Server setting is different to the Location flag!!!
Internal clock to bypass location poll unless 6 hours passed has a logical issue, so we poll every 2 minutes.
For each location we iterate over:
If set to WellConnected, we bypass and don't check it.
If server throttling and location throttling is enabled, we check the following in the order of;
“Not enough time has passed for a retest of the maximum bandwidth for {0}” where {0} is replaced with location GUID.
If LastBandwidthMeasurement time is set to nothing, we flag to measure.
If LastBandwidthMeasurement time is less than current time - 518400 seconds AND the Red Leader latency is equal or lower than the default latency we flag to measure.
If LastBandwidthMeasurement time is less than current time – 518400 * 2 we flag to measure.
If none of the above is true, we log the following super debug entry:
If we are set to measure from the flag, we then add the location ID to the list of measurements to do.
For each measure flagged:
If the location is linked to a parent, we do nothing.
Likely cause to issue, as we check with “HasValue” which might return true for a Guid.Empty value.
If the location has no beacon address, we do nothing.
If the location does not have the correct flag (16 dec) we do nothing.
We try to get the Red Leader for the location.
We add the Red Leader to the list of ActiveMeasurement.
GetBeaconIpDestination function on the client using SignalR. The following entry on the client is logged: Log.WriteDebug("iPERF", "DNS", "First DNS entry for iPerf beacon target {0} resolves to {1}", target, usedAddress).
If the usedAddress is “N/A” that indicates an issue, and the client will not send up the right info but just exits.
Client calls server function VerifyBeaconHostNotBusy.
This adds the entry to the dnsToIps list which is required below.
Wait 5 seconds.
For each Active Measurement
Get the valid entry for connection ID from “DNStoIP” list.
Check to make sure we don't have a running test against that by checking busyTest list, ip being listed indicates test in action.
If not in list, we add it to the list.
We check the location beacon port and sends the resolved IP + port to the client.
Client calls the iPerf executable:
If return code is 0, the following log entry is written; Log.WriteInfoE("iPERF", "Measure", "The speed to {0} is measured to a speed of:{1} bps ({2}) kilobits/s", 3267, ipEntry, bits_per_second, bandwidth).
In case of a non 0 return code, the following entry is written: Log.WriteError("iPERF", "Component","Failed to measure, please review the iperf log").
Client returns the estimate to the server with the regular check-in intervals, which can take up to 15mins.
After sending the updated speed, the value is replaced with “N/A” indicating that it has already been sent.
Last updated