package trust import "time" // TrustMetricConfig - Configures the weight functions and time intervals for the metric type TrustMetricConfig struct { // Determines the percentage given to current behavior ProportionalWeight float64 // Determines the percentage given to prior behavior IntegralWeight float64 // The window of time that the trust metric will track events across. // This can be set to cover many days without issue TrackingWindow time.Duration // Each interval should be short for adapability. // Less than 30 seconds is too sensitive, // and greater than 5 minutes will make the metric numb IntervalLength time.Duration } // DefaultConfig returns a config with values that have been tested and produce desirable results func DefaultConfig() TrustMetricConfig { return TrustMetricConfig{ ProportionalWeight: 0.4, IntegralWeight: 0.6, TrackingWindow: (time.Minute * 60 * 24) * 14, // 14 days. IntervalLength: 1 * time.Minute, } } // Ensures that all configuration elements have valid values func customConfig(tmc TrustMetricConfig) TrustMetricConfig { config := DefaultConfig() // Check the config for set values, and setup appropriately if tmc.ProportionalWeight > 0 { config.ProportionalWeight = tmc.ProportionalWeight } if tmc.IntegralWeight > 0 { config.IntegralWeight = tmc.IntegralWeight } if tmc.IntervalLength > time.Duration(0) { config.IntervalLength = tmc.IntervalLength } if tmc.TrackingWindow > time.Duration(0) && tmc.TrackingWindow >= config.IntervalLength { config.TrackingWindow = tmc.TrackingWindow } return config }