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;
                }
            }
        }