{"action":"created","comment":{"url":"https://api.github.com/repos/DSpace/DSpace/pulls/comments/35850236","id":35850236,"diff_hunk":"@@ -0,0 +1,267 @@\n+/**\n+ * The contents of this file are subject to the license and copyright\n+ * detailed in the LICENSE and NOTICE files at the root of the source\n+ * tree and available online at\n+ *\n+ * http://www.dspace.org/license/\n+ *\n+ * by lindat-dev team\n+ */\n+package org.dspace.health;\n+\n+import org.apache.commons.io.FileUtils;\n+import org.dspace.content.Community;\n+import org.dspace.content.Item;\n+import org.dspace.content.ItemIterator;\n+import org.dspace.content.Metadatum;\n+import org.dspace.core.Context;\n+import org.dspace.storage.rdbms.DatabaseManager;\n+import org.dspace.storage.rdbms.TableRow;\n+import org.dspace.storage.rdbms.TableRowIterator;\n+\n+import java.sql.SQLException;\n+import java.util.ArrayList;\n+import java.util.HashMap;\n+import java.util.List;\n+import java.util.Map;\n+\n+public class Core {\n+\n+    // get info\n+    //\n+    public static String getCollectionSizesInfo() throws SQLException {\n+        String ret = \"\";\n+        List<TableRow> rows = sql(\n+            \"SELECT \"\n+                + \"(SELECT text_value FROM metadatavalue \"\n+                + \"WHERE metadata_field_id=64 AND resource_type_id=3 AND resource_id=col.collection_id) AS name, \"\n+                + \"SUM(bit.size_bytes) AS sum \"\n+                + \"FROM collection2item col, item2bundle item, bundle2bitstream bun, bitstream bit \"\n+                + \"WHERE col.item_id=item.item_id AND item.bundle_id=bun.bundle_id AND bun.bitstream_id=bit.bitstream_id \"\n+                + \"GROUP BY col.collection_id;\");\n+        long total_size = 0;\n+        for (TableRow row : rows) {\n+            double size = row.getLongColumn(\"sum\") / (1024. * 1024.);\n+            total_size += size;\n+            ret += String.format(\n+                \"\\t%s:  %s\\n\", row.getStringColumn(\"name\"), FileUtils.byteCountToDisplaySize((long)size));\n+        }\n+        ret += String.format(\n+            \"Total size:              %s\\n\", FileUtils.byteCountToDisplaySize(total_size));\n+\n+        ret += String.format(\n+            \"Resource without policy: %d\\n\", getBitstreamsWithoutPolicyCount());\n+\n+        ret += String.format(\n+            \"Deleted bitstreams:      %d\\n\", getBitstreamsDeletedCount());\n+\n+        rows = getBitstreamOrphansRows();\n+        String list_str = \"\";\n+        for (TableRow row : rows) {\n+            list_str += String.format(\"%d, \", row.getIntColumn(\"bitstream_id\"));\n+        }\n+        ret += String.format(\n+            \"Orphan bitstreams:       %d [%s]\\n\", rows.size(), list_str);\n+\n+        return ret;\n+    }\n+\n+    public static String getObjectSizesInfo() throws SQLException {\n+        String ret = \"\";\n+        Context c = new Context();\n+\n+        for (String tb : new String[] { \"bitstream\", \"bundle\", \"collection\",\n+            \"community\", \"dcvalue\", \"eperson\", \"item\", \"handle\",\n+            \"epersongroup\", \"workflowitem\", \"workspaceitem\", }) {\n+            TableRowIterator irows = DatabaseManager.query(c,\n+                \"SELECT COUNT(*) from \" + tb);\n+            List<TableRow> rows = irows.toList();\n+            ret += String.format(\"Count %s: %s\\n\", tb,\n+                String.valueOf(rows.get(0).getLongColumn(\"count\")));\n+        }\n+\n+        c.complete();\n+        return ret;\n+    }\n+\n+\n+    // get objects\n+    //\n+\n+    public static List<TableRow> getWorkspaceItemsRows() throws SQLException {\n+        return sql(\"SELECT stage_reached, count(1) AS cnt FROM workspaceitem GROUP BY stage_reached ORDER BY stage_reached;\");\n+    }\n+\n+    public static List<TableRow> getBitstreamOrphansRows() throws SQLException {\n+        return sql(\"SELECT bitstream_id FROM bitstream WHERE deleted<>true AND bitstream_id \"\n+            + \"NOT IN (\"\n+            + \"SELECT bitstream_id FROM bundle2bitstream \"\n+            + \"UNION SELECT logo_bitstream_id FROM community WHERE logo_bitstream_id IS NOT NULL \"\n+            + \"UNION SELECT primary_bitstream_id FROM bundle WHERE primary_bitstream_id IS NOT NULL ORDER BY bitstream_id \"\n+            + \")\");\n+\n+    }\n+\n+    public static List<TableRow> getSubscribersRows() throws SQLException {\n+        return sql(\"SELECT DISTINCT ON (eperson_id) eperson_id FROM subscription\");\n+    }\n+\n+    public static List<TableRow> getSubscribedCollectionsRows() throws SQLException {\n+        return sql(\"SELECT DISTINCT ON (collection_id) collection_id FROM subscription\");\n+    }\n+\n+    public static List<TableRow> getHandlesInvalidRows() throws SQLException {\n+        List<TableRow> rows = sql(\"SELECT * FROM handle \"\n+            + \" WHERE NOT (\"\n+            + \"     (handle IS NOT NULL AND resource_type_id IS NOT NULL AND resource_id IS NOT NULL)\"\n+            + \" OR \" + \"     (handle IS NOT NULL AND url IS NOT NULL)\"\n+            + \" ) \");\n+        return rows;\n+    }\n+\n+    // get sizes\n+    //\n+\n+    public static int getItemsTotalCount() throws SQLException {\n+        int total = 0;\n+        for (java.util.Map.Entry<String, Integer> name_count : getCommunities()) {\n+            total += name_count.getValue();\n+        }\n+        return total;\n+    }\n+\n+    public static int getWorkflowItemsCount() throws SQLException {\n+        return sql(\"SELECT * FROM workflowitem;\").size();\n+    }\n+\n+    public static int getNotArchivedItemsCount() throws SQLException {\n+        return sql(\n+            \"SELECT * FROM item WHERE in_archive=false AND withdrawn=false\").size();\n+    }\n+\n+    public static int getWithdrawnItemsCount() throws SQLException {\n+        return sql(\"SELECT * FROM item WHERE withdrawn=true\").size();\n+    }\n+\n+    public static int getBitstreamsWithoutPolicyCount() throws SQLException {\n+        return sql(\n+            \"SELECT bitstream_id FROM bitstream WHERE deleted<>true AND bitstream_id NOT IN \"\n+                + \"(SELECT resource_id FROM resourcepolicy WHERE resource_type_id=0)\")\n+            .size();\n+    }\n+\n+    public static int getBitstreamsDeletedCount() throws SQLException {\n+        return sql(\"SELECT * FROM bitstream WHERE deleted=true\").size();\n+    }\n+\n+    public static long getHandlesTotalCount() throws SQLException {\n+        List<TableRow> rows = sql(\"SELECT count(1) AS cnt FROM handle\");\n+        return rows.get(0).getLongColumn(\"cnt\");\n+    }\n+\n+\n+    // get more complex information\n+    //\n+\n+    public static List<Map.Entry<String, Integer>> getCommunities()\n+        throws SQLException {\n+\n+        List<Map.Entry<String, Integer>> cl = new java.util.ArrayList<>();\n+        Context context = new Context();\n+        Community[] top_communities = Community.findAllTop(context);\n+        for (Community c : top_communities) {\n+            cl.add(\n+                new java.util.AbstractMap.SimpleEntry<>(c.getName(), c.countItems())\n+            );\n+        }\n+        context.complete();\n+        return cl;\n+    }\n+\n+    public static List<String> getEmptyGroups() throws SQLException {\n+        List<String> ret = new ArrayList<>();\n+        Context c = new Context();\n+        TableRowIterator irows = DatabaseManager\n+            .query(c,\n+                \"SELECT eperson_group_id, \"\n+                    + \"(SELECT text_value FROM metadatavalue \"\n+                    + \"WHERE metadata_field_id=64 AND resource_type_id=6 AND resource_id=eperson_group_id) AS name \"","path":"dspace-api/src/main/java/org/dspace/health/Core.java","position":188,"original_position":188,"commit_id":"5714a62cc0710e938a920eaadc30dccb7a8fedde","original_commit_id":"5714a62cc0710e938a920eaadc30dccb7a8fedde","user":{"login":"helix84","id":201026,"avatar_url":"https://avatars.githubusercontent.com/u/201026?v=3","gravatar_id":"","url":"https://api.github.com/users/helix84","html_url":"https://github.com/helix84","followers_url":"https://api.github.com/users/helix84/followers","following_url":"https://api.github.com/users/helix84/following{/other_user}","gists_url":"https://api.github.com/users/helix84/gists{/gist_id}","starred_url":"https://api.github.com/users/helix84/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/helix84/subscriptions","organizations_url":"https://api.github.com/users/helix84/orgs","repos_url":"https://api.github.com/users/helix84/repos","events_url":"https://api.github.com/users/helix84/events{/privacy}","received_events_url":"https://api.github.com/users/helix84/received_events","type":"User","site_admin":false},"body":"SELECT eperson_group_id, \r\n(SELECT text_value FROM metadatavalue \r\nWHERE metadata_field_id=(SELECT metadata_field_id FROM metadatafieldregistry WHERE element='title' AND qualifier IS NULL AND metadata_schema_id=(SELECT metadata_schema_id FROM metadataschemaregistry WHERE short_id='dc')) AND resource_type_id=6 AND resource_id=eperson_group_id) AS name \r\nFROM epersongroup \r\nWHERE eperson_group_id NOT IN (SELECT eperson_group_id FROM epersongroup2eperson)","created_at":"2015-07-30T08:49:22Z","updated_at":"2015-07-30T08:49:22Z","html_url":"https://github.com/DSpace/DSpace/pull/994#discussion_r35850236","pull_request_url":"https://api.github.com/repos/DSpace/DSpace/pulls/994","_links":{"self":{"href":"https://api.github.com/repos/DSpace/DSpace/pulls/comments/35850236"},"html":{"href":"https://github.com/DSpace/DSpace/pull/994#discussion_r35850236"},"pull_request":{"href":"https://api.github.com/repos/DSpace/DSpace/pulls/994"}}},"pull_request":{"url":"https://api.github.com/repos/DSpace/DSpace/pulls/994","id":40221880,"html_url":"https://github.com/DSpace/DSpace/pull/994","diff_url":"https://github.com/DSpace/DSpace/pull/994.diff","patch_url":"https://github.com/DSpace/DSpace/pull/994.patch","issue_url":"https://api.github.com/repos/DSpace/DSpace/issues/994","number":994,"state":"open","locked":false,"title":"DS-2659 : introducing new extensible health check platform emailing r…","user":{"login":"vidiecan","id":332350,"avatar_url":"https://avatars.githubusercontent.com/u/332350?v=3","gravatar_id":"","url":"https://api.github.com/users/vidiecan","html_url":"https://github.com/vidiecan","followers_url":"https://api.github.com/users/vidiecan/followers","following_url":"https://api.github.com/users/vidiecan/following{/other_user}","gists_url":"https://api.github.com/users/vidiecan/gists{/gist_id}","starred_url":"https://api.github.com/users/vidiecan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vidiecan/subscriptions","organizations_url":"https://api.github.com/users/vidiecan/orgs","repos_url":"https://api.github.com/users/vidiecan/repos","events_url":"https://api.github.com/users/vidiecan/events{/privacy}","received_events_url":"https://api.github.com/users/vidiecan/received_events","type":"User","site_admin":false},"body":"…eports on a regular basis","created_at":"2015-07-17T11:18:12Z","updated_at":"2015-07-30T08:49:22Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6a45a0cdf3506d689777b05fdb21c07188140bb9","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/DSpace/DSpace/pulls/994/commits","review_comments_url":"https://api.github.com/repos/DSpace/DSpace/pulls/994/comments","review_comment_url":"https://api.github.com/repos/DSpace/DSpace/pulls/comments{/number}","comments_url":"https://api.github.com/repos/DSpace/DSpace/issues/994/comments","statuses_url":"https://api.github.com/repos/DSpace/DSpace/statuses/5714a62cc0710e938a920eaadc30dccb7a8fedde","head":{"label":"ufal:DS-2659","ref":"DS-2659","sha":"5714a62cc0710e938a920eaadc30dccb7a8fedde","user":{"login":"ufal","id":5220747,"avatar_url":"https://avatars.githubusercontent.com/u/5220747?v=3","gravatar_id":"","url":"https://api.github.com/users/ufal","html_url":"https://github.com/ufal","followers_url":"https://api.github.com/users/ufal/followers","following_url":"https://api.github.com/users/ufal/following{/other_user}","gists_url":"https://api.github.com/users/ufal/gists{/gist_id}","starred_url":"https://api.github.com/users/ufal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ufal/subscriptions","organizations_url":"https://api.github.com/users/ufal/orgs","repos_url":"https://api.github.com/users/ufal/repos","events_url":"https://api.github.com/users/ufal/events{/privacy}","received_events_url":"https://api.github.com/users/ufal/received_events","type":"Organization","site_admin":false},"repo":{"id":33369437,"name":"lindat-dspace","full_name":"ufal/lindat-dspace","owner":{"login":"ufal","id":5220747,"avatar_url":"https://avatars.githubusercontent.com/u/5220747?v=3","gravatar_id":"","url":"https://api.github.com/users/ufal","html_url":"https://github.com/ufal","followers_url":"https://api.github.com/users/ufal/followers","following_url":"https://api.github.com/users/ufal/following{/other_user}","gists_url":"https://api.github.com/users/ufal/gists{/gist_id}","starred_url":"https://api.github.com/users/ufal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ufal/subscriptions","organizations_url":"https://api.github.com/users/ufal/orgs","repos_url":"https://api.github.com/users/ufal/repos","events_url":"https://api.github.com/users/ufal/events{/privacy}","received_events_url":"https://api.github.com/users/ufal/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ufal/lindat-dspace","description":"LINDAT/CLARIN digital library based on DSpace","fork":true,"url":"https://api.github.com/repos/ufal/lindat-dspace","forks_url":"https://api.github.com/repos/ufal/lindat-dspace/forks","keys_url":"https://api.github.com/repos/ufal/lindat-dspace/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ufal/lindat-dspace/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ufal/lindat-dspace/teams","hooks_url":"https://api.github.com/repos/ufal/lindat-dspace/hooks","issue_events_url":"https://api.github.com/repos/ufal/lindat-dspace/issues/events{/number}","events_url":"https://api.github.com/repos/ufal/lindat-dspace/events","assignees_url":"https://api.github.com/repos/ufal/lindat-dspace/assignees{/user}","branches_url":"https://api.github.com/repos/ufal/lindat-dspace/branches{/branch}","tags_url":"https://api.github.com/repos/ufal/lindat-dspace/tags","blobs_url":"https://api.github.com/repos/ufal/lindat-dspace/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ufal/lindat-dspace/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ufal/lindat-dspace/git/refs{/sha}","trees_url":"https://api.github.com/repos/ufal/lindat-dspace/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ufal/lindat-dspace/statuses/{sha}","languages_url":"https://api.github.com/repos/ufal/lindat-dspace/languages","stargazers_url":"https://api.github.com/repos/ufal/lindat-dspace/stargazers","contributors_url":"https://api.github.com/repos/ufal/lindat-dspace/contributors","subscribers_url":"https://api.github.com/repos/ufal/lindat-dspace/subscribers","subscription_url":"https://api.github.com/repos/ufal/lindat-dspace/subscription","commits_url":"https://api.github.com/repos/ufal/lindat-dspace/commits{/sha}","git_commits_url":"https://api.github.com/repos/ufal/lindat-dspace/git/commits{/sha}","comments_url":"https://api.github.com/repos/ufal/lindat-dspace/comments{/number}","issue_comment_url":"https://api.github.com/repos/ufal/lindat-dspace/issues/comments{/number}","contents_url":"https://api.github.com/repos/ufal/lindat-dspace/contents/{+path}","compare_url":"https://api.github.com/repos/ufal/lindat-dspace/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ufal/lindat-dspace/merges","archive_url":"https://api.github.com/repos/ufal/lindat-dspace/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ufal/lindat-dspace/downloads","issues_url":"https://api.github.com/repos/ufal/lindat-dspace/issues{/number}","pulls_url":"https://api.github.com/repos/ufal/lindat-dspace/pulls{/number}","milestones_url":"https://api.github.com/repos/ufal/lindat-dspace/milestones{/number}","notifications_url":"https://api.github.com/repos/ufal/lindat-dspace/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ufal/lindat-dspace/labels{/name}","releases_url":"https://api.github.com/repos/ufal/lindat-dspace/releases{/id}","created_at":"2015-04-03T15:30:36Z","updated_at":"2015-06-11T18:33:50Z","pushed_at":"2015-07-30T08:44:42Z","git_url":"git://github.com/ufal/lindat-dspace.git","ssh_url":"git@github.com:ufal/lindat-dspace.git","clone_url":"https://github.com/ufal/lindat-dspace.git","svn_url":"https://github.com/ufal/lindat-dspace","homepage":"http://lindat.cz","size":134187,"stargazers_count":7,"watchers_count":7,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":67,"forks":2,"open_issues":67,"watchers":7,"default_branch":"lindat"}},"base":{"label":"DSpace:master","ref":"master","sha":"c847514e7e747611a76277cffc25fe1c15a48565","user":{"login":"DSpace","id":428620,"avatar_url":"https://avatars.githubusercontent.com/u/428620?v=3","gravatar_id":"","url":"https://api.github.com/users/DSpace","html_url":"https://github.com/DSpace","followers_url":"https://api.github.com/users/DSpace/followers","following_url":"https://api.github.com/users/DSpace/following{/other_user}","gists_url":"https://api.github.com/users/DSpace/gists{/gist_id}","starred_url":"https://api.github.com/users/DSpace/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DSpace/subscriptions","organizations_url":"https://api.github.com/users/DSpace/orgs","repos_url":"https://api.github.com/users/DSpace/repos","events_url":"https://api.github.com/users/DSpace/events{/privacy}","received_events_url":"https://api.github.com/users/DSpace/received_events","type":"Organization","site_admin":false},"repo":{"id":3743376,"name":"DSpace","full_name":"DSpace/DSpace","owner":{"login":"DSpace","id":428620,"avatar_url":"https://avatars.githubusercontent.com/u/428620?v=3","gravatar_id":"","url":"https://api.github.com/users/DSpace","html_url":"https://github.com/DSpace","followers_url":"https://api.github.com/users/DSpace/followers","following_url":"https://api.github.com/users/DSpace/following{/other_user}","gists_url":"https://api.github.com/users/DSpace/gists{/gist_id}","starred_url":"https://api.github.com/users/DSpace/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DSpace/subscriptions","organizations_url":"https://api.github.com/users/DSpace/orgs","repos_url":"https://api.github.com/users/DSpace/repos","events_url":"https://api.github.com/users/DSpace/events{/privacy}","received_events_url":"https://api.github.com/users/DSpace/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/DSpace/DSpace","description":"(Official) The DSpace digital asset management system that powers your Institutional Repository","fork":false,"url":"https://api.github.com/repos/DSpace/DSpace","forks_url":"https://api.github.com/repos/DSpace/DSpace/forks","keys_url":"https://api.github.com/repos/DSpace/DSpace/keys{/key_id}","collaborators_url":"https://api.github.com/repos/DSpace/DSpace/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/DSpace/DSpace/teams","hooks_url":"https://api.github.com/repos/DSpace/DSpace/hooks","issue_events_url":"https://api.github.com/repos/DSpace/DSpace/issues/events{/number}","events_url":"https://api.github.com/repos/DSpace/DSpace/events","assignees_url":"https://api.github.com/repos/DSpace/DSpace/assignees{/user}","branches_url":"https://api.github.com/repos/DSpace/DSpace/branches{/branch}","tags_url":"https://api.github.com/repos/DSpace/DSpace/tags","blobs_url":"https://api.github.com/repos/DSpace/DSpace/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/DSpace/DSpace/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/DSpace/DSpace/git/refs{/sha}","trees_url":"https://api.github.com/repos/DSpace/DSpace/git/trees{/sha}","statuses_url":"https://api.github.com/repos/DSpace/DSpace/statuses/{sha}","languages_url":"https://api.github.com/repos/DSpace/DSpace/languages","stargazers_url":"https://api.github.com/repos/DSpace/DSpace/stargazers","contributors_url":"https://api.github.com/repos/DSpace/DSpace/contributors","subscribers_url":"https://api.github.com/repos/DSpace/DSpace/subscribers","subscription_url":"https://api.github.com/repos/DSpace/DSpace/subscription","commits_url":"https://api.github.com/repos/DSpace/DSpace/commits{/sha}","git_commits_url":"https://api.github.com/repos/DSpace/DSpace/git/commits{/sha}","comments_url":"https://api.github.com/repos/DSpace/DSpace/comments{/number}","issue_comment_url":"https://api.github.com/repos/DSpace/DSpace/issues/comments{/number}","contents_url":"https://api.github.com/repos/DSpace/DSpace/contents/{+path}","compare_url":"https://api.github.com/repos/DSpace/DSpace/compare/{base}...{head}","merges_url":"https://api.github.com/repos/DSpace/DSpace/merges","archive_url":"https://api.github.com/repos/DSpace/DSpace/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/DSpace/DSpace/downloads","issues_url":"https://api.github.com/repos/DSpace/DSpace/issues{/number}","pulls_url":"https://api.github.com/repos/DSpace/DSpace/pulls{/number}","milestones_url":"https://api.github.com/repos/DSpace/DSpace/milestones{/number}","notifications_url":"https://api.github.com/repos/DSpace/DSpace/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/DSpace/DSpace/labels{/name}","releases_url":"https://api.github.com/repos/DSpace/DSpace/releases{/id}","created_at":"2012-03-16T21:44:52Z","updated_at":"2015-07-12T05:19:53Z","pushed_at":"2015-07-30T08:36:13Z","git_url":"git://github.com/DSpace/DSpace.git","ssh_url":"git@github.com:DSpace/DSpace.git","clone_url":"https://github.com/DSpace/DSpace.git","svn_url":"https://github.com/DSpace/DSpace","homepage":"https://wiki.duraspace.org/display/DSDOC5x/Introduction","size":211510,"stargazers_count":169,"watchers_count":169,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":412,"mirror_url":null,"open_issues_count":106,"forks":412,"open_issues":106,"watchers":169,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/DSpace/DSpace/pulls/994"},"html":{"href":"https://github.com/DSpace/DSpace/pull/994"},"issue":{"href":"https://api.github.com/repos/DSpace/DSpace/issues/994"},"comments":{"href":"https://api.github.com/repos/DSpace/DSpace/issues/994/comments"},"review_comments":{"href":"https://api.github.com/repos/DSpace/DSpace/pulls/994/comments"},"review_comment":{"href":"https://api.github.com/repos/DSpace/DSpace/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/DSpace/DSpace/pulls/994/commits"},"statuses":{"href":"https://api.github.com/repos/DSpace/DSpace/statuses/5714a62cc0710e938a920eaadc30dccb7a8fedde"}}}}