[ARVADOS] created: 14d3187a2b5475baaff4123829b018629490e0bd
Git user
git at public.curoverse.com
Sun Sep 25 14:37:54 EDT 2016
at 14d3187a2b5475baaff4123829b018629490e0bd (commit)
commit 14d3187a2b5475baaff4123829b018629490e0bd
Author: Tom Clegg <tom at curoverse.com>
Date: Sun Sep 25 14:37:18 2016 -0400
9668: WIP
diff --git a/apps/wb2/app.js b/apps/wb2/app.js
index d9cc729..8c46d87 100644
--- a/apps/wb2/app.js
+++ b/apps/wb2/app.js
@@ -66,26 +66,30 @@ var Show = {
};
var Layout = {
- RouteResolver: function(component, withKey) {
- return {
- render: function(vnode) {
- return m(Layout, m(component,
- Object.assign({
- key: vnode.attrs[withKey],
- }, vnode.attrs)));
- },
- };
- },
view: function(vnode) {
return m('.layout', vnode.children);
},
};
-var routes = {
- '/': Show,
- '/site/:siteID/discovery': Layout.RouteResolver(DiscoveryDoc, 'siteID'),
-};
-['collections', 'containers'].map(function(table) {
- routes['/site/:siteID/'+table+'/:uuid'] = Layout.RouteResolver(Show, 'uuid');
-});
-m.route(document.body, '/', routes);
+function RouteResolver(layout, component, withKey) {
+ return {
+ render: function(vnode) {
+ return m(layout, m(component,
+ Object.assign({
+ key: withKey + ':' + vnode.attrs[withKey],
+ }, vnode.attrs)));
+ },
+ };
+}
+
+(function SetupRouting() {
+ var RR = RouteResolver;
+ var routes = {
+ '/': Show,
+ '/site/:siteID/discovery': RR(Layout, DiscoveryDoc, 'siteID'),
+ };
+ ['collections', 'containers'].map(function(table) {
+ routes['/site/:siteID/'+table+'/:uuid'] = RR(Layout, Show, 'uuid');
+ });
+ m.route(document.body, '/', routes);
+})();
commit 5c7e073f800bb0933737fdd5dd19f069bcb054b7
Author: Tom Clegg <tom at curoverse.com>
Date: Sat Sep 24 20:56:15 2016 -0400
9668: WIP
diff --git a/apps/wb2/app.js b/apps/wb2/app.js
index 794c86d..d9cc729 100644
--- a/apps/wb2/app.js
+++ b/apps/wb2/app.js
@@ -1,34 +1,52 @@
var m = require('mithril');
-//var arvados = require('./arvados');
+var arvados = require('./arvados');
-var KnownSites = {
- '4xphq': '4xphq.arvadosapi.com',
-};
+var _sessions = {};
+
+// getSession returns a new or existing session for the API endpoint
+// specified by siteID.
+function getSession(siteID) {
+ var session = _sessions[siteID];
+ if (!session) {
+ var client = new arvados.Client(siteID);
+ session = _sessions[siteID] = {
+ client: client,
+ dd: m.request({
+ method: 'GET',
+ url: client.DiscoveryURL()+'.test',
+ }),
+ websocket: m.prop(),
+ };
+ }
+ return session;
+}
-var ddLoaded = {};
-function ddLoad(siteID) {
- var dd = ddLoaded[siteID];
- if (!dd) dd = ddLoaded[siteID] = m.prop();
- else if (dd()) return dd;
- m.request({
- method: 'GET',
- url: 'https://'+siteID+'.arvadosapi.com/discovery/v1/apis/arvados/v1/rest',
- }).run(dd);
- return dd;
+// getDiscoveryDoc returns a stream resolving to the discovery
+// document for the Arvados API endpoint specified by siteID.
+function getDiscoveryDoc(siteID) {
+ return getSession(siteID).dd;
}
var Loading = {
- oninit: function(vnode) {
- },
view: function() {
return m('.loading', 'Loading...');
},
};
+var ErrorTODO = {
+ view: function(vnode) {
+ return m('.errorTODO', 'Error loading: ', vnode.children)
+ },
+};
+
var DiscoveryDoc = {
+ oninit: function(vnode) {
+ vnode.state.dd = getDiscoveryDoc(vnode.attrs.siteID);
+ },
view: function(vnode) {
- var dd = ddLoad(vnode.attrs.siteID);
- if (!dd()) return m(Loading);
+ var dd = vnode.state.dd;
+ if (dd.error()) return m(ErrorTODO, dd.error());
+ else if (!dd()) return m(Loading);
return m('.dd', [
m('.row', ['site ID: ', vnode.attrs.siteID]),
m('.row', ['version: ', dd().source_version]),
@@ -40,17 +58,21 @@ var DiscoveryDoc = {
var Show = {
view: function(vnode) {
- var dd = ddLoad(vnode.attrs.siteID);
- if (!dd()) return m(Loading);
+ var dd = getDiscoveryDoc(vnode.attrs.siteID);
+ if (dd.error()) return m(ErrorTODO, dd.error());
+ else if (!dd()) return m(Loading);
return m('.show', 'It\'s a collection from ', vnode.attrs.siteID);
},
};
var Layout = {
- RouteResolver: function(component) {
+ RouteResolver: function(component, withKey) {
return {
render: function(vnode) {
- return m(Layout, m(component, vnode.attrs));
+ return m(Layout, m(component,
+ Object.assign({
+ key: vnode.attrs[withKey],
+ }, vnode.attrs)));
},
};
},
@@ -61,9 +83,9 @@ var Layout = {
var routes = {
'/': Show,
- '/site/:siteID/discovery': Layout.RouteResolver(DiscoveryDoc),
+ '/site/:siteID/discovery': Layout.RouteResolver(DiscoveryDoc, 'siteID'),
};
['collections', 'containers'].map(function(table) {
- routes['/site/:siteID/'+table+'/:uuid'] = Layout.RouteResolver(Show);
+ routes['/site/:siteID/'+table+'/:uuid'] = Layout.RouteResolver(Show, 'uuid');
});
m.route(document.body, '/', routes);
diff --git a/apps/wb2/arvados.js b/apps/wb2/arvados.js
new file mode 100644
index 0000000..308aabc
--- /dev/null
+++ b/apps/wb2/arvados.js
@@ -0,0 +1,8 @@
+module.exports.Client = Client;
+function Client(UUIDPrefix) {
+ this.UUIDPrefix = UUIDPrefix;
+}
+
+Client.prototype.DiscoveryURL = function() {
+ return 'https://' + this.UUIDPrefix + '.arvadosapi.com/discovery/v1/apis/arvados/v1/rest';
+}
commit 608b9f802840251a1a6678767d4651d87e332086
Author: Tom Clegg <tom at curoverse.com>
Date: Sat Sep 24 20:01:35 2016 -0400
9668: simplify
diff --git a/apps/wb2/app.js b/apps/wb2/app.js
index da48c98..794c86d 100644
--- a/apps/wb2/app.js
+++ b/apps/wb2/app.js
@@ -5,16 +5,20 @@ var KnownSites = {
'4xphq': '4xphq.arvadosapi.com',
};
-var Sites = {};
+var ddLoaded = {};
+function ddLoad(siteID) {
+ var dd = ddLoaded[siteID];
+ if (!dd) dd = ddLoaded[siteID] = m.prop();
+ else if (dd()) return dd;
+ m.request({
+ method: 'GET',
+ url: 'https://'+siteID+'.arvadosapi.com/discovery/v1/apis/arvados/v1/rest',
+ }).run(dd);
+ return dd;
+}
var Loading = {
oninit: function(vnode) {
- m.request({
- method: 'GET',
- url: 'https://'+vnode.attrs.siteID+'.arvadosapi.com/discovery/v1/apis/arvados/v1/rest',
- }).run(function(dd){
- Sites[vnode.attrs.siteID] = {dd: dd};
- });
},
view: function() {
return m('.loading', 'Loading...');
@@ -23,37 +27,43 @@ var Loading = {
var DiscoveryDoc = {
view: function(vnode) {
+ var dd = ddLoad(vnode.attrs.siteID);
+ if (!dd()) return m(Loading);
return m('.dd', [
m('.row', ['site ID: ', vnode.attrs.siteID]),
- m('.row', ['version: ', vnode.attrs.site.dd.source_version]),
- m('.row', ['websocketUrl: ', vnode.attrs.site.dd.websocketUrl]),
- m('.row', ['defaultCollectionReplication: ', vnode.attrs.site.dd.defaultCollectionReplication]),
+ m('.row', ['version: ', dd().source_version]),
+ m('.row', ['websocketUrl: ', dd().websocketUrl]),
+ m('.row', ['defaultCollectionReplication: ', dd().defaultCollectionReplication]),
]);
},
};
var Show = {
- view: function() {
- return m('.show', 'It\'s a collection');
+ view: function(vnode) {
+ var dd = ddLoad(vnode.attrs.siteID);
+ if (!dd()) return m(Loading);
+ return m('.show', 'It\'s a collection from ', vnode.attrs.siteID);
+ },
+};
+
+var Layout = {
+ RouteResolver: function(component) {
+ return {
+ render: function(vnode) {
+ return m(Layout, m(component, vnode.attrs));
+ },
+ };
+ },
+ view: function(vnode) {
+ return m('.layout', vnode.children);
},
};
var routes = {
'/': Show,
- '/site/:siteID/discovery': afterLoadingSite(DiscoveryDoc),
+ '/site/:siteID/discovery': Layout.RouteResolver(DiscoveryDoc),
};
['collections', 'containers'].map(function(table) {
- routes['/site/:siteID/'+table+'/:uuid'] = afterLoadingSite(Show);
+ routes['/site/:siteID/'+table+'/:uuid'] = Layout.RouteResolver(Show);
});
m.route(document.body, '/', routes);
-
-function afterLoadingSite(component) {
- return {
- render: function(vnode) {
- var site = Sites[vnode.attrs.siteID];
- return (site
- ? m(component, Object.assign({}, vnode.attrs, {site: site}))
- : m(Loading, vnode.attrs));
- },
- };
-}
commit e73284d6a942aded1236457542519ab39906bbc5
Author: Tom Clegg <tom at curoverse.com>
Date: Sat Sep 24 17:58:21 2016 -0400
9668: WIP
diff --git a/apps/wb2/.gitignore b/apps/wb2/.gitignore
new file mode 100644
index 0000000..f06235c
--- /dev/null
+++ b/apps/wb2/.gitignore
@@ -0,0 +1,2 @@
+node_modules
+dist
diff --git a/apps/wb2/app.js b/apps/wb2/app.js
new file mode 100644
index 0000000..da48c98
--- /dev/null
+++ b/apps/wb2/app.js
@@ -0,0 +1,59 @@
+var m = require('mithril');
+//var arvados = require('./arvados');
+
+var KnownSites = {
+ '4xphq': '4xphq.arvadosapi.com',
+};
+
+var Sites = {};
+
+var Loading = {
+ oninit: function(vnode) {
+ m.request({
+ method: 'GET',
+ url: 'https://'+vnode.attrs.siteID+'.arvadosapi.com/discovery/v1/apis/arvados/v1/rest',
+ }).run(function(dd){
+ Sites[vnode.attrs.siteID] = {dd: dd};
+ });
+ },
+ view: function() {
+ return m('.loading', 'Loading...');
+ },
+};
+
+var DiscoveryDoc = {
+ view: function(vnode) {
+ return m('.dd', [
+ m('.row', ['site ID: ', vnode.attrs.siteID]),
+ m('.row', ['version: ', vnode.attrs.site.dd.source_version]),
+ m('.row', ['websocketUrl: ', vnode.attrs.site.dd.websocketUrl]),
+ m('.row', ['defaultCollectionReplication: ', vnode.attrs.site.dd.defaultCollectionReplication]),
+ ]);
+ },
+};
+
+var Show = {
+ view: function() {
+ return m('.show', 'It\'s a collection');
+ },
+};
+
+var routes = {
+ '/': Show,
+ '/site/:siteID/discovery': afterLoadingSite(DiscoveryDoc),
+};
+['collections', 'containers'].map(function(table) {
+ routes['/site/:siteID/'+table+'/:uuid'] = afterLoadingSite(Show);
+});
+m.route(document.body, '/', routes);
+
+function afterLoadingSite(component) {
+ return {
+ render: function(vnode) {
+ var site = Sites[vnode.attrs.siteID];
+ return (site
+ ? m(component, Object.assign({}, vnode.attrs, {site: site}))
+ : m(Loading, vnode.attrs));
+ },
+ };
+}
diff --git a/apps/wb2/index.html b/apps/wb2/index.html
new file mode 100644
index 0000000..ba0b7a3
--- /dev/null
+++ b/apps/wb2/index.html
@@ -0,0 +1,4 @@
+<!doctype html>
+<body>
+ <script src="dist/app.js"></script>
+</body>
diff --git a/apps/wb2/package.json b/apps/wb2/package.json
new file mode 100644
index 0000000..8eafa1b
--- /dev/null
+++ b/apps/wb2/package.json
@@ -0,0 +1,17 @@
+{
+ "name":"wb2",
+ "dependencies":{
+ "mithril":"lhorie/mithril.js#rewrite"
+ },
+ "devDependencies":{
+ "check-dependencies":"",
+ "express":"",
+ "tape":"",
+ "webpack":""
+ },
+ "scripts":{
+ "start":"PATH=\"$PATH:`pwd`\"; mkdir -p dist && (./node_modules/.bin/check-dependencies || npm install) && webpack -d && (webpack --watch -d & pack=$!; node serve.js; kill $pack)",
+ "test":"PATH=\"$PATH:`pwd`\" tape"
+ },
+ "main":"serve.js"
+}
diff --git a/apps/wb2/serve.js b/apps/wb2/serve.js
new file mode 100644
index 0000000..5155512
--- /dev/null
+++ b/apps/wb2/serve.js
@@ -0,0 +1,6 @@
+var express = require('express');
+var app = express();
+app.use(express.static('.'));
+app.listen(8888, function() {
+ console.log('Listening on 8888');
+});
diff --git a/apps/wb2/webpack.config.js b/apps/wb2/webpack.config.js
new file mode 100644
index 0000000..a60ff15
--- /dev/null
+++ b/apps/wb2/webpack.config.js
@@ -0,0 +1,9 @@
+module.exports = {
+ entry: {
+ app: './app',
+ },
+ output: {
+ directory: 'dist',
+ filename: 'dist/[name]'+(process.argv.indexOf('-p')>=0 ? '.min' : '')+'.js',
+ },
+};
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list