luci2: add network diagnostics view
[project/luci2/ui.git] / luci2 / htdocs / luci2 / view / network.diagnostics.js
1 L.ui.view.extend({
2 title: L.tr('Diagnostics'),
3
4 execute: function() {
5 var self = this;
6 var tools = [ ];
7
8 $.when(
9 L.network.runPing('?').then(function(rv) {
10 if (rv.code != -1) tools.push(['runPing', L.tr('IPv4 Ping')]);
11 }),
12 L.network.runPing6('?').then(function(rv) {
13 if (rv.code != -1) tools.push(['runPing6', L.tr('IPv6 Ping')]);
14 }),
15 L.network.runTraceroute('?').then(function(rv) {
16 if (rv.code != -1) tools.push(['runTraceroute', L.tr('IPv4 Traceroute')]);
17 }),
18 L.network.runTraceroute6('?').then(function(rv) {
19 if (rv.code != -1) tools.push(['runTraceroute6', L.tr('IPv6 Tracroute')]);
20 }),
21 L.network.runNslookup('?').then(function(rv) {
22 if (rv.code != -1) tools.push(['runNslookup', L.tr('DNS Lookup')]);
23 })
24 ).then(function() {
25 tools.sort(function(a, b) {
26 if (a[0] < b[0])
27 return -1;
28 else if (a[0] > b[0])
29 return 1;
30 else
31 return 0;
32 });
33
34 for (var i = 0; i < tools.length; i++)
35 $('#tool').append($('<option />').attr('value', tools[i][0]).text(tools[i][1]));
36
37 $('#tool').val('runPing');
38
39 $('#run').click(function() {
40 L.ui.loading(true);
41 L.network[$('#tool').val()]($('#host').val()).then(function(rv) {
42 $('#output').empty().show();
43
44 if (rv.stdout)
45 $('#output').text(rv.stdout);
46
47 if (rv.stderr)
48 $('#output').append($('<span />').css('color', 'red').text(rv.stderr));
49
50 L.ui.loading(false);
51 });
52 });
53 });
54 }
55 });