Skip to content
Snippets Groups Projects

WIP: Update Extend analytics log (coscine/issues#1188)

Closed David Schimmel requested to merge Topic/1221-loggingExtended into Product/1188-logginExtended
4 files
+ 54
14
Compare changes
  • Side-by-side
  • Inline

Files

@@ -145,7 +145,23 @@ namespace Coscine.Api.Tree.Controllers
))
);
LogAnalytics("View MD", resourceId, path, user);
if (resource.ApplicationProfile[resource.ApplicationProfile.Length - 1] != '/')
{
resource.ApplicationProfile += '/';
}
string metadataCompleteness = null;
try
{
var metadata = jObject.SelectToken("data").SelectToken("metadataStorage").First.First.First;
var shapesGraph = (Graph)_rdfStoreConnector.GetGraph(resource.ApplicationProfile);
metadataCompleteness = GetMetadataCompleteness(metadata, shapesGraph);
}
catch (Exception e)
{
metadataCompleteness = "Error";
}
LogAnalytics("Update MD", resourceId, path, user, metadataCompleteness);
return Json(jObject);
}
catch
@@ -258,12 +274,12 @@ namespace Coscine.Api.Tree.Controllers
if (_rdfStoreConnector.HasGraph(graphNameUri))
{
_rdfStoreConnector.ClearGraph(graphNameUri);
LogAnalytics("Update MD", resourceId, path, user);
LogAnalytics("Update MD", resourceId, path, user, GetMetadataCompleteness(innerBlock, shapesGraph));
}
else
{
_rdfStoreConnector.CreateNamedGraph(graphNameUri);
LogAnalytics("Upload MD", resourceId, path, user);
LogAnalytics("Upload MD", resourceId, path, user, GetMetadataCompleteness(innerBlock, shapesGraph));
}
// BaseUri must be set for the sparql query
@@ -330,7 +346,8 @@ namespace Coscine.Api.Tree.Controllers
/// <param name="resourceId">Resource of the id</param>
/// <param name="filename">Name of the file</param>
/// <param name="user">User object</param>
private void LogAnalytics(string operation, string resourceId, string filename, User user)
/// <param name="metadataCompleteness">Metadata Completeness</param>
private void LogAnalytics(string operation, string resourceId, string filename, User user, string metadataCompleteness = null)
{
if (CoscineLoggerConfiguration.IsLogLevelActivated(LogType.Analytics))
{
@@ -340,8 +357,27 @@ namespace Coscine.Api.Tree.Controllers
_analyticsLogObject.ResourceId = resourceId;
_analyticsLogObject.ProjectId = _projectResourceModel.GetProjectForResource(new Guid(resourceId)).ToString();
_analyticsLogObject.RoleId = _projectRoleModel.GetGetUserRoleForProject(new Guid(_analyticsLogObject.ProjectId), user.Id).ToString();
_analyticsLogObject.ApplicationsProfile = _resourceModel.CreateReturnObjectFromDatabaseObject(_resourceModel.GetById(new Guid(resourceId))).ApplicationProfile;
_analyticsLogObject.MetadataCompleteness = metadataCompleteness;
_coscineLogger.AnalyticsLog(_analyticsLogObject);
}
}
/// <summary>
/// Gets metadata completeness by comparing submitted values to the application profile specific shape graph
/// </summary>
/// <param name="valueTokens"></param>
/// <param name="shapesGraph"></param>
/// <returns></returns>
private string GetMetadataCompleteness (JToken valueTokens, IGraph shapesGraph)
{
NodeFactory nodeFactory = new NodeFactory();
UriNode uriNode = (UriNode)nodeFactory.CreateUriNode(new Uri("http://www.w3.org/ns/shacl#property"));
int total = shapesGraph.GetTriplesWithPredicate(uriNode).Count();
int present = valueTokens.Count();
return $"{present}/{total}";
}
}
}
Loading