2PQPKMG7PHKSWDYVLVHO5SJAWQT253NUOPKP6C65TXNUKOPMFQJQC US3QQSHJVDIESJAHI5WAIRHTIPEGXHVVY4EOEK7M5YPCUWKW7RAAC 24BMQDZAWDQ7VNIA7TIROXSOYLOJBNZ2E4264WHWNJAEN6ZB3UOAC EYR3EW6JVHNVLXMI57FUVPHQAHPETBML4H44OGJFHUT54KTTHIGQC SOB276BAWH23OUKJUXGDWCLDIM2OISD5NKF743NTQ3L572L4BS3QC XLYHZUHTGM3HJBIINHPY4JLMENBFXPQEZYNEXENUOX3C47JLXJMAC QSBS2ISOQ2ZFYZIAZPWD26UYFSWIFWR47R5WUEJKIQJKKJWXOZDAC GTUZLZRHJ6GL5BNXOO3GA6Y3GFO7AXLIVPQHSG26LCF42KC2N7LQC RX6UB7YWLTJXJTFHFHU3W4W5LZIFHZJ4E6WGACPTQONBROFCNWNQC if (store) {root.attr("store");JSONObject nested(out);
auto & stats = store->getStats();nested.attr("narInfoRead", stats.narInfoRead);nested.attr("narInfoReadAverted", stats.narInfoReadAverted);nested.attr("narInfoMissing", stats.narInfoMissing);nested.attr("narInfoWrite", stats.narInfoWrite);nested.attr("narInfoCacheSize", stats.pathInfoCacheSize);nested.attr("narRead", stats.narRead);nested.attr("narReadBytes", stats.narReadBytes);nested.attr("narReadCompressedBytes", stats.narReadCompressedBytes);nested.attr("narWrite", stats.narWrite);nested.attr("narWriteAverted", stats.narWriteAverted);nested.attr("narWriteBytes", stats.narWriteBytes);nested.attr("narWriteCompressedBytes", stats.narWriteCompressedBytes);nested.attr("narWriteCompressionTimeMs", stats.narWriteCompressionTimeMs);nested.attr("narCompressionSavings",stats.narWriteBytes? 1.0 - (double) stats.narWriteCompressedBytes / stats.narWriteBytes: 0.0);nested.attr("narCompressionSpeed", // MiB/sstats.narWriteCompressionTimeMs? (double) stats.narWriteBytes / stats.narWriteCompressionTimeMs * 1000.0 / (1024.0 * 1024.0): 0.0);
auto & stats = store->getStats();nested.attr("narInfoRead", stats.narInfoRead);nested.attr("narInfoReadAverted", stats.narInfoReadAverted);nested.attr("narInfoMissing", stats.narInfoMissing);nested.attr("narInfoWrite", stats.narInfoWrite);nested.attr("narInfoCacheSize", stats.narInfoCacheSize);nested.attr("narRead", stats.narRead);nested.attr("narReadBytes", stats.narReadBytes);nested.attr("narReadCompressedBytes", stats.narReadCompressedBytes);nested.attr("narWrite", stats.narWrite);nested.attr("narWriteAverted", stats.narWriteAverted);nested.attr("narWriteBytes", stats.narWriteBytes);nested.attr("narWriteCompressedBytes", stats.narWriteCompressedBytes);nested.attr("narWriteCompressionTimeMs", stats.narWriteCompressionTimeMs);nested.attr("narCompressionSavings",stats.narWriteBytes? 1.0 - (double) stats.narWriteCompressedBytes / stats.narWriteBytes
auto s3Store = dynamic_cast<S3BinaryCacheStore *>(&*store);if (s3Store) {nested.attr("s3");JSONObject nested2(out);auto & s3Stats = s3Store->getS3Stats();nested2.attr("put", s3Stats.put);nested2.attr("putBytes", s3Stats.putBytes);nested2.attr("putTimeMs", s3Stats.putTimeMs);nested2.attr("putSpeed",s3Stats.putTimeMs? (double) s3Stats.putBytes / s3Stats.putTimeMs * 1000.0 / (1024.0 * 1024.0)
nested.attr("narCompressionSpeed", // MiB/sstats.narWriteCompressionTimeMs? (double) stats.narWriteBytes / stats.narWriteCompressionTimeMs * 1000.0 / (1024.0 * 1024.0)
nested2.attr("get", s3Stats.get);nested2.attr("getBytes", s3Stats.getBytes);nested2.attr("getTimeMs", s3Stats.getTimeMs);nested2.attr("getSpeed",s3Stats.getTimeMs? (double) s3Stats.getBytes / s3Stats.getTimeMs * 1000.0 / (1024.0 * 1024.0)
auto s3Store = dynamic_cast<S3BinaryCacheStore *>(&*store);if (s3Store) {nested.attr("s3");JSONObject nested2(out);auto & s3Stats = s3Store->getS3Stats();nested2.attr("put", s3Stats.put);nested2.attr("putBytes", s3Stats.putBytes);nested2.attr("putTimeMs", s3Stats.putTimeMs);nested2.attr("putSpeed",s3Stats.putTimeMs? (double) s3Stats.putBytes / s3Stats.putTimeMs * 1000.0 / (1024.0 * 1024.0): 0.0);nested2.attr("get", s3Stats.get);nested2.attr("getBytes", s3Stats.getBytes);nested2.attr("getTimeMs", s3Stats.getTimeMs);nested2.attr("getSpeed",s3Stats.getTimeMs? (double) s3Stats.getBytes / s3Stats.getTimeMs * 1000.0 / (1024.0 * 1024.0): 0.0);nested2.attr("head", s3Stats.head);nested2.attr("costDollarApprox",(s3Stats.get + s3Stats.head) / 10000.0 * 0.004+ s3Stats.put / 1000.0 * 0.005 ++ s3Stats.getBytes / (1024.0 * 1024.0 * 1024.0) * 0.09);}
nested2.attr("head", s3Stats.head);nested2.attr("costDollarApprox",(s3Stats.get + s3Stats.head) / 10000.0 * 0.004+ s3Stats.put / 1000.0 * 0.005 ++ s3Stats.getBytes / (1024.0 * 1024.0 * 1024.0) * 0.09);
/* Create the bucket if it doesn't already exists. */// FIXME: HeadBucket would be more appropriate, but doesn't return// an easily parsed 404 message.auto res = client->GetBucketLocation(Aws::S3::Model::GetBucketLocationRequest().WithBucket(bucketName));
if (!diskCache->cacheExists(getUri())) {
if (!res.IsSuccess()) {if (res.GetError().GetErrorType() != Aws::S3::S3Errors::NO_SUCH_BUCKET)throw Error(format("AWS error checking bucket ‘%s’: %s") % bucketName % res.GetError().GetMessage());
/* Create the bucket if it doesn't already exists. */// FIXME: HeadBucket would be more appropriate, but doesn't return// an easily parsed 404 message.auto res = client->GetBucketLocation(Aws::S3::Model::GetBucketLocationRequest().WithBucket(bucketName));
checkAws(format("AWS error creating bucket ‘%s’") % bucketName,client->CreateBucket(Aws::S3::Model::CreateBucketRequest().WithBucket(bucketName).WithCreateBucketConfiguration(Aws::S3::Model::CreateBucketConfiguration()/* .WithLocationConstraint(Aws::S3::Model::BucketLocationConstraint::US) */ )));
if (!res.IsSuccess()) {if (res.GetError().GetErrorType() != Aws::S3::S3Errors::NO_SUCH_BUCKET)throw Error(format("AWS error checking bucket ‘%s’: %s") % bucketName % res.GetError().GetMessage());checkAws(format("AWS error creating bucket ‘%s’") % bucketName,client->CreateBucket(Aws::S3::Model::CreateBucketRequest().WithBucket(bucketName).WithCreateBucketConfiguration(Aws::S3::Model::CreateBucketConfiguration()/* .WithLocationConstraint(Aws::S3::Model::BucketLocationConstraint::US) */ )));}diskCache->createCache(getUri());