Skip to content
Snippets Groups Projects
Commit b69103d4 authored by Petar Hristov's avatar Petar Hristov :speech_balloon:
Browse files

Merge branch 'Hotfix/xxxx-rors' into 'main'

Fix: Handling for generic ror url

See merge request !33
parents 3c47e1d7 b3bfce89
Branches
Tags
1 merge request!33Fix: Handling for generic ror url
Pipeline #1219346 passed
......@@ -8,7 +8,7 @@ public record ProjectReport
public Guid Id { get; init; }
[JsonPropertyName("DateCreated")]
public DateTime DateCreated { get; init; }
public DateTime? DateCreated { get; init; } = null!;
[JsonPropertyName("Organizations")]
public IReadOnlyList<Organization> Organizations { get; init; } = null!;
......
......@@ -27,5 +27,5 @@ public record UserReport
public IReadOnlyList<LoginProvider> LoginProviders { get; init; } = null!;
[JsonPropertyName("LatestActivity")]
public DateTime? LatestActivity { get; set; }
public DateTime? LatestActivity { get; set; } = null!;
}
......@@ -63,14 +63,14 @@ public class ApplicationProfileReporting
public async Task<bool> RunAsync(ApplicationProfileReportingOptions reportingOptions)
{
_logger.LogInformation("\n\nGenerating Application Profile Reporting...");
_logger.LogInformation("Generating Application Profile Reporting...");
Options = reportingOptions;
var reportingFiles = await GenerateReportingAsync();
_logger.LogInformation("Publishing to GitLab...");
// Publish to GitLab first, if that fails, publish to local storage
var success = await _gitlabStorageService.PublishAsync("Application Profile Reporting", reportingFiles);
if (!success)
var success = Options.DummyMode || await _gitlabStorageService.PublishAsync("Application Profile Reporting", reportingFiles);
if (!success || Options.DummyMode)
{
_logger.LogInformation("Failed to publish to GitLab. Publishing to local storage instead.");
success = await _localStorageService.PublishAsync("Application Profile Reporting", reportingFiles);
......@@ -88,7 +88,6 @@ public class ApplicationProfileReporting
foreach (var ap in applicationProfiles)
{
_logger.LogInformation("Processing {ap}...", ap.Uri);
var applicationProfile = await ApplicationProfileApi.GetApplicationProfileAsync(ap.Uri, RdfFormat.TextTurtle);
var g = new Graph();
......
......@@ -51,8 +51,8 @@ public class CompleteReporting
// Publish to GitLab first, if that fails, publish to local storage
_logger.LogInformation("Publishing to GitLab...");
var success = await _gitlabStorageService.PublishAsync("Complete Reporting", reportingFiles);
if (!success)
var success = Options.DummyMode || await _gitlabStorageService.PublishAsync("Complete Reporting", reportingFiles);
if (!success || Options.DummyMode)
{
_logger.LogInformation("Failed to publish to GitLab. Publishing to local storage instead.");
success = await _localStorageService.PublishAsync("Complete Reporting", reportingFiles);
......@@ -65,15 +65,15 @@ public class CompleteReporting
var reportingFiles = new List<ReportingFileObject>();
var projectReportingFiles = await _projectReporting.GenerateReportingAsync();
_logger.LogInformation("Project Reporting generated successfully.");
_logger.LogInformation("Project Reporting generated successfully.\n\n");
var resourceReportingFiles = await _resourceReporting.GenerateReportingAsync();
_logger.LogInformation("Resource Reporting generated successfully.");
_logger.LogInformation("Resource Reporting generated successfully.\n\n");
var userReportingFiles = await _userReporting.GenerateReportingAsync();
_logger.LogInformation("User Reporting generated successfully.");
_logger.LogInformation("User Reporting generated successfully.\n\n");
var applicationProfileReportingFiles = await _applicationProfileReporting.GenerateReportingAsync();
_logger.LogInformation("Application Profile Reporting generated successfully.");
_logger.LogInformation("Application Profile Reporting generated successfully.\n\n");
var systemReportingFiles = await _systemReporting.GenerateReportingAsync();
_logger.LogInformation("System Reporting generated successfully.");
_logger.LogInformation("System Reporting generated successfully.\n\n");
reportingFiles.AddRange(projectReportingFiles);
reportingFiles.AddRange(resourceReportingFiles);
......
......@@ -63,14 +63,14 @@ public class ProjectReporting
public async Task<bool> RunAsync(ProjectReportingOptions reportingOptions)
{
_logger.LogInformation("\n\nGenerating Project Reporting...");
_logger.LogInformation("Generating Project Reporting...");
Options = reportingOptions;
var reportingFiles = await GenerateReportingAsync();
_logger.LogInformation("Publishing to GitLab...");
// Publish to GitLab first, if that fails, publish to local storage
var success = await _gitlabStorageService.PublishAsync("Project Reporting", reportingFiles);
if (!success)
var success = Options.DummyMode || await _gitlabStorageService.PublishAsync("Project Reporting", reportingFiles);
if (!success || Options.DummyMode)
{
_logger.LogInformation("Failed to publish to GitLab. Publishing to local storage instead.");
success = await _localStorageService.PublishAsync("Project Reporting", reportingFiles);
......@@ -114,14 +114,16 @@ public class ProjectReporting
var rorUrl = entry.RorUrl.Equals("https://ror.org/", StringComparison.InvariantCultureIgnoreCase) ? _reportingConfiguration.Organization?.OtherOrganization?.RorUrl ?? "_other" : entry.RorUrl;
var returnObjectsForOrganization = returnObjects.Where(ro => ro.Organizations.Select(o => o.RorUrl).Any(e => e.Contains(rorUrl))).ToList();
if (returnObjectsForOrganization.Count != 0)
{
var reportingFile = new ReportingFileObject
{
Path = Helpers.GetReportingPathOrganization(entry.RorUrl, ReportingFileName),
Path = Helpers.GetReportingPathOrganization(rorUrl, ReportingFileName),
Content = Helpers.ConvertStringContentsToStream(JsonConvert.SerializeObject(returnObjectsForOrganization, Formatting.Indented))
};
reportingFilesPerOrganization.Add(reportingFile);
}
}
return reportingFilesPerOrganization;
}
......
......@@ -62,14 +62,14 @@ public class ResourceReporting
public async Task<bool> RunAsync(ResourceReportingOptions reportingOptions)
{
_logger.LogInformation("\n\nGenerating Resource Reporting...");
_logger.LogInformation("Generating Resource Reporting...");
Options = reportingOptions;
var reportingFiles = await GenerateReportingAsync();
_logger.LogInformation("Publishing to GitLab...");
// Publish to GitLab first, if that fails, publish to local storage
var success = await _gitlabStorageService.PublishAsync("Resources Reporting", reportingFiles);
if (!success)
var success = Options.DummyMode || await _gitlabStorageService.PublishAsync("Resources Reporting", reportingFiles);
if (!success || Options.DummyMode)
{
_logger.LogInformation("Failed to publish to GitLab. Publishing to local storage instead.");
success = await _localStorageService.PublishAsync("Resources Reporting", reportingFiles);
......@@ -128,7 +128,8 @@ public class ResourceReporting
foreach (var entry in organizationsFromProjects)
{
var returnObjectsForOrganization = returnObjects.Where(ro => ro.Organizations.Select(o => o.RorUrl).Any(e => e.Contains(entry.RorUrl))).ToList();
if (returnObjectsForOrganization.Count != 0)
{
var reportingFile = new ReportingFileObject
{
Path = Helpers.GetReportingPathOrganization(entry.RorUrl, ReportingFileName),
......@@ -136,6 +137,7 @@ public class ResourceReporting
};
reportingFilesPerOrganization.Add(reportingFile);
}
}
return reportingFilesPerOrganization;
}
......
......@@ -62,14 +62,14 @@ public class SystemReporting
public async Task<bool> RunAsync(SystemReportingOptions reportingOptions)
{
_logger.LogInformation("\n\nGenerating System Reporting...");
_logger.LogInformation("Generating System Reporting...");
Options = reportingOptions;
var reportingFiles = await GenerateReportingAsync();
_logger.LogInformation("Publishing to GitLab...");
// Publish to GitLab first, if that fails, publish to local storage
var success = await _gitlabStorageService.PublishAsync("System Reporting", reportingFiles);
if (!success)
var success = Options.DummyMode || await _gitlabStorageService.PublishAsync("System Reporting", reportingFiles);
if (!success || Options.DummyMode)
{
_logger.LogInformation("Failed to publish to GitLab. Publishing to local storage instead.");
success = await _localStorageService.PublishAsync("System Reporting", reportingFiles);
......
......@@ -62,14 +62,14 @@ public class UserReporting
public async Task<bool> RunAsync(UserReportingOptions reportingOptions)
{
_logger.LogInformation("\n\nGenerating User Reporting...");
_logger.LogInformation("Generating User Reporting...");
Options = reportingOptions;
var reportingFiles = await GenerateReportingAsync();
_logger.LogInformation("Publishing to GitLab...");
// Publish to GitLab first, if that fails, publish to local storage
var success = await _gitlabStorageService.PublishAsync("User Reporting", reportingFiles);
if (!success)
var success = Options.DummyMode || await _gitlabStorageService.PublishAsync("User Reporting", reportingFiles);
if (!success || Options.DummyMode)
{
_logger.LogInformation("Failed to publish to GitLab. Publishing to local storage instead.");
success = await _localStorageService.PublishAsync("User Reporting", reportingFiles);
......@@ -137,7 +137,8 @@ public class UserReporting
foreach (var entry in organizationsFromProjects)
{
var returnObjectsForOrganization = returnObjects.Where(ro => ro.Organizations.Select(o => o.RorUrl).Any(e => e is not null && e.Contains(entry.RorUrl))).ToList();
if (returnObjectsForOrganization.Count != 0)
{
var reportingFile = new ReportingFileObject
{
Path = Helpers.GetReportingPathOrganization(entry.RorUrl, ReportingFileName),
......@@ -145,6 +146,7 @@ public class UserReporting
};
reportingFilesPerOrganization.Add(reportingFile);
}
}
return reportingFilesPerOrganization;
}
......
......@@ -21,24 +21,11 @@ public static class Helpers
return result.DistinctBy(r => r.RorUrl);
}
public static string GetReportingPathGeneral(string fileName)
{
return string.Format("General/{0}", fileName);
}
public static string GetReportingPathGeneral(string fileName) => string.Format("General/{0}", fileName);
public static string GetReportingPathOrganization(string organizationRor, string fileName)
{
return string.Format("Organizations/{0}/{1}", SanitizeOrganizationRor(organizationRor), fileName);
}
public static string GetReportingPathOrganization(string organizationRor, string fileName) => string.Format("Organizations/{0}/{1}", SanitizeOrganizationRor(organizationRor), fileName);
public static string SanitizeOrganizationRor(string organizationRor)
{
return HttpUtility.UrlEncode(organizationRor.Replace("https://ror.org/", "").ToLower());
}
public static string SanitizeOrganizationRor(string organizationRor) => HttpUtility.UrlEncode(organizationRor.Replace("https://ror.org/", "").ToLower());
public static Stream ConvertStringContentsToStream(string contents)
{
byte[] byteArray = Encoding.UTF8.GetBytes(contents);
return new MemoryStream(byteArray);
}
public static Stream ConvertStringContentsToStream(string contents) => new MemoryStream(Encoding.UTF8.GetBytes(contents));
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment