[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