1 module.exports = ArvApiStatusComponent;
3 var m = require('mithril')
4 , util = require('app/util')
5 , DataManagerGraph = require('./component.dmgraph');
7 function ArvApiStatusComponent(connection) {
9 apistatus.vm = (function() {
11 vm.connection = connection;
12 vm.currentUser = m.prop({});
13 vm.dd = connection.discoveryDoc;
15 vm.init = function() {
20 vm.keepServices = m.prop([]);
21 vm.nodes = m.prop([]);
22 vm.refresh = function() {
24 'KeepService', 'list', {}).then(vm.keepServices).then(m.redraw);
26 'Node', 'list', {}).then(vm.nodes).then(m.redraw);
28 'User', 'current', {}).then(vm.currentUser).then(m.redraw);
30 vm.logout = function() {
31 vm.connection.token(undefined);
33 vm.ddSummary = function() {
34 return !vm.dd() ? {} : {
35 apiVersion: vm.dd().version + ' (' + vm.dd().revision + ')',
36 sourceVersion: m('a', {
37 href: 'https://arvados.org/projects/arvados/repository/changes?rev=' + vm.dd().source_version
38 }, vm.dd().source_version),
39 generatedAt: vm.dd().generatedAt,
40 websocket: util.choose(vm.connection.webSocket().readyState, {
41 0: m('span.label.label-warning', ['connecting']),
42 1: m('span.label.label-success', ['OK']),
43 2: m('span.label.label-danger', ['closing']),
44 3: m('span.label.label-danger', ['closed']),
45 }) || m('span.label.label-danger',
46 {title: ('advertised websocketUrl: ' +
47 vm.dd().websocketUrl)}, ['none'])
50 vm.dmGraphCtrl = new DataManagerGraph.controller({
51 connection: connection,
55 apistatus.controller = function() {
58 apistatus.view = function() {
59 var vm = apistatus.vm;
60 var ddSummary = vm.ddSummary();
61 return m('.panel.panel-info.arv-bs-api-status', [
63 vm.connection.apiPrefix(),
64 !vm.dd() ? '' : m('.pull-right', [
65 util.choose(!!vm.connection.token(), {
67 return [vm.currentUser().email,
69 m('a.btn.btn-xs.btn-default',
70 {onclick: vm.logout}, 'Log out')];
73 return m('a.btn.btn-xs.btn-primary',
74 {href: vm.connection.loginLink()}, 'Log in');
79 m('.panel-body', !vm.dd() ? [vm.connection.state()] : [
82 Object.keys(ddSummary).map(function(key) {
84 m('.col-sm-4.lighten', key),
85 m('.col-sm-8', ddSummary[key]),
90 '' + vm.keepServices().length + ' Keep services',
91 vm.keepServices().map(function(keepService) {
93 m('span.label.label-default',
94 keepService.service_type),
97 {href: '/show/'+keepService.uuid,
99 keepService.service_host,
101 keepService.service_port,
109 '' + vm.nodes().length + ' worker nodes',
110 vm.nodes().filter(function(node) {
111 return node.crunch_worker_state != 'down';
112 }).map(function(node) {
114 m('span.label.label-default', [
115 node.crunch_worker_state,
118 m('a', {href: '/show/'+node.uuid,
122 m('span.label.label-info', {title: 'time since last ping'}, [
123 ((new Date() - Date.parse(node.last_ping_at))/1000).toFixed(),
131 m('.row', 'Collection Job PipelineInstance'.split(' ').map(function(arvModelName) {
132 return m('.col-sm-2', [
133 m('a.btn.btn-xs.btn-default', {
134 style: 'width: 100%',
135 href: '/list/'+vm.connection.apiPrefix()+'/'+arvModelName,
137 }, arvModelName+'s'),
142 DataManagerGraph.view(vm.dmGraphCtrl)