Select Git revision
Reporting.cs
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Reporting.cs 12.42 KiB
using Coscine.Configuration;
using Coscine.Metadata;
using GitLabApiClient;
using GitLabApiClient.Models.Branches.Requests;
using GitLabApiClient.Models.Commits.Requests.CreateCommitRequest;
using KPIGenerator.Utils;
using System.Text;
using System.Web;
using VDS.RDF.Query;
using static KPIGenerator.Utils.CommandLineOptions;
namespace KPIGenerator;
public abstract class Reporting<O> where O : class
{
public O Options { get; init; }
public GitLabClient GitLabClient { get; set; }
public List<Organization> Organizations { get; set; }
public RdfStoreConnector RdfStoreConnector { get; init; }
public SparqlRemoteEndpoint QueryEndpoint { get; init; }
public ConsulConfiguration Configuration { get; }
private static string HostUrl { get; } = "https://git.rwth-aachen.de/";
private static string InstanceName { get; set; } = null!;
public virtual string ReportingFileName { get; init; } = null!;
private string Domain { get; init; }
private bool ReportingEnabled { get; init; }
private string ReportingDatabaseProjectId { get; init; }
private string ReportingBranch { get; init; }
public string RwthRor { get; init; }
public readonly Organization _otherOrganization = new()
{
Name = "Other",
RorUrl = "https://ror.org/_other",
};
public Reporting(O options)
{
InstanceName = this.GetType().Name;
Options = options;
Configuration = new ConsulConfiguration();
RdfStoreConnector = new RdfStoreConnector(Configuration.GetStringAndWait("coscine/local/virtuoso/additional/url"));
QueryEndpoint = new SparqlRemoteEndpoint(new Uri(Configuration.GetStringAndWait("coscine/local/virtuoso/additional/url")));
GitLabClient = new GitLabClient(HostUrl, Configuration.GetStringAndWait("coscine/global/gitlabtoken"));
Organizations = new List<Organization>() { _otherOrganization };
ReportingEnabled = Configuration.GetStringAndWait("coscine/local/reporting/enabled", "false") == "true";
Domain = Configuration.GetStringAndWait("coscine/local/profilesync/domain");
ReportingDatabaseProjectId = Configuration.GetStringAndWait("coscine/local/reporting/gitlab_project_id");
ReportingBranch = Configuration.GetStringAndWait("coscine/local/reporting/branch");
RwthRor = Configuration.GetStringAndWait("coscine/global/organizations/rwth/ror_url");
}
public abstract IEnumerable<ReportingFileObject> GenerateReporting();
public bool Run()
{
// Console text output
Console.Write($"{new string('=', 80)}\n {Domain} | {InstanceName}");
var baseOptions = Options as BaseOptions;
if (baseOptions is not null && baseOptions.DummyMode)
{
Console.Write(" : DUMMY MODE");
}
Console.WriteLine($"\n{new string('-', 80)}");
EnsureGitLabInformationIsSetAndCorrect();
// Generate Reporting based on CLI input