Foundatio.MetricsNET 10.7.1

Prefix Reserved
dotnet add package Foundatio.MetricsNET --version 10.7.1
                    
NuGet\Install-Package Foundatio.MetricsNET -Version 10.7.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Foundatio.MetricsNET" Version="10.7.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Foundatio.MetricsNET" Version="10.7.1" />
                    
Directory.Packages.props
<PackageReference Include="Foundatio.MetricsNET" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Foundatio.MetricsNET --version 10.7.1
                    
#r "nuget: Foundatio.MetricsNET, 10.7.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=Foundatio.MetricsNET&version=10.7.1
                    
Install Foundatio.MetricsNET as a Cake Addin
#tool nuget:?package=Foundatio.MetricsNET&version=10.7.1
                    
Install Foundatio.MetricsNET as a Cake Tool

FoundatioFoundatio

Build status NuGet Version feedz.io Discord

Pluggable foundation blocks for building loosely coupled distributed apps.

Includes implementations in Redis, Azure, AWS, RabbitMQ, Kafka and in memory (for development).

Why Foundatio?

When building several big cloud applications we found a lack of great solutions (that's not to say there isn't solutions out there) for many key pieces to building scalable distributed applications while keeping the development experience simple. Here are a few examples of why we built and use Foundatio:

  • Wanted to build against abstract interfaces so that we could easily change implementations.
  • Wanted the blocks to be dependency injection friendly.
  • Caching: We were initially using an open source Redis cache client but then it turned into a commercial product with high licensing costs. Not only that, but there weren't any in memory implementations so every developer was required to set up and configure Redis.
  • Message Bus: We initially looked at NServiceBus (great product) but it had high licensing costs (they have to eat too) but was not OSS friendly. We also looked into MassTransit (another great product) but found Azure support lacking at the time and local set up a pain (for in memory). We wanted a simple message bus that just worked locally or in the cloud.
  • Storage: We couldn't find any existing project that was decoupled and supported in memory, file storage or Azure Blob Storage.

To summarize, if you want pain free development and testing while allowing your app to scale, use Foundatio!

Implementations

Getting Started (Development)

Foundatio can be installed via the NuGet package manager. If you need help, please open an issue or join our Discord chat room. We’re always here to help if you have any questions!

This section is for development purposes only! If you are trying to use the Foundatio libraries, please get them from NuGet.

  1. You will need to have Visual Studio Code installed.
  2. Open the Foundatio.sln Visual Studio solution file.

Using Foundatio

The sections below contain a small subset of what's possible with Foundatio. We recommend taking a peek at the source code for more information. Please let us know if you have any questions or need assistance!

Caching

Caching allows you to store and access data lightning fast, saving you exspensive operations to create or get data. We provide four different cache implementations that derive from the ICacheClient interface:

  1. InMemoryCacheClient: An in memory cache client implementation. This cache implementation is only valid for the lifetime of the process. It's worth noting that the in memory cache client has the ability to cache the last X items via the MaxItems property. We use this in Exceptionless to only keep the last 250 resolved geoip results.
  2. HybridCacheClient: This cache implementation uses both an ICacheClient and the InMemoryCacheClient and uses an IMessageBus to keep the cache in sync across processes. This can lead to huge wins in performance as you are saving a serialization operation and a call to the remote cache if the item exists in the local cache.
  3. RedisCacheClient: A Redis cache client implementation.
  4. RedisHybridCacheClient: An implementation of HybridCacheClient that uses the RedisCacheClient as ICacheClient and the RedisMessageBus as IMessageBus.
  5. ScopedCacheClient: This cache implementation takes an instance of ICacheClient and a string scope. The scope is prefixed onto every cache key. This makes it really easy to scope all cache keys and remove them with ease.
Sample
using Foundatio.Caching;

ICacheClient cache = new InMemoryCacheClient();
await cache.SetAsync("test", 1);
var value = await cache.GetAsync<int>("test");

Queues

Queues offer First In, First Out (FIFO) message delivery. We provide four different queue implementations that derive from the IQueue interface:

  1. InMemoryQueue: An in memory queue implementation. This queue implementation is only valid for the lifetime of the process.
  2. RedisQueue: An Redis queue implementation.
  3. AzureServiceBusQueue: An Azure Service Bus Queue implementation.
  4. AzureStorageQueue: An Azure Storage Queue implementation.
  5. SQSQueue: An AWS SQS implementation.
Sample
using Foundatio.Queues;

IQueue<SimpleWorkItem> queue = new InMemoryQueue<SimpleWorkItem>();

await queue.EnqueueAsync(new SimpleWorkItem {
    Data = "Hello"
});

var workItem = await queue.DequeueAsync();

Locks

Locks ensure a resource is only accessed by one consumer at any given time. We provide two different locking implementations that derive from the ILockProvider interface:

  1. CacheLockProvider: A lock implementation that uses cache to communicate between processes.
  2. ThrottlingLockProvider: A lock implementation that only allows a certain amount of locks through. You could use this to throttle api calls to some external service and it will throttle them across all processes asking for that lock.
  3. ScopedLockProvider: This lock implementation takes an instance of ILockProvider and a string scope. The scope is prefixed onto every lock key. This makes it really easy to scope all locks and release them with ease.

It's worth noting that all lock providers take a ICacheClient. This allows you to ensure your code locks properly across machines.

Sample
using Foundatio.Lock;

ILockProvider locker = new CacheLockProvider(new InMemoryCacheClient(), new InMemoryMessageBus());
var testLock = await locker.AcquireAsync("test");
// ...
await testLock.ReleaseAsync();

ILockProvider throttledLocker = new ThrottlingLockProvider(new InMemoryCacheClient(), 1, TimeSpan.FromMinutes(1));
var throttledLock = await throttledLocker.AcquireAsync("test");
// ...
await throttledLock.ReleaseAsync();

Messaging

Allows you to publish and subscribe to messages flowing through your application. We provide four different message bus implementations that derive from the IMessageBus interface:

  1. InMemoryMessageBus: An in memory message bus implementation. This message bus implementation is only valid for the lifetime of the process.
  2. RedisMessageBus: A Redis message bus implementation.
  3. RabbitMQMessageBus: A RabbitMQ implementation.
  4. KafkaMessageBus: A Kafka implementation.
  5. AzureServiceBusMessageBus: An Azure Service Bus implementation.
Sample
using Foundatio.Messaging;

IMessageBus messageBus = new InMemoryMessageBus();
await messageBus.SubscribeAsync<SimpleMessageA>(msg => {
  // Got message
});

await messageBus.PublishAsync(new SimpleMessageA { Data = "Hello" });

Jobs

Allows you to run a long running process (in process or out of process) without worrying about it being terminated prematurely. We provide three different ways of defining a job, based on your use case:

  1. Jobs: All jobs must derive from the IJob interface. We also have a JobBase base class you can derive from which provides a JobContext and logging. You can then run jobs by calling RunAsync() on the job or by creating a instance of the JobRunner class and calling one of the Run methods. The JobRunner can be used to easily run your jobs as Azure Web Jobs.
Sample
using Foundatio.Jobs;

public class HelloWorldJob : JobBase {
  public int RunCount { get; set; }

  protected override Task<JobResult> RunInternalAsync(JobContext context) {
     RunCount++;
     return Task.FromResult(JobResult.Success);
  }
}
var job = new HelloWorldJob();
await job.RunAsync(); // job.RunCount = 1;
await job.RunContinuousAsync(iterationLimit: 2); // job.RunCount = 3;
await job.RunContinuousAsync(cancellationToken: new CancellationTokenSource(10).Token); // job.RunCount > 10;
  1. Queue Processor Jobs: A queue processor job works great for working with jobs that will be driven from queued data. Queue Processor jobs must derive from QueueJobBase<T> class. You can then run jobs by calling RunAsync() on the job or passing it to the JobRunner class. The JobRunner can be used to easily run your jobs as Azure Web Jobs.
Sample
using Foundatio.Jobs;

public class HelloWorldQueueJob : QueueJobBase<HelloWorldQueueItem> {
  public int RunCount { get; set; }

  public HelloWorldQueueJob(IQueue<HelloWorldQueueItem> queue) : base(queue) {}

  protected override Task<JobResult> ProcessQueueEntryAsync(QueueEntryContext<HelloWorldQueueItem> context) {
     RunCount++;

     return Task.FromResult(JobResult.Success);
  }
}

public class HelloWorldQueueItem {
  public string Message { get; set; }
}
 // Register the queue for HelloWorldQueueItem.
container.AddSingleton<IQueue<HelloWorldQueueItem>>(s => new InMemoryQueue<HelloWorldQueueItem>());

// To trigger the job we need to queue the HelloWorldWorkItem message.
// This assumes that we injected an instance of IQueue<HelloWorldWorkItem> queue

IJob job = new HelloWorldQueueJob();
await job.RunAsync(); // job.RunCount = 0; The RunCount wasn't incremented because we didn't enqueue any data.

await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
await job.RunAsync(); // job.RunCount = 1;

await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
await job.RunUntilEmptyAsync(); // job.RunCount = 3;
  1. Work Item Jobs: A work item job will run in a job pool among other work item jobs. This type of job works great for things that don't happen often but should be in a job (Example: Deleting an entity that has many children.). It will be triggered when you publish a message on the message bus. The job must derive from the WorkItemHandlerBase class. You can then run all shared jobs via JobRunner class. The JobRunner can be used to easily run your jobs as Azure Web Jobs.
Sample
using System.Threading.Tasks;
using Foundatio.Jobs;

public class HelloWorldWorkItemHandler : WorkItemHandlerBase {
  public override async Task HandleItemAsync(WorkItemContext ctx) {
    var workItem = ctx.GetData<HelloWorldWorkItem>();

    // We can report the progress over the message bus easily.
    // To receive these messages just inject IMessageSubscriber
    // and Subscribe to messages of type WorkItemStatus
    await ctx.ReportProgressAsync(0, "Starting Hello World Job");
    await Task.Delay(TimeSpan.FromSeconds(2.5));
    await ctx.ReportProgressAsync(50, "Reading value");
    await Task.Delay(TimeSpan.FromSeconds(.5));
    await ctx.ReportProgressAsync(70, "Reading value");
    await Task.Delay(TimeSpan.FromSeconds(.5));
    await ctx.ReportProgressAsync(90, "Reading value.");
    await Task.Delay(TimeSpan.FromSeconds(.5));

    await ctx.ReportProgressAsync(100, workItem.Message);
  }
}

public class HelloWorldWorkItem {
  public string Message { get; set; }
}
// Register the shared job.
var handlers = new WorkItemHandlers();
handlers.Register<HelloWorldWorkItem, HelloWorldWorkItemHandler>();

// Register the handlers with dependency injection.
container.AddSingleton(handlers);

// Register the queue for WorkItemData.
container.AddSingleton<IQueue<WorkItemData>>(s => new InMemoryQueue<WorkItemData>());

// The job runner will automatically look for and run all registered WorkItemHandlers.
new JobRunner(container.GetRequiredService<WorkItemJob>(), instanceCount: 2).RunInBackground();
 // To trigger the job we need to queue the HelloWorldWorkItem message.
 // This assumes that we injected an instance of IQueue<WorkItemData> queue

 // NOTE: You may have noticed that HelloWorldWorkItem doesn't derive from WorkItemData.
 // Foundatio has an extension method that takes the model you post and serializes it to the
 // WorkItemData.Data property.
 await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });

File Storage

We provide different file storage implementations that derive from the IFileStorage interface:

  1. InMemoryFileStorage: An in memory file implementation. This file storage implementation is only valid for the lifetime of the process.
  2. FolderFileStorage: An file storage implementation that uses the hard drive for storage.
  3. AzureFileStorage: An Azure Blob storage implementation.
  4. S3FileStorage: An AWS S3 file storage implementation.
  5. RedisFileStorage: An Redis file storage implementation.
  6. MinioFileStorage An Minio file storage implementation.
  7. AliyunFileStorage: An Aliyun file storage implementation.
  8. SshNetFileStorage: An SFTP file storage implementation.

We recommend using all of the IFileStorage implementations as singletons.

Sample
using Foundatio.Storage;

IFileStorage storage = new InMemoryFileStorage();
await storage.SaveFileAsync("test.txt", "test");
string content = await storage.GetFileContentsAsync("test.txt")

Metrics

We provide five implementations that derive from the IMetricsClient interface:

  1. InMemoryMetricsClient: An in memory metrics implementation.
  2. RedisMetricsClient: An Redis metrics implementation.
  3. StatsDMetricsClient: An statsd metrics implementation.
  4. MetricsNETClient: An Metrics.NET implementation.
  5. AppMetricsClient: An AppMetrics implementation.
  6. CloudWatchMetricsClient: An AWS CloudWatch implementation.

We recommend using all of the IMetricsClient implementations as singletons.

Sample
IMetricsClient metrics = new InMemoryMetricsClient();
metrics.Counter("c1");
metrics.Gauge("g1", 2.534);
metrics.Timer("t1", 50788);

Sample Application

We have both slides and a sample application that shows off how to use Foundatio.

Thanks to all the people who have contributed

contributors

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
10.7.1 190 3/27/2024
10.7.0 204 1/5/2024
10.6.1 306 6/23/2023
10.6.0 396 1/1/2023
10.5.0 559 5/18/2022
10.4.0 579 3/7/2022
10.3.1 850 1/20/2022
10.3.0 813 1/20/2022
10.2.5 414 12/7/2021
10.2.4 870 12/3/2021
10.2.3 457 11/22/2021
10.2.2 476 9/23/2021
10.2.1 478 7/19/2021
10.2.0 505 7/8/2021
10.1.4 561 6/16/2021
10.1.3 487 4/23/2021
10.1.2 508 4/23/2021
10.1.1 517 4/15/2021
10.1.0 527 4/13/2021
10.0.2 529 1/20/2021
10.0.1 661 11/2/2020
10.0.0 765 9/16/2020
10.0.0-beta9 388 8/25/2020
10.0.0-beta8 415 8/3/2020
10.0.0-beta7 410 7/29/2020
10.0.0-beta6 462 7/7/2020
10.0.0-beta5 586 6/20/2020
10.0.0-beta3 369 6/14/2020
10.0.0-beta2 530 6/6/2020
10.0.0-beta10 443 9/15/2020
10.0.0-beta1 418 5/26/2020
10.0.0-alpha3 419 5/5/2020
10.0.0-alpha2 384 4/27/2020
10.0.0-alpha1 408 4/25/2020
9.1.1 1,079 4/28/2020
9.1.0 634 4/28/2020
9.0.0 728 1/16/2020
8.1.2126 848 8/30/2019
8.1.2123 769 8/27/2019
8.1.2120 696 8/27/2019
8.1.2115 736 8/27/2019
8.1.2109 720 8/26/2019
8.1.2058 771 5/14/2019
8.1.2027 808 4/16/2019
8.0.1965 807 2/24/2019
8.0.1948 774 2/22/2019
7.1.1845 931 11/3/2018
7.1.1841 909 11/3/2018
7.1.1837 911 11/1/2018
7.1.1833 956 11/1/2018
7.0.1831 919 11/1/2018
7.0.1818 936 10/30/2018
7.0.1738 987 9/7/2018
7.0.1706 1,202 5/9/2018
6.0.1586 1,273 11/30/2017
5.1.1562 1,125 10/30/2017
5.1.1521 1,119 9/27/2017
5.1.1515 1,128 9/26/2017
5.1.1501 1,142 9/14/2017
5.1.1498 1,125 8/28/2017
5.1.1492 1,161 8/28/2017
5.1.1490 1,125 8/16/2017
5.1.1474 1,132 8/1/2017
5.1.1470 1,148 7/31/2017
5.1.1457 1,165 6/23/2017
5.1.1448 1,122 5/5/2017
5.1.1443 1,113 5/5/2017
5.0.1336 1,159 3/14/2017
5.0.1334 1,124 3/13/2017
5.0.1331 1,156 3/12/2017
5.0.1329-pre 917 3/12/2017
5.0.1328-pre 865 3/12/2017
5.0.1327-pre 891 3/12/2017
5.0.1326-pre 905 3/12/2017
5.0.1324-pre 916 3/12/2017
4.3.1323-pre 899 3/11/2017
4.3.1317 1,189 2/23/2017
4.3.1316 1,183 2/22/2017
4.3.1315 1,199 2/22/2017
4.3.1314 1,213 2/20/2017
4.3.1312 1,188 2/20/2017
4.3.1311-pre 882 2/20/2017
4.3.1307 1,158 2/16/2017
4.3.1306 1,163 2/15/2017
4.3.1305 1,197 2/15/2017
4.3.1304-pre 917 2/15/2017
4.3.1303-pre 931 2/14/2017
4.3.1301 1,191 2/14/2017
4.3.1299 1,180 2/14/2017
4.3.1293 1,214 2/12/2017
4.3.1292 1,183 2/10/2017
4.3.1291 1,186 2/10/2017
4.3.1290 1,151 2/10/2017
4.3.1289 1,190 2/9/2017
4.3.1288 1,117 2/9/2017
4.3.1286 1,192 2/8/2017
4.3.1282 1,204 2/5/2017
4.3.1281 1,180 2/5/2017
4.3.1280 1,154 2/5/2017
4.3.1276-pre 903 2/5/2017
4.3.1177-pre 941 9/2/2016
4.3.1164-pre 936 8/21/2016
4.2.1205-pre 1,305 9/19/2016
4.2.1183 1,192 9/9/2016
4.2.1179 1,163 9/8/2016
4.2.1176 1,145 9/2/2016
4.2.1172 1,177 9/1/2016
4.2.1171-pre 919 9/1/2016
4.2.1169 1,156 8/22/2016
4.2.1167-pre 943 8/22/2016
4.2.1166-pre 919 8/22/2016
4.2.1161 1,178 8/10/2016
4.2.1156-pre 926 8/2/2016
4.2.1155 1,215 8/1/2016
4.2.1150 1,191 7/20/2016
4.2.1149-pre 929 7/19/2016
4.2.1148-pre 928 7/19/2016
4.2.1147-pre 889 7/19/2016
4.2.1146-pre 984 7/19/2016
4.2.1137 1,160 7/19/2016
4.2.1129-pre 933 7/19/2016
4.2.1128-pre 896 7/19/2016
4.2.1127-pre 961 7/19/2016
4.2.1126-pre 936 7/19/2016
4.2.1125-pre 939 7/19/2016
4.2.1123-pre 925 7/19/2016
4.2.1119-pre 923 7/18/2016
4.2.1113-pre 943 7/16/2016
4.2.1108-pre 932 7/15/2016
4.2.1107-pre 967 7/15/2016
4.2.1104-pre 1,127 7/13/2016
4.2.1099-pre 1,090 7/12/2016
4.2.1098-pre 1,085 7/12/2016
4.2.1093-pre 994 7/8/2016
4.2.1091-pre 1,010 7/8/2016
4.2.1090-pre 954 7/8/2016
4.2.1089-pre 973 7/7/2016
4.2.1087-pre 961 7/7/2016
4.2.1083-pre 1,001 7/6/2016
4.2.1082-pre 988 7/6/2016
4.2.1081-pre 1,000 7/6/2016
4.2.1079-pre 947 7/6/2016
4.2.1078-pre 973 7/6/2016
4.2.1073-pre 1,012 7/5/2016
4.2.1070-pre 958 7/5/2016
4.2.1069-pre 942 7/1/2016
4.2.1059-pre 921 7/1/2016
4.2.1046-pre 940 6/24/2016
4.2.1031-pre 952 6/24/2016
4.2.1028-pre 969 6/24/2016
4.2.1027-pre 938 6/24/2016
4.1.1009 1,245 6/15/2016
4.1.1002-pre 1,252 6/14/2016
4.1.995-pre 1,151 6/13/2016
4.1.989-pre 951 5/26/2016
4.1.983-pre 914 5/25/2016
4.1.982-pre 942 5/25/2016
4.1.978-pre 940 5/6/2016
4.1.977-pre 954 5/5/2016
4.1.975-pre 914 5/5/2016
4.0.958 1,168 5/1/2016
4.0.957 1,371 4/29/2016
4.0.956 1,411 4/29/2016
4.0.955 1,212 4/28/2016
4.0.941 1,475 4/27/2016
4.0.940 1,429 4/27/2016
4.0.925 1,342 4/27/2016
4.0.922 1,307 4/27/2016
4.0.909 1,363 4/20/2016
4.0.880 1,270 4/7/2016
4.0.869 1,239 3/30/2016
4.0.864 1,170 3/29/2016
4.0.861 1,264 3/29/2016
4.0.860 1,198 3/29/2016
4.0.857 1,197 3/29/2016
4.0.855 1,210 3/29/2016
4.0.846 1,208 3/22/2016
4.0.842 1,276 3/21/2016
4.0.836 1,168 3/18/2016
4.0.835 1,211 3/18/2016
4.0.834 1,211 3/17/2016
4.0.832 1,179 3/17/2016
4.0.831 1,199 3/16/2016
4.0.829 1,194 3/16/2016
4.0.828 1,186 3/15/2016
4.0.827 1,193 3/15/2016
4.0.826 1,222 3/15/2016
4.0.825 1,350 3/13/2016
4.0.821 1,190 3/11/2016
4.0.819 1,345 3/11/2016
4.0.818 1,227 3/11/2016
4.0.816 1,299 3/11/2016
4.0.815 1,321 3/11/2016
4.0.814 1,185 3/11/2016
4.0.813 1,387 3/10/2016
4.0.812 1,321 3/10/2016
4.0.811 1,319 3/10/2016
4.0.810 1,198 3/10/2016
4.0.809 1,203 3/10/2016
4.0.805 1,222 3/9/2016
4.0.797 1,247 3/9/2016
4.0.796 1,233 3/9/2016
4.0.794 1,202 3/9/2016
4.0.793 1,215 3/9/2016
4.0.792 1,208 3/8/2016
4.0.791 1,214 3/8/2016
4.0.790 1,189 3/8/2016
4.0.788 1,199 3/8/2016
4.0.774 1,242 3/2/2016
4.0.773 1,146 3/1/2016
4.0.772 1,196 3/1/2016
4.0.770 1,175 3/1/2016
4.0.769 1,211 3/1/2016
4.0.762 1,209 3/1/2016
4.0.761 1,210 3/1/2016
4.0.760 1,229 2/29/2016
4.0.759 1,427 2/29/2016
4.0.758 1,164 2/29/2016
4.0.757 1,143 2/29/2016
4.0.756 1,501 2/27/2016
4.0.755 1,218 2/27/2016
4.0.754 1,441 2/27/2016
4.0.753 1,295 2/27/2016
4.0.752 1,381 2/27/2016
4.0.750 1,455 2/27/2016
4.0.749 1,289 2/27/2016
4.0.747 1,480 2/26/2016
4.0.746 1,642 2/26/2016
4.0.744 1,335 2/26/2016
4.0.743 1,674 2/26/2016
4.0.742 1,596 2/26/2016
4.0.741 1,413 2/26/2016
4.0.739 1,277 2/25/2016
4.0.738 1,415 2/25/2016
4.0.734 1,602 2/25/2016
4.0.733-beta 1,200 2/25/2016
4.0.672 1,205 2/16/2016
4.0.669 1,193 2/11/2016
4.0.668 1,368 2/11/2016
3.0.654 1,171 2/10/2016
3.0.646 1,193 2/5/2016
3.0.645 1,185 2/5/2016
3.0.644 1,181 2/5/2016
3.0.639 1,174 2/3/2016
3.0.638 1,202 2/2/2016
3.0.637 1,169 2/1/2016
3.0.635 1,150 2/1/2016
3.0.633 1,177 1/27/2016
3.0.632 1,185 1/27/2016
3.0.629 1,229 1/18/2016
3.0.626 1,217 1/18/2016
3.0.625 1,232 1/18/2016
3.0.624 1,198 12/17/2015
3.0.623 1,254 12/9/2015
3.0.622 1,169 12/9/2015
3.0.621 1,220 12/9/2015
3.0.620 1,201 12/8/2015
3.0.613 1,402 12/4/2015
3.0.611 1,246 12/3/2015
3.0.610 1,413 11/30/2015
3.0.606 1,354 11/30/2015
3.0.605 1,324 11/25/2015
3.0.603 1,356 11/23/2015
3.0.601 1,306 11/23/2015
3.0.600 1,328 11/19/2015
3.0.599 1,302 11/19/2015
3.0.598 1,266 11/17/2015
3.0.592 1,249 11/12/2015
3.0.589 1,250 11/10/2015
3.0.588 1,260 11/10/2015
3.0.586 1,228 11/10/2015
3.0.584 1,306 11/10/2015
3.0.583 1,310 11/10/2015
3.0.581 1,217 11/6/2015
3.0.579 1,179 11/6/2015
3.0.576 1,213 11/5/2015
3.0.575 1,236 11/4/2015
3.0.574 1,226 11/4/2015
3.0.569 1,215 11/3/2015
3.0.568 1,265 11/3/2015
3.0.566 1,225 11/3/2015
3.0.545 1,250 10/28/2015
3.0.538 1,231 10/22/2015
3.0.537 1,216 10/21/2015
3.0.536 1,221 10/21/2015
3.0.534 1,218 10/21/2015
3.0.532 1,227 10/21/2015
3.0.531 1,241 10/21/2015
3.0.524 1,226 10/15/2015
3.0.523 1,268 10/10/2015
3.0.522 1,267 10/10/2015
3.0.520 1,222 10/9/2015
3.0.519 1,310 10/9/2015
3.0.518 1,527 10/9/2015
3.0.517 1,362 10/9/2015
3.0.516 1,391 10/7/2015
3.0.514 1,306 10/6/2015
3.0.513 1,406 10/6/2015
3.0.512 1,577 10/6/2015
3.0.509 1,357 10/1/2015
3.0.507 1,290 10/1/2015
3.0.505 1,322 9/30/2015
3.0.503 1,333 9/30/2015
3.0.502 1,297 9/30/2015
3.0.479 1,303 9/25/2015
3.0.476 1,299 9/24/2015
3.0.471 1,277 9/24/2015
3.0.470 1,262 9/24/2015
3.0.469 1,250 9/24/2015
3.0.468 1,270 9/24/2015
3.0.467 1,316 9/24/2015
3.0.465 1,295 9/24/2015
3.0.459 1,270 9/23/2015
3.0.456 1,314 9/23/2015
3.0.455 1,328 9/22/2015
3.0.454 1,313 9/19/2015
3.0.453 1,319 9/19/2015
3.0.452 1,296 9/18/2015
3.0.451 1,286 9/18/2015
3.0.450 1,272 9/18/2015
3.0.447 1,240 9/18/2015
2.0.378 1,248 9/5/2015
2.0.372 1,261 9/4/2015
2.0.370 1,262 9/4/2015
2.0.368 1,221 9/4/2015
2.0.365 1,296 9/3/2015
2.0.363 1,250 9/3/2015
2.0.361 1,224 9/3/2015
1.0.360 1,268 9/1/2015
1.0.359 1,215 9/1/2015
1.0.358 1,203 9/1/2015
1.0.356 1,230 8/31/2015
1.0.355 1,299 8/31/2015
1.0.354 1,238 8/29/2015
1.0.305 1,252 8/19/2015
1.0.299 1,538 8/8/2015
1.0.293 1,283 7/20/2015
1.0.292 1,251 7/20/2015
1.0.289 1,202 7/10/2015
1.0.288 1,224 7/10/2015
1.0.286 1,252 7/7/2015
1.0.285 1,276 7/7/2015
1.0.284 1,305 7/7/2015
1.0.282 1,226 7/6/2015
1.0.281 1,265 7/6/2015
1.0.279 1,257 7/6/2015
1.0.277 1,281 6/18/2015
1.0.276 1,240 6/8/2015
1.0.275 1,218 6/8/2015
1.0.274 1,192 6/8/2015
1.0.272 1,579 6/1/2015
1.0.269 1,242 5/25/2015
1.0.268 1,244 5/24/2015
1.0.266 1,261 5/24/2015
1.0.263 1,221 5/21/2015
1.0.258 1,255 5/19/2015
1.0.257 1,254 5/18/2015
1.0.256 1,432 5/17/2015
1.0.254 1,252 5/13/2015
1.0.253 1,241 5/13/2015
1.0.250 1,201 5/13/2015
1.0.249 1,238 5/12/2015
1.0.248 1,220 5/12/2015
1.0.245 1,260 5/12/2015
1.0.241 1,261 5/12/2015