/// <summary> /// Asynchronously accesses the local machine's diagnostic information. /// </summary> /// <param name="level"></param> /// <returns>a DiagnosticStatus Task.</returns> private async Task <DiagnosticStatus> GetDiagnosticStatusObjectAsync(int level) { Task <SystemStatus> systemStatus = GetSystemStatusAsync(level); Task <ConfigurationStatus> configurationStatus = GetConfigurationStatusAsync(level); Task <DependencyStatus> depenedencyStatusTask = GetDependencyStatusAsync(level); Task <AccessStatus> accessStatusTask = GetAccessStatusAsync(level); var diagnosticStatus = new DiagnosticStatus { Level = level, Unit = "webserver", CreationTime = DateTime.UtcNow, AccessStatus = await accessStatusTask, SystemStatus = await systemStatus, ConfigurationStatus = await configurationStatus, DependencyStatus = await depenedencyStatusTask }; List <int?> childStatusRatings = new List <int?>() { diagnosticStatus.SystemStatus?.StatusRating, diagnosticStatus.AccessStatus?.StatusRating, diagnosticStatus.ConfigurationStatus?.StatusRating, diagnosticStatus.DependencyStatus?.StatusRating }; int?minStatus = childStatusRatings.Where(t => t.HasValue).Min(); if (minStatus.HasValue) { diagnosticStatus.StatusRating = minStatus.Value; } return(diagnosticStatus); }
public Diagnostic(DiagnosticStatus status, string type, string message, IReadOnlyList <Range> ranges) { this.Status = status; this.Type = type; this.Message = message; this.Ranges = ranges; }
/// <summary> /// Инициализирует экземпляр передаваемыми параметрами /// </summary> /// <param name="name">Имя диагностируемой функции</param> /// <param name="url">URL диагностируемой функции, если применимо</param> /// <param name="status">Статус диагностики</param> /// <param name="version">Версия диагностируемой функции. Необязательное поле</param> /// <param name="error">Ошибка диагностики</param> /// <param name="isSkipResult">Пропустить результат диагностики</param> public DiagnosticInfo( string name, string url, DiagnosticStatus status = DiagnosticStatus.Ok, string version = "", string error = "", bool isSkipResult = false) { Name = name; Url = url; Version = version; Status = status; Error = error; IsSkipResult = isSkipResult; }
/// <summary> /// Queries each AWS node for local diagnostic status xml string. /// </summary> /// <param name="ipAddress"></param> /// <param name="level"></param> /// <returns>a Task<DiagnosticStatus>.</returns> private async Task <DiagnosticStatus> QueryAwsNode(string ipAddress, int level) { string statusUrl = context.AppSettings.SettingsConfig.StatusUrl; string uri = $"http://{ipAddress}/{statusUrl}{level}"; HttpClient client = new HttpClient(); HttpResponseMessage response = await client.GetAsync(uri); XmlSerializer serializer = new XmlSerializer(typeof(DiagnosticStatus)); var stream = await response.Content.ReadAsStreamAsync(); DiagnosticStatus status = (DiagnosticStatus)serializer.Deserialize(stream); return(status); }
/// <summary> /// Asynchronously accesses the local machine's diagnostic information /// and serializes it as an XML string. /// </summary> /// <param name="level"></param> /// <returns>a Task<string> of a serialized DiagnosticStatus object.</returns> public async Task <string> GetDiagnosticStatusAsync(int level) { DiagnosticStatus diagnosticStatus = await GetDiagnosticStatusObjectAsync(level); return(Serialize(diagnosticStatus)); }