Skip to content
Snippets Groups Projects

Product/639-readableLogs

Merged Marcel Nellesen requested to merge Product/639-readableLogs into Sprint/2020-05
11 files
+ 228
39
Compare changes
  • Side-by-side
  • Inline
Files
11
@@ -10,6 +10,11 @@ using System.Linq;
using Coscine.Configuration;
using Microsoft.AspNetCore.Authorization;
using Coscine.Database.Util;
using Coscine.Logging;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Linq;
using Coscine.Database.DataModel;
using System.Collections.Generic;
namespace Coscine.Api.Project.Controllers
{
@@ -20,24 +25,33 @@ namespace Coscine.Api.Project.Controllers
private readonly ProjectModel _projectModel;
private readonly IConfiguration _configuration;
private readonly Emitter _emitter;
private readonly ProjectRoleModel _projectRoleModel;
private readonly CoscineLogger _coscineLogger;
private readonly AnalyticsLogObject _analyticsLogObject;
public ProjectController()
public ProjectController(ILogger<ProjectController> logger)
{
_authenticator = new Authenticator(this, Program.Configuration);
_configuration = Program.Configuration;
_projectModel = new ProjectModel();
_emitter = new Emitter(_configuration);
_projectRoleModel = new ProjectRoleModel();
_coscineLogger = new CoscineLogger(logger);
_analyticsLogObject = new AnalyticsLogObject();
}
[Route("[controller]")]
public IActionResult Index()
{
var user = _authenticator.GetUser();
return Ok(_projectModel.GetWithAccess(user, UserRoles.Member, UserRoles.Owner).ToList()
var result = _projectModel.GetWithAccess(user, UserRoles.Member, UserRoles.Owner).ToList()
.Select((project) => _projectModel.CreateReturnObjectFromDatabaseObject(project))
.OrderBy(element => element.DisplayName)
);
.OrderBy(element => element.DisplayName);
LogAnalytics("View Home", result);
return Ok(result);
}
[HttpGet("[controller]/{id}")]
@@ -73,14 +87,18 @@ namespace Coscine.Api.Project.Controllers
var resourceTypeModel = new ResourceTypeModel();
if (_projectModel.HasAccess(user, project, UserRoles.Member, UserRoles.Owner))
{
return Json(resourceModel.GetAllWhere((resource) =>
var resources = resourceModel.GetAllWhere((resource) =>
(from projectResource in resource.ProjectResourceResourceIdIds
where projectResource.ProjectId == project.Id
select projectResource).Any())
.Select((resource) =>
{
return resourceModel.CreateReturnObjectFromDatabaseObject(resource);
}).OrderBy(element => element.DisplayName));
}).OrderBy(element => element.DisplayName);
LogAnalytics("View Resources", null, resources);
return Json(resources);
}
else
{
@@ -94,8 +112,9 @@ namespace Coscine.Api.Project.Controllers
var user = _authenticator.GetUser();
var projectObject = ObjectFactory<ProjectObject>.DeserializeFromStream(Request.Body);
var project = _projectModel.GetById(Guid.Parse(id));
if(_projectModel.HasAccess(user, project, UserRoles.Owner))
if (_projectModel.HasAccess(user, project, UserRoles.Owner))
{
LogAnalytics("Edit Project", null, null, id, user);
return Ok(_projectModel.UpdateByObject(project, projectObject));
}
else
@@ -111,6 +130,7 @@ namespace Coscine.Api.Project.Controllers
var project = _projectModel.GetById(Guid.Parse(id));
if (_projectModel.HasAccess(user, project, UserRoles.Owner))
{
LogAnalytics("Delete Project", null, null, id, user);
DeleteProject(project);
return Json(_projectModel.CreateReturnObjectFromDatabaseObject(project));
}
@@ -238,7 +258,51 @@ namespace Coscine.Api.Project.Controllers
ProjectOwner = user
});
LogAnalytics("Add Project", null, null, project.Id.ToString(), user);
return Json(_projectModel.CreateReturnObjectFromDatabaseObject(project));
}
private void LogAnalytics(string operation,
IEnumerable<ProjectObject> projects = null,
IEnumerable<ResourceObject> resources = null,
string projectId = null,
User user = null
)
{
if (CoscineLoggerConfiguration.IsLogLevelActivated(LogType.Analytics))
{
_analyticsLogObject.Type = "Action";
_analyticsLogObject.Operation = operation;
if (projects != null)
{
List<string> projectList = new List<string>();
foreach (var entry in projects)
{
projectList.Add(entry.Id.ToString());
}
_analyticsLogObject.ProjectList = projectList;
}
if (resources != null)
{
List<string> shownResources = new List<string>();
foreach (var entry in resources)
{
shownResources.Add(entry.Id.ToString());
}
_analyticsLogObject.ResourceList = shownResources;
}
if (projectId != null)
{
_analyticsLogObject.ProjectId = projectId;
if (user != null)
{
_analyticsLogObject.RoleId = _projectRoleModel.GetGetUserRoleForProject(new Guid(_analyticsLogObject.ProjectId), user.Id).ToString();
}
}
_coscineLogger.AnalyticsLog(_analyticsLogObject);
}
}
}
}
Loading