public long GetBucketSize(int capabilityId) { if (CapabilityBucketSizeDictionary.TryGetValue(capabilityId, out var value)) { return(value.Size); } // else throw new Exception("No bucket size Found!"); }
public void DecreaseBucketSize(int capabilityId, long duration) { if (CapabilityBucketSizeDictionary.TryGetValue(capabilityId, out var value)) // update { value.Duration -= duration; if (value.Duration < 0) { throw new Exception("Capability capacity for " + value.Capability.Id + " negativ"); } CalculateBucketSize(); } }
public void AddOrUpdateBucketSize(M_ResourceCapability capability, long duration) { if (CapabilityBucketSizeDictionary.TryGetValue(capability.Id, out var value)) // update { value.Duration += duration; CalculateBucketSize(); return; } // Create var bucketSize = new BucketSize { Duration = duration, Size = duration, Capability = capability }; CapabilityBucketSizeDictionary.Add(capability.Id, bucketSize); CalculateBucketSize(); }
private void CalculateBucketSize() { var sumCapability = CapabilityBucketSizeDictionary.Sum(x => x.Value.Duration); if (sumCapability == 0) { return; // no work left to calculate bucket size. } foreach (var bucketSizeTuple in CapabilityBucketSizeDictionary) { bucketSizeTuple.Value.Ratio = (double)bucketSizeTuple.Value.Duration / sumCapability; bucketSizeTuple.Value.Size = Convert.ToInt64(Math.Round(bucketSizeTuple.Value.Ratio * MaxBucketSize, 0)); if (bucketSizeTuple.Value.Size < 60) //TODO Probably not necessary { bucketSizeTuple.Value.Size = 60; } } }