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); }
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); } }
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)); }
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); }
/// <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); }