Ejemplo n.º 1
0
            public void AddMeasure(TCountType measure, ICountedConfig config, long value)
            {
                int num = this.ConvertMeasureToIndex(measure);
                Count <TEntityType, TCountType> count = this.measures[num];

                if (count == null)
                {
                    count = this.CreateNewCount(measure, config, num);
                }
                count.AddValue(value);
                this.lastAccessTime = this.timeProvider();
            }
Ejemplo n.º 2
0
 public Count(ICountedEntity <TEntityType> entity, ICountedConfig config, TCountType measure, Func <DateTime> timeProvider)
 {
     ArgumentValidator.ThrowIfNull("entity", entity);
     ArgumentValidator.ThrowIfNull("config", config);
     ArgumentValidator.ThrowIfNull("measure", measure);
     ArgumentValidator.ThrowIfNull("timeProvider", timeProvider);
     this.Entity         = entity;
     this.Config         = config;
     this.Measure        = measure;
     this.timeProvider   = timeProvider;
     this.lastAccessTime = this.timeProvider();
     if (this.Config.TimeToLive != TimeSpan.Zero)
     {
         this.expirationTime = this.timeProvider().Add(this.Config.TimeToLive);
     }
 }
Ejemplo n.º 3
0
 public static Count <TEntityType, TCountType> CreateCount <TEntityType, TCountType>(ICountedEntity <TEntityType> entity, TCountType measure, ICountedConfig config) where TEntityType : struct, IConvertible where TCountType : struct, IConvertible
 {
     return(CountFactory.CreateCount <TEntityType, TCountType>(entity, measure, config, () => DateTime.UtcNow));
 }
Ejemplo n.º 4
0
 public static Count <TEntityType, TCountType> CreateCount <TEntityType, TCountType>(ICountedEntity <TEntityType> entity, TCountType measure, ICountedConfig config, Func <DateTime> timeProvider) where TEntityType : struct, IConvertible where TCountType : struct, IConvertible
 {
     if (config is IRollingCountConfig)
     {
         return(new RollingCount <TEntityType, TCountType>(entity, (IRollingCountConfig)config, measure, timeProvider));
     }
     if (config is IAbsoluteCountConfig)
     {
         return(new AbsoluteCount <TEntityType, TCountType>(entity, (IAbsoluteCountConfig)config, measure, timeProvider));
     }
     throw new InvalidOperationException("Need to create a config of a subtype class of ICountedConfig");
 }
Ejemplo n.º 5
0
 public Task AddUsageAsync(ICountedEntity <TEntityType> entity, TCountType measure, ICountedConfig countConfig, long increment)
 {
     ArgumentValidator.ThrowIfNull("entity", entity);
     ArgumentValidator.ThrowIfNull("countConfig", countConfig);
     return(Task.Factory.StartNew(delegate()
     {
         this.AddUsage(entity, measure, countConfig, increment);
     }));
 }
Ejemplo n.º 6
0
            private Count <TEntityType, TCountType> CreateNewCount(TCountType measure, ICountedConfig config, int measureIndex)
            {
                Count <TEntityType, TCountType> count;

                lock (this.syncObject)
                {
                    if (this.measures[measureIndex] == null)
                    {
                        count = CountFactory.CreateCount <TEntityType, TCountType>(this.entity, measure, config, this.timeProvider);
                        this.measures[measureIndex] = count;
                    }
                    else
                    {
                        count = this.measures[measureIndex];
                    }
                }
                this.perfCounters.MeasureAdded(measure);
                return(count);
            }
Ejemplo n.º 7
0
        public void AddUsage(ICountedEntity <TEntityType> entity, TCountType measure, ICountedConfig countConfig, long increment)
        {
            ArgumentValidator.ThrowIfNull("entity", entity);
            ArgumentValidator.ThrowIfNull("countConfig", countConfig);
            CountTracker <TEntityType, TCountType> .EntityValue entityValue;
            if (this.entities.TryGetValue(entity.Name, out entityValue))
            {
                entityValue.AddMeasure(measure, countConfig, increment);
                return;
            }
            if (!countConfig.IsPromotable)
            {
                this.AddEntityAndMeasure(entity, measure, countConfig, increment);
                return;
            }
            if (this.entities.Any((KeyValuePair <IEntityName <TEntityType>, CountTracker <TEntityType, TCountType> .EntityValue> e) => e.Value.Entity.GroupName.Equals(entity.GroupName)))
            {
                this.AddEntityAndMeasure(entity, measure, countConfig, increment);
                return;
            }
            CountTracker <TEntityType, TCountType> .EntityKey entityKey = new CountTracker <TEntityType, TCountType> .EntityKey(entity.GroupName, measure);

            long num = this.unpromotedMeasures.AddOrUpdate(entityKey, (CountTracker <TEntityType, TCountType> .EntityKey k) => increment, (CountTracker <TEntityType, TCountType> .EntityKey k, long v) => v + increment);

            if (num > (long)countConfig.MinActivityThreshold)
            {
                this.AddEntityAndMeasure(entity, measure, countConfig, increment);
                this.unpromotedMeasures.TryRemove(entityKey, out num);
                this.tracer.TraceDebug <IEntityName <TEntityType>, TCountType, int>((long)this.GetHashCode(), "Promoted entity {0} and measure {1} for crossing threshold {2}", entityKey.Entity, entityKey.Measure, countConfig.MinActivityThreshold);
                this.perfCounters.MeasurePromoted(measure);
            }
        }
Ejemplo n.º 8
0
 private void AddEntityAndMeasure(ICountedEntity <TEntityType> entity, TCountType measure, ICountedConfig countConfig, long increment)
 {
     CountTracker <TEntityType, TCountType> .EntityValue entityValue = this.AddEntity(entity);
     entityValue.AddMeasure(measure, countConfig, increment);
 }
Ejemplo n.º 9
0
 public Count(ICountedEntity <TEntityType> entity, ICountedConfig config, TCountType measure) : this(entity, config, measure, () => DateTime.UtcNow)
 {
 }
Ejemplo n.º 10
0
 public Task AddUsageAsync(TCountType measure, ICountedConfig countConfig, int increment)
 {
     return(this.tracker.AddUsageAsync(this.Entity, measure, countConfig, (long)increment));
 }
Ejemplo n.º 11
0
 public void AddUsage(TCountType measure, ICountedConfig countConfig, int increment)
 {
     this.tracker.AddUsage(this.Entity, measure, countConfig, (long)increment);
 }