From 63755987f31d3b748937cfd73400b0d5be0d5472 Mon Sep 17 00:00:00 2001 From: matthew-a-dunlap Date: Fri, 1 Mar 2019 18:21:19 -0500 Subject: [PATCH] MDC expanded dataset api logging #4821 --- .../admin/counter-processor-config.yaml | 4 +- scripts/vagrant/counter-processor-config.yaml | 37 ++++++++++--------- .../harvard/iq/dataverse/api/Datasets.java | 24 +++++++----- .../MakeDataCountLoggingServiceBean.java | 10 ++++- 4 files changed, 45 insertions(+), 30 deletions(-) diff --git a/doc/sphinx-guides/source/_static/admin/counter-processor-config.yaml b/doc/sphinx-guides/source/_static/admin/counter-processor-config.yaml index 995e289846e..fc47b0f4e9a 100644 --- a/doc/sphinx-guides/source/_static/admin/counter-processor-config.yaml +++ b/doc/sphinx-guides/source/_static/admin/counter-processor-config.yaml @@ -11,8 +11,8 @@ path_types: investigations: - ^.*/dataset.xhtml\S*$ - ^.*/file.xhtml\S*$ - - ^.*/api/datasets/export\S*$ - - ^.*/api/v1/datasets/export\S*$ + - ^.*/api/datasets\S*$ + - ^.*/api/v1/datasets\S*$ ## Below historic regex for testing #- ^/api/datasets/[^\/]+$ #- ^/api/versions/\d+$ diff --git a/scripts/vagrant/counter-processor-config.yaml b/scripts/vagrant/counter-processor-config.yaml index a75df9c587e..4227de89f40 100644 --- a/scripts/vagrant/counter-processor-config.yaml +++ b/scripts/vagrant/counter-processor-config.yaml @@ -7,24 +7,27 @@ log_name_pattern: sample_logs/counter_(yyyy-mm-dd).log # Dataverse Note: the url matches on this does not include the query params, so dataset.xhtml\S+ will not match path_types: investigations: - - ^/dataset.xhtml\S*$ - - ^/file.xhtml\S*$ - # Below historic regex for testing - - ^/api/datasets/[^\/]+$ - - ^/api/versions/\d+$ - - ^/stash/dataset/\S+$ - - ^/stash/data_paper/\S+$ + - ^.*/dataset.xhtml\S*$ + - ^.*/file.xhtml\S*$ + - ^.*/api/datasets\S*$ + - ^.*/api/v1/datasets\S*$ + ## Below historic regex for testing + #- ^/api/datasets/[^\/]+$ + #- ^/api/versions/\d+$ + #- ^/stash/dataset/\S+$ + #- ^/stash/data_paper/\S+$ requests: - - ^/api/access/datafile\S+$ - # Below historic regex for testing - - ^/api/datasets/[^\/]+/download$ - - ^/api/versions/\d+/download$ - - ^/api/downloads/\d+$ - - ^/stash/downloads/download_resource/\d+$ - - ^/stash/downloads/file_download/\d+$ - - ^/stash/downloads/file_stream/\d+$ - - ^/stash/downloads/async_request/\d+$ - - ^/stash/share/\S+$ + - ^.*/api/access/datafile\S+$ + - ^.*/api/v1/access/datafile\S+$ + ## Below historic regex for testing + #- ^/api/datasets/[^\/]+/download$ + #- ^/api/versions/\d+/download$ + #- ^/api/downloads/\d+$ + #- ^/stash/downloads/download_resource/\d+$ + #- ^/stash/downloads/file_download/\d+$ + #- ^/stash/downloads/file_stream/\d+$ + #- ^/stash/downloads/async_request/\d+$ + #- ^/stash/share/\S+$ # Robots and machines urls are urls where the script can download a list of regular expressions to determine # if something is a robot or machine user-agent. The text file has one regular expression per line diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java b/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java index 98dc33f28e6..6ba5ba41df8 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java @@ -323,9 +323,9 @@ public Response listVersions( @PathParam("id") String id ) { @GET @Path("{id}/versions/{versionId}") - public Response getVersion( @PathParam("id") String datasetId, @PathParam("versionId") String versionId) { + public Response getVersion( @PathParam("id") String datasetId, @PathParam("versionId") String versionId, @Context UriInfo uriInfo, @Context HttpHeaders headers) { return allowCors(response( req -> { - DatasetVersion dsv = getDatasetVersionOrDie(req, versionId, findDatasetOrDie(datasetId)); + DatasetVersion dsv = getDatasetVersionOrDie(req, versionId, findDatasetOrDie(datasetId), uriInfo, headers); return (dsv == null || dsv.getId() == null) ? notFound("Dataset version not found") : ok(json(dsv)); })); @@ -333,17 +333,17 @@ public Response getVersion( @PathParam("id") String datasetId, @PathParam("versi @GET @Path("{id}/versions/{versionId}/files") - public Response getVersionFiles( @PathParam("id") String datasetId, @PathParam("versionId") String versionId) { + public Response getVersionFiles( @PathParam("id") String datasetId, @PathParam("versionId") String versionId, @Context UriInfo uriInfo, @Context HttpHeaders headers) { return allowCors(response( req -> ok( jsonFileMetadatas( - getDatasetVersionOrDie(req, versionId, findDatasetOrDie(datasetId)).getFileMetadatas())))); + getDatasetVersionOrDie(req, versionId, findDatasetOrDie(datasetId), uriInfo, headers).getFileMetadatas())))); } @GET @Path("{id}/versions/{versionId}/metadata") - public Response getVersionMetadata( @PathParam("id") String datasetId, @PathParam("versionId") String versionId) { + public Response getVersionMetadata( @PathParam("id") String datasetId, @PathParam("versionId") String versionId, @Context UriInfo uriInfo, @Context HttpHeaders headers) { return allowCors(response( req -> ok( jsonByBlocks( - getDatasetVersionOrDie(req, versionId, findDatasetOrDie(datasetId) ) + getDatasetVersionOrDie(req, versionId, findDatasetOrDie(datasetId), uriInfo, headers ) .getDatasetFields())))); } @@ -351,10 +351,12 @@ public Response getVersionMetadata( @PathParam("id") String datasetId, @PathPara @Path("{id}/versions/{versionNumber}/metadata/{block}") public Response getVersionMetadataBlock( @PathParam("id") String datasetId, @PathParam("versionNumber") String versionNumber, - @PathParam("block") String blockName ) { + @PathParam("block") String blockName, + @Context UriInfo uriInfo, + @Context HttpHeaders headers ) { return allowCors(response( req -> { - DatasetVersion dsv = getDatasetVersionOrDie(req, versionNumber, findDatasetOrDie(datasetId) ); + DatasetVersion dsv = getDatasetVersionOrDie(req, versionNumber, findDatasetOrDie(datasetId), uriInfo, headers ); Map> fieldsByBlock = DatasetField.groupByBlock(dsv.getDatasetFields()); for ( Map.Entry> p : fieldsByBlock.entrySet() ) { @@ -1418,7 +1420,7 @@ private T handleVersion( String versionId, DsVersionHandler hdl ) } } - private DatasetVersion getDatasetVersionOrDie( final DataverseRequest req, String versionNumber, final Dataset ds ) throws WrappedResponse { + private DatasetVersion getDatasetVersionOrDie( final DataverseRequest req, String versionNumber, final Dataset ds, UriInfo uriInfo, HttpHeaders headers) throws WrappedResponse { DatasetVersion dsv = execCommand( handleVersion(versionNumber, new DsVersionHandler>(){ @Override @@ -1444,6 +1446,10 @@ public Command handleLatestPublished() { if ( dsv == null || dsv.getId() == null ) { throw new WrappedResponse( notFound("Dataset version " + versionNumber + " of dataset " + ds.getId() + " not found") ); } + + MakeDataCountLoggingServiceBean.MakeDataCountEntry entry = new MakeDataCountEntry(uriInfo, headers, dvRequestService, ds); + mdcLogService.logEntry(entry); + return dsv; } diff --git a/src/main/java/edu/harvard/iq/dataverse/makedatacount/MakeDataCountLoggingServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/makedatacount/MakeDataCountLoggingServiceBean.java index 2474211a4ec..e1a635a9d6c 100644 --- a/src/main/java/edu/harvard/iq/dataverse/makedatacount/MakeDataCountLoggingServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/makedatacount/MakeDataCountLoggingServiceBean.java @@ -96,10 +96,16 @@ public MakeDataCountEntry(FacesContext fc, DataverseRequestServiceBean dvRequest setPublisherId("tbd"); //"tbd" is a special case in counter processor that gives values that pass MDC. setTitle(publishedVersion.getTitle()); setVersion(String.valueOf(publishedVersion.getVersionNumber())); - setPublicationYear(new SimpleDateFormat("yyyy").format(publishedVersion.getReleaseTime())); + + Date releaseTime = publishedVersion.getReleaseTime(); + if(null == releaseTime) { //Seems to be null when called from Datasets api + releaseTime = publishedVersion.getLastUpdateTime(); + } + setPublicationYear(new SimpleDateFormat("yyyy").format(releaseTime)); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); format.setTimeZone(TimeZone.getTimeZone("GMT")); - setPublicationDate(format.format(publishedVersion.getReleaseTime())); + setPublicationDate(format.format(releaseTime)); } if(dvRequestService != null) {