Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make Data Count support: backend #4821 #5329

Merged
merged 95 commits into from Mar 15, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
4dd10bd
stub our docs and API for Make Data Count #4821
pdurbin Nov 19, 2018
17cbf37
clarify that we'll send citations to DataCite #4821
pdurbin Nov 29, 2018
5f59a8c
link to HTML version of CoP #4821
pdurbin Dec 6, 2018
e8ac623
add "datasetmetrics" table #4821
pdurbin Dec 7, 2018
02c5538
stub out counter-processor setup in Vagrant #4821 #5385
pdurbin Dec 10, 2018
e835e06
stand up counter-processor, continued #4821
pdurbin Dec 11, 2018
9f7c990
add SUSHI JSON example and stub out parsing of it #4821
pdurbin Dec 12, 2018
ac5e29d
add draft architecture drawing #4821
pdurbin Dec 21, 2018
b76d92c
Merge branch 'develop' into 4821-make-data-count
Jan 2, 2019
8d1c6ab
Merge branch '5384-data-usage-logs-MDC' into 4821-make-data-count
Jan 2, 2019
af728cf
Temp fix null erroring for MDC #5384 #4821
Jan 2, 2019
4416b41
MDC log var collection in construct #5384 #4821
Jan 2, 2019
dc11ec1
MDC log dl with guestbook #4821 #5384
Jan 4, 2019
e36c0ed
#4821 parse sample json add dummy data api
sekmiller Jan 4, 2019
61f78d7
#4821 remove extraneous test code
sekmiller Jan 4, 2019
0d38f10
#4821 check for existing metrics records
sekmiller Jan 4, 2019
c035dbd
MDC access api #4821 #5384
Jan 4, 2019
85bb860
Merge branch '4821-make-data-count' of https://github.com/IQSS/datave…
Jan 4, 2019
e41ab08
MDC File page and correct API #4821 #5384
Jan 4, 2019
c17e3e2
MDC daily logs and cleanup #4821 #5384
Jan 4, 2019
0bfd936
MDC Path to log files #4821 #5384
Jan 7, 2019
184580d
change addDummyData to addUsageMetricsFromSushiReport #4821
pdurbin Jan 7, 2019
bd7ff84
MDC log dl reqUrl etc part1 #4821 #5384
Jan 7, 2019
b60a679
Merge branch '4821-make-data-count' of https://github.com/IQSS/datave…
Jan 7, 2019
94eccc7
stub out citation parser #4821
pdurbin Jan 8, 2019
51b4ed2
MDC log dl reqUrl etc part2 #4821 #5384
Jan 8, 2019
f9b0424
download citations from DataCite hub #4821
pdurbin Jan 8, 2019
3ad3918
add note about multiple Glassfish servers, other doc tweaks #4821
pdurbin Jan 8, 2019
0e5bbd5
MDC - massaging DV logs into CP #4821 #5384
Jan 8, 2019
9e336ad
MDC restore historic regex for testing #4821 #5384
Jan 8, 2019
87b7dbd
Merge branch 'develop' into 4821-make-data-count
Jan 9, 2019
69d48c7
MDC use possibly bad publisher info to sumbit report #4821 #5384
Jan 9, 2019
830dc61
#4821 removing citations from metrics table
sekmiller Jan 10, 2019
5c0585b
Merge branch 'develop' into 4821-make-data-count
sekmiller Jan 10, 2019
3947167
#4821 Add External Citations table
sekmiller Jan 11, 2019
5e0e2e6
Merge branch 'develop' into 4821-make-data-count
sekmiller Jan 11, 2019
004e16a
add new SUSHI file to test with #4821
pdurbin Jan 14, 2019
e162839
allow year and country to be specified #4821
pdurbin Jan 15, 2019
00d85ff
#4821 fix json parser
sekmiller Jan 15, 2019
a4e9bf6
#4821 fix global id parsing
sekmiller Jan 16, 2019
0126de4
Merge branch 'develop' into 4821-make-data-count #4821
pdurbin Jan 16, 2019
e55574c
add dev page on Make Data Count #4821
pdurbin Jan 16, 2019
cf3351c
#4821 fix citation parser
sekmiller Jan 17, 2019
0bd875d
update guide. Counter Processor required #4821
pdurbin Jan 17, 2019
f28c205
link to MDC scripts, add cd #4821
pdurbin Jan 17, 2019
0b185f0
explain how to install and run Counter Processor #4821 #5440
pdurbin Jan 17, 2019
54269d9
#4821 Add query to display view/download data
sekmiller Jan 18, 2019
78b413e
#4821 simplify display query
sekmiller Jan 18, 2019
c77315e
(UNRELATED) Added missing export options to docs [#3697]
dlmurphy Jan 25, 2019
d5d5e22
(UNRELATED) export option doc fix [#3697]
dlmurphy Jan 25, 2019
544e05e
Merge branch 'develop' into 4821-make-data-count
sekmiller Jan 28, 2019
916bd87
stub out Dataset Metrics in User Guide, reorg #4821
pdurbin Jan 28, 2019
ec54e0c
Fixing syntax errors [#4821]
dlmurphy Jan 28, 2019
e151deb
Make Data Count doc edits [#4821]
dlmurphy Jan 28, 2019
47f4fda
Add note about not fixing publisher/publisher-id #4821
Jan 29, 2019
aacd279
emphasize that Handle installations can't upload to hub #4821
pdurbin Jan 29, 2019
deded79
Working fake publisher/publisher id with new comment #4821
Jan 29, 2019
7e59d5d
Test MDC logger #4821
Jan 31, 2019
76c1181
MDC clean, minor refactor, extra test #4821
Jan 31, 2019
36fa81a
add sushi example with "volume" and "machine" #4821
pdurbin Jan 31, 2019
3d7fdcc
#4821 Add Human vs. Machine metrics
sekmiller Jan 31, 2019
8c20419
not ready to process volume yet #4821
pdurbin Feb 1, 2019
1de793a
MDC config tweak and doc edits #4821
Feb 5, 2019
73d4388
Document log touching for Make Data Count #4821
Feb 5, 2019
40a96d2
Merge branch 'develop' into 4821-make-data-count
sekmiller Feb 7, 2019
1db160f
#4821 add metrics api endpoints
sekmiller Feb 8, 2019
c2b0afd
continue improving guides for Make Data Count #4821
pdurbin Feb 11, 2019
402513c
#4821 fix retrieve metrics api
sekmiller Feb 11, 2019
d68281b
only pass persistentId in dev for SUSHI file #4821
pdurbin Feb 11, 2019
96f1fbe
get APIs working without a date, more docs #4821
pdurbin Feb 11, 2019
81f8701
expose all available dataset metrics via API #4821
pdurbin Feb 12, 2019
d88c01c
Merge branch 'develop' into 4821-make-data-count #4821
pdurbin Feb 12, 2019
cc3eeba
Syntax fix (unrelated to issue)
dlmurphy Feb 14, 2019
c6eab30
Typo fix [#4821]
dlmurphy Feb 14, 2019
5b11ce3
Merge branch 'develop' into 4821-make-data-count
Feb 20, 2019
78cb180
Guides fixes #4821
Feb 20, 2019
9fc9b71
Merge branch 'develop' into 4821-make-data-count
sekmiller Feb 25, 2019
388d69a
#4821 fix add metrics endpoint for no dataset case
sekmiller Feb 25, 2019
da71e5c
#4821 fix doc for add metrics
sekmiller Feb 25, 2019
44acd97
doc improvements #4821
pdurbin Feb 25, 2019
51cfde8
have doc examples match yaml config #4821
pdurbin Feb 25, 2019
d2cf1a7
#4821 fix retrieve citations api
sekmiller Feb 26, 2019
865c99b
rename to "citationUrl" to allow for future fields #4821
pdurbin Feb 26, 2019
d97125c
more docs and debug output #4821
pdurbin Feb 26, 2019
677bf7a
add datasetexternalcitations table to diagram #4821
pdurbin Feb 26, 2019
1b527aa
capture some decisions from tech hours #4821
pdurbin Feb 26, 2019
23c4748
Merge branch 'develop' into 4821-make-data-count
sekmiller Feb 27, 2019
a92ad9d
Log metadata downloads #4821
matthew-a-dunlap Feb 28, 2019
522c26f
#4821 add support for non-country metrics
sekmiller Feb 28, 2019
545512a
MDC export regex match 0 or more #4821
matthew-a-dunlap Feb 28, 2019
f2d7d54
Revert "capture some decisions from tech hours #4821 "
pdurbin Feb 28, 2019
278568d
MDC mult ways to get datasetVersion in guestbook #4821
matthew-a-dunlap Mar 1, 2019
6375598
MDC expanded dataset api logging #4821
matthew-a-dunlap Mar 1, 2019
0b46993
MDC Missed basic dataset json api #4821
matthew-a-dunlap Mar 6, 2019
b14c921
Merge branch 'develop' into 4821-make-data-count
sekmiller Mar 8, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion conf/docker-aio/run-test-suite.sh
Expand Up @@ -8,4 +8,4 @@ fi

# Please note the "dataverse.test.baseurl" is set to run for "all-in-one" Docker environment.
# TODO: Rather than hard-coding the list of "IT" classes here, add a profile to pom.xml.
mvn test -Dtest=DataversesIT,DatasetsIT,SwordIT,AdminIT,BuiltinUsersIT,UsersIT,UtilIT,ConfirmEmailIT,FileMetadataIT,FilesIT,SearchIT,InReviewWorkflowIT,HarvestingServerIT,MoveIT -Ddataverse.test.baseurl=$dvurl
mvn test -Dtest=DataversesIT,DatasetsIT,SwordIT,AdminIT,BuiltinUsersIT,UsersIT,UtilIT,ConfirmEmailIT,FileMetadataIT,FilesIT,SearchIT,InReviewWorkflowIT,HarvestingServerIT,MoveIT,MakeDataCountApiIT -Ddataverse.test.baseurl=$dvurl
@@ -0,0 +1,67 @@
# currently no other option but to have daily logs and have year-month-day format in the name with
# 4-digit year and 2-digit month and day
# /usr/local/glassfish4/glassfish/domains/domain1/logs/counter_2019-01-11.log
#log_name_pattern: sample_logs/counter_(yyyy-mm-dd).log
log_name_pattern: /usr/local/glassfish4/glassfish/domains/domain1/logs/counter_(yyyy-mm-dd).log

# path_types regular expressions allow matching to classify page urls as either an investigation or request
# based on specific URL structure for your system.
# 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*$
- ^.*/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+$
- ^.*/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
robots_url: https://raw.githubusercontent.com/CDLUC3/Make-Data-Count/master/user-agents/lists/robot.txt
machines_url: https://raw.githubusercontent.com/CDLUC3/Make-Data-Count/master/user-agents/lists/machine.txt

# the year and month for the report you are creating.
year_month: 2019-01

# Don't put the filename extension, the code will tack on the tsv or json extension for you.
# Output formats are either tsv or json currently. TSV is currently broken until anyone accepts reports in that format.
# FIXME: "/tmp" is fine for a quick test but pick another directory that
# the "counter" user can write to and that the "glassfish" user can read from.
output_file: /tmp/make-data-count-report
output_format: json

# the name of the platform that goes into your reports
# FIXME: Change "platform" to the brand of your Dataverse installation.
platform: LibreScholar

# Don't put your api token in here if you're going to commit it, but put in separate secrets.yaml in same
# directory as the config or else set a environment variable when starting up in order to override the key.
# yaml key/values set in secrets.yaml will override one from the main config.
hub_api_token: set_me_in_secrets
# the test metrics is only for testing
# hub_base_url: https://metrics.test.datacite.org
# FIXME: change "hub_base_url" to https://api.datacite.org (production) once you have credentials.
hub_base_url: https://api.test.datacite.org
# FIXME: Change "upload_to_hub" to True when you're ready.
upload_to_hub: False

# only use this to simulate running on a date besides today
# simulate_date: 2019-01-12

maxmind_geoip_country_path: maxmind_geoip/GeoLite2-Country.mmdb
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
66 changes: 66 additions & 0 deletions doc/sphinx-guides/source/admin/img/make-data-count.uml
@@ -0,0 +1,66 @@
@startuml

skinparam BoxPadding 30

title Make Data Count components in Dataverse
autonumber "<font color=blue>"

actor user
box "Dataverse" #DDD
participant datasetPage as "dataset\npage"
participant downloadApi as "download\nAPI"
participant metricsApi as "metrics\nAPI"
participant datasetMetrics as "datasetmetrics\ntable"
participant datasetExternalCitations as "datasetexternalcitations\ntable"
participant sushiParser as "SUSHI\nparser"
participant citationParser as "citation\nparser"
end box

box "filesystem or S3" #DDD
participant log as "activity-yyyy-mm.log"
participant sushi as "sushi-yyyy-mm.json"
endbox

box "counter-processor" #DDD
participant main.py
database sqlite as "yyyy-mm.sqlite3"
end box

box "DataCite hub" #DDD
participant reports as "reports\nendpoint"
participant events as "events\nendpoint"
end box

box "Crossref" #DDD
participant crossrefApi as "Crossref\nAPI"
end box

== Activity Logging ==
user --> datasetPage : GET /dataset.xhtml
datasetPage --> log : investigation/view
user --> downloadApi : GET /api/access/datafile
downloadApi --> log : request/download

== Log Processing ==

main.py --> log : read log nightly
main.py --> sqlite : write to SQLite
main.py --> reports : send SUSHI report to DataCite hub "reports" endpoint
main.py --> sushi : write SUSHI to filesystem or S3
sushiParser --> sushi : parse SUSHI file
sushiParser --> datasetMetrics : write metrics to datasetmetrics table

== Citation Retrieval ==

events --> crossrefApi : retrieve citations periodically
citationParser --> events : retrieve citations nightly
citationParser --> datasetExternalCitations : write citations to datasetexternalcitations table

== Retrieving Usage Metrics ==

user --> metricsApi: request number of views, downloads, and citations
metricsApi --> datasetMetrics: get data from table
metricsApi --> datasetExternalCitations: get data from table
metricsApi --> user: return data

@enduml
1 change: 1 addition & 0 deletions doc/sphinx-guides/source/admin/index.rst
Expand Up @@ -18,6 +18,7 @@ This guide documents the functionality only available to superusers (such as "da
metadatacustomization
metadataexport
timers
make-data-count
integrations
geoconnect-worldmap
user-administration
Expand Down
169 changes: 169 additions & 0 deletions doc/sphinx-guides/source/admin/make-data-count.rst
@@ -0,0 +1,169 @@
Make Data Count
===============

`Make Data Count`_ is a project to collect and standardize metrics on data use, especially views, downloads, and citations. Dataverse can integrate Make Data Count to collect and display usage metrics including counts of dataset views, file downloads, and dataset citations.

.. contents:: Contents:
:local:

Introduction
------------

`Make Data Count`_ is part of a broader Research Data Alliance (RDA) `Data Usage Metrics Working Group`_ which helped to produce a specification called the `COUNTER Code of Practice for Research Data`_ (`PDF`_, `HTML`_) that Dataverse makes every effort to comply with. The Code of Practice (CoP) is built on top of existing standards such as COUNTER and SUSHI that come out of the article publishing world. The Make Data Count project has emphasized that they would like feedback on the code of practice. You can keep up to date on the Make Data Count project by subscribing to their `newsletter`_.

Architecture
------------

Dataverse installations who would like support for Make Data Count must install `Counter Processor`_, a Python project created by California Digital Library (CDL) which is part of the Make Data Count project and which runs the software in production as part of their `DASH`_ data sharing platform.

.. _Counter Processor: https://github.com/CDLUC3/counter-processor
.. _DASH: https://cdluc3.github.io/dash/

The diagram below shows how Counter Processor interacts with Dataverse and the DataCite hub, once configured. Installations of Dataverse using Handles rather than DOIs should note the limitations in the next section of this page.

|makedatacount_components|

The most important takeaways from the diagram are:

- Once enabled, Dataverse will log activity (views and downloads) to a specialized date-stamped file.
- You should run Counter Processor once a day to create reports in SUSHI (JSON) format that are saved to disk for Dataverse to process and that are sent to the DataCite hub.
- You should set up a cron job to have Dataverse process the daily SUSHI reports, updating the Dataverse database with the latest metrics.
- You should set up a cron job to have Dataverse pull the latest list of citations for each dataset on a periodic basis, perhaps weekly or daily. These citations come from Crossref via the DataCite hub.
- APIs are available in Dataverse to retrieve Make Data Count metrics: views, downloads, and citations.


Limitations for Dataverse Installations Using Handles Rather Than DOIs
----------------------------------------------------------------------

Data repositories using Handles and other identifiers are not supported by Make Data Count but in the notes_ following a July 2018 webinar, you can see the Make Data Count project's response on this topic. In short, the DataCite hub does not want to receive reports for non-DOI datasets. Additionally, citations are only available from the DataCite hub for datasets that have DOIs.

This being said, the Dataverse usage logging can still generate logs and process those logs with Counter Processor to create json that details usage on a dataset level. Dataverse can ingest this locally generated json.

When editing the ``counter-processor-config.yaml`` file mentioned below, make sure that the ``upload_to_hub`` boolean is set to ``False``.

Configuring Dataverse for Make Data Count Views and Downloads
-------------------------------------------------------------

If you haven't already, follow the steps for installing Counter Processor in the :doc:`/installation/prerequisites` section of the Installation Guide.

Enable Logging for Make Data Count
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

To make Dataverse log dataset usage (views and downloads) for Make Data Count, you must set the ``:MDCLogPath`` database setting. See :ref:`MDCLogPath` for details.

After you have your first day of logs, you can process them the next day.

Configure Counter Processor
~~~~~~~~~~~~~~~~~~~~~~~~~~~

* First, become the "counter" Unix user.

* ``sudo su - counter``

* Change to the directory where you installed Counter Processor.

* ``cd /usr/local/counter-processor-0.0.1``

* Download :download:`counter-processor-config.yaml <../_static/admin/counter-processor-config.yaml>` to ``/usr/local/counter-processor-0.0.1``.

* Edit the config file and pay particular attention to the FIXME lines.

* ``vim counter-processor-config.yaml``

Populate Views and Downloads for the First Time
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Soon we will be setting up a cron job to run nightly but we start with a single successful configuration and run of Counter Processor and calls to Dataverse APIs.

* Change to the directory where you installed Counter Processor.

* ``cd /usr/local/counter-processor-0.0.1``

* If you are running Counter Processor for the first time in the middle of a month, you will need create blank log files for the previous days. e.g.:

* ``cd /usr/local/glassfish4/glassfish/domains/domain1/logs``

* ``touch counter_2019-02-01.log``

* ``...``

* ``touch counter_2019-02-20.log``

* Run Counter Processor.

* ``CONFIG_FILE=counter-processor-config.yaml python36 main.py``

* A JSON file in SUSHI format will be created in the directory you specified under "output_file" in the config file.

* Populate views and downloads for your datasets based on the SUSHI JSON file. The "/tmp" directory is used in the example below.

* ``curl -X POST "http://localhost:8080/api/admin/makeDataCount/addUsageMetricsFromSushiReport?reportOnDisk=/tmp/make-data-count-report.json"``

* Verify that views and downloads are available via API.

* Now that views and downloads have been recorded in the Dataverse database, you should make sure you can retrieve them from a dataset or two. Use the :ref:`Dataset Metrics <dataset-metrics-api>` endpoints in the :doc:`/api/native-api` section of the API Guide.

Populate Views and Downloads Nightly
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Running ``main.py`` to create the SUSHI JSON file and the subsequent calling of the Dataverse API to process it should be added as a cron job.

Sending Usage Metrics to the DataCite Hub
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Once you are satisfied with your testing, you should contact support@datacite.org for your JSON Web Token and change "upload_to_hub" to "True" in the config file. The next time you run ``main.py`` the following metrics will be sent to the DataCite hub for each published dataset:

- Views ("investigations" in COUNTER)
- Downloads ("requests" in COUNTER)

Configuring Dataverse for Make Data Count Citations
---------------------------------------------------

Please note: as explained in the note above about limitations, this feature is not available to installations of Dataverse that use Handles.

Please note that in the curl example, Bash environment variables are used with the idea that you can set a few environment variables and copy and paste the examples as is. For example, "$DOI" could become "doi:10.5072/FK2/BL2IBM" by issuing the following export command from Bash:

``export DOI="doi:10.5072/FK2/BL2IBM"``

To confirm that the environment variable was set properly, you can use echo like this:

``echo $DOI``

On some periodic basis (perhaps weekly) you should call the following curl command for each published dataset to update the list of citations that have been made for that dataset.

``curl -X POST "http://localhost:8080/api/admin/makeDataCount/:persistentId/updateCitationsForDataset?persistentId=$DOI"``

Citations will be retrieved for each published dataset and recorded in the Dataverse database.

For how to get the citations out of Dataverse, see "Retrieving Citations for a Dataset" under :ref:`Dataset Metrics <dataset-metrics-api>` in the :doc:`/api/native-api` section of the API Guide.

Please note that while Dataverse has a metadata field for "Related Dataset" this information is not currently sent as a citation to Crossref.

Retrieving Make Data Count Metrics from the DataCite Hub
--------------------------------------------------------

The following metrics can be downloaded directly from the DataCite hub (see https://support.datacite.org/docs/eventdata-guide) for datasets hosted by Dataverse installations that have been configured to send these metrics to the hub:

- Total Views for a Dataset
- Unique Views for a Dataset
- Total Downloads for a Dataset
- Downloads for a Dataset
- Citations for a Dataset (via Crossref)

Retrieving Make Data Count Metrics from Dataverse
-------------------------------------------------

The Dataverse API endpoints for retrieving Make Data Count metrics are described below under :ref:`Dataset Metrics <dataset-metrics-api>` in the :doc:`/api/native-api` section of the API Guide.

Please note that it is also possible to retrieve metrics from the DataCite hub itself via https://api.datacite.org

.. _notes: https://docs.google.com/document/d/1b1itytDVDsI_Ni2LoxrG887YGt0zDc96tpyJEgBN9Q8/
.. _newsletter: https://makedatacount.org/contact/
.. _COUNTER Code of Practice for Research Data: https://makedatacount.org/counter-code-of-practice-for-research-data/
.. _PDF: https://doi.org/10.7287/peerj.preprints.26505v1
.. _HTML: https://www.projectcounter.org/code-of-practice-rd-sections/foreword/
.. _Make Data Count: https://makedatacount.org
.. _Data Usage Metrics Working Group: https://www.rd-alliance.org/groups/data-usage-metrics-wg

.. |makedatacount_components| image:: ./img/make-data-count.png
:class: img-responsive
4 changes: 3 additions & 1 deletion doc/sphinx-guides/source/admin/metadataexport.rst
Expand Up @@ -11,8 +11,10 @@ Publishing a dataset automatically starts a metadata export job, that will run i

- Dublin Core
- Data Documentation Initiative (DDI)
- Schema.org JSON-LD
- DataCite 4
- native JSON (Dataverse-specific)
- OAI_ORE
- Schema.org JSON-LD

A scheduled timer job that runs nightly will attempt to export any published datasets that for whatever reason haven't been exported yet. This timer is activated automatically on the deployment, or restart, of the application. So, again, no need to start or configure it manually. (See the "Application Timers" section of this guide for more information)

Expand Down
2 changes: 2 additions & 0 deletions doc/sphinx-guides/source/api/metrics.rst
@@ -1,6 +1,8 @@
Metrics API
===========

The Metrics API provides counts of downloads, datasets created, files uploaded, and more, as described below. Dataverse also supports Make Data Count, which is described in the :doc:`/admin/make-data-count` section of the Admin Guide.

.. contents:: |toctitle|
:local:

Expand Down