/// <summary> /// Reads the settings provided from stream /// </summary> /// <param name="xmlReader"></param> /// <returns></returns> public static AnalyticsSettings DeserializeAnalyticsSettings(XmlReader xmlReader) { // Read the root and check if it is empty or invalid xmlReader.Read(); xmlReader.ReadStartElement(SettingsSerializerHelper.RootPropertiesElementName); AnalyticsSettings settings = new AnalyticsSettings(); while (true) { if (xmlReader.IsStartElement(SettingsSerializerHelper.LoggingElementName)) { DeserializeLoggingElement(xmlReader, settings); } else if (xmlReader.IsStartElement(SettingsSerializerHelper.MetricsElementName)) { DeserializeMetricsElement(xmlReader, settings); } else { break; } } xmlReader.ReadEndElement(); return(settings); }
/// <summary> /// Set analytics settings /// </summary> /// <param name="baseUri"></param> /// <param name="credentials"></param> /// <param name="settings"></param> /// <param name="useSharedKeyLite"></param> public static void SetSettings(Uri baseUri, StorageCredentials credentials, AnalyticsSettings settings, Boolean useSharedKeyLite) { UriBuilder builder = new UriBuilder(baseUri); builder.Query = string.Format( CultureInfo.InvariantCulture, "comp=properties&restype=service&timeout={0}", DefaultTimeout.TotalSeconds); HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(builder.Uri); request.Headers.Add(VersionHeaderName, Sep2009Version); request.Method = "PUT"; StorageCredentialsAccountAndKey accountAndKey = credentials as StorageCredentialsAccountAndKey; using (MemoryStream buffer = new MemoryStream()) { XmlTextWriter writer = new XmlTextWriter(buffer, Encoding.UTF8); SettingsSerializerHelper.SerializeAnalyticsSettings(writer, settings); writer.Flush(); buffer.Seek(0, SeekOrigin.Begin); request.ContentLength = buffer.Length; if (useSharedKeyLite) { credentials.SignRequestLite(request); } else { credentials.SignRequest(request); } using (Stream stream = request.GetRequestStream()) { stream.Write(buffer.GetBuffer(), 0, (int)buffer.Length); } try { using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { Console.WriteLine("Response Request Id = {0} Status={1}", response.Headers[RequestIdHeaderName], response.StatusCode); if (HttpStatusCode.Accepted != response.StatusCode) { throw new Exception("Request failed with incorrect response status."); } } } catch (WebException e) { Console.WriteLine( "Response Request Id={0} Status={1}", e.Response != null ? e.Response.Headers[RequestIdHeaderName] : "Response is null", e.Status); throw; } } }
/// <summary> /// Reads the metrics element and fills in the values in Analyticssettings instance /// </summary> /// <param name="xmlReader"></param> /// <param name="settings"></param> private static void DeserializeMetricsElement(XmlReader xmlReader, AnalyticsSettings settings) { bool includeAPIs = false; // read the next element - it should be metrics. xmlReader.ReadStartElement(SettingsSerializerHelper.MetricsElementName); while (true) { if (xmlReader.IsStartElement(SettingsSerializerHelper.VersionElementName)) { settings.MetricsVersion = xmlReader.ReadElementString(SettingsSerializerHelper.VersionElementName); } else if (xmlReader.IsStartElement(SettingsSerializerHelper.MetricsEnabledElementName)) { if (DeserializeBooleanElementValue( xmlReader, SettingsSerializerHelper.MetricsEnabledElementName)) { // only if metrics is enabled will we read include API settings.MetricsType = settings.MetricsType | MetricsType.ServiceSummary; } } else if (xmlReader.IsStartElement(SettingsSerializerHelper.IncludeApiSummaryElementName)) { if (DeserializeBooleanElementValue( xmlReader, SettingsSerializerHelper.IncludeApiSummaryElementName)) { includeAPIs = true; } } else if (xmlReader.IsStartElement(SettingsSerializerHelper.RetentionPolicyElementName)) { // read retention policy for metrics bool isRetentionEnabled = false; int retentionDays = 0; DeserializeRetentionPolicy(xmlReader, ref isRetentionEnabled, ref retentionDays); settings.IsMetricsRetentionPolicyEnabled = isRetentionEnabled; settings.MetricsRetentionInDays = retentionDays; } else { break; } } if ((settings.MetricsType & MetricsType.ServiceSummary) != MetricsType.None) { // If Metrics is enabled, IncludeAPIs must be included. if (includeAPIs) { settings.MetricsType = settings.MetricsType | MetricsType.ApiSummary; } } xmlReader.ReadEndElement();// end metrics element }
/// <summary> /// Reads the logging element and fills in the values in Analyticssettings instance /// </summary> /// <param name="xmlReader"></param> /// <param name="settings"></param> private static void DeserializeLoggingElement(XmlReader xmlReader, AnalyticsSettings settings) { // Read logging element xmlReader.ReadStartElement(SettingsSerializerHelper.LoggingElementName); while (true) { if (xmlReader.IsStartElement(SettingsSerializerHelper.VersionElementName)) { settings.LogVersion = xmlReader.ReadElementString(SettingsSerializerHelper.VersionElementName); } else if (xmlReader.IsStartElement(SettingsSerializerHelper.ApiTypeReadElementName)) { if (DeserializeBooleanElementValue( xmlReader, SettingsSerializerHelper.ApiTypeReadElementName)) { settings.LogType = settings.LogType | LoggingLevel.Read; } } else if (xmlReader.IsStartElement(SettingsSerializerHelper.ApiTypeWriteElementName)) { if (DeserializeBooleanElementValue( xmlReader, SettingsSerializerHelper.ApiTypeWriteElementName)) { settings.LogType = settings.LogType | LoggingLevel.Write; } } else if (xmlReader.IsStartElement(SettingsSerializerHelper.ApiTypeDeleteElementName)) { if (DeserializeBooleanElementValue( xmlReader, SettingsSerializerHelper.ApiTypeDeleteElementName)) { settings.LogType = settings.LogType | LoggingLevel.Delete; } } else if (xmlReader.IsStartElement(SettingsSerializerHelper.RetentionPolicyElementName)) { // read retention policy for logging bool isRetentionEnabled = false; int retentionDays = 0; DeserializeRetentionPolicy(xmlReader, ref isRetentionEnabled, ref retentionDays); settings.IsLogRetentionPolicyEnabled = isRetentionEnabled; settings.LogRetentionInDays = retentionDays; } else { break; } } xmlReader.ReadEndElement();// end Logging element }
/// <summary> /// Write the settings provided to stream /// </summary> /// <param name="inputStream"></param> /// <returns></returns> public static void SerializeAnalyticsSettings(XmlWriter xmlWriter, AnalyticsSettings settings) { xmlWriter.WriteStartDocument(); xmlWriter.WriteStartElement(SettingsSerializerHelper.RootPropertiesElementName); //LOGGING STARTS HERE xmlWriter.WriteStartElement(SettingsSerializerHelper.LoggingElementName); xmlWriter.WriteStartElement(SettingsSerializerHelper.VersionElementName); xmlWriter.WriteValue(settings.LogVersion); xmlWriter.WriteEndElement(); bool isReadEnabled = (settings.LogType & LoggingLevel.Read) != LoggingLevel.None; xmlWriter.WriteStartElement(SettingsSerializerHelper.ApiTypeReadElementName); xmlWriter.WriteValue(isReadEnabled); xmlWriter.WriteEndElement(); bool isWriteEnabled = (settings.LogType & LoggingLevel.Write) != LoggingLevel.None; xmlWriter.WriteStartElement(SettingsSerializerHelper.ApiTypeWriteElementName); xmlWriter.WriteValue(isWriteEnabled); xmlWriter.WriteEndElement(); bool isDeleteEnabled = (settings.LogType & LoggingLevel.Delete) != LoggingLevel.None; xmlWriter.WriteStartElement(SettingsSerializerHelper.ApiTypeDeleteElementName); xmlWriter.WriteValue(isDeleteEnabled); xmlWriter.WriteEndElement(); SerializeRetentionPolicy(xmlWriter, settings.IsLogRetentionPolicyEnabled, settings.LogRetentionInDays); xmlWriter.WriteEndElement(); // logging element //METRICS STARTS HERE xmlWriter.WriteStartElement(SettingsSerializerHelper.MetricsElementName); xmlWriter.WriteStartElement(SettingsSerializerHelper.VersionElementName); xmlWriter.WriteValue(settings.MetricsVersion); xmlWriter.WriteEndElement(); bool isServiceSummaryEnabled = (settings.MetricsType & MetricsType.ServiceSummary) != MetricsType.None; xmlWriter.WriteStartElement(SettingsSerializerHelper.MetricsEnabledElementName); xmlWriter.WriteValue(isServiceSummaryEnabled); xmlWriter.WriteEndElement(); if (isServiceSummaryEnabled) { bool isApiSummaryEnabled = (settings.MetricsType & MetricsType.ApiSummary) != MetricsType.None; xmlWriter.WriteStartElement(SettingsSerializerHelper.IncludeApiSummaryElementName); xmlWriter.WriteValue(isApiSummaryEnabled); xmlWriter.WriteEndElement(); } SerializeRetentionPolicy( xmlWriter, settings.IsMetricsRetentionPolicyEnabled, settings.MetricsRetentionInDays); xmlWriter.WriteEndElement(); // metrics xmlWriter.WriteEndElement(); // root element xmlWriter.WriteEndDocument(); }
/// <summary> /// Set blob analytics settings ///</summary> /// <param name="client"></param> /// <param name="settings"></param> public static void SetServiceSettings(this CloudTableClient client, AnalyticsSettings settings) { SetSettings(client.BaseUri, client.Credentials, settings, true /* useSharedKeyLite */); }
/// <summary> /// Set queue analytics settings /// </summary> /// <param name="client"></param> /// <param name="baseUri"></param> /// <param name="settings"></param> public static void SetServiceSettings(this CloudQueueClient client, Uri baseUri, AnalyticsSettings settings) { SetSettings(baseUri, client.Credentials, settings, false /* useSharedKeyLite */); }