r8590: added server status utility functions for checking on the status of a task...
[jra/samba/.git] / source4 / scripting / libjs / management.js
1 /*
2         backend code for Samba4 management
3         Copyright Andrew Tridgell 2005
4         Released under the GNU GPL v2 or later
5 */
6
7
8 /*
9   return a list of current sessions 
10 */
11 function smbsrv_sessions()
12 {
13         var conn = new Object();
14         var irpc = irpc_init();
15         status = irpc_connect(conn, "smb_server");
16         if (status.is_ok != true) {
17                 return undefined;
18         }
19
20         var io = irpcObj();
21         io.input.level = irpc.SMBSRV_INFO_SESSIONS;
22         status = irpc.smbsrv_information(conn, io);
23         if (status.is_ok != true) {
24                 return undefined;
25         }
26
27         /* gather the results into a single array */
28         var i, count=0, ret = new Object();
29         for (i=0;i<io.results.length;i++) {
30                 var sessions = io.results[i].info.sessions.sessions;
31                 var j;
32                 for (j=0;j<sessions.length;j++) {
33                         ret[count] = sessions[j];
34                         count++;
35                 }
36         }
37         ret.length = count;
38         return ret;
39 }
40
41 /*
42   return a list of current tree connects
43 */
44 function smbsrv_trees()
45 {
46         var conn = new Object();
47         var irpc = irpc_init();
48         status = irpc_connect(conn, "smb_server");
49         if (status.is_ok != true) {
50                 return undefined;
51         }
52
53         var io = irpcObj();
54         io.input.level = irpc.SMBSRV_INFO_TREES;
55         status = irpc.smbsrv_information(conn, io);
56         if (status.is_ok != true) {
57                 return undefined;
58         }
59
60         /* gather the results into a single array */
61         var i, count=0, ret = new Object();
62         for (i=0;i<io.results.length;i++) {
63                 var trees = io.results[i].info.trees.trees;
64                 var j;
65                 for (j=0;j<trees.length;j++) {
66                         ret[count] = trees[j];
67                         count++;
68                 }
69         }
70         ret.length = count;
71         return ret;
72 }
73
74 /*
75   return nbtd statistics
76 */
77 function nbtd_statistics()
78 {
79         var conn = new Object();
80         var irpc = irpc_init();
81         status = irpc_connect(conn, "nbt_server");
82         if (status.is_ok != true) {
83                 return undefined;
84         }
85
86         var io = irpcObj();
87         io.input.level = irpc.NBTD_INFO_STATISTICS;
88         status = irpc.nbtd_information(conn, io);
89         if (status.is_ok != true) {
90                 return undefined;
91         }
92         return io.results[0].info.stats;
93 }
94
95 /*
96   see if a service is enabled
97 */
98 function service_enabled(name)
99 {
100         var services = lpGet("server services");
101         var i;
102         for (i=0;i<services.length;i++) {
103                 if (services[i] == name) {
104                         return true;
105                 }
106         }
107         return false;
108 }
109
110 /*
111   show status of a server
112 */
113 function server_status(name)
114 {
115         var conn = new Object();
116         var i;
117         var io;
118         var irpc = irpc_init();
119
120         if (!service_enabled(name)) {
121                 return "DISABLED";
122         }
123         
124         status = irpc_connect(conn, name + "_server");
125         if (status.is_ok != true) {
126                 return "DOWN";
127         }
128
129         var io = irpcObj();
130         status = irpc.irpc_uptime(conn, io);
131         if (status.is_ok != true) {
132                 return "NOT RESPONDING";
133         }
134
135         return "RUNNING";
136 }
137
138 /*
139   show status of a stream server
140 */
141 function stream_server_status(name)
142 {
143         var conn = new Object();
144         var irpc = irpc_init();
145
146         if (!service_enabled(name)) {
147                 return "DISABLED";
148         }
149         status = irpc_connect(conn, name + "_server");
150         if (status.is_ok != true) {
151                 return "0 connections";
152         }
153
154         var io = irpcObj();
155         status = irpc.irpc_uptime(conn, io);
156         if (status.is_ok != true) {
157                 return "NOT RESPONDING";
158         }
159
160         var n = io.results.length;
161         return sprintf("%u connection%s", n, plural(n));
162 }