From 0697e18f710ff3f0093ba9956d27641a3d335393 Mon Sep 17 00:00:00 2001 From: vjrj Date: Thu, 17 Dec 2020 21:50:23 +0100 Subject: [PATCH 1/9] Upgrade ala-bootstrap to use up-to-date brandings --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b1a2f4a..7e66ed5 100644 --- a/build.gradle +++ b/build.gradle @@ -72,7 +72,7 @@ dependencies { // compile 'org.grails.grails-plugin-rest:2.3.0.M2' compile 'org.codehaus.groovy:groovy-ant:2.0.0' - compile "org.grails.plugins:ala-bootstrap3:3.0.6" + compile "org.grails.plugins:ala-bootstrap3:3.2.0" compile "org.grails.plugins:grails-google-visualization:2.0" compile "org.grails.plugins:ala-admin-plugin:2.0" runtime "org.grails.plugins:ala-auth:3.0.1" From b18448beea936eef611a18f161fc095b2719879c Mon Sep 17 00:00:00 2001 From: vjrj Date: Thu, 17 Dec 2020 21:50:57 +0100 Subject: [PATCH 2/9] Optional Citizen & Volunteer Services. Fix for LA new portals without data --- grails-app/conf/application.yml | 3 + .../ala/dashboard/DashboardController.groovy | 111 ++++++++++++++---- .../org/ala/dashboard/MetadataService.groovy | 34 +++--- grails-app/views/dashboard/panels/empty.gsp | 2 + .../dashboard/panels/speciesImagesPanel.gsp | 14 ++- 5 files changed, 122 insertions(+), 42 deletions(-) create mode 100644 grails-app/views/dashboard/panels/empty.gsp diff --git a/grails-app/conf/application.yml b/grails-app/conf/application.yml index 8f3eff3..03d1a92 100644 --- a/grails-app/conf/application.yml +++ b/grails-app/conf/application.yml @@ -174,3 +174,6 @@ dashboard: csv: temp: dir: "/data/dashboard/csv/" + +useCitizenScienceService: true +useVolunteerService: true \ No newline at end of file diff --git a/grails-app/controllers/au/org/ala/dashboard/DashboardController.groovy b/grails-app/controllers/au/org/ala/dashboard/DashboardController.groovy index 1ebb5f1..72dd1ae 100644 --- a/grails-app/controllers/au/org/ala/dashboard/DashboardController.groovy +++ b/grails-app/controllers/au/org/ala/dashboard/DashboardController.groovy @@ -30,31 +30,52 @@ class DashboardController { } def collectionPanel = { - render view: 'panels/collectionPanel', model: [collections: metadataService.getCollectionsByCategory()] + if (metadataService.getCollectionsByCategory()) + render view: 'panels/collectionPanel', model: [collections: metadataService.getCollectionsByCategory()] + else + render view: 'panels/empty' } def recordsPanel = { - render view: 'panels/recordsPanel', model: [totalRecords: metadataService.getTotalAndDuplicates()] + if (metadataService.getTotalAndDuplicates()) + render view: 'panels/recordsPanel', model: [totalRecords: metadataService.getTotalAndDuplicates()] + else + render view: 'panels/empty' } def datasetsPanel = { - render view: 'panels/datasetsPanel', model: [datasets: metadataService.getDatasets()] + if (metadataService.getDatasets()) + render view: 'panels/datasetsPanel', model: [datasets: metadataService.getDatasets()] + else + render view: 'panels/empty' } def basisRecordsPanel = { - render view: 'panels/basisRecordsPanel', model: [basisOfRecord: metadataService.getBasisOfRecord()] + if (metadataService.getBasisOfRecord() && metadataService.getBasisOfRecord().facets) + render view: 'panels/basisRecordsPanel', model: [basisOfRecord: metadataService.getBasisOfRecord()] + else + render view: 'panels/empty' } def dateRecordsPanel = { - render view: 'panels/dateRecordsPanel', model: [dateStats: metadataService.getDateStats()] + if (metadataService.getDateStats()) + render view: 'panels/dateRecordsPanel', model: [dateStats: metadataService.getDateStats()] + else + render view: 'panels/empty' } def nslPanel = { - render view: 'panels/nslPanel', model: [taxaCounts: metadataService.getTaxaCounts()] + if (metadataService.getTaxaCounts()) + render view: 'panels/nslPanel', model: [taxaCounts: metadataService.getTaxaCounts()] + else + render view: 'panels/empty' } def spatialPanel = { - render view: 'panels/spatialPanel', model: [spatialLayers: metadataService.getSpatialLayers()] + if (metadataService.getSpatialLayers() && metadataService.getSpatialLayers().groups) + render view: 'panels/spatialPanel', model: [spatialLayers: metadataService.getSpatialLayers()] + else + render view: 'panels/empty' } def statePanel = { @@ -62,43 +83,74 @@ class DashboardController { } def identifyLifePanel = { - render view: 'panels/identifyLifePanel', model: [identifyLifeCounts: metadataService.getIdentifyLifeCounts()] + if (metadataService.getIdentifyLifeCounts()) + render view: 'panels/identifyLifePanel', model: [identifyLifeCounts: metadataService.getIdentifyLifeCounts()] + else + render view: 'panels/empty' } def mostRecordedSpeciesPanel = { - render view: 'panels/mostRecordedSpeciesPanel', model: [mostRecorded: metadataService.getMostRecordedSpecies('all')] + if (metadataService.getMostRecordedSpecies()) + render view: 'panels/mostRecordedSpeciesPanel', model: [mostRecorded: metadataService.getMostRecordedSpecies('all')] + else + render view: 'panels/empty' } def typeSpecimensPanel = { - render view: 'panels/typeSpecimensPanel', model: [typeCounts: metadataService.getTypeStats()] + if (metadataService.getTypeStats()) + render view: 'panels/typeSpecimensPanel', model: [typeCounts: metadataService.getTypeStats()] + else + render view: 'panels/empty' } def barcodeOfLifePanel = { - render view: 'panels/barcodeOfLifePanel', model: [boldCounts: metadataService.getBoldCounts()] + if (metadataService.getBoldCounts()) + render view: 'panels/barcodeOfLifePanel', model: [boldCounts: metadataService.getBoldCounts()] + else + render view: 'panels/empty' } def bhlPanel = { - render view: 'panels/bhlPanel', model: [bhlCounts: metadataService.getBHLCounts()] + if (metadataService.getBHLCounts()) + render view: 'panels/bhlPanel', model: [bhlCounts: metadataService.getBHLCounts()] + else + render view: 'panels/empty' } def volunteerPortalPanel = { - render view: 'panels/volunteerPortalPanel', model: [volunteerPortalCounts: metadataService.getVolunteerStats()] + if (grailsApplication.config.getProperty("useVolunteerService", Boolean, true) && + metadataService.getVolunteerStats()) + render view: 'panels/volunteerPortalPanel', model: [volunteerPortalCounts: metadataService.getVolunteerStats()] + else + render view: 'panels/empty' } def conservationStatusPanel = { - render view: 'panels/conservationStatusPanel', model: [stateConservation: metadataService.getSpeciesByConservationStatus()] + if (metadataService.getSpeciesByConservationStatus()) + render view: 'panels/conservationStatusPanel', model: [stateConservation: metadataService.getSpeciesByConservationStatus()] + else + render view: 'panels/empty' } def recordsByDataProviderPanel = { - render view: 'panels/recordsByDataProviderPanel', model: [dataProviders: metadataService.getDataProviders()] + if (metadataService.getDataProviders()) + render view: 'panels/recordsByDataProviderPanel', model: [dataProviders: metadataService.getDataProviders()] + else + render view: 'panels/empty' } def recordsByInstitutionPanel = { - render view: 'panels/recordsByInstitutionPanel', model: [institutions: metadataService.getInstitutions()] + if (metadataService.getInstitutions()) + render view: 'panels/recordsByInstitutionPanel', model: [institutions: metadataService.getInstitutions()] + else + render view: 'panels/empty' } def recordsByLifeFormPanel = { - render view: 'panels/recordsByLifeFormPanel', model: [records: metadataService.getRecordsByLifeForm()] + if (metadataService.getRecordsByLifeForm()) + render view: 'panels/recordsByLifeFormPanel', model: [records: metadataService.getRecordsByLifeForm()] + else + render view: 'panels/empty' } def recordsAndSpeciesByDecadePanel = { @@ -110,23 +162,38 @@ class DashboardController { } def usageStatisticsPanel = { - render view: 'panels/usageStatisticsPanel', model: [loggerTotals: metadataService.getLoggerTotals()] + if (metadataService.getLoggerTotals()) + render view: 'panels/usageStatisticsPanel', model: [loggerTotals: metadataService.getLoggerTotals()] + else + render view: 'panels/empty' } def downloadsByReasonPanel = { - render view: 'panels/downloadsByReasonPanel', model: [loggerReasonBreakdown: metadataService.getLoggerReasonBreakdown()] + if (metadataService.getLoggerReasonBreakdown()) + render view: 'panels/downloadsByReasonPanel', model: [loggerReasonBreakdown: metadataService.getLoggerReasonBreakdown()] + else + render view: 'panels/empty' } def downloadsBySourcePanel = { - render view: 'panels/downloadsBySourcePanel', model: [loggerSourceBreakdown: metadataService.getLoggerSourceBreakdown()] + if (metadataService.getLoggerSourceBreakdown()) + render view: 'panels/downloadsBySourcePanel', model: [loggerSourceBreakdown: metadataService.getLoggerSourceBreakdown()] + else + render view: 'panels/empty' } def downloadsByUserTypePanel = { - render view: 'panels/downloadsByUserTypePanel', model: [loggerEmailBreakdown: metadataService.getLoggerEmailBreakdown()] + if (metadataService.getLoggerEmailBreakdown()) + render view: 'panels/downloadsByUserTypePanel', model: [loggerEmailBreakdown: metadataService.getLoggerEmailBreakdown()] + else + render view: 'panels/empty' } def speciesImagesPanel = { - render view: 'panels/speciesImagesPanel', model: [imagesBreakdown: metadataService.getImagesBreakdown()] + if (metadataService.getImagesBreakdown()) + render view: 'panels/speciesImagesPanel', model: [imagesBreakdown: metadataService.getImagesBreakdown()] + else + render view: 'panels/empty' } def mostRecorded(String group) { diff --git a/grails-app/services/au/org/ala/dashboard/MetadataService.groovy b/grails-app/services/au/org/ala/dashboard/MetadataService.groovy index 931fcec..924a8f0 100644 --- a/grails-app/services/au/org/ala/dashboard/MetadataService.groovy +++ b/grails-app/services/au/org/ala/dashboard/MetadataService.groovy @@ -16,6 +16,7 @@ class MetadataService { def webService, cacheService, grailsApplication String BIO_CACHE_URL, VOLUNTEER_URL, COLLECTORY_URL, SPATIAL_URL,BIE_URL, LOGGER_URL, IMAGES_URL, USERDETAILS_URL + Boolean USE_VOLUNTEER_SERVICE @PostConstruct def init() { @@ -27,6 +28,7 @@ class MetadataService { LOGGER_URL = grailsApplication.config.logger.baseURL IMAGES_URL = grailsApplication.config.images.baseURL USERDETAILS_URL = grailsApplication.config.userDetails.baseURL + USE_VOLUNTEER_SERVICE = grailsApplication.config.getProperty("useVolunteerService", Boolean, true) } /** * Populates the model for the dashboard view @@ -636,25 +638,27 @@ class MetadataService { results.put("speciesWithImages", speciesWithImages) results.put("subspeciesWithImages", subspeciesWithImages) - def vpResources = webService.getJson("${COLLECTORY_URL}/ws/dataHub/dh6").memberDataResources -// log.debug "vpResources = ${vpResources}" - def resourcesQuery = "" - - if (vpResources) { - resourcesQuery = "%20AND%20data_resource_uid:(" - vpResources.eachWithIndex() { res, i -> - if (i > 0) { - resourcesQuery = resourcesQuery + "%20OR%20" + if (USE_VOLUNTEER_SERVICE) { + def vpResources = webService.getJson("${COLLECTORY_URL}/ws/dataHub/dh6").memberDataResources +// log.debug "vpResources = ${vpResources}" + def resourcesQuery = "" + + if (vpResources) { + resourcesQuery = "%20AND%20data_resource_uid:(" + vpResources.eachWithIndex() { res, i -> + if (i > 0) { + resourcesQuery = resourcesQuery + "%20OR%20" + } + resourcesQuery = resourcesQuery + res.uid } - resourcesQuery = resourcesQuery + res.uid + resourcesQuery = resourcesQuery + ")" } - resourcesQuery = resourcesQuery + ")" - } - def taxaVPCount = webService.getJson("${BIO_CACHE_URL}${Constants.WebServices.PARTIAL_URL_TAXA_VP_COUNT}${resourcesQuery}")[0].count - results.put("taxaWithImagesFromVolunteerPortal", taxaVPCount) + def taxaVPCount = webService.getJson("${BIO_CACHE_URL}${Constants.WebServices.PARTIAL_URL_TAXA_VP_COUNT}${resourcesQuery}")[0].count + results.put("taxaWithImagesFromVolunteerPortal", taxaVPCount) + } - def taxaCSCount = webService.getJson("${BIO_CACHE_URL}${Constants.WebServices.PARTIAL_URL_TAXA_CS_COUNT}")[0].count + def taxaCSCount = webService.getJson("${BIO_CACHE_URL}${Constants.WebServices.PARTIAL_URL_TAXA_CS_COUNT}")[0]?.count?:0 results.put("taxaWithImagesFromCS", taxaCSCount) def imageTotal = webService.getJson("${IMAGES_URL}${Constants.WebServices.PARTIAL_URL_IMAGE_TOTAL}").imageCount diff --git a/grails-app/views/dashboard/panels/empty.gsp b/grails-app/views/dashboard/panels/empty.gsp new file mode 100644 index 0000000..4a9f3f4 --- /dev/null +++ b/grails-app/views/dashboard/panels/empty.gsp @@ -0,0 +1,2 @@ +
+
diff --git a/grails-app/views/dashboard/panels/speciesImagesPanel.gsp b/grails-app/views/dashboard/panels/speciesImagesPanel.gsp index ab9d427..56bc62e 100644 --- a/grails-app/views/dashboard/panels/speciesImagesPanel.gsp +++ b/grails-app/views/dashboard/panels/speciesImagesPanel.gsp @@ -14,10 +14,14 @@ Taxa with images${g.formatNumber(number: imagesBreakdown["taxaWithImages"], type: 'number')} Species with images${g.formatNumber(number: imagesBreakdown["speciesWithImages"], type: 'number')} Subspecies with images${g.formatNumber(number: imagesBreakdown["subspeciesWithImages"], type: 'number')} - Taxa with images from
DigiVol - ${g.formatNumber(number: imagesBreakdown["taxaWithImagesFromVolunteerPortal"], type: 'number')} - Taxa with images from
citizen science - ${g.formatNumber(number: imagesBreakdown["taxaWithImagesFromCS"], type: 'number')} + + Taxa with images from
DigiVol + ${g.formatNumber(number: imagesBreakdown["taxaWithImagesFromVolunteerPortal"], type: 'number')} +
+ + Taxa with images from
citizen science + ${g.formatNumber(number: imagesBreakdown["taxaWithImagesFromCS"], type: 'number')} +
Total number of images${g.formatNumber(number: imagesBreakdown["imageTotal"], type: 'number')} @@ -26,4 +30,4 @@ - \ No newline at end of file + From a5bcda212e76eceaa0119925f410f5c7dd8aa058 Mon Sep 17 00:00:00 2001 From: vjrj Date: Thu, 17 Dec 2020 22:12:34 +0100 Subject: [PATCH 3/9] Clean empty panel --- grails-app/views/dashboard/panels/empty.gsp | 2 -- 1 file changed, 2 deletions(-) diff --git a/grails-app/views/dashboard/panels/empty.gsp b/grails-app/views/dashboard/panels/empty.gsp index 4a9f3f4..e69de29 100644 --- a/grails-app/views/dashboard/panels/empty.gsp +++ b/grails-app/views/dashboard/panels/empty.gsp @@ -1,2 +0,0 @@ -
-
From 63e0e2c76904f258ec42483d36bc86e0b5ab2b9c Mon Sep 17 00:00:00 2001 From: vjrj Date: Thu, 17 Dec 2020 22:13:01 +0100 Subject: [PATCH 4/9] Restore MostRecordedSpeciesPanel --- .../controllers/au/org/ala/dashboard/DashboardController.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grails-app/controllers/au/org/ala/dashboard/DashboardController.groovy b/grails-app/controllers/au/org/ala/dashboard/DashboardController.groovy index 72dd1ae..46861b7 100644 --- a/grails-app/controllers/au/org/ala/dashboard/DashboardController.groovy +++ b/grails-app/controllers/au/org/ala/dashboard/DashboardController.groovy @@ -90,7 +90,7 @@ class DashboardController { } def mostRecordedSpeciesPanel = { - if (metadataService.getMostRecordedSpecies()) + if (metadataService.getMostRecordedSpecies('all')) render view: 'panels/mostRecordedSpeciesPanel', model: [mostRecorded: metadataService.getMostRecordedSpecies('all')] else render view: 'panels/empty' From 6e37118b17bdff6a3e96a48b1c33e3508324b2d7 Mon Sep 17 00:00:00 2001 From: vjrj Date: Fri, 18 Dec 2020 09:16:52 +0100 Subject: [PATCH 5/9] Added more optional services --- grails-app/conf/application.yml | 4 +++- .../au/org/ala/dashboard/DashboardController.groovy | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/grails-app/conf/application.yml b/grails-app/conf/application.yml index 03d1a92..22d8670 100644 --- a/grails-app/conf/application.yml +++ b/grails-app/conf/application.yml @@ -176,4 +176,6 @@ csv: dir: "/data/dashboard/csv/" useCitizenScienceService: true -useVolunteerService: true \ No newline at end of file +useVolunteerService: true +useBarcodeOfLifeService: true +useNationalSpeciesListsService: true \ No newline at end of file diff --git a/grails-app/controllers/au/org/ala/dashboard/DashboardController.groovy b/grails-app/controllers/au/org/ala/dashboard/DashboardController.groovy index 46861b7..7c2c214 100644 --- a/grails-app/controllers/au/org/ala/dashboard/DashboardController.groovy +++ b/grails-app/controllers/au/org/ala/dashboard/DashboardController.groovy @@ -65,7 +65,8 @@ class DashboardController { } def nslPanel = { - if (metadataService.getTaxaCounts()) + if (grailsApplication.config.getProperty("useNationalSpeciesListsService", Boolean, true) && + metadataService.getTaxaCounts()) render view: 'panels/nslPanel', model: [taxaCounts: metadataService.getTaxaCounts()] else render view: 'panels/empty' @@ -104,7 +105,8 @@ class DashboardController { } def barcodeOfLifePanel = { - if (metadataService.getBoldCounts()) + if (grailsApplication.config.getProperty("useBarcodeOfLifeService", Boolean, true) && + metadataService.getBoldCounts()) render view: 'panels/barcodeOfLifePanel', model: [boldCounts: metadataService.getBoldCounts()] else render view: 'panels/empty' From 82a68f3833d3f4eef856a0b5d23d4798b2bcb945 Mon Sep 17 00:00:00 2001 From: vjrj Date: Fri, 18 Dec 2020 10:01:49 +0100 Subject: [PATCH 6/9] BHL optional too --- grails-app/conf/application.yml | 3 ++- .../au/org/ala/dashboard/DashboardController.groovy | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/grails-app/conf/application.yml b/grails-app/conf/application.yml index 22d8670..0154121 100644 --- a/grails-app/conf/application.yml +++ b/grails-app/conf/application.yml @@ -178,4 +178,5 @@ csv: useCitizenScienceService: true useVolunteerService: true useBarcodeOfLifeService: true -useNationalSpeciesListsService: true \ No newline at end of file +useNationalSpeciesListsService: true +useBHLService: true \ No newline at end of file diff --git a/grails-app/controllers/au/org/ala/dashboard/DashboardController.groovy b/grails-app/controllers/au/org/ala/dashboard/DashboardController.groovy index 7c2c214..33660f9 100644 --- a/grails-app/controllers/au/org/ala/dashboard/DashboardController.groovy +++ b/grails-app/controllers/au/org/ala/dashboard/DashboardController.groovy @@ -113,7 +113,8 @@ class DashboardController { } def bhlPanel = { - if (metadataService.getBHLCounts()) + if (grailsApplication.config.getProperty("useBHLService", Boolean, true) && + metadataService.getBHLCounts()) render view: 'panels/bhlPanel', model: [bhlCounts: metadataService.getBHLCounts()] else render view: 'panels/empty' From 2027a196afd970739a804dacae3434a667599bcf Mon Sep 17 00:00:00 2001 From: vjrj Date: Fri, 18 Dec 2020 10:33:06 +0100 Subject: [PATCH 7/9] Trying to fix travis build --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6714b6f..14e3a1f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: groovy jdk: -- oraclejdk8 +- openjdk8 sudo: false branches: only: From b2be4088a50f8faa40647aef668d0c6e8c39e653 Mon Sep 17 00:00:00 2001 From: vjrj Date: Fri, 18 Dec 2020 11:03:19 +0100 Subject: [PATCH 8/9] Trying to fix tests with new url after #93 --- grails-app/conf/application.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/grails-app/conf/application.yml b/grails-app/conf/application.yml index 0154121..a566220 100644 --- a/grails-app/conf/application.yml +++ b/grails-app/conf/application.yml @@ -133,17 +133,17 @@ environments: appServerName: "https://auth.ala.org.au" biocache: - baseURL: "https://biocache.ala.org.au" + baseURL: "https://biocache-ws.ala.org.au/ws" ala: baseURL: "https://www.ala.org.au" bie: - baseURL: "https://bie.ala.org.au" + baseURL: "https://bie-ws.ala.org.au/ws" searchPath: "/search" spatial: - baseURL: "http://spatial.ala.org.au" + baseURL: "http://spatial.ala.org.au/ws" logger: baseURL: "https://logger.ala.org.au" From 1e90daecfa418936a83e4345ee00104337283693 Mon Sep 17 00:00:00 2001 From: vjrj Date: Wed, 20 Jan 2021 08:27:21 +0100 Subject: [PATCH 9/9] Bump ala-bootstrap3 version, folloing @ansell review --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 7e66ed5..aaac684 100644 --- a/build.gradle +++ b/build.gradle @@ -72,7 +72,7 @@ dependencies { // compile 'org.grails.grails-plugin-rest:2.3.0.M2' compile 'org.codehaus.groovy:groovy-ant:2.0.0' - compile "org.grails.plugins:ala-bootstrap3:3.2.0" + compile "org.grails.plugins:ala-bootstrap3:3.2.3" compile "org.grails.plugins:grails-google-visualization:2.0" compile "org.grails.plugins:ala-admin-plugin:2.0" runtime "org.grails.plugins:ala-auth:3.0.1"