From 23791d1cabc4795cf8ede08ac319ab5ed0a513ad Mon Sep 17 00:00:00 2001 From: Martin Fenner Date: Fri, 27 Nov 2020 08:55:33 +0100 Subject: [PATCH] trigger dois missing report via api --- app/controllers/repositories_controller.rb | 7 +++ app/models/client.rb | 7 ++- config/routes.rb | 1 + spec/requests/repositories_spec.rb | 52 ++++++++++++++++++++++ 4 files changed, 66 insertions(+), 1 deletion(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 6f538e7a3..aaf27d314 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -307,6 +307,13 @@ def stats render json: meta, status: :ok end + def check_links + csv = Client.export_doi_counts + filename = "repositories-not-fully-indexed-#{Date.today}.csv" + + send_data csv, filename: filename + end + protected def set_include if params[:include].present? diff --git a/app/models/client.rb b/app/models/client.rb index 029dacbdf..c3ff8e6a4 100644 --- a/app/models/client.rb +++ b/app/models/client.rb @@ -667,7 +667,7 @@ def self.export_doi_counts(query: nil) "DOIs missing", ] - dois_by_client = DataciteDoi.where(type: "DataciteDoi").group(:datacentre).count + dois_by_client = DataciteDoi.group(:datacentre).count rows = clients.reduce([]) do |sum, client| db_total = dois_by_client[client.id.to_i].to_i @@ -695,6 +695,11 @@ def self.export_doi_counts(query: nil) sum end + if rows.blank? + logger.warn "Found 0 repositories with missing DOIs." + return nil + end + csv = [CSV.generate_line(headers)] + rows logger.warn "Found #{csv.size} repositories with missing DOIs." diff --git a/config/routes.rb b/config/routes.rb index 1de931885..e1273b0eb 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -169,6 +169,7 @@ get "export/repositories", to: "exports#repositories", defaults: { format: :csv } get "export/contacts", to: "exports#contacts", defaults: { format: :csv } + get "repositories/check-links", to: "repositories#check_links" resources :heartbeat, only: %i[index] diff --git a/spec/requests/repositories_spec.rb b/spec/requests/repositories_spec.rb index c90d98f54..48f557cdf 100644 --- a/spec/requests/repositories_spec.rb +++ b/spec/requests/repositories_spec.rb @@ -625,4 +625,56 @@ # expect(Doi.query(nil, client_id: target.symbol.downcase).results.total).to eq(3) end end + + describe "GET /repositories/check-links", elasticsearch: true do + let(:admin_bearer) { User.generate_token } + let(:admin_headers) do + { + "HTTP_ACCEPT" => "text/csv", + "HTTP_AUTHORIZATION" => "Bearer " + admin_bearer, + } + end + let(:consortium) do + create( + :provider, + role_name: "ROLE_CONSORTIUM", + name: "Virtual Library of Virginia", + symbol: "VIVA", + ) + end + let!(:provider) do + create( + :provider, + role_name: "ROLE_CONSORTIUM_ORGANIZATION", + name: "University of Virginia", + symbol: "UVA", + consortium: consortium, + ) + end + let(:client) do + create( + :client, + provider: provider, + symbol: "UVA.LIBRARY", + name: "University of Virginia Library", + ) + end + let!(:dois) { create_list(:doi, 3, client: client, aasm_state: "findable") } + + before do + DataciteDoi.import + Client.import + sleep 2 + end + + it "returns repositories with dois not indexed", vcr: false do + get "/repositories/check-links", + nil, admin_headers + puts last_response.body + expect(last_response.status).to eq(200) + csv = last_response.body.lines + expect(csv.length).to eq(1) + expect(csv[0].strip).to be_blank + end + end end