mirror of
https://github.com/alanorth/cgspace-notes.git
synced 2025-01-11 14:33:21 +01:00
Add notes for 2020-10-19
This commit is contained in:
parent
f182be5da0
commit
28d25cdac0
@ -410,4 +410,183 @@ user 7m59.182s
|
|||||||
sys 2m22.713s
|
sys 2m22.713s
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 2020-10-18
|
||||||
|
|
||||||
|
- Macaroni Bros wrote to me to ask why some of their CCAFS harvesting is failing
|
||||||
|
- They are scraping HTML from /browse responses like this:
|
||||||
|
|
||||||
|
https://cgspace.cgiar.org/browse?type=crpsubject&value=Climate+Change%2C+Agriculture+and+Food+Security&XML&rpp=5000
|
||||||
|
|
||||||
|
- They are using the user agent "CCAFS Website Publications importer BOT" so they are getting rate limited by nginx
|
||||||
|
- Ideally they would use the REST `find-by-metadata-field` endpoint, but it is *really* slow for large result sets (like twenty minutes!):
|
||||||
|
|
||||||
|
```
|
||||||
|
$ curl -f -H "CCAFS Website Publications importer BOT" -H "Content-Type: application/json" -X POST "https://dspacetest.cgiar.org/rest/items/find-by-metadata-field?limit=100" -d '{"key":"cg.contributor.crp", "value":"Climate Change, Agriculture and Food Security","language": "en_US"}'
|
||||||
|
```
|
||||||
|
|
||||||
|
- For now I will whitelist their user agent so that they can continue scraping /browse
|
||||||
|
- I figured out that the mappings for AReS are stored in Elasticsearch
|
||||||
|
- There is a Kibana interface running on port 5601 that can help explore the values in the index
|
||||||
|
- I can interact with Elasticsearch by sending requests, for example to delete an item by its `_id`:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ curl -XPOST "localhost:9200/openrxv-values/_delete_by_query" -H 'Content-Type: application/json' -d'
|
||||||
|
{
|
||||||
|
"query": {
|
||||||
|
"match": {
|
||||||
|
"_id": "64j_THMBiwiQ-PKfCSlI"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- I added a new find/replace:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ curl -XPOST "localhost:9200/openrxv-values/_doc?pretty" -H 'Content-Type: application/json' -d'
|
||||||
|
{
|
||||||
|
"find": "ALAN1",
|
||||||
|
"replace": "ALAN2",
|
||||||
|
}
|
||||||
|
'
|
||||||
|
```
|
||||||
|
|
||||||
|
- I see it in Kibana, and I can search it in Elasticsearch, but I don't see it in OpenRXV's mapping values dashboard
|
||||||
|
- Now I deleted everything in the `openrxv-values` index:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ curl -XDELETE http://localhost:9200/openrxv-values
|
||||||
|
```
|
||||||
|
|
||||||
|
- Then I tried posting it again:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ curl -XPOST "localhost:9200/openrxv-values/_doc?pretty" -H 'Content-Type: application/json' -d'
|
||||||
|
{
|
||||||
|
"find": "ALAN1",
|
||||||
|
"replace": "ALAN2",
|
||||||
|
}
|
||||||
|
'
|
||||||
|
```
|
||||||
|
|
||||||
|
- But I still don't see it in AReS
|
||||||
|
- Interesting! I added a find/replace manually in AReS and now I see the one I POSTed...
|
||||||
|
- I fixed a few bugs in the Simple and Extended PDF reports on AReS
|
||||||
|
- Add missing ISI Journal and Type to Simple PDF report
|
||||||
|
- Fix DOIs in Simple PDF report
|
||||||
|
- Add missing "https://hdl.handle.net" to Handles in Extented PDF report
|
||||||
|
- Testing Atmire CUA and L&R based on their feedback from a few days ago
|
||||||
|
- I no longer get the NullPointerException from CUA when importing metadata on the command line (!)
|
||||||
|
- Listings and Reports now shows results for simple queries that I tested (!), though it seems that there are some new JavaScript libraries I need to allow in nginx
|
||||||
|
- I sent a mail to the dspace-tech mailing list asking about the error with DSpace 6's "Export Search Metadata" function
|
||||||
|
- If I search for an author like "Orth, Alan" it gives an HTTP 400, but if I search for "Orth" alone it exports a CSV
|
||||||
|
- I replicated the same issue on demo.dspace.org
|
||||||
|
|
||||||
|
## 2020-10-19
|
||||||
|
|
||||||
|
- Last night I learned how to POST mappings to Elasticsearch for AReS:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ curl -XDELETE http://localhost:9200/openrxv-values
|
||||||
|
$ curl -XPOST http://localhost:9200/openrxv-values/_doc/_bulk -H "Content-Type: application/json" --data-binary @./mapping.json
|
||||||
|
```
|
||||||
|
|
||||||
|
- The JSON file looks like this, with one instruction on each line:
|
||||||
|
|
||||||
|
```
|
||||||
|
{"index":{}}
|
||||||
|
{ "find": "CRP on Dryland Systems - DS", "replace": "Dryland Systems" }
|
||||||
|
{"index":{}}
|
||||||
|
{ "find": "FISH", "replace": "Fish" }
|
||||||
|
```
|
||||||
|
|
||||||
|
- Adjust the report templates on AReS based on some of Peter's feedback
|
||||||
|
- I wrote a quick Python script to filter and convert the old AReS mappings to [Elasticsearch's Bulk API](https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html) format:
|
||||||
|
|
||||||
|
```python
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import json
|
||||||
|
import re
|
||||||
|
|
||||||
|
f = open('/tmp/mapping.json', 'r')
|
||||||
|
data = json.load(f)
|
||||||
|
|
||||||
|
# Iterate over old mapping file, which is in format "find": "replace", ie:
|
||||||
|
#
|
||||||
|
# "alan": "ALAN"
|
||||||
|
#
|
||||||
|
# And convert to proper dictionaries for import into Elasticsearch's Bulk API:
|
||||||
|
#
|
||||||
|
# { "find": "alan", "replace": "ALAN" }
|
||||||
|
#
|
||||||
|
for find, replace in data.items():
|
||||||
|
# Skip all upper and all lower case strings because they are indicative of
|
||||||
|
# some AGROVOC or other mappings we no longer want to do
|
||||||
|
if find.isupper() or find.islower() or replace.isupper() or replace.islower():
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Skip replacements with acronyms like:
|
||||||
|
#
|
||||||
|
# International Livestock Research Institute - ILRI
|
||||||
|
#
|
||||||
|
acronym_pattern = re.compile(r"[A-Z]+$")
|
||||||
|
acronym_pattern_match = acronym_pattern.search(replace)
|
||||||
|
if acronym_pattern_match is not None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
mapping = { "find": find, "replace": replace }
|
||||||
|
|
||||||
|
# Print command for Elasticsearch
|
||||||
|
print('{"index":{}}')
|
||||||
|
print(json.dumps(mapping))
|
||||||
|
|
||||||
|
f.close()
|
||||||
|
```
|
||||||
|
|
||||||
|
- It filters all upper and lower case strings as well as any replacements that end in an acronym like "- ILRI", reducing the number of mappings from around 4,000 to about 900
|
||||||
|
- I deleted the existing `openrxv-values` Elasticsearch core and then POSTed it:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ ./convert-mapping.py > /tmp/elastic-mappings.txt
|
||||||
|
$ curl -XDELETE http://localhost:9200/openrxv-values
|
||||||
|
$ curl -XPOST http://localhost:9200/openrxv-values/_doc/_bulk -H "Content-Type: application/json" --data-binary @/tmp/elastic-mappings.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
- Then in AReS I didn't see the mappings in the dashboard until I added a new one manually, after which they all appeared
|
||||||
|
- I started a new harvesting
|
||||||
|
- I checked the CIMMYT DSpace repository and I see they have [the REST API enabled](https://repository.cimmyt.org/rest)
|
||||||
|
- The data doesn't look too bad actually: they have countries in title case, AGROVOC in upper case, CRPs, etc
|
||||||
|
- According to [their OAI](https://repository.cimmyt.org/oai/request?verb=ListRecords&metadataPrefix=oai_dc) they have 6,500 items in the repository
|
||||||
|
- I would be interested to explore the possibility to harvest them...
|
||||||
|
- Bosede said they were having problems with the "Access" step during item submission
|
||||||
|
- I looked at the Munin graphs for PostgreSQL and both connections and locks look normal so I'm not sure what it could be
|
||||||
|
- I restarted the PostgreSQL service just to see if that would help
|
||||||
|
- I ran the `dspace cleanup -v` process on CGSpace and got an error:
|
||||||
|
|
||||||
|
```
|
||||||
|
Error: ERROR: update or delete on table "bitstream" violates foreign key constraint "bundle_primary_bitstream_id_fkey" on table "bundle"
|
||||||
|
Detail: Key (bitstream_id)=(192921) is still referenced from table "bundle".
|
||||||
|
```
|
||||||
|
|
||||||
|
- The solution is, as always:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ psql -d dspace -U dspace -c 'update bundle set primary_bitstream_id=NULL where primary_bitstream_id in (192921);'
|
||||||
|
UPDATE 1
|
||||||
|
```
|
||||||
|
|
||||||
|
- After looking at the CGSpace Solr stats for 2020-10 I found some hits to purge:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ ./check-spider-hits.sh -f /tmp/agents -s statistics -u http://localhost:8083/solr -p
|
||||||
|
|
||||||
|
Purging 2474 hits from ShortLinkTranslate in statistics
|
||||||
|
Purging 2568 hits from RI\/1\.0 in statistics
|
||||||
|
Purging 1851 hits from ILRI Livestock Website Publications importer BOT in statistics
|
||||||
|
Purging 1282 hits from curl in statistics
|
||||||
|
|
||||||
|
Total number of bot hits purged: 8174
|
||||||
|
```
|
||||||
|
|
||||||
<!-- vim: set sw=2 ts=2: -->
|
<!-- vim: set sw=2 ts=2: -->
|
||||||
|
@ -26,7 +26,7 @@ I don’t see anything interesting in the web server logs around that time t
|
|||||||
<meta property="og:type" content="article" />
|
<meta property="og:type" content="article" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/2019-01/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/2019-01/" />
|
||||||
<meta property="article:published_time" content="2019-01-02T09:48:30+02:00" />
|
<meta property="article:published_time" content="2019-01-02T09:48:30+02:00" />
|
||||||
<meta property="article:modified_time" content="2019-10-28T13:39:25+02:00" />
|
<meta property="article:modified_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="January, 2019"/>
|
<meta name="twitter:title" content="January, 2019"/>
|
||||||
@ -59,7 +59,7 @@ I don’t see anything interesting in the web server logs around that time t
|
|||||||
"url": "https://alanorth.github.io/cgspace-notes/2019-01/",
|
"url": "https://alanorth.github.io/cgspace-notes/2019-01/",
|
||||||
"wordCount": "5532",
|
"wordCount": "5532",
|
||||||
"datePublished": "2019-01-02T09:48:30+02:00",
|
"datePublished": "2019-01-02T09:48:30+02:00",
|
||||||
"dateModified": "2019-10-28T13:39:25+02:00",
|
"dateModified": "2020-10-19T15:23:30+03:00",
|
||||||
"author": {
|
"author": {
|
||||||
"@type": "Person",
|
"@type": "Person",
|
||||||
"name": "Alan Orth"
|
"name": "Alan Orth"
|
||||||
@ -791,7 +791,7 @@ sys 0m2.396s
|
|||||||
<li>After rebooting I notice that the Linode kernel went down from 4.19.8 to 4.18.16…</li>
|
<li>After rebooting I notice that the Linode kernel went down from 4.19.8 to 4.18.16…</li>
|
||||||
<li>Atmire sent a quote on our <a href="https://tracker.atmire.com/tickets-cgiar-ilri/view-ticket?id=657">ticket about purchasing the Metadata Quality Module (MQM) for DSpace 5.8</a></li>
|
<li>Atmire sent a quote on our <a href="https://tracker.atmire.com/tickets-cgiar-ilri/view-ticket?id=657">ticket about purchasing the Metadata Quality Module (MQM) for DSpace 5.8</a></li>
|
||||||
<li>Abenet asked me for an <a href="https://cgspace.cgiar.org/open-search/discover?query=crpsubject:Livestock&sort_by=3&order=DESC">OpenSearch query that could generate and RSS feed for items in the Livestock CRP</a></li>
|
<li>Abenet asked me for an <a href="https://cgspace.cgiar.org/open-search/discover?query=crpsubject:Livestock&sort_by=3&order=DESC">OpenSearch query that could generate and RSS feed for items in the Livestock CRP</a></li>
|
||||||
<li>According to my notes, <code>sort_by=3</code> is accession date (as configured in `dspace.cfg)</li>
|
<li>According to my notes, <code>sort_by=3</code> is accession date (as configured in <code>dspace.cfg</code>)</li>
|
||||||
<li>The query currently shows 3023 items, but a <a href="https://cgspace.cgiar.org/discover?filtertype_1=crpsubject&filter_relational_operator_1=equals&filter_1=Livestock&submit_apply_filter=&query=">Discovery search for Livestock CRP only returns 858 items</a></li>
|
<li>The query currently shows 3023 items, but a <a href="https://cgspace.cgiar.org/discover?filtertype_1=crpsubject&filter_relational_operator_1=equals&filter_1=Livestock&submit_apply_filter=&query=">Discovery search for Livestock CRP only returns 858 items</a></li>
|
||||||
<li>That query seems to return items tagged with <code>Livestock and Fish</code> CRP as well… hmm.</li>
|
<li>That query seems to return items tagged with <code>Livestock and Fish</code> CRP as well… hmm.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -23,7 +23,7 @@ During the FlywayDB migration I got an error:
|
|||||||
<meta property="og:type" content="article" />
|
<meta property="og:type" content="article" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/2020-10/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/2020-10/" />
|
||||||
<meta property="article:published_time" content="2020-10-06T16:55:54+03:00" />
|
<meta property="article:published_time" content="2020-10-06T16:55:54+03:00" />
|
||||||
<meta property="article:modified_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="article:modified_time" content="2020-10-15T18:11:00+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="October, 2020"/>
|
<meta name="twitter:title" content="October, 2020"/>
|
||||||
@ -51,9 +51,9 @@ During the FlywayDB migration I got an error:
|
|||||||
"@type": "BlogPosting",
|
"@type": "BlogPosting",
|
||||||
"headline": "October, 2020",
|
"headline": "October, 2020",
|
||||||
"url": "https://alanorth.github.io/cgspace-notes/2020-10/",
|
"url": "https://alanorth.github.io/cgspace-notes/2020-10/",
|
||||||
"wordCount": "2831",
|
"wordCount": "3789",
|
||||||
"datePublished": "2020-10-06T16:55:54+03:00",
|
"datePublished": "2020-10-06T16:55:54+03:00",
|
||||||
"dateModified": "2020-10-14T22:21:03+03:00",
|
"dateModified": "2020-10-15T18:11:00+03:00",
|
||||||
"author": {
|
"author": {
|
||||||
"@type": "Person",
|
"@type": "Person",
|
||||||
"name": "Alan Orth"
|
"name": "Alan Orth"
|
||||||
@ -598,6 +598,184 @@ $ tidy -xml -utf8 -iq -m -w 0 dspace/config/controlled-vocabularies/dc-subject.x
|
|||||||
real 88m21.678s
|
real 88m21.678s
|
||||||
user 7m59.182s
|
user 7m59.182s
|
||||||
sys 2m22.713s
|
sys 2m22.713s
|
||||||
|
</code></pre><h2 id="2020-10-18">2020-10-18</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Macaroni Bros wrote to me to ask why some of their CCAFS harvesting is failing
|
||||||
|
<ul>
|
||||||
|
<li>They are scraping HTML from /browse responses like this:</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p><a href="https://cgspace.cgiar.org/browse?type=crpsubject&value=Climate+Change%2C+Agriculture+and+Food+Security&XML&rpp=5000">https://cgspace.cgiar.org/browse?type=crpsubject&value=Climate+Change%2C+Agriculture+and+Food+Security&XML&rpp=5000</a></p>
|
||||||
|
<ul>
|
||||||
|
<li>They are using the user agent “CCAFS Website Publications importer BOT” so they are getting rate limited by nginx</li>
|
||||||
|
<li>Ideally they would use the REST <code>find-by-metadata-field</code> endpoint, but it is <em>really</em> slow for large result sets (like twenty minutes!):</li>
|
||||||
|
</ul>
|
||||||
|
<pre><code>$ curl -f -H "CCAFS Website Publications importer BOT" -H "Content-Type: application/json" -X POST "https://dspacetest.cgiar.org/rest/items/find-by-metadata-field?limit=100" -d '{"key":"cg.contributor.crp", "value":"Climate Change, Agriculture and Food Security","language": "en_US"}'
|
||||||
|
</code></pre><ul>
|
||||||
|
<li>For now I will whitelist their user agent so that they can continue scraping /browse</li>
|
||||||
|
<li>I figured out that the mappings for AReS are stored in Elasticsearch
|
||||||
|
<ul>
|
||||||
|
<li>There is a Kibana interface running on port 5601 that can help explore the values in the index</li>
|
||||||
|
<li>I can interact with Elasticsearch by sending requests, for example to delete an item by its <code>_id</code>:</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<pre><code>$ curl -XPOST "localhost:9200/openrxv-values/_delete_by_query" -H 'Content-Type: application/json' -d'
|
||||||
|
{
|
||||||
|
"query": {
|
||||||
|
"match": {
|
||||||
|
"_id": "64j_THMBiwiQ-PKfCSlI"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</code></pre><ul>
|
||||||
|
<li>I added a new find/replace:</li>
|
||||||
|
</ul>
|
||||||
|
<pre><code>$ curl -XPOST "localhost:9200/openrxv-values/_doc?pretty" -H 'Content-Type: application/json' -d'
|
||||||
|
{
|
||||||
|
"find": "ALAN1",
|
||||||
|
"replace": "ALAN2",
|
||||||
|
}
|
||||||
|
'
|
||||||
|
</code></pre><ul>
|
||||||
|
<li>I see it in Kibana, and I can search it in Elasticsearch, but I don’t see it in OpenRXV’s mapping values dashboard</li>
|
||||||
|
<li>Now I deleted everything in the <code>openrxv-values</code> index:</li>
|
||||||
|
</ul>
|
||||||
|
<pre><code>$ curl -XDELETE http://localhost:9200/openrxv-values
|
||||||
|
</code></pre><ul>
|
||||||
|
<li>Then I tried posting it again:</li>
|
||||||
|
</ul>
|
||||||
|
<pre><code>$ curl -XPOST "localhost:9200/openrxv-values/_doc?pretty" -H 'Content-Type: application/json' -d'
|
||||||
|
{
|
||||||
|
"find": "ALAN1",
|
||||||
|
"replace": "ALAN2",
|
||||||
|
}
|
||||||
|
'
|
||||||
|
</code></pre><ul>
|
||||||
|
<li>But I still don’t see it in AReS</li>
|
||||||
|
<li>Interesting! I added a find/replace manually in AReS and now I see the one I POSTed…</li>
|
||||||
|
<li>I fixed a few bugs in the Simple and Extended PDF reports on AReS
|
||||||
|
<ul>
|
||||||
|
<li>Add missing ISI Journal and Type to Simple PDF report</li>
|
||||||
|
<li>Fix DOIs in Simple PDF report</li>
|
||||||
|
<li>Add missing “<a href="https://hdl.handle.net">https://hdl.handle.net</a>” to Handles in Extented PDF report</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Testing Atmire CUA and L&R based on their feedback from a few days ago
|
||||||
|
<ul>
|
||||||
|
<li>I no longer get the NullPointerException from CUA when importing metadata on the command line (!)</li>
|
||||||
|
<li>Listings and Reports now shows results for simple queries that I tested (!), though it seems that there are some new JavaScript libraries I need to allow in nginx</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>I sent a mail to the dspace-tech mailing list asking about the error with DSpace 6’s “Export Search Metadata” function
|
||||||
|
<ul>
|
||||||
|
<li>If I search for an author like “Orth, Alan” it gives an HTTP 400, but if I search for “Orth” alone it exports a CSV</li>
|
||||||
|
<li>I replicated the same issue on demo.dspace.org</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<h2 id="2020-10-19">2020-10-19</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Last night I learned how to POST mappings to Elasticsearch for AReS:</li>
|
||||||
|
</ul>
|
||||||
|
<pre><code>$ curl -XDELETE http://localhost:9200/openrxv-values
|
||||||
|
$ curl -XPOST http://localhost:9200/openrxv-values/_doc/_bulk -H "Content-Type: application/json" --data-binary @./mapping.json
|
||||||
|
</code></pre><ul>
|
||||||
|
<li>The JSON file looks like this, with one instruction on each line:</li>
|
||||||
|
</ul>
|
||||||
|
<pre><code>{"index":{}}
|
||||||
|
{ "find": "CRP on Dryland Systems - DS", "replace": "Dryland Systems" }
|
||||||
|
{"index":{}}
|
||||||
|
{ "find": "FISH", "replace": "Fish" }
|
||||||
|
</code></pre><ul>
|
||||||
|
<li>Adjust the report templates on AReS based on some of Peter’s feedback</li>
|
||||||
|
<li>I wrote a quick Python script to filter and convert the old AReS mappings to <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html">Elasticsearch’s Bulk API</a> format:</li>
|
||||||
|
</ul>
|
||||||
|
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-python" data-lang="python"><span style="color:#75715e">#!/usr/bin/env python3</span>
|
||||||
|
|
||||||
|
<span style="color:#f92672">import</span> json
|
||||||
|
<span style="color:#f92672">import</span> re
|
||||||
|
|
||||||
|
f <span style="color:#f92672">=</span> open(<span style="color:#e6db74">'/tmp/mapping.json'</span>, <span style="color:#e6db74">'r'</span>)
|
||||||
|
data <span style="color:#f92672">=</span> json<span style="color:#f92672">.</span>load(f)
|
||||||
|
|
||||||
|
<span style="color:#75715e"># Iterate over old mapping file, which is in format "find": "replace", ie:</span>
|
||||||
|
<span style="color:#75715e">#</span>
|
||||||
|
<span style="color:#75715e"># "alan": "ALAN"</span>
|
||||||
|
<span style="color:#75715e">#</span>
|
||||||
|
<span style="color:#75715e"># And convert to proper dictionaries for import into Elasticsearch's Bulk API:</span>
|
||||||
|
<span style="color:#75715e">#</span>
|
||||||
|
<span style="color:#75715e"># { "find": "alan", "replace": "ALAN" }</span>
|
||||||
|
<span style="color:#75715e">#</span>
|
||||||
|
<span style="color:#66d9ef">for</span> find, replace <span style="color:#f92672">in</span> data<span style="color:#f92672">.</span>items():
|
||||||
|
<span style="color:#75715e"># Skip all upper and all lower case strings because they are indicative of</span>
|
||||||
|
<span style="color:#75715e"># some AGROVOC or other mappings we no longer want to do</span>
|
||||||
|
<span style="color:#66d9ef">if</span> find<span style="color:#f92672">.</span>isupper() <span style="color:#f92672">or</span> find<span style="color:#f92672">.</span>islower() <span style="color:#f92672">or</span> replace<span style="color:#f92672">.</span>isupper() <span style="color:#f92672">or</span> replace<span style="color:#f92672">.</span>islower():
|
||||||
|
<span style="color:#66d9ef">continue</span>
|
||||||
|
|
||||||
|
<span style="color:#75715e"># Skip replacements with acronyms like:</span>
|
||||||
|
<span style="color:#75715e">#</span>
|
||||||
|
<span style="color:#75715e"># International Livestock Research Institute - ILRI</span>
|
||||||
|
<span style="color:#75715e">#</span>
|
||||||
|
acronym_pattern <span style="color:#f92672">=</span> re<span style="color:#f92672">.</span>compile(<span style="color:#e6db74">r</span><span style="color:#e6db74">"[A-Z]+$"</span>)
|
||||||
|
acronym_pattern_match <span style="color:#f92672">=</span> acronym_pattern<span style="color:#f92672">.</span>search(replace)
|
||||||
|
<span style="color:#66d9ef">if</span> acronym_pattern_match <span style="color:#f92672">is</span> <span style="color:#f92672">not</span> None:
|
||||||
|
<span style="color:#66d9ef">continue</span>
|
||||||
|
|
||||||
|
mapping <span style="color:#f92672">=</span> { <span style="color:#e6db74">"find"</span>: find, <span style="color:#e6db74">"replace"</span>: replace }
|
||||||
|
|
||||||
|
<span style="color:#75715e"># Print command for Elasticsearch</span>
|
||||||
|
<span style="color:#66d9ef">print</span>(<span style="color:#e6db74">'{"index":{}}'</span>)
|
||||||
|
<span style="color:#66d9ef">print</span>(json<span style="color:#f92672">.</span>dumps(mapping))
|
||||||
|
|
||||||
|
f<span style="color:#f92672">.</span>close()
|
||||||
|
</code></pre></div><ul>
|
||||||
|
<li>It filters all upper and lower case strings as well as any replacements that end in an acronym like “- ILRI”, reducing the number of mappings from around 4,000 to about 900</li>
|
||||||
|
<li>I deleted the existing <code>openrxv-values</code> Elasticsearch core and then POSTed it:</li>
|
||||||
|
</ul>
|
||||||
|
<pre><code>$ ./convert-mapping.py > /tmp/elastic-mappings.txt
|
||||||
|
$ curl -XDELETE http://localhost:9200/openrxv-values
|
||||||
|
$ curl -XPOST http://localhost:9200/openrxv-values/_doc/_bulk -H "Content-Type: application/json" --data-binary @/tmp/elastic-mappings.txt
|
||||||
|
</code></pre><ul>
|
||||||
|
<li>Then in AReS I didn’t see the mappings in the dashboard until I added a new one manually, after which they all appeared
|
||||||
|
<ul>
|
||||||
|
<li>I started a new harvesting</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>I checked the CIMMYT DSpace repository and I see they have <a href="https://repository.cimmyt.org/rest">the REST API enabled</a>
|
||||||
|
<ul>
|
||||||
|
<li>The data doesn’t look too bad actually: they have countries in title case, AGROVOC in upper case, CRPs, etc</li>
|
||||||
|
<li>According to <a href="https://repository.cimmyt.org/oai/request?verb=ListRecords&metadataPrefix=oai_dc">their OAI</a> they have 6,500 items in the repository</li>
|
||||||
|
<li>I would be interested to explore the possibility to harvest them…</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Bosede said they were having problems with the “Access” step during item submission
|
||||||
|
<ul>
|
||||||
|
<li>I looked at the Munin graphs for PostgreSQL and both connections and locks look normal so I’m not sure what it could be</li>
|
||||||
|
<li>I restarted the PostgreSQL service just to see if that would help</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>I ran the <code>dspace cleanup -v</code> process on CGSpace and got an error:</li>
|
||||||
|
</ul>
|
||||||
|
<pre><code>Error: ERROR: update or delete on table "bitstream" violates foreign key constraint "bundle_primary_bitstream_id_fkey" on table "bundle"
|
||||||
|
Detail: Key (bitstream_id)=(192921) is still referenced from table "bundle".
|
||||||
|
</code></pre><ul>
|
||||||
|
<li>The solution is, as always:</li>
|
||||||
|
</ul>
|
||||||
|
<pre><code>$ psql -d dspace -U dspace -c 'update bundle set primary_bitstream_id=NULL where primary_bitstream_id in (192921);'
|
||||||
|
UPDATE 1
|
||||||
|
</code></pre><ul>
|
||||||
|
<li>After looking at the CGSpace Solr stats for 2020-10 I found some hits to purge:</li>
|
||||||
|
</ul>
|
||||||
|
<pre><code>$ ./check-spider-hits.sh -f /tmp/agents -s statistics -u http://localhost:8083/solr -p
|
||||||
|
|
||||||
|
Purging 2474 hits from ShortLinkTranslate in statistics
|
||||||
|
Purging 2568 hits from RI\/1\.0 in statistics
|
||||||
|
Purging 1851 hits from ILRI Livestock Website Publications importer BOT in statistics
|
||||||
|
Purging 1282 hits from curl in statistics
|
||||||
|
|
||||||
|
Total number of bot hits purged: 8174
|
||||||
</code></pre><!-- raw HTML omitted -->
|
</code></pre><!-- raw HTML omitted -->
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/" />
|
||||||
<meta property="og:updated_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="og:updated_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="Categories"/>
|
<meta name="twitter:title" content="Categories"/>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/notes/" />
|
||||||
<meta property="og:updated_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="og:updated_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="Notes"/>
|
<meta name="twitter:title" content="Notes"/>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/notes/" />
|
||||||
<meta property="og:updated_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="og:updated_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="Notes"/>
|
<meta name="twitter:title" content="Notes"/>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/notes/" />
|
||||||
<meta property="og:updated_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="og:updated_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="Notes"/>
|
<meta name="twitter:title" content="Notes"/>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/notes/" />
|
||||||
<meta property="og:updated_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="og:updated_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="Notes"/>
|
<meta name="twitter:title" content="Notes"/>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
||||||
<meta property="og:updated_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="og:updated_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="CGSpace Notes"/>
|
<meta name="twitter:title" content="CGSpace Notes"/>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
||||||
<meta property="og:updated_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="og:updated_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="CGSpace Notes"/>
|
<meta name="twitter:title" content="CGSpace Notes"/>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
||||||
<meta property="og:updated_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="og:updated_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="CGSpace Notes"/>
|
<meta name="twitter:title" content="CGSpace Notes"/>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
||||||
<meta property="og:updated_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="og:updated_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="CGSpace Notes"/>
|
<meta name="twitter:title" content="CGSpace Notes"/>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
||||||
<meta property="og:updated_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="og:updated_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="CGSpace Notes"/>
|
<meta name="twitter:title" content="CGSpace Notes"/>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
||||||
<meta property="og:updated_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="og:updated_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="CGSpace Notes"/>
|
<meta name="twitter:title" content="CGSpace Notes"/>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
||||||
<meta property="og:updated_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="og:updated_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="CGSpace Notes"/>
|
<meta name="twitter:title" content="CGSpace Notes"/>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
||||||
<meta property="og:updated_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="og:updated_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="Posts"/>
|
<meta name="twitter:title" content="Posts"/>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
||||||
<meta property="og:updated_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="og:updated_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="Posts"/>
|
<meta name="twitter:title" content="Posts"/>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
||||||
<meta property="og:updated_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="og:updated_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="Posts"/>
|
<meta name="twitter:title" content="Posts"/>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
||||||
<meta property="og:updated_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="og:updated_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="Posts"/>
|
<meta name="twitter:title" content="Posts"/>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
||||||
<meta property="og:updated_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="og:updated_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="Posts"/>
|
<meta name="twitter:title" content="Posts"/>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
||||||
<meta property="og:updated_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="og:updated_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="Posts"/>
|
<meta name="twitter:title" content="Posts"/>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
||||||
<meta property="og:updated_time" content="2020-10-14T22:21:03+03:00" />
|
<meta property="og:updated_time" content="2020-10-19T15:23:30+03:00" />
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
<meta name="twitter:card" content="summary"/>
|
||||||
<meta name="twitter:title" content="Posts"/>
|
<meta name="twitter:title" content="Posts"/>
|
||||||
|
@ -4,27 +4,27 @@
|
|||||||
|
|
||||||
<url>
|
<url>
|
||||||
<loc>https://alanorth.github.io/cgspace-notes/categories/</loc>
|
<loc>https://alanorth.github.io/cgspace-notes/categories/</loc>
|
||||||
<lastmod>2020-10-14T22:21:03+03:00</lastmod>
|
<lastmod>2020-10-19T15:23:30+03:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
|
|
||||||
<url>
|
<url>
|
||||||
<loc>https://alanorth.github.io/cgspace-notes/</loc>
|
<loc>https://alanorth.github.io/cgspace-notes/</loc>
|
||||||
<lastmod>2020-10-14T22:21:03+03:00</lastmod>
|
<lastmod>2020-10-19T15:23:30+03:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
|
|
||||||
<url>
|
<url>
|
||||||
<loc>https://alanorth.github.io/cgspace-notes/categories/notes/</loc>
|
<loc>https://alanorth.github.io/cgspace-notes/categories/notes/</loc>
|
||||||
<lastmod>2020-10-14T22:21:03+03:00</lastmod>
|
<lastmod>2020-10-19T15:23:30+03:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
|
|
||||||
<url>
|
<url>
|
||||||
<loc>https://alanorth.github.io/cgspace-notes/2020-10/</loc>
|
<loc>https://alanorth.github.io/cgspace-notes/2020-10/</loc>
|
||||||
<lastmod>2020-10-14T22:21:03+03:00</lastmod>
|
<lastmod>2020-10-15T18:11:00+03:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
|
|
||||||
<url>
|
<url>
|
||||||
<loc>https://alanorth.github.io/cgspace-notes/posts/</loc>
|
<loc>https://alanorth.github.io/cgspace-notes/posts/</loc>
|
||||||
<lastmod>2020-10-14T22:21:03+03:00</lastmod>
|
<lastmod>2020-10-19T15:23:30+03:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
|
|
||||||
<url>
|
<url>
|
||||||
@ -144,7 +144,7 @@
|
|||||||
|
|
||||||
<url>
|
<url>
|
||||||
<loc>https://alanorth.github.io/cgspace-notes/2019-01/</loc>
|
<loc>https://alanorth.github.io/cgspace-notes/2019-01/</loc>
|
||||||
<lastmod>2019-10-28T13:39:25+02:00</lastmod>
|
<lastmod>2020-10-19T15:23:30+03:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
|
|
||||||
<url>
|
<url>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user