Skip to content
Snippets Groups Projects

New: extended analytics log (coscine/issues#2001)

Merged L. Ellenbeck requested to merge Issue/2001-extendAnalyticsLogger into dev
@@ -115,7 +115,7 @@ namespace Coscine.Api.Project.Controllers
var project = _projectModel.GetById(Guid.Parse(id));
if (_projectModel.HasAccess(user, project, UserRoles.Member, UserRoles.Owner))
{
SubProjectModel subProjectModel = new SubProjectModel();
var subProjectModel = new SubProjectModel();
var subProjectRel = subProjectModel.GetAllWhere((subProject) => subProject.SubProjectId == project.Id && !project.Deleted);
var parentProjectRelation = subProjectRel.FirstOrDefault();
@@ -422,6 +422,12 @@ namespace Coscine.Api.Project.Controllers
projectQuotaForCurrent.Quota = updateProjectQuotaObject.Allocated;
_projectQuotaModel.Update(projectQuotaForCurrent);
}
if (Request.Query != null && Request.Query["noanalyticslog"] != "true")
{
LogAnalyticsOwnerProjectQuotaChange(project, user);
}
return NoContent();
}
@@ -652,6 +658,33 @@ namespace Coscine.Api.Project.Controllers
return new ActionResult<IEnumerable<InvitationReturnObject>>(invitations);
}
/// <summary>
/// Call to analytics logger.
/// </summary>
/// <param name="projectId">Project id of the project</param>
/// <returns>204 no content</returns>
[HttpGet("[controller]/{projectId}/-/create-profile")]
public IActionResult CreateApplicationProfile(Guid projectId)
{
var project = _projectModel.GetById(projectId);
if (project == null)
{
return NotFound($@"The project ""{projectId}"" was not found.");
}
var user = _authenticator.GetUser();
if (!_projectModel.HasAccess(user, project, UserRoles.Owner))
{
return Unauthorized("You are not an owner of the project.");
}
LogAnalyticsCreateApplicationProfile(project, user);
return NoContent();
}
/// <summary>
/// Create and send an invitation to specified mail.
/// </summary>
@@ -721,6 +754,11 @@ namespace Coscine.Api.Project.Controllers
NotificationBusUtil.Send(Program.Configuration, "user_invitation", NotificationBusUtil.GetUserList(new User { EmailAddress = sendInvitationObject.Email }), sendInvitationObject.Project.ToString(), body);
if (Request.Query != null && Request.Query["noanalyticslog"] != "true")
{
LogAnalyticsInviteExternalUser(project, user);
}
return NoContent();
}
@@ -914,5 +952,50 @@ namespace Coscine.Api.Project.Controllers
Visibility = project.VisibilityId.HasValue ? _visibilityModel.GetById(project.VisibilityId.Value)?.DisplayName : null,
});
}
private void LogAnalyticsOwnerProjectQuotaChange(Database.DataModel.Project project, User user)
{
var resourceTypes = _resourceTypeModel.GetAllWhere(x => x.Enabled == true);
var objects = resourceTypes.Select(x => CreateProjectQuotaReturnObject(x, project.Id));
_coscineLogger.AnalyticsLog(
new AnalyticsLogObject
{
Type = "Action",
Operation = "Owner Project Quota Change",
RoleId = _projectRoleModel.GetGetUserRoleForProject(project.Id, user.Id).ToString(),
ProjectId = project.Id.ToString(),
QuotaSize = objects.Select(x => $"{x.Name}: {x.Used}/{x.Allocated}").ToList()
});
}
private void LogAnalyticsInviteExternalUser(Database.DataModel.Project project, User user)
{
var resourceTypes = _resourceTypeModel.GetAllWhere(x => x.Enabled == true);
var objects = resourceTypes.Select(x => CreateProjectQuotaReturnObject(x, project.Id));
_coscineLogger.AnalyticsLog(
new AnalyticsLogObject
{
Type = "Action",
Operation = "Invite External User",
RoleId = _projectRoleModel.GetGetUserRoleForProject(project.Id, user.Id).ToString(),
ProjectId = project.Id.ToString()
});
}
private void LogAnalyticsCreateApplicationProfile(Database.DataModel.Project project, User user)
{
_coscineLogger.AnalyticsLog(
new AnalyticsLogObject
{
Type = "Action",
Operation = "Create Application Profile",
RoleId = _projectRoleModel.GetGetUserRoleForProject(project.Id, user.Id).ToString(),
ProjectId = project.Id.ToString()
});
}
}
}
}
\ No newline at end of file
Loading