Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions bims/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@
CITESListingInfo,
ImportTask,
Invasion,
OpenSearchReindexRun,
OpenSearchReindexTenantStatus,
TaxonOrigin,
FlatPageExtension,
TagGroup,
Expand Down Expand Up @@ -3011,6 +3013,58 @@ class ImportTaskAdmin(admin.ModelAdmin):
search_fields = ('celery_task_id',)


@admin.register(OpenSearchReindexRun)
class OpenSearchReindexRunAdmin(admin.ModelAdmin):
list_display = (
'id',
'status',
'recreate',
'requested_schema',
'total_tenants',
'completed_tenants',
'failed_tenants',
'started_at',
'finished_at',
)
list_filter = ('status', 'recreate', 'started_at', 'finished_at')
search_fields = ('requested_schema', 'error')
readonly_fields = (
'status',
'recreate',
'chunk_size',
'requested_schema',
'total_tenants',
'completed_tenants',
'failed_tenants',
'started_at',
'finished_at',
'error',
)


@admin.register(OpenSearchReindexTenantStatus)
class OpenSearchReindexTenantStatusAdmin(admin.ModelAdmin):
list_display = (
'run',
'schema_name',
'status',
'records_indexed',
'started_at',
'finished_at',
)
list_filter = ('status', 'started_at', 'finished_at')
search_fields = ('schema_name', 'error')
readonly_fields = (
'run',
'schema_name',
'status',
'records_indexed',
'started_at',
'finished_at',
'error',
)


class FlatPageExtensionInline(admin.StackedInline):
model = FlatPageExtension
can_delete = False
Expand Down
3 changes: 3 additions & 0 deletions bims/api_urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
from bims.api_views.category_filter import CategoryList
from bims.api_views.reference_list import ReferenceList, ReferenceEntryList
from bims.api_views.search import CollectionSearchAPIView
from bims.api_views.opensearch_search import OpenSearchCollectionView
from bims.api_views.thermal_data import ThermalDataApiView, WaterTemperatureThresholdApiView
from bims.api_views.validate_object import (
ValidateSite,
Expand Down Expand Up @@ -226,6 +227,8 @@
ChemicalRecordDownloader.as_view()),
re_path(r'^collection-search/$',
CollectionSearchAPIView.as_view(), name='collection-search'),
re_path(r'^opensearch/collection-search/$',
OpenSearchCollectionView.as_view(), name='opensearch-collection-search'),
re_path(r'^search-module/$',
SearchModuleAPIView.as_view(), name='search-module'),
re_path(r'^boundary/geojson$',
Expand Down
24 changes: 21 additions & 3 deletions bims/api_views/location_site.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@
from bims.tasks.location_site_summary import (
generate_location_site_summary
)
from bims.tasks.opensearch_location_site_summary import (
opensearch_location_site_summary
)
from bims.tasks.prune_outside_boundary import (
prune_outside_boundary_gbif
)
Expand Down Expand Up @@ -96,6 +99,19 @@ def get(self, request):
return Response(serializer.data)


def _pick_summary_task():
"""Return the OpenSearch summary task if OS is reachable, else the DB task."""
try:
from django.conf import settings
if getattr(settings, 'OPENSEARCH_HOST', None):
from bims.opensearch.client import get_client
get_client().info()
return opensearch_location_site_summary
except Exception:
pass
return generate_location_site_summary


class LocationSitesSummary(APIView):
"""
List cached location site summary based on collection record search.
Expand All @@ -118,16 +134,18 @@ def get(self, request):
requester=self.request.user
)

summary_task = _pick_summary_task()

if not use_cached:
return Response(
generate_location_site_summary(
summary_task(
filters,
search_process.id
)
)

if created:
async_result = generate_location_site_summary.delay(
async_result = summary_task.delay(
filters,
search_process.id
)
Expand Down Expand Up @@ -155,7 +173,7 @@ def get(self, request):
})

if state == 'PENDING':
async_result = generate_location_site_summary.delay(
async_result = summary_task.delay(
filters,
search_process.id
)
Expand Down
15 changes: 14 additions & 1 deletion bims/api_views/location_site_overview.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,19 @@
from climate.models import Climate
from bims.enums import TaxonomicGroupCategory
from bims.tasks import location_sites_overview
from bims.tasks.opensearch_location_sites_overview import opensearch_location_sites_overview


def _pick_overview_task():
try:
from django.conf import settings
if getattr(settings, 'OPENSEARCH_HOST', None):
from bims.opensearch.client import get_client
get_client().info()
return opensearch_location_sites_overview
except Exception:
pass
return location_sites_overview
from bims.utils.api_view import BimsApiView
from bims.utils.search_process import get_or_create_search_process
from sass.models.site_visit_taxon import SiteVisitTaxon
Expand Down Expand Up @@ -228,7 +241,7 @@ def get(self, request):
search_process.set_process_id(process_id)
search_process.set_status(SEARCH_PROCESSING)

task = location_sites_overview.delay(
task = _pick_overview_task().delay(
search_parameters=parameters,
search_process_id=search_process.id
)
Expand Down
Loading
Loading