[ARVADOS] created: 1.1.0-134-g63f1542
Git user
git at public.curoverse.com
Wed Nov 8 16:55:22 EST 2017
at 63f1542e94f3f1e66cbf0d88f557105ff5d104d0 (commit)
commit 63f1542e94f3f1e66cbf0d88f557105ff5d104d0
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date: Wed Nov 8 16:53:22 2017 -0500
12515: Use workbenchUrl advertised by API server discovery doc.
Fall back to guessing "workbench."+apiHost (as before) if discovery
doc does not offer a workbenchUrl (e.g., API server is too old).
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>
diff --git a/apps/workbench/app/assets/javascripts/components/collections.js b/apps/workbench/app/assets/javascripts/components/collections.js
index 33fca6c..591bf38 100644
--- a/apps/workbench/app/assets/javascripts/components/collections.js
+++ b/apps/workbench/app/assets/javascripts/components/collections.js
@@ -48,13 +48,9 @@ window.CollectionsTable = {
loader.items().map(function(item) {
return m('tr', [
m('td', [
- // Guess workbench.{apihostport} is a
- // Workbench... unless the host part of
- // apihostport is an IPv4 or [IPv6]
- // address.
- item.session.baseURL.match('://(\\[|\\d+\\.\\d+\\.\\d+\\.\\d+[:/])') ? null :
+ item.workbenchBaseURL() &&
m('a.btn.btn-xs.btn-default', {
- href: item.session.baseURL.replace('://', '://workbench.')+'collections/'+item.uuid,
+ href: item.workbenchBaseURL()+'collections/'+item.uuid,
}, 'Show'),
]),
m('td.arvados-uuid', item.uuid),
@@ -98,6 +94,9 @@ window.CollectionsSearch = {
vnode.state.loader = new MergingLoader({
children: Object.keys(sessions).map(function(key) {
var session = sessions[key]
+ var workbenchBaseURL = function() {
+ return vnode.state.sessionDB.workbenchBaseURL(session)
+ }
return new MultipageLoader({
sessionKey: key,
loadFunc: function(filters) {
@@ -113,7 +112,7 @@ window.CollectionsSearch = {
},
}).then(function(resp) {
resp.items.map(function(item) {
- item.session = session
+ item.workbenchBaseURL = workbenchBaseURL
})
return resp
})
diff --git a/apps/workbench/app/assets/javascripts/models/session_db.js b/apps/workbench/app/assets/javascripts/models/session_db.js
index 8330a68..01b0d72 100644
--- a/apps/workbench/app/assets/javascripts/models/session_db.js
+++ b/apps/workbench/app/assets/javascripts/models/session_db.js
@@ -5,6 +5,7 @@
window.SessionDB = function() {
var db = this
Object.assign(db, {
+ discoveryCache: {},
loadFromLocalStorage: function() {
try {
return JSON.parse(window.localStorage.getItem('sessions')) || {}
@@ -120,6 +121,33 @@ window.SessionDB = function() {
})
})
},
+ // Return the Workbench base URL advertised by the session's
+ // API server, or a reasonable guess, or (if neither strategy
+ // works out) null.
+ workbenchBaseURL: function(session) {
+ var dd = db.discoveryDoc(session)()
+ if (!dd)
+ // Don't fall back to guessing until we receive the discovery doc
+ return null
+ if (dd.workbenchUrl)
+ return dd.workbenchUrl
+ // Guess workbench.{apihostport} is a Workbench... unless
+ // the host part of apihostport is an IPv4 or [IPv6]
+ // address.
+ if (!session.baseURL.match('://(\\[|\\d+\\.\\d+\\.\\d+\\.\\d+[:/])'))
+ return session.baseURL.replace('://', '://workbench.')
+ return null
+ },
+ // Return a m.stream that will get fulfilled with the
+ // discovery doc from a session's API server.
+ discoveryDoc: function(session) {
+ var cache = db.discoveryCache[session.baseURL]
+ if (!cache) {
+ db.discoveryCache[session.baseURL] = cache = m.stream()
+ m.request(session.baseURL+'discovery/v1/apis/arvados/v1/rest').then(cache)
+ }
+ return cache
+ },
request: function(session, path, opts) {
opts = opts || {}
opts.headers = opts.headers || {}
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list