Foundatio.MetricsNET 10.5.0 The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org. Prefix Reserved

.NET Standard 2.0
Install-Package Foundatio.MetricsNET -Version 10.5.0
dotnet add package Foundatio.MetricsNET --version 10.5.0
<PackageReference Include="Foundatio.MetricsNET" Version="10.5.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Foundatio.MetricsNET --version 10.5.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Foundatio.MetricsNET, 10.5.0"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install Foundatio.MetricsNET as a Cake Addin
#addin nuget:?package=Foundatio.MetricsNET&version=10.5.0

// Install Foundatio.MetricsNET as a Cake Tool
#tool nuget:?package=Foundatio.MetricsNET&version=10.5.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

FoundatioFoundatio

Build status NuGet Version feedz.io Discord

Pluggable foundation blocks for building loosely coupled distributed apps.

Includes implementations in Redis, Azure, AWS, RabbitMQ 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 but found Azure support lacking and local set up a pain. 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. 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 Versions
.NET net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows
.NET Core netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1
.NET Standard netstandard2.0 netstandard2.1
.NET Framework net461 net462 net463 net47 net471 net472 net48
MonoAndroid monoandroid
MonoMac monomac
MonoTouch monotouch
Tizen tizen40 tizen60
Xamarin.iOS xamarinios
Xamarin.Mac xamarinmac
Xamarin.TVOS xamarintvos
Xamarin.WatchOS xamarinwatchos
Compatible target framework(s)
Additional computed target framework(s)
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.5.0 28 5/18/2022
10.4.0 82 3/7/2022
10.3.1 76 1/20/2022
10.3.0 65 1/20/2022
10.2.5 100 12/7/2021
10.2.4 539 12/3/2021
10.2.3 101 11/22/2021
10.2.2 159 9/23/2021
10.2.1 172 7/19/2021
10.2.0 168 7/8/2021
10.1.4 219 6/16/2021
10.1.3 187 4/23/2021
10.1.2 193 4/23/2021
10.1.1 197 4/15/2021
10.1.0 187 4/13/2021
10.0.2 209 1/20/2021
10.0.1 316 11/2/2020
10.0.0 402 9/16/2020
10.0.0-beta9 233 8/25/2020
10.0.0-beta8 230 8/3/2020
10.0.0-beta7 282 7/29/2020
10.0.0-beta6 285 7/7/2020
10.0.0-beta5 429 6/20/2020
10.0.0-beta3 232 6/14/2020
10.0.0-beta2 329 6/6/2020
10.0.0-beta10 292 9/15/2020
10.0.0-beta1 286 5/26/2020
10.0.0-alpha3 259 5/5/2020
10.0.0-alpha2 241 4/27/2020
10.0.0-alpha1 258 4/25/2020
9.1.1 673 4/28/2020
9.1.0 300 4/28/2020
9.0.0 334 1/16/2020
8.1.2126 415 8/30/2019
8.1.2123 369 8/27/2019
8.1.2120 377 8/27/2019
8.1.2115 368 8/27/2019
8.1.2109 363 8/26/2019
8.1.2058 396 5/14/2019
8.1.2027 420 4/16/2019
8.0.1965 418 2/24/2019
8.0.1948 410 2/22/2019
7.1.1845 531 11/3/2018
7.1.1841 542 11/3/2018
7.1.1837 502 11/1/2018
7.1.1833 539 11/1/2018
7.0.1831 500 11/1/2018
7.0.1818 522 10/30/2018
7.0.1738 587 9/7/2018
7.0.1706 703 5/9/2018
6.0.1586 721 11/30/2017
5.1.1562 662 10/30/2017
5.1.1521 655 9/27/2017
5.1.1515 655 9/26/2017
5.1.1501 672 9/14/2017
5.1.1498 649 8/28/2017
5.1.1492 678 8/28/2017
5.1.1490 670 8/16/2017
5.1.1474 686 8/1/2017
5.1.1470 680 7/31/2017
5.1.1457 709 6/23/2017
5.1.1448 690 5/5/2017
5.1.1443 700 5/5/2017
5.0.1336 698 3/14/2017
5.0.1334 685 3/13/2017
5.0.1331 699 3/12/2017
5.0.1329-pre 646 3/12/2017
5.0.1328-pre 627 3/12/2017
5.0.1327-pre 644 3/12/2017
5.0.1326-pre 665 3/12/2017
5.0.1324-pre 657 3/12/2017
4.3.1323-pre 660 3/11/2017
4.3.1317 726 2/23/2017
4.3.1316 707 2/22/2017
4.3.1315 717 2/22/2017
4.3.1314 739 2/20/2017
4.3.1312 715 2/20/2017
4.3.1311-pre 642 2/20/2017
4.3.1307 712 2/16/2017
4.3.1306 698 2/15/2017
4.3.1305 720 2/15/2017
4.3.1304-pre 645 2/15/2017
4.3.1303-pre 663 2/14/2017
4.3.1301 696 2/14/2017
4.3.1299 718 2/14/2017
4.3.1293 727 2/12/2017
4.3.1292 698 2/10/2017
4.3.1291 712 2/10/2017
4.3.1290 701 2/10/2017
4.3.1289 712 2/9/2017
4.3.1288 709 2/9/2017
4.3.1286 725 2/8/2017
4.3.1282 724 2/5/2017
4.3.1281 739 2/5/2017
4.3.1280 698 2/5/2017
4.3.1276-pre 660 2/5/2017
4.3.1177-pre 697 9/2/2016
4.3.1164-pre 658 8/21/2016
4.2.1205-pre 1,042 9/19/2016
4.2.1183 755 9/9/2016
4.2.1179 719 9/8/2016
4.2.1176 717 9/2/2016
4.2.1172 709 9/1/2016
4.2.1171-pre 674 9/1/2016
4.2.1169 721 8/22/2016
4.2.1167-pre 680 8/22/2016
4.2.1166-pre 664 8/22/2016
4.2.1161 729 8/10/2016
4.2.1156-pre 657 8/2/2016
4.2.1155 739 8/1/2016
4.2.1150 729 7/20/2016
4.2.1149-pre 664 7/19/2016
4.2.1148-pre 651 7/19/2016
4.2.1147-pre 677 7/19/2016
4.2.1146-pre 691 7/19/2016
4.2.1137 711 7/19/2016
4.2.1129-pre 687 7/19/2016
4.2.1128-pre 659 7/19/2016
4.2.1127-pre 692 7/19/2016
4.2.1126-pre 662 7/19/2016
4.2.1125-pre 672 7/19/2016
4.2.1123-pre 676 7/19/2016
4.2.1119-pre 666 7/18/2016
4.2.1113-pre 690 7/16/2016
4.2.1108-pre 694 7/15/2016
4.2.1107-pre 689 7/15/2016
4.2.1104-pre 861 7/13/2016
4.2.1099-pre 852 7/12/2016
4.2.1098-pre 844 7/12/2016
4.2.1093-pre 741 7/8/2016
4.2.1091-pre 749 7/8/2016
4.2.1090-pre 699 7/8/2016
4.2.1089-pre 706 7/7/2016
4.2.1087-pre 705 7/7/2016
4.2.1083-pre 724 7/6/2016
4.2.1082-pre 734 7/6/2016
4.2.1081-pre 721 7/6/2016
4.2.1079-pre 699 7/6/2016
4.2.1078-pre 701 7/6/2016
4.2.1073-pre 738 7/5/2016
4.2.1070-pre 727 7/5/2016
4.2.1069-pre 702 7/1/2016
4.2.1059-pre 686 7/1/2016
4.2.1046-pre 669 6/24/2016
4.2.1031-pre 689 6/24/2016
4.2.1028-pre 693 6/24/2016
4.2.1027-pre 700 6/24/2016
4.1.1009 772 6/15/2016
4.1.1002-pre 1,003 6/14/2016
4.1.995-pre 905 6/13/2016
4.1.989-pre 710 5/26/2016
4.1.983-pre 692 5/25/2016
4.1.982-pre 693 5/25/2016
4.1.978-pre 667 5/6/2016
4.1.977-pre 680 5/5/2016
4.1.975-pre 673 5/5/2016
4.0.958 733 5/1/2016
4.0.957 883 4/29/2016
4.0.956 911 4/29/2016
4.0.955 753 4/28/2016
4.0.941 1,004 4/27/2016
4.0.940 973 4/27/2016
4.0.925 888 4/27/2016
4.0.922 860 4/27/2016
4.0.909 914 4/20/2016
4.0.880 778 4/7/2016
4.0.869 769 3/30/2016
4.0.864 736 3/29/2016
4.0.861 771 3/29/2016
4.0.860 735 3/29/2016
4.0.857 733 3/29/2016
4.0.855 755 3/29/2016
4.0.846 741 3/22/2016
4.0.842 799 3/21/2016
4.0.836 737 3/18/2016
4.0.835 738 3/18/2016
4.0.834 752 3/17/2016
4.0.832 729 3/17/2016
4.0.831 713 3/16/2016
4.0.829 724 3/16/2016
4.0.828 755 3/15/2016
4.0.827 741 3/15/2016
4.0.826 736 3/15/2016
4.0.825 835 3/13/2016
4.0.821 735 3/11/2016
4.0.819 797 3/11/2016
4.0.818 730 3/11/2016
4.0.816 811 3/11/2016
4.0.815 835 3/11/2016
4.0.814 739 3/11/2016
4.0.813 836 3/10/2016
4.0.812 800 3/10/2016
4.0.811 805 3/10/2016
4.0.810 752 3/10/2016
4.0.809 749 3/10/2016
4.0.805 736 3/9/2016
4.0.797 750 3/9/2016
4.0.796 746 3/9/2016
4.0.794 738 3/9/2016
4.0.793 756 3/9/2016
4.0.792 748 3/8/2016
4.0.791 734 3/8/2016
4.0.790 733 3/8/2016
4.0.788 738 3/8/2016
4.0.774 805 3/2/2016
4.0.773 738 3/1/2016
4.0.772 759 3/1/2016
4.0.770 734 3/1/2016
4.0.769 741 3/1/2016
4.0.762 748 3/1/2016
4.0.761 733 3/1/2016
4.0.760 741 2/29/2016
4.0.759 940 2/29/2016
4.0.758 746 2/29/2016
4.0.757 724 2/29/2016
4.0.756 1,068 2/27/2016
4.0.755 761 2/27/2016
4.0.754 928 2/27/2016
4.0.753 807 2/27/2016
4.0.752 922 2/27/2016
4.0.750 1,012 2/27/2016
4.0.749 840 2/27/2016
4.0.747 1,014 2/26/2016
4.0.746 1,163 2/26/2016
4.0.744 833 2/26/2016
4.0.743 1,165 2/26/2016
4.0.742 1,106 2/26/2016
4.0.741 917 2/26/2016
4.0.739 810 2/25/2016
4.0.738 969 2/25/2016
4.0.734 1,115 2/25/2016
4.0.733-beta 911 2/25/2016
4.0.672 741 2/16/2016
4.0.669 729 2/11/2016
4.0.668 833 2/11/2016
3.0.654 736 2/10/2016
3.0.646 743 2/5/2016
3.0.645 740 2/5/2016
3.0.644 725 2/5/2016
3.0.639 735 2/3/2016
3.0.638 727 2/2/2016
3.0.637 746 2/1/2016
3.0.635 713 2/1/2016
3.0.633 720 1/27/2016
3.0.632 740 1/27/2016
3.0.629 803 1/18/2016
3.0.626 773 1/18/2016
3.0.625 803 1/18/2016
3.0.624 740 12/17/2015
3.0.623 782 12/9/2015
3.0.622 732 12/9/2015
3.0.621 747 12/9/2015
3.0.620 740 12/8/2015
3.0.613 945 12/4/2015
3.0.611 757 12/3/2015
3.0.610 956 11/30/2015
3.0.606 877 11/30/2015
3.0.605 842 11/25/2015
3.0.603 866 11/23/2015
3.0.601 831 11/23/2015
3.0.600 853 11/19/2015
3.0.599 829 11/19/2015
3.0.598 825 11/17/2015
3.0.592 785 11/12/2015
3.0.589 780 11/10/2015
3.0.588 793 11/10/2015
3.0.586 776 11/10/2015
3.0.584 813 11/10/2015
3.0.583 798 11/10/2015
3.0.581 774 11/6/2015
3.0.579 738 11/6/2015
3.0.576 778 11/5/2015
3.0.575 770 11/4/2015
3.0.574 773 11/4/2015
3.0.569 752 11/3/2015
3.0.568 781 11/3/2015
3.0.566 767 11/3/2015
3.0.545 765 10/28/2015
3.0.538 763 10/22/2015
3.0.537 764 10/21/2015
3.0.536 765 10/21/2015
3.0.534 762 10/21/2015
3.0.532 768 10/21/2015
3.0.531 754 10/21/2015
3.0.524 769 10/15/2015
3.0.523 785 10/10/2015
3.0.522 798 10/10/2015
3.0.520 763 10/9/2015
3.0.519 878 10/9/2015
3.0.518 1,078 10/9/2015
3.0.517 873 10/9/2015
3.0.516 935 10/7/2015
3.0.514 830 10/6/2015
3.0.513 944 10/6/2015
3.0.512 1,136 10/6/2015
3.0.509 900 10/1/2015
3.0.507 859 10/1/2015
3.0.505 895 9/30/2015
3.0.503 872 9/30/2015
3.0.502 840 9/30/2015
3.0.479 857 9/25/2015
3.0.476 814 9/24/2015
3.0.471 829 9/24/2015
3.0.470 802 9/24/2015
3.0.469 814 9/24/2015
3.0.468 796 9/24/2015
3.0.467 827 9/24/2015
3.0.465 817 9/24/2015
3.0.459 826 9/23/2015
3.0.456 844 9/23/2015
3.0.455 816 9/22/2015
3.0.454 837 9/19/2015
3.0.453 854 9/19/2015
3.0.452 829 9/18/2015
3.0.451 838 9/18/2015
3.0.450 824 9/18/2015
3.0.447 795 9/18/2015
2.0.378 796 9/5/2015
2.0.372 794 9/4/2015
2.0.370 796 9/4/2015
2.0.368 778 9/4/2015
2.0.365 781 9/3/2015
2.0.363 787 9/3/2015
2.0.361 771 9/3/2015
1.0.360 793 9/1/2015
1.0.359 775 9/1/2015
1.0.358 761 9/1/2015
1.0.356 777 8/31/2015
1.0.355 858 8/31/2015
1.0.354 769 8/29/2015
1.0.305 781 8/19/2015
1.0.299 1,059 8/8/2015
1.0.293 797 7/20/2015
1.0.292 782 7/20/2015
1.0.289 770 7/10/2015
1.0.288 769 7/10/2015
1.0.286 816 7/7/2015
1.0.285 790 7/7/2015
1.0.284 790 7/7/2015
1.0.282 779 7/6/2015
1.0.281 779 7/6/2015
1.0.279 799 7/6/2015
1.0.277 780 6/18/2015
1.0.276 758 6/8/2015
1.0.275 755 6/8/2015
1.0.274 756 6/8/2015
1.0.272 991 6/1/2015
1.0.269 786 5/25/2015
1.0.268 783 5/24/2015
1.0.266 802 5/24/2015
1.0.263 767 5/21/2015
1.0.258 772 5/19/2015
1.0.257 775 5/18/2015
1.0.256 844 5/17/2015
1.0.254 758 5/13/2015
1.0.253 782 5/13/2015
1.0.250 766 5/13/2015
1.0.249 790 5/12/2015
1.0.248 753 5/12/2015
1.0.245 764 5/12/2015
1.0.241 778 5/12/2015