private CloudBlockBlob GetBlobReference(Areas area, string field, string key) { var client = CloudHelper.GetCloudBlobClientReference(_cacheLocation); var outerContainer = client.GetContainerReference(area.ToString().ToLower()); outerContainer.CreateIfNotExists(); var innerContainer = outerContainer.GetDirectoryReference(field.ToLower()); var blob = innerContainer.GetBlockBlobReference(key); return(blob); }
/// <summary> /// Clear the KPI query cache /// </summary> /// <param name="area"></param> /// <param name="field"></param> /// <param name="customerNumber"></param> /// <param name="date"></param> public bool CleanupForKPIReport(Areas area, string field, string customerNumber, DateTime start, DateTime end) { if (area != Areas.KPIReport) { return(false); } try { var client = CloudHelper.GetCloudBlobClientReference(_cacheLocation); var outerContainer = client.GetContainerReference(area.ToString().ToLower()); var innerContainer = outerContainer.GetDirectoryReference(field.ToLower()); var prefix = string.Format("{0}/", field.ToLower()); var customerPrefix = string.Format("/{0}", customerNumber); BlobContinuationToken continuationToken = null; do { var iResults = innerContainer.ListBlobsSegmented(true, BlobListingDetails.None, 1000, continuationToken, null, null); continuationToken = iResults.ContinuationToken; var listBlobItems = iResults.Results.Where(p => p.GetType() == typeof(CloudBlockBlob)); foreach (var item in listBlobItems) { var blob = item as CloudBlockBlob; if (blob == null) { continue; } if (string.IsNullOrEmpty(blob.Name) || blob.Name.Length < prefix.Length) { continue; } var nameArr = blob.Name.Substring(prefix.Length, blob.Name.Length - prefix.Length).Split('|'); if (nameArr.Length < 4) { continue; } if ((nameArr[0].LastIndexOf(customerPrefix) == nameArr[0].Length - customerPrefix.Length) && !(nameArr[2].CompareTo(start.ToString("yyyyMMdd")) < 0 || nameArr[1].CompareTo(end.ToString("yyyyMMdd")) > 0)) { blob.Delete(); } } }while (continuationToken != null); return(true); } catch (Exception ex) { Trace.TraceError("CleanupForKPIReport Error: {0}", ex.ToString()); return(false); } }
public void Cleanup(Areas area, DateTime cutoffDate) { var client = CloudHelper.GetCloudBlobClientReference(_cacheLocation); var outerContainer = client.GetContainerReference(area.ToString().ToLower()); foreach (CloudBlockBlob blob in outerContainer.ListBlobs(useFlatBlobListing: true)) { if (blob.Properties.LastModified < cutoffDate) { blob.Delete(); } } }
/// <summary> /// Clear the KPI query cache /// </summary> /// <param name="area"></param> /// <param name="field"></param> /// <param name="customerNumber"></param> /// <param name="date"></param> public bool CleanupForKPIReportByUser(Areas area, string field, string customerNumber, string userId) { if (area != Areas.KPIReport) { return(false); } try { var client = CloudHelper.GetCloudBlobClientReference(_cacheLocation); var outerContainer = client.GetContainerReference(area.ToString().ToLower()); var prefix = string.Format("{0}/{1}", field.ToLower(), userId.ToLower()); var innerContainer = outerContainer.GetDirectoryReference(prefix); prefix += "/"; BlobContinuationToken continuationToken = null; do { var iResults = innerContainer.ListBlobsSegmented(true, BlobListingDetails.None, 1000, continuationToken, null, null); continuationToken = iResults.ContinuationToken; var listBlobItems = iResults.Results.Where(p => p.GetType() == typeof(CloudBlockBlob)); foreach (var item in listBlobItems) { var blob = item as CloudBlockBlob; if (blob == null) { continue; } if (string.IsNullOrEmpty(blob.Name) || blob.Name.Length < prefix.Length) { continue; } var nameArr = blob.Name.Substring(prefix.Length, blob.Name.Length - prefix.Length).Split('|'); if (nameArr.Length < 4) { continue; } if (nameArr[0].Equals(customerNumber, StringComparison.Ordinal)) { blob.Delete(); } } }while (continuationToken != null); return(true); } catch (Exception ex) { Trace.TraceError("CleanupForKPIReport Error: {0}", ex.ToString()); return(false); } }
public void Delete(Areas area, string field, string key) { key = EncodeBlobName(key); var client = CloudHelper.GetCloudBlobClientReference(_cacheLocation); var outerContainer = client.GetContainerReference(area.ToString().ToLower()); var innerContainer = outerContainer.GetDirectoryReference(field.ToLower()); try { foreach (CloudBlockBlob blob in innerContainer.ListBlobs()) { var pieces = blob.Name.Split('/'); var name = pieces[pieces.Length - 1]; bool delete = false; if (key.Contains('*')) { var wildcards = key.Split('*'); if (key.StartsWith("*")) //pattern is like *8643* { if (name.Contains(pieces[1])) { delete = true; } } else //pattern is like 1001*7244 { if (name.StartsWith(wildcards[0]) && name.EndsWith(wildcards[1])) { delete = true; } } } else if (name == key) { delete = true; } if (delete) { blob.Delete(); } } } catch (Exception ex) { Trace.TraceError("Could not delete from blob cache {0} {1} {2}. {3}", area.ToString(), field, key, ex.Message); } }