Exemple #1
0
        private void MapGovernanceControlsByMaturityLevel(List <GovernanceControlEntity> governanceControlEntities, Dashboard dashboard)
        {
            var highchart = new Highchart();
            var series    = new Series
            {
                Type = "pie",
                Name = "Maturity Level"
            };

            var governanceControlGroups = governanceControlEntities.OrderBy(gc => gc.CmmiStatusId).GroupBy(gc => CmmiStatus.LookupByValue(gc.CmmiStatusId)).ToList();

            foreach (var governanceControlGroup in governanceControlGroups)
            {
                var data = new Data
                {
                    Name  = governanceControlGroup.Key.Name,
                    Value = governanceControlGroup.Count(),
                    Color = governanceControlGroup.Key.Color
                };
                series.Data.Add(data);
            }

            highchart.Series.Add(series);

            dashboard.GovernanceControlsByMaturityLevel = highchart;
        }
Exemple #2
0
        private void MapTopRiskByScore(List <RiskEntity> riskEntities, Dashboard dashboard)
        {
            var highchart = new Highchart();
            var series    = new Series
            {
                Name = "Risks"
            };
            var risksByScoreDescending = riskEntities.OrderByDescending(r => r.FinalScore).ThenBy(r => Decrypt <string>(r.NameBytes)).ToList();

            for (var index = 0; index < risksByScoreDescending.Count; index++)
            {
                var riskEntity = risksByScoreDescending[index];
                var data       = new Data
                {
                    Id           = riskEntity.Id.ToString(),
                    Name         = $"{index + 1}. {Decrypt<string>(riskEntity.NameBytes)}", //include index so that duplicate names will be displayed
                    Value        = riskEntity.FinalScore.GetValueOrDefault(),
                    Color        = ThreatLevel.LookupByValue(riskEntity.FinalScore).Color,
                    SeverityName = ThreatLevel.LookupByValue(riskEntity.FinalScore).Name
                };
                series.Data.Add(data);
            }
            highchart.Series.Add(series);

            dashboard.TopRiskByScore = highchart;
        }
Exemple #3
0
        private void MapComplianceByMaturityLevel(List <ComplianceEntity> complianceEntities, ComplianceSchemeEntity scheme, Dashboard dashboard)
        {
            var highchart = new Highchart();
            var series    = new Series
            {
                Type = "pie",
                Name = "Maturity Level"
            };

            var maturityLevelGroups = complianceEntities.OrderBy(x => x.CmmiStatusId).GroupBy(gc => CmmiStatus.LookupByValue(gc.CmmiStatusId)).ToList();

            foreach (var maturityLevelGroup in maturityLevelGroups)
            {
                var data = new Data
                {
                    Name  = maturityLevelGroup.Key.Name,
                    Value = maturityLevelGroup.Count(),
                    Color = maturityLevelGroup.Key.Color
                };
                series.Data.Add(data);
            }

            highchart.Series.Add(series);

            dashboard.ComplianceByMaturityLevel[scheme.Id] = highchart;
        }
Exemple #4
0
        private void MapComplianceByGapReview(List <ComplianceEntity> complianceEntities, ComplianceSchemeEntity scheme, Dashboard dashboard)
        {
            var highchart = new Highchart();
            var series    = new Series
            {
                Type = "pie",
                Name = "Compliance"
            };

            var gapReviewGroups = complianceEntities.OrderBy(x => x.CompliantStatusId).GroupBy(x => CompliantStatus.LookupByValue(x.CompliantStatusId) ?? CompliantStatus.Unknown).ToList();

            foreach (var gapReviewGroup in gapReviewGroups)
            {
                var data = new Data
                {
                    Name  = gapReviewGroup.Key.Name,
                    Value = gapReviewGroup.Count(),
                    Color = gapReviewGroup.Key.Color
                };
                series.Data.Add(data);
            }

            highchart.Series.Add(series);

            dashboard.ComplianceByGapReview[scheme.Id] = highchart;
        }
Exemple #5
0
        private ActionResult AreaChart(string title, params Series[] dataSeries)
        {
            var json = new Highchart
            {
                Chart = new Chart
                {
                    Height = 600,
                    Type   = ChartType.Area
                },
                Title = title,
                XAxis = new Axis(AxisType.Datetime, new Title()),
                YAxis = new Axis
                {
                    Title = "Percentage",
                    Min   = 0
                },
                Tooltip = new
                {
                    Shared     = true,
                    Crosshairs = true
                },
                PlotOptions = new PlotOptions
                {
                    Bar = new
                    {
                        DataLabels = new
                        {
                            Enabled = true
                        }
                    },
                    Area = new PlotOptionsArea
                    {
                        Stacking  = PlotOptionsAreaStacking.Percent,
                        LineColor = "#ffffff",
                        LineWidth = 1,
                        Marker    = new
                        {
                            LineWidth = 1,
                            LineColor = "#ffffff"
                        }
                    }
                },
                Legend = new
                {
                    Layout          = "vertical",
                    Align           = "left",
                    X               = 120,
                    VerticalAlign   = "top",
                    Y               = 100,
                    Floating        = true,
                    BackgroundColor = "#FFFFFF"
                },
                Series = (
                    dataSeries
                    )
            };

            return(LowercaseJson(json));
        }
Exemple #6
0
        public HighchartsSetUp(string id)
        {
            this.Id         = id;
            this.dataSource = new EmptyDataSource();

            this.obj = new Highchart();
            this.obj.Chart.RenderTo = this.Id;
        }
Exemple #7
0
        private void MapRiskByPhase(List <RiskEntity> riskEntities, Dashboard dashboard)
        {
            var highchart = new Highchart();
            var series    = new Series
            {
                Name = "Phases"
            };

            var riskSeverityGroups = riskEntities.OrderBy(r => r.Phase?.DisplayOrder).GroupBy(r => r.Phase ?? new PhaseEntity {
                Name = "Unknown"
            }).ToList();

            foreach (var riskPhaseGroup in riskSeverityGroups)
            {
                var data = new Data
                {
                    Name      = riskPhaseGroup.Key.Name,
                    Value     = riskPhaseGroup.Count(),
                    Drilldown = riskPhaseGroup.Key.Name
                };
                series.Data.Add(data);

                //Order By Asc so that the severity levels will be drawn from low to high (left to right)
                var riskSeverityPhaseGroups = riskPhaseGroup.OrderBy(r => r.FinalScore).GroupBy(r => ThreatLevel.LookupByValue(r.FinalScore)).ToList();
                if (riskSeverityPhaseGroups.Any())
                {
                    var drilldownSeries = new Series
                    {
                        Name = riskPhaseGroup.Key.Name,
                        Id   = riskPhaseGroup.Key.Name
                    };

                    foreach (var riskSeverityPhaseGroup in riskSeverityPhaseGroups)
                    {
                        var drilldownData = new Data
                        {
                            Name  = riskSeverityPhaseGroup.Key.Name,
                            Value = riskSeverityPhaseGroup.Count(),
                            Color = riskSeverityPhaseGroup.Key.Color
                        };
                        drilldownSeries.Data.Add(drilldownData);
                    }
                    highchart.DrilldownSeries.Add(drilldownSeries);
                }
            }

            highchart.Series.Add(series);
            dashboard.RiskByPhase = highchart;
        }
Exemple #8
0
        private void MapRiskByScore(List <RiskEntity> riskEntities, Dashboard dashboard)
        {
            var highchart = new Highchart();
            var series    = new Series
            {
                Type = "pie",
                Name = "Score"
            };
            var riskSeverityGroups = riskEntities.OrderBy(r => r.FinalScore).GroupBy(r => ThreatLevel.LookupByValue(r.FinalScore)).ToList();

            foreach (var riskSeverityGroup in riskSeverityGroups)
            {
                var data = new Data
                {
                    Name      = riskSeverityGroup.Key.Name,
                    Value     = riskSeverityGroup.Count(),
                    Color     = riskSeverityGroup.Key.Color,
                    Drilldown = riskSeverityGroup.Key.Name
                };
                series.Data.Add(data);

                var riskSeverityPhaseGroups = riskSeverityGroup.OrderBy(r => r.Phase?.DisplayOrder).GroupBy(r => r.Phase ?? new PhaseEntity {
                    Name = "Unknown"
                }).ToList();
                if (riskSeverityPhaseGroups.Any())
                {
                    var drilldownSeries = new Series
                    {
                        Name = riskSeverityGroup.Key.Name,
                        Id   = riskSeverityGroup.Key.Name
                    };

                    foreach (var riskSeverityPhaseGroup in riskSeverityPhaseGroups)
                    {
                        var drilldownData = new Data
                        {
                            Name  = riskSeverityPhaseGroup.Key.Name,
                            Value = riskSeverityPhaseGroup.Count()
                        };
                        drilldownSeries.Data.Add(drilldownData);
                    }
                    highchart.DrilldownSeries.Add(drilldownSeries);
                }
            }
            highchart.Series.Add(series);

            dashboard.RiskByScore = highchart;
        }
Exemple #9
0
        private void MapVulnerabilities(List <VulnerabilityEntity> vulnerabilityEntities, Dashboard dashboard)
        {
            var highchart = new Highchart();

            // TODO: Make more efficient? Either filter by importId on the repository level or use Queryable clauses instead of this tedious mapping
            List <VulnerabilityEntity> vulnerabilityEntitiesToKeep = new List <VulnerabilityEntity>();

            foreach (var vulnerabilityEntity in vulnerabilityEntities)
            {
                var vulnerability = _vulnerabilityMapper.Map(vulnerabilityEntity);

                List <HostVulnerabilityEntity> hostVulnerabilitiesToKeep = new List <HostVulnerabilityEntity>();
                foreach (var hostVulnerability in vulnerabilityEntity.HostVulnerabilities)
                {
                    hostVulnerabilitiesToKeep.Add(hostVulnerability);
                }
                vulnerabilityEntity.HostVulnerabilities = hostVulnerabilitiesToKeep;
                vulnerabilityEntitiesToKeep.Add(vulnerabilityEntity);
            }

            var threatLevelGroups = vulnerabilityEntitiesToKeep
                                    .OrderBy(x => x.CvssScore)
                                    .GroupBy(x => ThreatLevel.LookupByValue(x.CvssScore));

            foreach (var threatLevelGroup in threatLevelGroups)
            {
                var threatLevel = new Series
                {
                    Name  = threatLevelGroup.Key.Name,
                    Color = threatLevelGroup.Key.Color
                };

                var categories = threatLevelGroup
                                 .OrderBy(v => v.VulnerabilityCategory)
                                 .GroupBy(v => v.VulnerabilityCategory)
                                 .Select(x => new Data
                {
                    Name  = x.Key,
                    Value = x.Count(),
                    Color = threatLevelGroup.Key.Color
                });

                threatLevel.Data.AddRange(categories);
                highchart.Series.Add(threatLevel);
            }

            dashboard.Vulnerabilities = highchart;
        }
Exemple #10
0
        private void MapVulnerabilitiesBySeverity(List <VulnerabilityEntity> vulnerabilityEntities, Dashboard dashboard)
        {
            var highchart = new Highchart();
            var series    = new Series
            {
                Type = "pie",
                Name = "Severity"
            };
            var vulnerabilitySeverityGroups = vulnerabilityEntities.OrderByDescending(v => v.CvssScore).GroupBy(v => ThreatLevel.LookupByValue(v.CvssScore)).ToList();

            foreach (var vulnerabilitySeverityGroup in vulnerabilitySeverityGroups)
            {
                var data = new Data
                {
                    Name      = vulnerabilitySeverityGroup.Key.Name,
                    Value     = vulnerabilitySeverityGroup.Count(),
                    Color     = vulnerabilitySeverityGroup.Key.Color,
                    Drilldown = vulnerabilitySeverityGroup.Key.Name
                };
                series.Data.Add(data);

                var vulnerabilitySeverityCategoryGroups = vulnerabilitySeverityGroup.OrderBy(v => v.VulnerabilityCategory).GroupBy(v => v.VulnerabilityCategory).ToList();
                if (vulnerabilitySeverityCategoryGroups.Any())
                {
                    var drilldownSeries = new Series
                    {
                        Name = vulnerabilitySeverityGroup.Key.Name,
                        Id   = vulnerabilitySeverityGroup.Key.Name
                    };

                    foreach (var vulnerabilitySeverityCategoryGroup in vulnerabilitySeverityCategoryGroups)
                    {
                        var drilldownData = new Data
                        {
                            Name  = vulnerabilitySeverityCategoryGroup.Key,
                            Value = vulnerabilitySeverityCategoryGroup.Count()
                        };
                        drilldownSeries.Data.Add(drilldownData);
                    }
                    highchart.DrilldownSeries.Add(drilldownSeries);
                }
            }
            highchart.Series.Add(series);

            dashboard.VulnerabilitiesBySeverity = highchart;
        }
Exemple #11
0
 public Dashboard()
 {
     VulnerabilitiesBySeverity = new Highchart();
     VulnerabilitiesByCategory = new Highchart();
     Vulnerabilities           = new Highchart();
     RiskByImpact     = new Highchart();
     RiskByScore      = new Highchart();
     RiskByLikelihood = new Highchart();
     RiskByPhase      = new Highchart();
     TopRiskByScore   = new Highchart();
     RiskGauge        = new Highchart();
     GovernanceControlsByRiskLevel     = new Highchart();
     GovernanceControlsByMaturityLevel = new Highchart();
     RiskScoreByPhase               = new Highchart();
     ComplianceHipaaByGapReview     = new Highchart();
     ComplianceHipaaByMaturityLevel = new Highchart();
     MitigationSummaryRisks         = new Dictionary <int, Highchart>();
     MitigationSummaryRisksByPhase  = new Dictionary <int, Highchart>();
     MitigationSummaryRisksAndVulns = new Dictionary <int, Highchart>();
     ComplianceByGapReview          = new Dictionary <int, Highchart>();
     ComplianceByMaturityLevel      = new Dictionary <int, Highchart>();
 }
Exemple #12
0
        public void MapRiskGauge(EngagementEntity engagementEntity, Dashboard dashboard)
        {
            var highchart = new Highchart();
            var series    = new Series
            {
                Type      = "pie",
                Name      = "Severity",
                InnerSize = "70%"
            };

            dashboard.RiskScore = engagementEntity.RiskScore?.ToString("N1") ?? "N/A";

            Func <ThreatLevel, decimal?, List <Data> > buildData = (threatLevel, nextThreatLevelValue) =>
            {
                var dataSlices = new List <Data>();
                for (var slice = threatLevel.Value; slice < nextThreatLevelValue; slice += 0.1m)
                {
                    dataSlices.Add(new Data
                    {
                        Name  = 5 == slice ? ThreatLevel.LookupByValue(engagementEntity.RiskScore).Name : string.Empty,
                        Color = engagementEntity.RiskScore >= slice ? threatLevel.Color : "#eee",
                        Value = 0.1m
                    });
                }
                return(dataSlices);
            };

            series.Data.AddRange(buildData(ThreatLevel.VeryLow, ThreatLevel.Low.Value));
            series.Data.AddRange(buildData(ThreatLevel.Low, ThreatLevel.Moderate.Value));
            series.Data.AddRange(buildData(ThreatLevel.Moderate, ThreatLevel.High.Value));
            series.Data.AddRange(buildData(ThreatLevel.High, ThreatLevel.VeryHigh.Value));
            series.Data.AddRange(buildData(ThreatLevel.VeryHigh, 10m));
            highchart.Series.Add(series);

            dashboard.RiskGauge = highchart;
        }
Exemple #13
0
        private void MapVulnerabilitiesByCategory(List <VulnerabilityEntity> vulnerabilityEntities, Dashboard dashboard, int?importId)
        {
            var highchart = new Highchart();
            var series    = new Series
            {
                Name = "Categories"
            };

            // TODO: Make more efficient? Either filter by importId on the repository level or use Queryable clauses instead of this tedious mapping
            List <VulnerabilityEntity> vulnerabilityEntitiesToKeep = new List <VulnerabilityEntity>();

            foreach (var vulnerabilityEntity in vulnerabilityEntities)
            {
                var vulnerability = _vulnerabilityMapper.Map(vulnerabilityEntity);

                List <HostVulnerabilityEntity> hostVulnerabilitiesToKeep = new List <HostVulnerabilityEntity>();
                foreach (var hostVulnerability in vulnerabilityEntity.HostVulnerabilities)
                {
                    if (hostVulnerability.ImportId == importId)
                    {
                        hostVulnerabilitiesToKeep.Add(hostVulnerability);
                    }
                }
                vulnerabilityEntity.HostVulnerabilities = hostVulnerabilitiesToKeep;
                if (vulnerabilityEntity.HostVulnerabilities.Count > 0)
                {
                    vulnerabilityEntitiesToKeep.Add(vulnerabilityEntity);
                }
            }

            var vulnerabilityCategoryGroups = vulnerabilityEntitiesToKeep.OrderBy(v => v.VulnerabilityCategory).GroupBy(v => v.VulnerabilityCategory).ToList();

            foreach (var vulnerabilityCategoryGroup in vulnerabilityCategoryGroups)
            {
                var data = new Data
                {
                    Name      = vulnerabilityCategoryGroup.Key,
                    Value     = vulnerabilityCategoryGroup.Count(),
                    Drilldown = vulnerabilityCategoryGroup.Key
                };
                series.Data.Add(data);

                //Order By Asc so that the severity levels will be drawn from low to high (left to right)
                var vulnerabilityCategorySeverityGroups = vulnerabilityCategoryGroup.OrderBy(v => v.CvssScore).GroupBy(v => ThreatLevel.LookupByValue(v.CvssScore)).ToList();
                if (vulnerabilityCategorySeverityGroups.Any())
                {
                    var drilldownSeries = new Series
                    {
                        Name = vulnerabilityCategoryGroup.Key,
                        Id   = vulnerabilityCategoryGroup.Key
                    };

                    foreach (var vulnerabilityCategorySeverityGroup in vulnerabilityCategorySeverityGroups)
                    {
                        var drilldownData = new Data
                        {
                            Name  = vulnerabilityCategorySeverityGroup.Key.Name,
                            Value = vulnerabilityCategorySeverityGroup.Count(),
                            Color = vulnerabilityCategorySeverityGroup.Key.Color
                        };
                        drilldownSeries.Data.Add(drilldownData);
                    }
                    highchart.DrilldownSeries.Add(drilldownSeries);
                }
            }
            highchart.Series.Add(series);

            dashboard.VulnerabilitiesByCategory = highchart;
        }
Exemple #14
0
        //TODO: Create dashboard mapper to encapsulate mapping logic
        private void MapHostsByOperatingSystem(List <HostEntity> hostEntities, Dashboard dashboard)
        {
            var highchart = new Highchart();

            // TODO: Make more efficient? Either filter on the repository level or use Queryable clauses instead of this tedious mapping
            List <HostEntity> hostEntitiesToKeep = new List <HostEntity>();

            foreach (var hostEntity in hostEntities)
            {
                var host = _hostMapper.Map(hostEntity);

                List <HostVulnerabilityEntity> hostVulnerabilitiesToKeep = new List <HostVulnerabilityEntity>();
                foreach (var hostVulnerability in hostEntity.HostVulnerabilities)
                {
                    hostVulnerabilitiesToKeep.Add(hostVulnerability);
                }
                hostEntity.HostVulnerabilities = hostVulnerabilitiesToKeep;
                hostEntitiesToKeep.Add(hostEntity);
            }

            Func <HostEntity, ThreatLevel> averageSeverity = v => v.HostVulnerabilities.Any() ? ThreatLevel.LookupByValue(v.HostVulnerabilities.Average(x => x.Vulnerability.CvssScore)) : ThreatLevel.VeryLow;
            var hostVulnerabilitySeverityGroups            = hostEntitiesToKeep.OrderBy(averageSeverity).GroupBy(averageSeverity).ToList();

            foreach (var hostVulnerabilitySeverityGroup in hostVulnerabilitySeverityGroups)
            {
                var series = new Series
                {
                    Name  = hostVulnerabilitySeverityGroup.Key.Name,
                    Color = hostVulnerabilitySeverityGroup.Key.Color
                };

                Func <HostEntity, string> operatingSystem = v =>
                {
                    var os = Decrypt <string>(v.OperatingSystemBytes) ?? string.Empty;
                    return(os.Contains(' ') ? os.Substring(0, os.IndexOf(' ')) : os);
                };
                var vulnerabilitySeverityOperatingSystemGroups = hostVulnerabilitySeverityGroup.OrderBy(operatingSystem).GroupBy(operatingSystem).ToList();
                foreach (var vulnerabilitySeverityOperatingSystemGroup in vulnerabilitySeverityOperatingSystemGroups)
                {
                    var data = new Data
                    {
                        Name      = vulnerabilitySeverityOperatingSystemGroup.Key,
                        Value     = vulnerabilitySeverityOperatingSystemGroup.Count(),
                        Color     = hostVulnerabilitySeverityGroup.Key.Color,
                        Drilldown = hostVulnerabilitySeverityGroup.Key.Name + "-" + vulnerabilitySeverityOperatingSystemGroup.Key
                    };
                    series.Data.Add(data);

                    var hostVulnerabilityOperatingSystemGroups = vulnerabilitySeverityOperatingSystemGroup.OrderBy(v => Decrypt <string>(v.OperatingSystemBytes)).GroupBy(v => Decrypt <string>(v.OperatingSystemBytes)).ToList();
                    if (hostVulnerabilityOperatingSystemGroups.Any())
                    {
                        var drilldownSeries = new Series
                        {
                            Name = $"{hostVulnerabilitySeverityGroup.Key.Name} ({vulnerabilitySeverityOperatingSystemGroup.Key})",
                            Id   = hostVulnerabilitySeverityGroup.Key.Name + "-" + vulnerabilitySeverityOperatingSystemGroup.Key
                        };

                        foreach (var vulnerabilityOperatingSystemGroup in hostVulnerabilityOperatingSystemGroups)
                        {
                            var drilldownData = new Data
                            {
                                Name  = vulnerabilityOperatingSystemGroup.Key,
                                Value = vulnerabilityOperatingSystemGroup.Select(x => Decrypt <string>(x.IPAddressBytes)).Distinct().Count()
                            };
                            drilldownSeries.Data.Add(drilldownData);
                        }
                        highchart.DrilldownSeries.Add(drilldownSeries);
                    }
                }
                highchart.Series.Add(series);
            }

            dashboard.HostsByOperatingSystem = highchart;
        }
Exemple #15
0
 public HighchartsAdapter(Highchart chart)
 {
     _chart = new Chart(chart);
 }