Skip to content

Commit

Permalink
changes to connection of adapter current request with server
Browse files Browse the repository at this point in the history
application.js :
add get server(), partially factored from hosts(), headers().
headers() : fallback to use currentRequestServer; could move this to server() but better to investigate the effort of having 1 adapter per server, to replace all these mechanisms of linking the current request in adapter with the server.
buildURL() : only use snapshot (.record.store.name) if requestType !== findRecord; expect this is still required for delete.

api-server.js : getDatasets() : set currentRequestServer and currentRequestServerTime for adapter buildURL(). This is the first API request to a server.
table-brushed.js : didRender() : check .isDestroying in later(), before .createTable().
api-servers.js : init() : don't access adapter.host because that can recurse back to init()
ember-cli-build.js : drop import of numbro.js - seems no longer required;  importing it from HoT no longer works, so if required add numbro as a direct dependency and import from node_modules/.
package-lock.json : regeneration dropped glob/ from init-package-json/ and read-package-json/.
package.json : whitespace change from install/uninstall.
  • Loading branch information
Don-Isdale committed Apr 4, 2024
1 parent 52b413a commit 8dac400
Show file tree
Hide file tree
Showing 7 changed files with 61 additions and 52 deletions.
59 changes: 49 additions & 10 deletions frontend/app/adapters/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,24 @@ var config = {
get host() {
let store = this.store,
adapterOptions = store && null, // store.adapterFor('block'),
host = (adapterOptions && adapterOptions.host) || get(this, '_server.host');
host = (adapterOptions && adapterOptions.host) || get(this, 'server.host');
if (trace) {
dLog('app/adapters/application.js host', adapterOptions, host, (trace < 2) ? [store.name, this._server?.name] : [this, store, this._server]);
}
return host;
},

/** determine the server to use. */
get server() {
let
server =
this._server ||
this.apiServers.currentRequestServer ||
this.get('session.requestServer') ||
this.apiServers.primaryServer;
return server;
},

namespace: ENV.apiNamespace,

urlForFindRecord(id, type, snapshot) {
Expand All @@ -74,12 +85,30 @@ var config = {

get headers() {
let
fnName = 'headers',
store = this.store,
adapterOptions = store && store.adapterOptions,
server = store.name && this.apiServers.lookupServerName(store.name) || this._server,
token = server && server.token;
if (! server) {
server = this.apiServers.currentRequestServer;
if (server) {
const
serverTime = this.apiServers.get('currentRequestServerTime'),
now = Date.now();
if (now - serverTime > 1000 /*ms*/) {
dLog(fnName, now - serverTime, now, serverTime);
/*
server = undefined;
this.apiServers.set('currentRequestServer', null);
*/
}
token = server?.token;
}
dLog(fnName, adapterOptions, store, server, token);
}
if (trace) {
dLog('headers', adapterOptions, (trace < 2) ? [store.name, server?.name] : [store, server], token);
dLog(fnName, adapterOptions, (trace < 2) ? [store.name, server?.name] : [store, server], token);
}
return token && {
Authorization : token
Expand Down Expand Up @@ -138,14 +167,24 @@ var config = {
let
id2Server = this.get('apiServers.id2Server'),
map = this.get('apiServers.obj2Server'),
/** the above works for blocks; for datasets (e.g. delete), can lookup server name from snapshot.record */
snapshotServerName = snapshot && get(snapshot, 'record.store.name'),
serverName = queryServerName || snapshotServerName,
servers = this.get('apiServers.servers'),
snapshotServer = servers && serverName && servers[serverName];
server = map.get(serverHandle) || (id && id2Server[id]) || snapshotServer;
server = map.get(serverHandle) || (id && id2Server[id]);
/* Don't use this for findRecord because if the id is not loaded, get :
* Record client ... (@lid:client-...) is not yet loaded and thus cannot be accessed from the Snapshot during serialization
*/
if (requestType !== 'findRecord' && ! server) {
const
/** the above works for blocks; for datasets (e.g. delete), can lookup server name from snapshot.record */
snapshotServerName = snapshot && get(snapshot, 'record.store.name'),
serverName = queryServerName || snapshotServerName,
servers = this.get('apiServers.servers'),
snapshotServer = servers && serverName && servers[serverName];
server = snapshotServer;
if (serverName) {
dLog(fnName, queryServerName, snapshotServerName, snapshotServer);
}
}
if (trace) {
dLog(fnName, 'id2Server', id, requestType, snapshotServerName, (trace < 2) ? [server?.name] : [id2Server, map, server]);
dLog(fnName, 'id2Server', id, requestType, (trace < 2) ? [server?.name] : [id2Server, map, server]);
}
}
}
Expand All @@ -160,7 +199,7 @@ var config = {
}

let url = this._super(modelName, id, snapshot, requestType, query);
dLog(fnName, 'url', url, modelName, id, /*snapshot,*/ requestType);
dLog(fnName, 'url', url, modelName, id, /*snapshot,*/ requestType, server?.name);
return url;
},

Expand Down
7 changes: 7 additions & 0 deletions frontend/app/components/service/api-server.js
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,13 @@ const ApiServerAttributes = {
/** server was a param when this function was an attribute of apiServers. */
let server = this;
server.groups.refresh();
/** filter is no longer available as store.adapterOptions in
* adapters/application.js : headers(), so obj2Server cannot be
* used, so pass server reference here; this will be cleared when
* used.
*/
this.apiServers.set('currentRequestServer', this);
this.apiServers.set('currentRequestServerTime', Date.now());
let datasetsTask = taskGetList.perform(server)
.catch((error) => {
// Recognise if the given task error is a TaskCancelation.
Expand Down
4 changes: 3 additions & 1 deletion frontend/app/components/table-brushed.js
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,9 @@ export default Component.extend({
// flag that createTable() has started.
this.set('table', null);
later(() => {
this.createTable(this);
if (! this.isDestroying) {
this.createTable(this);
}
});
}
},
Expand Down
6 changes: 2 additions & 4 deletions frontend/app/services/api-servers.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,10 @@ export default Service.extend(Evented, {
let
/** similar calcs in @see adapters/application.js : host() */
adapter = this.get('store').adapterFor('application'),
/** this is the API origin, e.g. 'http://localhost:5000' */
host = adapter.get('host'),
config = getConfiguredEnvironment(this),
/** this is the API origin, e.g. 'http://localhost:5000' */
configApiHost = config.apiHost,

apiOrigin = configApiHost, // host,
apiOrigin = configApiHost,

siteOrigin = getSiteOrigin(this);

Expand Down
1 change: 0 additions & 1 deletion frontend/ember-cli-build.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@ module.exports = function (defaults) {
* via <link rel="stylesheet" > and <script > in app/index.html
*/
const HoT = 'node_modules/handsontable/';
app.import(HoT + 'node_modules/numbro/dist/numbro.js');
app.import(HoT + 'dist/handsontable.full.min.js'); // handsontable.js
app.import(HoT + 'dist/handsontable.full.css'); // handsontable.css

Expand Down
34 changes: 0 additions & 34 deletions frontend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 0 additions & 2 deletions frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -96,11 +96,9 @@
"edition": "octane"
},
"private": true,

"overrides": {
"has-unicode": "2.0.1"
},

"dependencies": {
"@ember/test-helpers": "^3.3.0",
"@solgenomics/brapijs": "https://github.com/solgenomics/BrAPI-js.git",
Expand Down

0 comments on commit 8dac400

Please sign in to comment.