umlaut_borrow_direct 1.0.0.pre2 → 1.0.0.pre3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/app/controllers/umlaut_borrow_direct/controller_implementation.rb +13 -2
- data/app/service_adaptors/borrow_direct_adaptor.rb +12 -4
- data/lib/tasks/umlaut_borrow_direct_tasks.rake +116 -0
- data/lib/umlaut_borrow_direct/version.rb +1 -1
- data/test/dummy/log/test.log +22951 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_badges.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_breadcrumbs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_button-groups.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_carousel.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_close.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_code.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_component-animations.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_dropdowns.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_glyphicons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_input-groups.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_jumbotron.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_labels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_list-group.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_media.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_modals.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_navbar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_navs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_normalize.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_pager.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_popovers.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_print.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_progress-bars.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_responsive-embed.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_responsive-utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_scaffolding.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_tables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_thumbnails.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_tooltip.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_type.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1362b85f37ca4c085c17817dd2a4f41eb3ed56e6/_wells.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2366d925eea0f2ec723ea30502f282b3e0163b3f/_admin.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2366d925eea0f2ec723ea30502f282b3e0163b3f/_az.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2366d925eea0f2ec723ea30502f282b3e0163b3f/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2366d925eea0f2ec723ea30502f282b3e0163b3f/_icons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2366d925eea0f2ec723ea30502f282b3e0163b3f/_layout.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2366d925eea0f2ec723ea30502f282b3e0163b3f/_misc.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2366d925eea0f2ec723ea30502f282b3e0163b3f/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2366d925eea0f2ec723ea30502f282b3e0163b3f/_modal.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2366d925eea0f2ec723ea30502f282b3e0163b3f/_resolve.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2366d925eea0f2ec723ea30502f282b3e0163b3f/_results.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2366d925eea0f2ec723ea30502f282b3e0163b3f/_search.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2366d925eea0f2ec723ea30502f282b3e0163b3f/_spinner.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2366d925eea0f2ec723ea30502f282b3e0163b3f/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_background-variant.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_border-radius.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_center-block.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_clearfix.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_gradients.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_grid-framework.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_hide-text.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_image.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_labels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_list-group.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_nav-divider.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_nav-vertical-align.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_opacity.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_progress-bar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_reset-filter.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_resize.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_responsive-visibility.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_size.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_tab-focus.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_table-row.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_text-emphasis.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_text-overflow.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/5c5a3985fee424ec97ed23d23a371c871a5b5096/_vendor-prefixes.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/a2d59a70ef53ef9b8d319a70f93eadd4d6ccb126/_bootstrap-sprockets.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/a2d59a70ef53ef9b8d319a70f93eadd4d6ccb126/_bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/b05e8727119abef6b70673f3bdb183ff28fb8943/umlaut.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/07a4694fe07acf1c2fedda2cac798bc9 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/1360c5743e6c56b131feeb8bd4692855 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/1447c69f602d8988ba7d3613374b9192 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/14e244a20d79f91a83f6e3b6c5fc17c8 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/1898cdf9f07847e531543baa63512abb +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/1ded392702443b3183fe4593decc78a1 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/28d1b98052a09b97bbc88fbe5961fa0b +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/2e0c51d5557aa5342438b9151117b726 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/306cfd89581a76ae90e5620130d1230f +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/31603c401447ef43ed7749623b20173f +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/34a91e558d222e4927b61dfedde2741f +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/3c48d963e9cb0ab17a3c2df71845c65e +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/41b5737df347367ac2d25d056942953c +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/4a69dcaff39c483365574b8a5adf8c1e +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/5261e14c939f24d69198e8cc8cbe77b8 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/5282063d0bc5fdc4b86a9aa07a16c5ca +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/57b8645734a1dd6817b4879c005219ca +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/59e30bd46b8b43100a4a34c94a39c21f +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/5b910420983cbd1e8fc373433ea92fa4 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/5cec1b0830a49fb304d40e8f13ac8282 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/63d6cc65a5a6fcbf12fe6c35f2d27813 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/65d602bdfff59430dc54cc10b37b160d +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/6a813e9c25d7fa816423dd429340ab72 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/6f6b80b3e5ef142338834285588b36b1 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/81418fe0b09e8c9f3755326c90b99735 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/8768c04463df6739a6f5fb3693822fb0 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/8a571b88845483039807b38c9723e008 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/8fecdaba532a2a1bba14d55bc0406535 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/91ca2fb64bf748b6238c146752a7c864 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/94090977c499b165894487a5798769f4 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/a2ea4b719ca9026220a671803b988a31 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/a70424fe2d1cdc6b718024d0eae0b05a +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/aa6c6aa8db2af9c4b297ebeefa8c05b6 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/b2ecbebd998b7c7c7729ead4017d30ce +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/b3578e64c31fe804f95589727da2126e +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/b3f151531550c6e907ec763ae5bfe373 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/b76fe5c6b9c99e9ec616db4b60385d9c +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/b96fbde526f7d9458f59e2ada8672feb +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/c3a7673cbf27d723a50e936436cde8a3 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/d009317a0978714955954142f41ba552 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/d08802d82ae1799fefdb574fff989be1 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/f62eef088a833d88f92a38fff8d31a91 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/f92edeb4e4e73c8b19ed3520bd8c00c3 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/f93aefd3b059f9814da72bdc0cb0828e +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/fedb2b01e83bd131bc90e797455ee4ca +0 -0
- metadata +260 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OTBlNGIxNjQxMWMzZTM3YzEyMTJmOTBlN2UyMjRhMWI2ZWY4NDU5Ng==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MTYxZmRlMDkxYWIwMzg4ZjllMWQyNWIyZmE5NWFiNzczODIyOWEyYg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MGU4MDczNWUxMTQ2M2E4ZTk0ZDMyMzlkY2VlZTY5MjViMWNhNjQwYWMzYjEw
|
10
|
+
OTVhYmMyMjQ5ODg3YjM1MDg2OTUzZTg2ZDFmNThlNmI2YzljOThjNDM4MWE5
|
11
|
+
MzNlOGI5NGEwNjlkNjVjMzE5ZTFkMjljYTk1ZTdjZjQwYTRhYTc=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OTVlMmFhMmQxYTBmZmExMzk2MTNkZGE3MmZmZWMwNDlkODg0MWFhOTY3YWQ0
|
14
|
+
MTM3ZDkzOTRmMmY0MGIxZTQ2YjI5NWE2NDE4NWU3M2NlODMyZGQzMDkzMjU1
|
15
|
+
Y2MwNDBhOTcwMzgzNDYwN2Q4ZDMwZTI5ZDJkMmIyZGZmYTQ5M2M=
|
@@ -44,6 +44,7 @@ module UmlautBorrowDirect
|
|
44
44
|
# Saving the @bg_thread only so in testing we can wait on it.
|
45
45
|
@bg_thread = Thread.new(@request, @service, @request.referent.isbn) do |request, service, isbn|
|
46
46
|
begin
|
47
|
+
ActiveRecord::Base.forbid_implicit_checkout_for_thread!
|
47
48
|
|
48
49
|
requester = BorrowDirect::RequestItem.new(self.patron_barcode, service.library_symbol)
|
49
50
|
requester.timeout = @service.http_timeout
|
@@ -56,7 +57,17 @@ module UmlautBorrowDirect
|
|
56
57
|
set_status_response({:status => Successful, :request_number => request_number }, request)
|
57
58
|
end
|
58
59
|
|
59
|
-
rescue StandardError => e
|
60
|
+
rescue StandardError => e
|
61
|
+
# If it was an AR error in the first place, forget trying to record
|
62
|
+
# it.
|
63
|
+
if e.kind_of?(ActiveRecord::ActiveRecordError)
|
64
|
+
Rails.logger.fatal("BorrowDirect: Error placing request, and we could not log to database (#{e}): #{e.class} #{e.message}. Backtrace:\n #{Umlaut::Util.clean_backtrace(e).join("\n ")}\n")
|
65
|
+
|
66
|
+
# Nothing will do anything with this since we aren't waiting on
|
67
|
+
# the thread, but oh well.
|
68
|
+
raise e
|
69
|
+
end
|
70
|
+
|
60
71
|
ActiveRecord::Base.connection_pool.with_connection do
|
61
72
|
Rails.logger.error("BorrowDirect: Error placing request: #{e.class} #{e.message}. Backtrace:\n #{Umlaut::Util.clean_backtrace(e).join("\n ")}\n")
|
62
73
|
|
@@ -68,7 +79,7 @@ module UmlautBorrowDirect
|
|
68
79
|
set_status_response(status_response_data, request)
|
69
80
|
|
70
81
|
if service
|
71
|
-
service.bd_api_log(isbn, "RequestItem", e, requester.last_request_time)
|
82
|
+
service.bd_api_log(isbn, "RequestItem", e, (requester.last_request_time if requester))
|
72
83
|
end
|
73
84
|
|
74
85
|
|
@@ -47,6 +47,11 @@ class BorrowDirectAdaptor < Service
|
|
47
47
|
return ! title_is_serial?(request.referent)
|
48
48
|
end
|
49
49
|
|
50
|
+
# Make sure there are no hyphens, BD doesn't seem to like it
|
51
|
+
def isbn(request)
|
52
|
+
request.referent.isbn && request.referent.isbn.gsub('-', '')
|
53
|
+
end
|
54
|
+
|
50
55
|
def handle(request)
|
51
56
|
if request.referrer_id && @suppress_rfr_ids.include?(request.referrer_id)
|
52
57
|
return request.dispatched(self, true)
|
@@ -70,10 +75,10 @@ class BorrowDirectAdaptor < Service
|
|
70
75
|
begin
|
71
76
|
finditem = BorrowDirect::FindItem.new(@find_item_patron_barcode, @library_symbol)
|
72
77
|
finditem.timeout = @http_timeout
|
73
|
-
response = finditem.find(:isbn => request
|
78
|
+
response = finditem.find(:isbn => isbn(request))
|
74
79
|
|
75
80
|
# Log success if configured, used for looking at error rate
|
76
|
-
bd_api_log(request
|
81
|
+
bd_api_log(isbn(request), "FindItem", "SUCCESS", finditem.last_request_time)
|
77
82
|
|
78
83
|
if response.requestable?
|
79
84
|
# Mark it requestable!
|
@@ -100,7 +105,7 @@ class BorrowDirectAdaptor < Service
|
|
100
105
|
Rails.logger.error(msg)
|
101
106
|
|
102
107
|
# Special BD error log if configured
|
103
|
-
bd_api_log(request
|
108
|
+
bd_api_log(isbn(request), "FindItem", e, finditem.last_request_time)
|
104
109
|
|
105
110
|
# And mark it as an error so error message will be displayed. Let's
|
106
111
|
# mark it a temporary error, so it'll be tried again later, it might
|
@@ -123,12 +128,15 @@ class BorrowDirectAdaptor < Service
|
|
123
128
|
def can_precheck_borrow_direct?(request)
|
124
129
|
return false unless @use_bd_api
|
125
130
|
|
126
|
-
request.
|
131
|
+
isbn(request).present?
|
127
132
|
end
|
128
133
|
|
129
134
|
def bd_api_log(isbn, action, result, timing)
|
130
135
|
if result.kind_of? Exception
|
131
136
|
result = "#{result.class}/#{result.message}"
|
137
|
+
if result.respond_to?(:bd_code) && result.bd_code.present?
|
138
|
+
result += "/#{result.bd_code}"
|
139
|
+
end
|
132
140
|
end
|
133
141
|
|
134
142
|
if @bd_api_log_level
|
@@ -2,3 +2,119 @@
|
|
2
2
|
# task :umlaut_borrow_direct do
|
3
3
|
# # Task goes here
|
4
4
|
# end
|
5
|
+
namespace :umlaut_borrow_direct do
|
6
|
+
desc "BD API stats calc"
|
7
|
+
task :api_stats, [:filename] do |t, args|
|
8
|
+
|
9
|
+
stats = {
|
10
|
+
"FindItem" => {
|
11
|
+
:times => [],
|
12
|
+
:errors => [],
|
13
|
+
:timeouts => [],
|
14
|
+
:count => 0
|
15
|
+
},
|
16
|
+
"RequestItem" => {
|
17
|
+
:times => [],
|
18
|
+
:errors => [],
|
19
|
+
:timeouts => [],
|
20
|
+
:count => 0
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
if args["filename"] == "stdin"
|
25
|
+
file = STDIN
|
26
|
+
else
|
27
|
+
file = File.open(File.expand_path args[:filename])
|
28
|
+
end
|
29
|
+
|
30
|
+
file.each_line do |line|
|
31
|
+
|
32
|
+
if line =~ /BD API log\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)/
|
33
|
+
action = $1
|
34
|
+
result = $2
|
35
|
+
timing = $3
|
36
|
+
query = $4
|
37
|
+
|
38
|
+
if timing.present? && (timing.to_f == 0)
|
39
|
+
raise "Timing does not look like a float: #{timingf}"
|
40
|
+
end
|
41
|
+
timing = timing.to_f
|
42
|
+
|
43
|
+
if ["FindItem", "RequestItem"].include? action
|
44
|
+
stats[action][:count] += 1
|
45
|
+
|
46
|
+
if line =~ /(\d\d\d\d-\d\d-\d\d)/
|
47
|
+
|
48
|
+
date = Date.parse($1)
|
49
|
+
|
50
|
+
stats[action][:min_date] = date if stats[action][:min_date].nil? || (date < stats[action][:min_date])
|
51
|
+
stats[action][:max_date] = date if stats[action][:max_date].nil? || (date > stats[action][:max_date])
|
52
|
+
end
|
53
|
+
|
54
|
+
value_dict = {:action => action, :result => result, :timing => timing, :query => query}
|
55
|
+
|
56
|
+
stats[action][:times] << timing unless timing == 0
|
57
|
+
unless result == "SUCCESS"
|
58
|
+
(exception_class, exception_message) = result.split("/")
|
59
|
+
value_dict[:exception_class] = exception_class
|
60
|
+
value_dict[:exception_message] = exception_message
|
61
|
+
if exception_class == "BorrowDirect::HttpTimeoutError"
|
62
|
+
stats[action][:timeouts] << value_dict
|
63
|
+
else
|
64
|
+
stats[action][:errors] << value_dict
|
65
|
+
end
|
66
|
+
end
|
67
|
+
else
|
68
|
+
puts "Warning, unrecognized action: #{action}"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
["FindItem", "RequestItem"].each do |action|
|
74
|
+
sorted_times = stats[action][:times].sort
|
75
|
+
|
76
|
+
next if sorted_times.empty?
|
77
|
+
|
78
|
+
puts "\n\n#{action} API: #{stats[action][:count]} requests from #{stats[action][:min_date]} to #{stats[action][:max_date]}"
|
79
|
+
puts " Timing (not including timeouts):"
|
80
|
+
puts " Min: #{sorted_times.first}"
|
81
|
+
puts " 25th %ile: #{percentile sorted_times, 25}"
|
82
|
+
puts " Median: #{percentile sorted_times, 50}"
|
83
|
+
puts " 75th %ile: #{percentile sorted_times, 75}"
|
84
|
+
puts " 95th %ile: #{percentile sorted_times, 95}"
|
85
|
+
puts " Max: #{sorted_times.last}"
|
86
|
+
puts ""
|
87
|
+
puts " Timeouts: #{stats[action][:timeouts].count}"
|
88
|
+
puts " Errors: #{stats[action][:errors].count}"
|
89
|
+
|
90
|
+
#error_types = stats[action][:errors].group_by {|dict| dict[:exception_class]}
|
91
|
+
#error_types.each_pair do |type, list|
|
92
|
+
# puts " #{type} (#{list.count}) #{list}"
|
93
|
+
#end
|
94
|
+
|
95
|
+
end
|
96
|
+
puts "\n\n"
|
97
|
+
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
# pass in a SORTED array a
|
102
|
+
def percentile a, p
|
103
|
+
rank = (p.to_f / 100) * (a.length + 1)
|
104
|
+
|
105
|
+
if a.length == 0
|
106
|
+
return nil
|
107
|
+
elsif rank.modulo(1) != 0
|
108
|
+
|
109
|
+
|
110
|
+
sample_0 = a[rank.truncate - 1]
|
111
|
+
sample_1 = a[rank.truncate]
|
112
|
+
|
113
|
+
|
114
|
+
return sample_0 if sample_1.nil?
|
115
|
+
return (sample_1 + sample_0) / 2
|
116
|
+
else
|
117
|
+
return a[rank - 1]
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|