add consul task
[arvados.git] / services / boot / js / index.js
1 // application entry point
2 window.jQuery = require('jquery')
3 window.Tether = require('tether')
4 require('bootstrap')
5 require('./example.js')
6 var m = require('mithril')
7 var Stream = require('mithril/stream')
8
9 var ctl = Stream({Tasks: [], Version: 0})
10
11 refresh.next = null
12 refresh.xhr = null
13 function refresh() {
14     const timeout = 60
15     if (refresh.xhr !== null) {
16         refresh.xhr.abort()
17         refresh.xhr = null
18     }
19     if (refresh.next !== null)
20         window.clearTimeout(refresh.next)
21     refresh.next = window.setTimeout(refresh, timeout*1000)
22     var version = ctl().Version
23     m.request({
24         method: 'GET',
25         url: '/api/tasks/ctl?timeout='+timeout+'&newerThan='+version,
26         config: function(xhr) { refresh.xhr = xhr },
27     })
28         .then(ctl)
29         .then(function() {
30             if (ctl().Version != version) {
31                 // Got a new version -- assume the server is obeying
32                 // newerThan, and start listening for the next version
33                 // right away.
34                 refresh()
35             } else {
36                 if (refresh.next !== null)
37                     window.clearTimeout(refresh.next)
38                 refresh.next = window.setTimeout(refresh, 5000)
39             }
40         })
41 }
42
43 var Home = {
44     view: function(vnode) {
45         return [
46             m('nav.navbar.navbar-toggleable-md.navbar-inverse.bg-primary',
47               m('a.navbar-brand[href=#]', 'arvados-boot'),
48               m('.collapse.navbar-collapse',
49                 m('ul.navbar-nav',
50                   m('li.nav-item.active',
51                     m('a.nav-link[href=/]', {config: m.route}, 'health', m('span.sr-only', '(current)')))))),
52             m('.x-spacer', {height: '1em'}),
53             m('table.table', {style: {width: '350px'}},
54               m('tbody', ctl().Tasks.map(function(task) {
55                   return m('tr', [
56                       m('td', task.ShortName),
57                       m('td',
58                         m('span.badge',
59                           {class: task.State == 'OK' ? 'badge-success' : 'badge-danger'},
60                           task.State)),
61                   ])
62               }))),
63         ]
64     }
65 }
66
67 m.route(document.getElementById('app'), '/', {
68     '/': Home,
69 })
70
71 refresh()