Beispiel #1
0
        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);
        }
Beispiel #2
0
        /// <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);
            }
        }
Beispiel #3
0
        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();
                }
            }
        }
Beispiel #4
0
        /// <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);
            }
        }
Beispiel #5
0
        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);
            }
        }