From a251e11d6fc32bc829087d3bd6bf349fac9c26e5 Mon Sep 17 00:00:00 2001
From: "L. Ellenbeck" <ellenbeck@itc.rwth-aachen.de>
Date: Tue, 15 Mar 2022 12:49:52 +0100
Subject: [PATCH] New: extended analytics log (coscine/issues#2001)

---
 src/Project/Controllers/ProjectController.cs | 27 ++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

diff --git a/src/Project/Controllers/ProjectController.cs b/src/Project/Controllers/ProjectController.cs
index 30a2413..7348424 100644
--- a/src/Project/Controllers/ProjectController.cs
+++ b/src/Project/Controllers/ProjectController.cs
@@ -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();
         }
 
@@ -914,5 +920,22 @@ 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()
+                });
+        }
     }
-}
+}
\ No newline at end of file
-- 
GitLab