internal Incident(ResponseObjects.Incident respIncident, IEnumerable <Component> componentsLookup) { Id = respIncident.Id; Name = respIncident.Name; Shortlink = respIncident.Shortlink; Impact = respIncident.Impact; CreatedOn = respIncident.CreatedOn.UtcDateTime; UpdatedOn = respIncident.UpdatedOn.UtcDateTime; if (respIncident.StartedOn.HasValue) { StartedOn = respIncident.StartedOn.Value.UtcDateTime; } if (respIncident.ResolvedOn.HasValue) { ResolvedOn = respIncident.ResolvedOn.Value.UtcDateTime; } Status = new StatusDescription(respIncident.Status, null); if (respIncident.ComponentImpacts != null) { var componentDictionary = componentsLookup.ToDictionary(c => c.Id); ImpactedComponents = (from ic in respIncident.ComponentImpacts where componentDictionary.ContainsKey(ic.Id) select componentDictionary[ic.Id]).ToArray(); } if (respIncident.Updates != null) { Updates = respIncident.Updates.Select(iu => new IncidentUpdate(iu, componentsLookup)).ToArray(); } }
internal ComponentStatusChange(ResponseObjects.ComponentImpact respComponentImpact, IEnumerable <Component> componentsLookup) { Name = respComponentImpact.Name; OldStatus = new StatusDescription(respComponentImpact.OldStatus, null); NewStatus = new StatusDescription(respComponentImpact.NewStatus, null); Component = componentsLookup.FirstOrDefault(c => string.Equals(c.Id, respComponentImpact.ComponentId, StringComparison.InvariantCultureIgnoreCase)); }
internal Component(ResponseObjects.Component respComponent) { _rawSubcomponents = respComponent.SubcomponentIds ?? Enumerable.Empty <string>(); Id = respComponent.Id; Name = respComponent.Name; Description = respComponent.Description; DisplayPosition = respComponent.Position; Status = new StatusDescription(respComponent.Status, null); }
internal IncidentUpdate(ResponseObjects.IncidentUpdate respIncidentUpdate, IEnumerable <Component> componentsLookup) { Id = respIncidentUpdate.Id; Body = respIncidentUpdate.Body; CreatedOn = respIncidentUpdate.CreatedOn.UtcDateTime; UpdatedOn = respIncidentUpdate.UpdatedOn.UtcDateTime; Status = new StatusDescription(respIncidentUpdate.Status, null); TweetId = respIncidentUpdate.TweetId; if (respIncidentUpdate.ComponentImpacts != null) { ComponentStatusChanges = respIncidentUpdate.ComponentImpacts.Select(ci => new ComponentStatusChange(ci, componentsLookup)).ToArray(); } }
internal StatusPage(ResponseObjects.SummaryResponse summaryResponse, ResponseObjects.ScheduledMaintenanceResponse scheduledMaintenanceResponse, ResponseObjects.IncidentsResponse incidentsResponse) { if (summaryResponse == null) { throw new ArgumentNullException(nameof(summaryResponse)); } Id = summaryResponse.Page.Id; Name = summaryResponse.Page.Name; Url = summaryResponse.Page.Url; OverallStatus = new StatusDescription(summaryResponse.Status.Indicator, summaryResponse.Status.Description); Components = summaryResponse.Components.Select(c => new Component(c)).ToArray(); foreach (var c in Components) { c.ProcessSubcomponents(Components); } Incidents = summaryResponse.Incidents.Select(i => new Incident(i, Components)).ToArray(); if (incidentsResponse != null && incidentsResponse.Incidents != null) { var priorIncidents = incidentsResponse.Incidents.Select(i => new Incident(i, Components)).ToArray(); Incidents = Incidents.Concat(priorIncidents.Except(Incidents)).ToArray(); } // The summary response will have currently active scheduled maintenance records in, but if we've got the extra data then we should use it. ScheduledMaintenances = summaryResponse.ScheduledMaintenances.Select(schedMaint => new ScheduledMaintenance(schedMaint, Components)).ToArray(); if (scheduledMaintenanceResponse != null && scheduledMaintenanceResponse.ScheduledMaintenances != null) { var priorScheduledMaintenance = scheduledMaintenanceResponse.ScheduledMaintenances.Select(schedMaint => new ScheduledMaintenance(schedMaint, Components)).ToArray(); ScheduledMaintenances = ScheduledMaintenances.Concat(priorScheduledMaintenance.Except(ScheduledMaintenances)).ToArray(); } }