hidden abstract class FT.FeatureGetterSubClasses of FT.FeatureGetter provide key-value pairs to the Feature Tracker Collector (implemented in the FT.Collector class) which will organize this data and then send this information home to the InterSystems ats.intersystems.com server. The data is usually collected over a 1 week period.
Authors of a FT.FeatureGetter subclass need to provide 1 or more of the following class methods: GetBegin(), GetEnd() or GetInfo() which return encoded key-value pairs to the FT.Collector class. A FT.FeatureGetter subclass may also need to have a Reset() method which will be called about once per week to tell the FT.FeatureGetter subclass that previously collected data has been sent home and that the subclass should start collecting new data.
Registration of a FT.FeatureGetter subclass usually happens automatically at InterSystems IRIS instance time. At registration, FT.Collector will immediately call the subclass Reset() method, then it will call the subclass GetBegin() method, and then it will call the subclass GetInfo() method. If any of these class method calls return a failure status then that FT.FeatureGetter subclass will not be registered and that subclass will not be called again. After these three method calls at registration time succeed then any future failures will be recorded but calls on the FT.FeatureGetter subclass will continue.
If want to Load and Register a new Getter class that did not exist at
intallation time then you can switch to the %SYS namespace, then $SYSTEM.OBJ.Load
(or $SYSTEM.OBJ.LoadDir) you new Getter code and then execute
Set status=##class(FT.Collector).RegisterGetterClass(GetterClassName)where GetterClassName is a string expression containing the class name of the new Getter to be registered.
After the FT.FeatureGetter subclass is registered then the FT.Collector class will call the GetInfo() method every hour. This means that a crash or shutdown of the customer client instance will lose no more than 1 hour of Feature Tracker data.
At the end of each week the FT.Collector will make one additional call on the GetInfo() followed by a call on the GetEnd() method and then all the collected Feature Tracker data will be sent home to ats.intersystems.com.
If the sending home of data succeeds then the Reset() method will be called, then all the saved FeatureTracker data from the past week will be killed, then the GetBegin() method will be called followed by a call on the GetInfo() method. The weekly process continues with additional hourly calls on the GetInfo() method.
If the sending home of data fails then the Reset() method will not be called and the weekly FeatureTracker data will not be killed. Instead, hourly calls on the GetInfo() method will resume until it is time to again attempt to send FeatureTracker data home. This additional send home attempt will be immediately preceded by a call on the GetInfo() method followed by a call on the GetEnd() method.
For debugging purposes, the following can be executed from the %SYS namespace:
A call on ##class(FT.Collector).Collect("GetInfo") will cause all the calls on the GetInfo() methods to occur immediately. The FT.Collector updates the data which can be examined by doing ZWRITE ^ISC.FTSnapshot . The ^ISC.FTSnapshot global contains the union of all the data collected from the calls on the GetBegin(), GetEnd() and GetInfo() methods.
Similarly, calls on ##class(FT.Collector).Collect("GetBegin"), ##class(FT.Collector).Collect("GetEnd") and ##class(FT.Collector).Reset() will immediately call, respectively, the GetBegin(), GetEnd() and Reset() methods in all the FT.FeatureGetter subclasses.
A call on ##class(FT.Collector).Transfer() will cause the weekly transfer home of data to ats.intersystems.com to occur immediately. The file FeatureTracker.log in the instance mgr directory will contain the JSON of the most recent attempt to send data home.