summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-app-keepalived/htdocs/luci-static/resources/view/keepalived/overview.js
diff options
context:
space:
mode:
Diffstat (limited to 'applications/luci-app-keepalived/htdocs/luci-static/resources/view/keepalived/overview.js')
-rw-r--r--applications/luci-app-keepalived/htdocs/luci-static/resources/view/keepalived/overview.js75
1 files changed, 75 insertions, 0 deletions
diff --git a/applications/luci-app-keepalived/htdocs/luci-static/resources/view/keepalived/overview.js b/applications/luci-app-keepalived/htdocs/luci-static/resources/view/keepalived/overview.js
new file mode 100644
index 0000000000..7e261bf82d
--- /dev/null
+++ b/applications/luci-app-keepalived/htdocs/luci-static/resources/view/keepalived/overview.js
@@ -0,0 +1,75 @@
+'use strict';
+'require view';
+'require form';
+'require uci';
+'require rpc';
+'require poll';
+
+var callKeepalivedStatus = rpc.declare({
+ object: 'keepalived',
+ method: 'dump',
+ expect: { },
+});
+
+return view.extend({
+ load: function() {
+ return Promise.all([
+ uci.load('keepalived'),
+ ]);
+ },
+
+ render: function() {
+ var table =
+ E('table', { 'class': 'table lases' }, [
+ E('tr', { 'class': 'tr table-titles' }, [
+ E('th', { 'class': 'th' }, _('Name')),
+ E('th', { 'class': 'th' }, _('Interface')),
+ E('th', { 'class': 'th' }, _('Active State/State')),
+ E('th', { 'class': 'th' }, _('Probes Sent')),
+ E('th', { 'class': 'th' }, _('Probes Received')),
+ E('th', { 'class': 'th' }, _('Last Transition')),
+ E([])
+ ])
+ ]);
+
+ poll.add(function() {
+ return callKeepalivedStatus().then(function(instancesInfo) {
+ var targets = Array.isArray(instancesInfo.status) ? instancesInfo.status : [];
+ var instances = uci.sections('keepalived', 'vrrp_instance');
+
+ cbi_update_table(table,
+ targets.map(function(target) {
+ var state = (target.stats.become_master - target.stats.release_master) ? 'MASTER' : 'BACKUP';
+ if (instances != '') {
+ for (var i = 0; i < instances.length; i++) {
+ if (instances[i]['name'] == target.data.iname) {
+ state = state + '/' + instances[i]['state'];
+ break;
+ }
+ }
+ }
+ return [
+ target.data.iname,
+ target.data.ifp_ifname,
+ state,
+ target.stats.advert_sent,
+ target.stats.advert_rcvd,
+ new Date(target.data.last_transition * 1000)
+ ];
+ }),
+ E('em', _('There are no active instances'))
+ );
+ });
+ });
+
+ return E([
+ E('h3', _('Keepalived Instances Status')),
+ E('br'),
+ table
+ ]);
+ },
+
+ handleSave: null,
+ handleSaveApply:null,
+ handleReset: null
+});