Exemple #1
0
        private static JObject GetJsonContent(string name, CacheItemDetail detail, CacheItemTelemetry telemetry, object value, Uri removeLink, bool expanded)
        {
            var policyContent    = GetJsonPolicyContent(detail);
            var telemetryContent = telemetry != null
                                ? new JObject
            {
                { "memberName", telemetry.Caller.MemberName },
                { "sourceFilePath", telemetry.Caller.SourceFilePath },
                { "sourceLineNumber", telemetry.Caller.SourceLineNumber },
                { "duration", telemetry.Duration },
                { "accessCount", telemetry.AccessCount },
                { "cacheItemStatus", detail.CacheItemStatus.ToString() },
                { "staleAccessCount", telemetry.StaleAccessCount },
                { "lastAccessedOn", telemetry.LastAccessedOn },
                { "isStartup", telemetry.IsStartup },
                { "isAllColumns", telemetry.IsAllColumns },
                { "attributes", new JArray(telemetry.Attributes) }
            }
                                : null;

            var properties = new JObject
            {
                { "name", name },
                { "type", value != null?value.GetType().ToString() : null },
                { "remove", removeLink.AbsoluteUri }
            };

            if (policyContent != null)
            {
                properties.Add("policy", policyContent);
            }

            if (telemetryContent != null)
            {
                properties.Add("telemetry", telemetryContent);
            }

            if (expanded)
            {
                if (value != null)
                {
                    properties.Add("value", JToken.FromObject(value, CrmJsonConvert.CreateJsonSerializer()));
                }

                if (telemetry != null && telemetry.Request != null)
                {
                    properties.Add("request", JToken.FromObject(telemetry.Request, CrmJsonConvert.CreateJsonSerializer()));
                }
            }

            var content = new JObject
            {
                { "properties", properties }
            };

            return(content);
        }
Exemple #2
0
        private static IEnumerable <XElement> GetContent(CacheItemDetail detail, CacheItemTelemetry telemetry)
        {
            if (detail != null && detail.Policy != null)
            {
                yield return(new XElement("policy", GetPolicyContent(detail)));
            }

            if (telemetry != null)
            {
                yield return(new XElement("telemetry", GetTelemetryContent(detail, telemetry)));
            }
        }
        /// <summary>
        /// Write this item to a folder.
        /// </summary>
        /// <param name="folderPath">The folder path.</param>
        /// <param name="telemetry">The cache item telemetry.</param>
        private void Save(string folderPath, CacheItemTelemetry telemetry)
        {
            if (telemetry.Request != null)
            {
                var request  = CrmJsonConvert.SerializeObject(telemetry.Request);
                var key      = request.GetHashCode();
                var filename = string.Format(this.Settings.FilenameFormat, key);
                var fullPath = Path.Combine(folderPath, filename);
                var bytes    = MachineKey.Protect(Encoding.UTF8.GetBytes(request), this.Settings.GetType().ToString());

                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Writing: " + fullPath);

                this.Settings.AppDataRetryPolicy.WriteAllBytes(fullPath, bytes);
            }
        }
Exemple #4
0
        private static IEnumerable <XElement> GetTelemetryContent(CacheItemDetail detail, CacheItemTelemetry telemetry)
        {
            yield return(new XElement("memberName", telemetry.Caller.MemberName));

            yield return(new XElement("sourceFilePath", telemetry.Caller.SourceFilePath));

            yield return(new XElement("sourceLineNumber", telemetry.Caller.SourceLineNumber));

            yield return(new XElement("duration", telemetry.Duration));

            yield return(new XElement("accessCount", telemetry.AccessCount));

            yield return(new XElement("cacheItemStatus", detail.CacheItemStatus.ToString()));

            yield return(new XElement("staleAccessCount", telemetry.StaleAccessCount));

            yield return(new XElement("lastAccessedOn", telemetry.LastAccessedOn));

            yield return(new XElement("isStartup", telemetry.IsStartup));

            yield return(new XElement("isAllColumns", telemetry.IsAllColumns));

            yield return(new XElement("attributes", telemetry.Attributes));
        }
Exemple #5
0
        private static SyndicationContent GetContent(string name, CacheItemDetail detail, CacheItemTelemetry telemetry, object value, Uri removeLink, bool expanded)
        {
            var defaultProps = new[]
            {
                new XElement("name", name),
                new XElement("type", value.GetType().ToString()),
                new XElement("remove", new XAttribute("href", removeLink))
            };

            var properties = defaultProps.Concat(GetContent(detail, telemetry)).Concat(GetContentValues(value, expanded));

            var content = new XElement("properties", properties);

            var sc = SyndicationContent.CreateXmlContent(content);

            return(sc);
        }
Exemple #6
0
        /// <summary>
        /// Insert a new cache item telemetry cache item for an organization request.
        /// </summary>
        /// <param name="cache">The cache.</param>
        /// <param name="cacheKey">The cache item key.</param>
        /// <param name="telemetry">The telemetry.</param>
        /// <param name="regionName">The cache region.</param>
        internal static void AddCacheItemTelemetry(this ObjectCache cache, string cacheKey, CacheItemTelemetry telemetry, string regionName = null)
        {
            var key    = cacheKey.ToLower();
            var policy = new CacheItemPolicy();

            policy.ChangeMonitors.Add(cache.CreateCacheEntryChangeMonitor(new [] { key }, regionName));
            var itemTelemetryCacheKey = GetItemTelemetryCacheKey(key);

            cache.Add(itemTelemetryCacheKey, telemetry, policy, regionName);
        }