Foundatio.MetricsNET 10.7.1

前缀已保留
dotnet add package Foundatio.MetricsNET --version 10.7.1                
NuGet\Install-Package Foundatio.MetricsNET -Version 10.7.1                
这个命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用了 NuGet 模块的 Install-Package 版本。
<PackageReference Include="Foundatio.MetricsNET" Version="10.7.1" />                
对于支持 PackageReference 的项目,将此 XML 节复制到项目文件中以引用包。
paket add Foundatio.MetricsNET --version 10.7.1                
#r "nuget: Foundatio.MetricsNET, 10.7.1"                
#r 指令可用于 F# Interactive 和多语言笔记本。将此复制到交互工具或脚本的源代码中,以引用包。
// Install Foundatio.MetricsNET as a Cake Addin
#addin nuget:?package=Foundatio.MetricsNET&version=10.7.1

// Install Foundatio.MetricsNET as a Cake Tool
#tool nuget:?package=Foundatio.MetricsNET&version=10.7.1                

FoundatioFoundatio

Build status NuGet Version feedz.io Discord

为构建松散耦合的分布式应用程序的插件式基础构建块。

包含 Redis、Azure、AWS、RabbitMQ、Kafka 以及内存中的实现(用于开发)。

为何选择 Foundatio?

在构建多个大型云应用程序时,我们发现缺乏优秀的解决方案(这并不意味着没有解决方案)来构建可扩展的分布式应用程序,同时保持开发体验简单。以下是为什么我们构建和使用 Foundatio 的几个例子:

  • 想针对抽象接口进行构建,以便我们能够轻松更改实现。
  • 希望组件能够适配依赖注入。
  • 缓存:我们最初使用的是开源Redis缓存客户端,但后来它变成了一款商业产品,并且拥有高昂的许可费用。不仅如此,而且没有内存实现,所以每个开发者都需要设置和配置Redis。
  • 消息总线:我们最初考虑了NServiceBus(一款优秀的产品),但它的许可费用很高(他们也要吃饭),并且对开源不太友好。我们还调查了MassTransit(又一款优秀的产品),但当时发现Azure支持不足,并且本地设置很烦人(对于内存)。我们希望有一个简单易用的消息总线,无论是在本地还是在云端。
  • 存储:我们找不到任何现有的项目,它是解耦的,并支持内存存储、文件存储或Azure Blob存储。

总之,如果您希望在开发测试过程中没有痛点,同时允许您的应用进行扩展,请使用Foundatio!

实现

入门(开发)

您可以通过NuGet包管理器安装Foundatio有关帮助,请创建问题或加入我们的Discord聊天室。如果您有任何问题,我们随时为您解答!

本部分仅用于开发目的!如果您正在尝试使用Foundatio库,请从NuGet获取。

  1. 您需要安装Visual Studio Code
  2. 打开Foundatio.sln Visual Studio解决方案文件。

使用Foundatio

以下部分仅包含Foundatio能做的功能的一小部分。我们建议查看源代码获取更多信息。如果您有任何问题或需要帮助,请告诉我们!

缓存

缓存允许您以极高的速度存储和访问数据,节省您创建或获取数据的昂贵操作。我们提供了四种不同的缓存实现,它们都源自于ICacheClient接口

  1. InMemoryCacheClient:内存缓存客户端实现。此缓存实现仅在进程的生命周期内有效。值得注意的是,内存缓存客户端能够通过MaxItems属性缓存最后X项。我们在Exceptionless中使用此功能,以便只保留最后250个解析的geoip结果
  2. HybridCacheClient:此缓存实现同时使用ICacheClientInMemoryCacheClient,并使用IMessageBus在进程间保持缓存的同步。这可以带来巨大的性能提升,因为如果项存在于本地缓存中,则可以节省序列化操作和对远程缓存的调用。
  3. RedisCacheClient:Redis缓存客户端实现。
  4. RedisHybridCacheClientHybridCacheClient的实现,它使用RedisCacheClient作为ICacheClient,并使用RedisMessageBus作为IMessageBus
  5. ScopedCacheClient:此缓存实现采用一个ICacheClient实例和一个字符串scope。将作用域前缀附加到每个缓存键上。这使得可以轻松地对所有缓存键进行范围处理,并轻松删除它们。
示例
using Foundatio.Caching;

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

队列

队列提供先入先出(FIFO)消息传递。我们提供了四个不同类型的队列实现,这些实现都源于IQueue接口

  1. InMemoryQueue:内存队列实现。此队列实现仅在进程的生命周期内有效。
  2. RedisQueue:Redis队列实现。
  3. AzureServiceBusQueue:Azure Service Bus Queue实现。
  4. AzureStorageQueue:Azure Storage Queue实现。
  5. SQSQueue:AWS SQS实现。
示例
using Foundatio.Queues;

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

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

var workItem = await queue.DequeueAsync();

锁确保资源在任何给定时间只被一个消费者访问。我们提供了两种不同的锁定实现,这些实现都源于ILockProvider接口

  1. CacheLockProvider:使用缓存进行进程间通信的锁实现。
  2. ThrottlingLockProvider:仅允许一定数量的锁通过的锁定实现。您可以使用它来限制对某些外部服务的API调用,并将在所有请求该锁的进程中限制它们。
  3. ScopedLockProvider:此锁定实现采用一个ILockProvider实例和一个字符串scope。将作用域前缀附加到每个锁定键上。这使得可以轻松地对所有锁定进行范围处理并轻松释放它们。

值得注意的是,所有锁提供程序都采用一个ICacheClient。这可以确保您的代码在机器间正确锁定。

示例
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();

消息

允许您发布和订阅通过应用程序流动的消息。我们提供了四种不同类型的信息总线实现,这些实现都源于IMessageBus接口

  1. InMemoryMessageBus:内存信息总线实现。此信息总线实现仅在进程的生命周期内有效。
  2. RedisMessageBus:Redis信息总线实现。
  3. RabbitMQMessageBus:RabbitMQ的实现。
  4. KafkaMessageBus:Kafka的实现。
  5. AzureServiceBusMessageBus:Azure Service Bus的实现。
示例
using Foundatio.Messaging;

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

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

作业

允许您运行长时间运行的操作(进程内或进程外),无需担心它会被提前终止。我们提供三种不同的方式来定义基于您的用例的工作。

  1. 任务:所有任务都必须源于IJob接口。我们还有一个您可以从它派生的JobBase基类,它提供工作上下文和日志记录。您可以通过在工作上调用RunAsync()或创建JobRunner并调用其Run方法来运行任务。JobRunner可用于轻松地将任务作为Azure Web作业运行。
示例
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. 队列处理任务:队列处理任务非常适合与来自队列的驱动的任务一起使用。队列处理任务必须源于QueueJobBase。然后您可以通过在工作上调用RunAsync()或将它传递给JobRunner来运行任务。JobRunner可以用于轻松地将任务作为Azure Web作业运行。
示例
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. 工作项任务:工作项任务将在工作池中与其他工作项任务一起运行。这种类型的工作非常适合那些不经常发生但应在任务中处理的事情(例如:删除拥有许多子实体的实体)。它将在您发布到message bus的消息时触发。任务必须源于WorkItemHandlerBase。然后您可以通过JobRunner运行所有共享任务。JobRunner可以用于轻松地将任务作为Azure Web作业运行。
示例
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" });

文件存储

我们提供不同的文件存储实现,这些实现源于IFileStorage接口

  1. InMemoryFileStorage:一个内存文件实现。此文件存储实现仅适用于进程的生命周期。
  2. FolderFileStorage:一个使用硬盘进行存储的文件存储实现。
  3. AzureFileStorage:一个Azure Blob存储实现。
  4. S3FileStorage:一个AWS S3文件存储实现。
  5. RedisFileStorage:一个Redis文件存储实现。
  6. MinioFileStorage:一个Minio文件存储实现。
  7. AliyunFileStorage:阿里云文件存储实现。
  8. SshNetFileStorage:SFTP文件存储实现。

我们推荐使用所有 IFileStorage 实现作为单例。

示例
using Foundatio.Storage;

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

指标

我们提供了从 IMetricsClient 接口派生的五个实现。

  1. InMemoryMetricsClient:内存中指标实现。
  2. RedisMetricsClient:Redis指标实现。
  3. StatsDMetricsClient:statsd指标实现。
  4. MetricsNETClient:一个Metrics.NET实现。
  5. AppMetricsClient:一个AppMetrics实现。
  6. CloudWatchMetricsClient:AWS CloudWatch实现。

我们建议将所有 IMetricsClient 实现作为单例使用。

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

示例应用

我们提供了使用Foundatio的幻灯片示例应用,展示了如何使用Foundatio。

感谢所有贡献者

contributors

产品 兼容和额外的计算目标框架版本。
.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 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.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 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包括的目标框架(在包中)
有关 目标框架.NET Standard 的更多信息。

NuGet 包

本包未由任何 NuGet 包使用。

GitHub 仓库

本包未由任何流行的 GitHub 仓库使用。

版本 下载 最后更新
10.7.1 98 3/27/2024
10.7.0 172 1/5/2024
10.6.1 274 6/23/2023
10.6.0 359 1/1/2023
10.5.0 508 5/18/2022
10.4.0 544 3/7/2022
10.3.1 793 1/20/2022
10.3.0 762 1/20/2022
10.2.5 372 12/7/2021
10.2.4 823 12/3/2021
10.2.3 411 11/22/2021
10.2.2 428 9/23/2021
10.2.1 431 7/19/2021
10.2.0 476 7/8/2021
10.1.4 515 6/16/2021
10.1.3 457 4/23/2021
10.1.2 477 4/23/2021
10.1.1 482 4/15/2021
10.1.0 490 4/13/2021
10.0.2 493 1/20/2021
10.0.1 609 11/2/2020
10.0.0 729 9/16/2020
10.0.0-beta9 345 8/25/2020
10.0.0-beta8 372 8/3/2020
10.0.0-beta7 379 7/29/2020
10.0.0-beta6 416 7/7/2020
10.0.0-beta5 558 6/20/2020
10.0.0-beta3 341 6/14/2020
10.0.0-beta2 481 6/6/2020
10.0.0-beta10 396 9/15/2020
10.0.0-beta1 388 5/26/2020
10.0.0-alpha3 369 5/5/2020
10.0.0-alpha2 336 4/27/2020
10.0.0-alpha1 356 4/25/2020
9.1.1 1,025 4/28/2020
9.1.0 597 4/28/2020
9.0.0 672 1/16/2020
8.1.2126 795 8/30/2019
8.1.2123 715 8/27/2019
8.1.2120 656 8/27/2019
8.1.2115 684 8/27/2019
8.1.2109 661 8/26/2019
8.1.2058 732 5/14/2019
8.1.2027 763 4/16/2019
8.0.1965 754 2/24/2019
8.0.1948 719 2/22/2019
7.1.1845 860 11/3/2018
7.1.1841 839 11/3/2018
7.1.1837 843 11/1/2018
7.1.1833 904 11/1/2018
7.0.1831 860 11/1/2018
7.0.1818 866 10/30/2018
7.0.1738 919 9/7/2018
7.0.1706 1,069 5/9/2018
6.0.1586 1,127 11/30/2017
5.1.1562 1,019 10/30/2017
5.1.1521 1,018 9/27/2017
5.1.1515 1,015 9/26/2017
5.1.1501 1,040 9/14/2017
5.1.1498 1,020 8/28/2017
5.1.1492 1,056 8/28/2017
5.1.1490 1,037 8/16/2017
5.1.1474 1,024 8/1/2017
5.1.1470 1,046 7/31/2017
5.1.1457 1,078 6/23/2017
5.1.1448 1,036 5/5/2017
5.1.1443 1,009 5/5/2017
5.0.1336 1,056 3/14/2017
5.0.1334 1,037 3/13/2017
5.0.1331 1,053 3/12/2017
5.0.1329-pre 822 3/12/2017
5.0.1328-pre 774 3/12/2017
5.0.1327-pre 798 3/12/2017
5.0.1326-pre 813 3/12/2017
5.0.1324-pre 822 3/12/2017
4.3.1323-pre 807 3/11/2017
4.3.1317 1,086 2/23/2017
4.3.1316 1,082 2/22/2017
4.3.1315 1,091 2/22/2017
4.3.1314 1,126 2/20/2017
4.3.1312 1,098 2/20/2017
4.3.1311-pre 788 2/20/2017
4.3.1307 1,056 2/16/2017
4.3.1306 1,059 2/15/2017
4.3.1305 1,093 2/15/2017
4.3.1304-pre 824 2/15/2017
4.3.1303-pre 838 2/14/2017
4.3.1301 1,088 2/14/2017
4.3.1299 1,093 2/14/2017
4.3.1293 1,114 2/12/2017
4.3.1292 1,080 2/10/2017
4.3.1291 1,080 2/10/2017
4.3.1290 1,048 2/10/2017
4.3.1289 1,088 2/9/2017
4.3.1288 1,030 2/9/2017
4.3.1286 1,085 2/8/2017
4.3.1282 1,097 2/5/2017
4.3.1281 1,073 2/5/2017
4.3.1280 1,054 2/5/2017
4.3.1276-pre 810 2/5/2017
4.3.1177-pre 845 9/2/2016
4.3.1164-pre 839 8/21/2016
4.2.1205-pre 1,212 9/19/2016
4.2.1183 1,090 9/9/2016
4.2.1179 1,061 9/8/2016
4.2.1176 1,039 9/2/2016
4.2.1172 1,065 9/1/2016
4.2.1171-pre 824 9/1/2016
4.2.1169 1,054 8/22/2016
4.2.1167-pre 851 8/22/2016
4.2.1166-pre 826 8/22/2016
4.2.1161 1,074 8/10/2016
4.2.1156-pre 828 8/2/2016
4.2.1155 1,104 8/1/2016
4.2.1150 1,084 7/20/2016
4.2.1149-pre 836 7/19/2016
4.2.1148-pre 830 7/19/2016
4.2.1147-pre 809 7/19/2016
4.2.1146-pre 886 7/19/2016
4.2.1137 1,053 7/19/2016
4.2.1129-pre 837 7/19/2016
4.2.1128-pre 816 7/19/2016
4.2.1127-pre 866 7/19/2016
4.2.1126-pre 836 7/19/2016
4.2.1125-pre 845 7/19/2016
4.2.1123-pre 829 7/19/2016
4.2.1119-pre 826 7/18/2016
4.2.1113-pre 849 7/16/2016
4.2.1108-pre 831 7/15/2016
4.2.1107-pre 863 7/15/2016
4.2.1104-pre 1,031 7/13/2016
4.2.1099-pre 997 7/12/2016
4.2.1098-pre 989 7/12/2016
4.2.1093-pre 914 7/8/2016
4.2.1091-pre 930 7/8/2016
4.2.1090-pre 855 7/8/2016
4.2.1089-pre 875 7/7/2016
4.2.1087-pre 869 7/7/2016
4.2.1083-pre 906 7/6/2016
4.2.1082-pre 895 7/6/2016
4.2.1081-pre 904 7/6/2016
4.2.1079-pre 867 7/6/2016
4.2.1078-pre 874 7/6/2016
4.2.1073-pre 919 7/5/2016
4.2.1070-pre 878 7/5/2016
4.2.1069-pre 844 7/1/2016
4.2.1059-pre 839 7/1/2016
4.2.1046-pre 847 6/24/2016
4.2.1031-pre 859 6/24/2016
4.2.1028-pre 875 6/24/2016
4.2.1027-pre 858 6/24/2016
4.1.1009 1,142 6/15/2016
4.1.1002-pre 1,159 6/14/2016
4.1.995-pre 1,069 6/13/2016
4.1.989-pre 859 5/26/2016
4.1.983-pre 834 5/25/2016
4.1.982-pre 848 5/25/2016
4.1.978-pre 846 5/6/2016
4.1.977-pre 856 5/5/2016
4.1.975-pre 818 5/5/2016
4.0.958 1,078 5/1/2016
4.0.957 1,261 4/29/2016
4.0.956 1,304 4/29/2016
4.0.955 1,107 4/28/2016
4.0.941 1,364 4/27/2016
4.0.940 1,324 4/27/2016
4.0.925 1,229 4/27/2016
4.0.922 1,200 4/27/2016
4.0.909 1,257 4/20/2016
4.0.880 1,155 4/7/2016
4.0.869 1,133 3/30/2016
4.0.864 1,076 3/29/2016
4.0.861 1,160 3/29/2016
4.0.860 1,090 3/29/2016
4.0.857 1,089 3/29/2016
4.0.855 1,101 3/29/2016
4.0.846 1,107 3/22/2016
4.0.842 1,152 3/21/2016
4.0.836 1,065 3/18/2016
4.0.835 1,108 3/18/2016
4.0.834 1,109 3/17/2016
4.0.832 1,089 3/17/2016
4.0.831 1,091 3/16/2016
4.0.829 1,089 3/16/2016
4.0.828 1,093 3/15/2016
4.0.827 1,098 3/15/2016
4.0.826 1,109 3/15/2016
4.0.825 1,198 3/13/2016
4.0.821 1,097 3/11/2016
4.0.819 1,191 3/11/2016
4.0.818 1,115 3/11/2016
4.0.816 1,160 3/11/2016
4.0.815 1,168 3/11/2016
4.0.814 1,079 3/11/2016
4.0.813 1,247 3/10/2016
4.0.812 1,186 3/10/2016
4.0.811 1,160 3/10/2016
4.0.810 1,092 3/10/2016
4.0.809 1,112 3/10/2016
4.0.805 1,113 3/9/2016
4.0.797 1,141 3/9/2016
4.0.796 1,133 3/9/2016
4.0.794 1,112 3/9/2016
4.0.793 1,110 3/9/2016
4.0.792 1,098 3/8/2016
4.0.791 1,105 3/8/2016
4.0.790 1,076 3/8/2016
4.0.788 1,109 3/8/2016
4.0.774 1,150 3/2/2016
4.0.773 1,042 3/1/2016
4.0.772 1,090 3/1/2016
4.0.770 1,075 3/1/2016
4.0.769 1,100 3/1/2016
4.0.762 1,102 3/1/2016
4.0.761 1,099 3/1/2016
4.0.760 1,118 2/29/2016
4.0.759 1,325 2/29/2016
4.0.758 1,057 2/29/2016
4.0.757 1,036 2/29/2016
4.0.756 1,406 2/27/2016
4.0.755 1,115 2/27/2016
4.0.754 1,337 2/27/2016
4.0.753 1,189 2/27/2016
4.0.752 1,269 2/27/2016
4.0.750 1,350 2/27/2016
4.0.749 1,180 2/27/2016
4.0.747 1,376 2/26/2016
4.0.746 1,536 2/26/2016
4.0.744 1,228 2/26/2016
4.0.743 1,568 2/26/2016
4.0.742 1,488 2/26/2016
4.0.741 1,303 2/26/2016
4.0.739 1,167 2/25/2016
4.0.738 1,325 2/25/2016
4.0.734 1,495 2/25/2016
4.0.733-alpha 1,103 2/25/2016
4.0.672 1,102 2/16/2016
4.0.669 1,086 2/11/2016
4.0.668 1,219 2/11/2016
3.0.654 1,079 2/10/2016
3.0.646 1,086 2/5/2016
3.0.645 1,080 2/5/2016
3.0.644 1,073 2/5/2016
3.0.639 1,082 2/3/2016
3.0.638 1,100 2/2/2016
3.0.637 1,077 2/1/2016
3.0.635 1,043 2/1/2016
3.0.633 1,088 1/27/2016
3.0.632 1,077 1/27/2016
3.0.629 1,125 1/18/2016
3.0.626 1,111 1/18/2016
3.0.625 1,129 1/18/2016
3.0.624 1,109 12/17/2015
3.0.623 1,149 12/9/2015
3.0.622 1,063 12/9/2015
3.0.621 1,109 12/9/2015
3.0.620 1,089 12/8/2015
3.0.613 1,309 12/4/2015
3.0.611 1,119 12/3/2015
3.0.610 1,323 11/30/2015
3.0.606 1,229 11/30/2015
3.0.605 1,231 11/25/2015
3.0.603 1,241 11/23/2015
3.0.601 1,194 11/23/2015
3.0.600 1,217 11/19/2015
3.0.599 1,187 11/19/2015
3.0.598 1,158 11/17/2015
3.0.592 1,142 11/12/2015
3.0.589 1,154 11/10/2015
3.0.588 1,150 11/10/2015
3.0.586 1,120 11/10/2015
3.0.584 1,192 11/10/2015
3.0.583 1,202 11/10/2015
3.0.581 1,104 11/6/2015
3.0.579 1,072 11/6/2015
3.0.576 1,099 11/5/2015
3.0.575 1,127 11/4/2015
3.0.574 1,135 11/4/2015
3.0.569 1,122 11/3/2015
3.0.568 1,151 11/3/2015
3.0.566 1,118 11/3/2015
3.0.545 1,144 10/28/2015
3.0.538 1,121 10/22/2015
3.0.537 1,124 10/21/2015
3.0.536 1,110 10/21/2015
3.0.534 1,114 10/21/2015
3.0.532 1,119 10/21/2015
3.0.531 1,136 10/21/2015
3.0.524 1,115 10/15/2015
3.0.523 1,153 10/10/2015
3.0.522 1,159 10/10/2015
3.0.520 1,131 10/9/2015
3.0.519 1,203 10/9/2015
3.0.518 1,419 10/9/2015
3.0.517 1,253 10/9/2015
3.0.516 1,276 10/7/2015
3.0.514 1,195 10/6/2015
3.0.513 1,314 10/6/2015
3.0.512 1,484 10/6/2015
3.0.509 1,245 10/1/2015
3.0.507 1,194 10/1/2015
3.0.505 1,210 9/30/2015
3.0.503 1,223 9/30/2015
3.0.502 1,197 9/30/2015
3.0.479 1,199 9/25/2015
3.0.476 1,191 9/24/2015
3.0.471 1,170 9/24/2015
3.0.470 1,154 9/24/2015
3.0.469 1,144 9/24/2015
3.0.468 1,162 9/24/2015
3.0.467 1,210 9/24/2015
3.0.465 1,190 9/24/2015
3.0.459 1,157 9/23/2015
3.0.456 1,210 9/23/2015
3.0.455 1,216 9/22/2015
3.0.454 1,206 9/19/2015
3.0.453 1,222 9/19/2015
3.0.452 1,204 9/18/2015
3.0.451 1,179 9/18/2015
3.0.450 1,163 9/18/2015
3.0.447 1,129 9/18/2015
2.0.378 1,139 9/5/2015
2.0.372 1,156 9/4/2015
2.0.370 1,151 9/4/2015
2.0.368 1,115 9/4/2015
2.0.365 1,180 9/3/2015
2.0.363 1,140 9/3/2015
2.0.361 1,118 9/3/2015
1.0.360 1,157 9/1/2015
1.0.359 1,111 9/1/2015
1.0.358 1,098 9/1/2015
1.0.356 1,119 8/31/2015
1.0.355 1,206 8/31/2015
1.0.354 1,128 8/29/2015
1.0.305 1,140 8/19/2015
1.0.299 1,427 8/8/2015
1.0.293 1,175 7/20/2015
1.0.292 1,141 7/20/2015
1.0.289 1,099 7/10/2015
1.0.288 1,120 7/10/2015
1.0.286 1,148 7/7/2015
1.0.285 1,164 7/7/2015
1.0.284 1,196 7/7/2015
1.0.282 1,134 7/6/2015
1.0.281 1,157 7/6/2015
1.0.279 1,151 7/6/2015
1.0.277 1,170 6/18/2015
1.0.276 1,129 6/8/2015
1.0.275 1,106 6/8/2015
1.0.274 1,078 6/8/2015
1.0.272 1,381 6/1/2015
1.0.269 1,121 5/25/2015
1.0.268 1,137 5/24/2015
1.0.266 1,147 5/24/2015
1.0.263 1,128 5/21/2015
1.0.258 1,161 5/19/2015
1.0.257 1,147 5/18/2015
1.0.256 1,275 5/17/2015
1.0.254 1,145 5/13/2015
1.0.253 1,135 5/13/2015
1.0.250 1,092 5/13/2015
1.0.249 1,133 5/12/2015
1.0.248 1,108 5/12/2015
1.0.245 1,153 5/12/2015
1.0.241 1,157 5/12/2015