mirror of
https://github.com/bitwarden/server
synced 2026-01-04 09:33:40 +00:00
[PM-26967] Added new metric properties (#6519)
This commit is contained in:
48
src/Core/Dirt/Models/Data/OrganizationReportMetricsData.cs
Normal file
48
src/Core/Dirt/Models/Data/OrganizationReportMetricsData.cs
Normal file
@@ -0,0 +1,48 @@
|
||||
using Bit.Core.Dirt.Reports.ReportFeatures.Requests;
|
||||
|
||||
namespace Bit.Core.Dirt.Reports.Models.Data;
|
||||
|
||||
public class OrganizationReportMetricsData
|
||||
{
|
||||
public Guid OrganizationId { get; set; }
|
||||
public int? ApplicationCount { get; set; }
|
||||
public int? ApplicationAtRiskCount { get; set; }
|
||||
public int? CriticalApplicationCount { get; set; }
|
||||
public int? CriticalApplicationAtRiskCount { get; set; }
|
||||
public int? MemberCount { get; set; }
|
||||
public int? MemberAtRiskCount { get; set; }
|
||||
public int? CriticalMemberCount { get; set; }
|
||||
public int? CriticalMemberAtRiskCount { get; set; }
|
||||
public int? PasswordCount { get; set; }
|
||||
public int? PasswordAtRiskCount { get; set; }
|
||||
public int? CriticalPasswordCount { get; set; }
|
||||
public int? CriticalPasswordAtRiskCount { get; set; }
|
||||
|
||||
public static OrganizationReportMetricsData From(Guid organizationId, OrganizationReportMetricsRequest? request)
|
||||
{
|
||||
if (request == null)
|
||||
{
|
||||
return new OrganizationReportMetricsData
|
||||
{
|
||||
OrganizationId = organizationId
|
||||
};
|
||||
}
|
||||
|
||||
return new OrganizationReportMetricsData
|
||||
{
|
||||
OrganizationId = organizationId,
|
||||
ApplicationCount = request.ApplicationCount,
|
||||
ApplicationAtRiskCount = request.ApplicationAtRiskCount,
|
||||
CriticalApplicationCount = request.CriticalApplicationCount,
|
||||
CriticalApplicationAtRiskCount = request.CriticalApplicationAtRiskCount,
|
||||
MemberCount = request.MemberCount,
|
||||
MemberAtRiskCount = request.MemberAtRiskCount,
|
||||
CriticalMemberCount = request.CriticalMemberCount,
|
||||
CriticalMemberAtRiskCount = request.CriticalMemberAtRiskCount,
|
||||
PasswordCount = request.PasswordCount,
|
||||
PasswordAtRiskCount = request.PasswordAtRiskCount,
|
||||
CriticalPasswordCount = request.CriticalPasswordCount,
|
||||
CriticalPasswordAtRiskCount = request.CriticalPasswordAtRiskCount
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -35,14 +35,28 @@ public class AddOrganizationReportCommand : IAddOrganizationReportCommand
|
||||
throw new BadRequestException(errorMessage);
|
||||
}
|
||||
|
||||
var requestMetrics = request.Metrics ?? new OrganizationReportMetricsRequest();
|
||||
|
||||
var organizationReport = new OrganizationReport
|
||||
{
|
||||
OrganizationId = request.OrganizationId,
|
||||
ReportData = request.ReportData,
|
||||
ReportData = request.ReportData ?? string.Empty,
|
||||
CreationDate = DateTime.UtcNow,
|
||||
ContentEncryptionKey = request.ContentEncryptionKey,
|
||||
ContentEncryptionKey = request.ContentEncryptionKey ?? string.Empty,
|
||||
SummaryData = request.SummaryData,
|
||||
ApplicationData = request.ApplicationData,
|
||||
ApplicationCount = requestMetrics.ApplicationCount,
|
||||
ApplicationAtRiskCount = requestMetrics.ApplicationAtRiskCount,
|
||||
CriticalApplicationCount = requestMetrics.CriticalApplicationCount,
|
||||
CriticalApplicationAtRiskCount = requestMetrics.CriticalApplicationAtRiskCount,
|
||||
MemberCount = requestMetrics.MemberCount,
|
||||
MemberAtRiskCount = requestMetrics.MemberAtRiskCount,
|
||||
CriticalMemberCount = requestMetrics.CriticalMemberCount,
|
||||
CriticalMemberAtRiskCount = requestMetrics.CriticalMemberAtRiskCount,
|
||||
PasswordCount = requestMetrics.PasswordCount,
|
||||
PasswordAtRiskCount = requestMetrics.PasswordAtRiskCount,
|
||||
CriticalPasswordCount = requestMetrics.CriticalPasswordCount,
|
||||
CriticalPasswordAtRiskCount = requestMetrics.CriticalPasswordAtRiskCount,
|
||||
RevisionDate = DateTime.UtcNow
|
||||
};
|
||||
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
// FIXME: Update this file to be null safe and then delete the line below
|
||||
#nullable disable
|
||||
|
||||
namespace Bit.Core.Dirt.Reports.ReportFeatures.Requests;
|
||||
namespace Bit.Core.Dirt.Reports.ReportFeatures.Requests;
|
||||
|
||||
public class AddOrganizationReportRequest
|
||||
{
|
||||
public Guid OrganizationId { get; set; }
|
||||
public string ReportData { get; set; }
|
||||
public string? ReportData { get; set; }
|
||||
|
||||
public string ContentEncryptionKey { get; set; }
|
||||
public string? ContentEncryptionKey { get; set; }
|
||||
|
||||
public string SummaryData { get; set; }
|
||||
public string? SummaryData { get; set; }
|
||||
|
||||
public string ApplicationData { get; set; }
|
||||
public string? ApplicationData { get; set; }
|
||||
|
||||
public OrganizationReportMetricsRequest? Metrics { get; set; }
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Bit.Core.Dirt.Reports.ReportFeatures.Requests;
|
||||
|
||||
public class OrganizationReportMetricsRequest
|
||||
{
|
||||
[JsonPropertyName("totalApplicationCount")]
|
||||
public int? ApplicationCount { get; set; } = null;
|
||||
[JsonPropertyName("totalAtRiskApplicationCount")]
|
||||
public int? ApplicationAtRiskCount { get; set; } = null;
|
||||
[JsonPropertyName("totalCriticalApplicationCount")]
|
||||
public int? CriticalApplicationCount { get; set; } = null;
|
||||
[JsonPropertyName("totalCriticalAtRiskApplicationCount")]
|
||||
public int? CriticalApplicationAtRiskCount { get; set; } = null;
|
||||
[JsonPropertyName("totalMemberCount")]
|
||||
public int? MemberCount { get; set; } = null;
|
||||
[JsonPropertyName("totalAtRiskMemberCount")]
|
||||
public int? MemberAtRiskCount { get; set; } = null;
|
||||
[JsonPropertyName("totalCriticalMemberCount")]
|
||||
public int? CriticalMemberCount { get; set; } = null;
|
||||
[JsonPropertyName("totalCriticalAtRiskMemberCount")]
|
||||
public int? CriticalMemberAtRiskCount { get; set; } = null;
|
||||
[JsonPropertyName("totalPasswordCount")]
|
||||
public int? PasswordCount { get; set; } = null;
|
||||
[JsonPropertyName("totalAtRiskPasswordCount")]
|
||||
public int? PasswordAtRiskCount { get; set; } = null;
|
||||
[JsonPropertyName("totalCriticalPasswordCount")]
|
||||
public int? CriticalPasswordCount { get; set; } = null;
|
||||
[JsonPropertyName("totalCriticalAtRiskPasswordCount")]
|
||||
public int? CriticalPasswordAtRiskCount { get; set; } = null;
|
||||
}
|
||||
@@ -1,11 +1,8 @@
|
||||
// FIXME: Update this file to be null safe and then delete the line below
|
||||
#nullable disable
|
||||
|
||||
namespace Bit.Core.Dirt.Reports.ReportFeatures.Requests;
|
||||
namespace Bit.Core.Dirt.Reports.ReportFeatures.Requests;
|
||||
|
||||
public class UpdateOrganizationReportApplicationDataRequest
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public Guid OrganizationId { get; set; }
|
||||
public string ApplicationData { get; set; }
|
||||
public string? ApplicationData { get; set; }
|
||||
}
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
// FIXME: Update this file to be null safe and then delete the line below
|
||||
#nullable disable
|
||||
|
||||
namespace Bit.Core.Dirt.Reports.ReportFeatures.Requests;
|
||||
namespace Bit.Core.Dirt.Reports.ReportFeatures.Requests;
|
||||
|
||||
public class UpdateOrganizationReportSummaryRequest
|
||||
{
|
||||
public Guid OrganizationId { get; set; }
|
||||
public Guid ReportId { get; set; }
|
||||
public string SummaryData { get; set; }
|
||||
public string? SummaryData { get; set; }
|
||||
public OrganizationReportMetricsRequest? Metrics { get; set; }
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ public class UpdateOrganizationReportApplicationDataCommand : IUpdateOrganizatio
|
||||
throw new BadRequestException("Organization report does not belong to the specified organization");
|
||||
}
|
||||
|
||||
var updatedReport = await _organizationReportRepo.UpdateApplicationDataAsync(request.OrganizationId, request.Id, request.ApplicationData);
|
||||
var updatedReport = await _organizationReportRepo.UpdateApplicationDataAsync(request.OrganizationId, request.Id, request.ApplicationData ?? string.Empty);
|
||||
|
||||
_logger.LogInformation(Constants.BypassFiltersEventId, "Successfully updated organization report application data {reportId} for organization {organizationId}",
|
||||
request.Id, request.OrganizationId);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Bit.Core.Dirt.Entities;
|
||||
using Bit.Core.Dirt.Reports.Models.Data;
|
||||
using Bit.Core.Dirt.Reports.ReportFeatures.Interfaces;
|
||||
using Bit.Core.Dirt.Reports.ReportFeatures.Requests;
|
||||
using Bit.Core.Dirt.Repositories;
|
||||
@@ -53,7 +54,8 @@ public class UpdateOrganizationReportSummaryCommand : IUpdateOrganizationReportS
|
||||
throw new BadRequestException("Organization report does not belong to the specified organization");
|
||||
}
|
||||
|
||||
var updatedReport = await _organizationReportRepo.UpdateSummaryDataAsync(request.OrganizationId, request.ReportId, request.SummaryData);
|
||||
await _organizationReportRepo.UpdateMetricsAsync(request.ReportId, OrganizationReportMetricsData.From(request.OrganizationId, request.Metrics));
|
||||
var updatedReport = await _organizationReportRepo.UpdateSummaryDataAsync(request.OrganizationId, request.ReportId, request.SummaryData ?? string.Empty);
|
||||
|
||||
_logger.LogInformation(Constants.BypassFiltersEventId, "Successfully updated organization report summary {reportId} for organization {organizationId}",
|
||||
request.ReportId, request.OrganizationId);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using Bit.Core.Dirt.Entities;
|
||||
using Bit.Core.Dirt.Models.Data;
|
||||
using Bit.Core.Dirt.Reports.Models.Data;
|
||||
using Bit.Core.Repositories;
|
||||
|
||||
namespace Bit.Core.Dirt.Repositories;
|
||||
@@ -21,5 +22,8 @@ public interface IOrganizationReportRepository : IRepository<OrganizationReport,
|
||||
// ApplicationData methods
|
||||
Task<OrganizationReportApplicationDataResponse> GetApplicationDataAsync(Guid reportId);
|
||||
Task<OrganizationReport> UpdateApplicationDataAsync(Guid orgId, Guid reportId, string applicationData);
|
||||
|
||||
// Metrics methods
|
||||
Task UpdateMetricsAsync(Guid reportId, OrganizationReportMetricsData metrics);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user