mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
r20220: Apply patch from Brad Henry with some additional qooxdoo/json-rpc SWAT
functionality: basic admin console.
(This used to be commit 23f8dd44cb
)
This commit is contained in:
parent
5249de8519
commit
ff8ef6c280
22
services/samba/adm.esp
Normal file
22
services/samba/adm.esp
Normal file
@ -0,0 +1,22 @@
|
||||
<%
|
||||
|
||||
jsonrpc_include("resources.esp");
|
||||
|
||||
libinclude("base.js");
|
||||
libinclude("management.js");
|
||||
|
||||
function _echo(params, error) {
|
||||
var echo_string = params[0];
|
||||
return echo_string;
|
||||
}
|
||||
jsonrpc.method.echo = _echo;
|
||||
|
||||
function _nbt_packet_stats(params, error) {
|
||||
var stats = nbtd_statistics();
|
||||
stats.server_status = new Object();
|
||||
stats.server_status = server_status("nbt");
|
||||
return stats;
|
||||
}
|
||||
jsonrpc.method.NBTPacketStats = _nbt_packet_stats;
|
||||
|
||||
%>
|
71
swat/apps/plug-ins/echo.js
Normal file
71
swat/apps/plug-ins/echo.js
Normal file
@ -0,0 +1,71 @@
|
||||
|
||||
// This function takes the main pane widget and jams its widget in the right
|
||||
// sub-pane.
|
||||
|
||||
function _asyncEchoHandler(result, ex, id, paneWidget) {
|
||||
var replyTextArea = null;
|
||||
var refreshButton = null;
|
||||
var echoTextField = null;
|
||||
|
||||
if (ex == null) {
|
||||
// We need to remove anything previously drawn in this area.
|
||||
paneWidget.removeAll();
|
||||
|
||||
echoTextField = new qx.ui.form.TextField();
|
||||
echoTextField.setTop(0);
|
||||
echoTextField.setLeft(0);
|
||||
|
||||
refreshButton = new qx.ui.form.Button("Refresh");
|
||||
refreshButton.setTop(0);
|
||||
refreshButton.setLeft(150);
|
||||
|
||||
replyTextArea = new
|
||||
qx.ui.form.TextArea(result);
|
||||
replyTextArea.setWrap(true);
|
||||
replyTextArea.setWidth("100%");
|
||||
replyTextArea.setHeight("50%");
|
||||
replyTextArea.setTop(30);
|
||||
replyTextArea.setBottom(50);
|
||||
replyTextArea.setLeft(0);
|
||||
replyTextArea.setRight(20);
|
||||
} else {
|
||||
alert("Async(" + id + ") exception: " + ex);
|
||||
}
|
||||
paneWidget.add(replyTextArea);
|
||||
paneWidget.add(refreshButton);
|
||||
paneWidget.add(echoTextField);
|
||||
|
||||
// Provide a handler for the button.
|
||||
with (refreshButton) {
|
||||
addEventListener("execute", function(e) {
|
||||
this.debug("executed: " + this.getLabel());
|
||||
this.debug("echoTextField.getValue(): " + echoTextField.getValue());
|
||||
_echoPlugInDisplay(paneWidget, echoTextField.getValue());
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
function _echoPlugInDisplay(paneWidget, echoText) {
|
||||
if (echoText == null) {
|
||||
echoText = "Hello World!";
|
||||
}
|
||||
|
||||
var rpc = new qx.io.remote.Rpc();
|
||||
rpc.setTimeout(60000);
|
||||
rpc.setUrl("/services/");
|
||||
rpc.setServiceName("samba.adm");
|
||||
rpc.setCrossDomain(false);
|
||||
|
||||
mycall = rpc.callAsync(
|
||||
function(result, ex, id) {
|
||||
_asyncEchoHandler(result, ex, id, paneWidget);
|
||||
},
|
||||
"echo",
|
||||
echoText);
|
||||
}
|
||||
|
||||
function EchoPlugIn() {
|
||||
var o = new Object();
|
||||
o.display = _echoPlugInDisplay;
|
||||
return o;
|
||||
}
|
62
swat/apps/plug-ins/nbt_stats.js
Normal file
62
swat/apps/plug-ins/nbt_stats.js
Normal file
@ -0,0 +1,62 @@
|
||||
|
||||
// This function takes the main pane widget and jams its widget in the right
|
||||
// sub-pane.
|
||||
|
||||
function _asyncNBTStatsHandler(result, ex, id, paneWidget) {
|
||||
var statusTextArea = null;
|
||||
|
||||
var listData = [];
|
||||
listData.push({
|
||||
server_status : { text : result.server_status },
|
||||
total_received : { text : result.total_received.toString() },
|
||||
total_sent : { text : result.total_sent.toString() },
|
||||
query_count : { text : result.query_count.toString() },
|
||||
release_count : { text : result.release_count.toString() },
|
||||
register_count : { text : result.register_count.toString() }
|
||||
});
|
||||
|
||||
if (ex == null) {
|
||||
// We need to remove anything previously drawn in this area.
|
||||
paneWidget.removeAll();
|
||||
|
||||
statusTextArea = new
|
||||
qx.ui.form.TextArea("Server Status: " +
|
||||
result.server_status.toString() + "\n" +
|
||||
"Total Received: " +
|
||||
result.total_received.toString() + "\n" +
|
||||
"Total Sent: " +
|
||||
result.total_sent.toString() + "\n" +
|
||||
"Query Count: " +
|
||||
result.query_count.toString() + "\n" +
|
||||
"Release Count: " +
|
||||
result.release_count.toString() + "\n" +
|
||||
"Register Count: " +
|
||||
result.register_count.toString() + "\n");
|
||||
statusTextArea.setWrap(true);
|
||||
statusTextArea.setWidth("100%");
|
||||
statusTextArea.setHeight("100%");
|
||||
} else {
|
||||
alert("Async(" + id + ") exception: " + ex);
|
||||
}
|
||||
paneWidget.add(statusTextArea);
|
||||
}
|
||||
|
||||
function _NBTStatsPlugInDisplay(paneWidget) {
|
||||
var rpc = new qx.io.remote.Rpc();
|
||||
rpc.setTimeout(60000);
|
||||
rpc.setUrl("/services/");
|
||||
rpc.setServiceName("samba.adm");
|
||||
rpc.setCrossDomain(false);
|
||||
|
||||
mycall = rpc.callAsync(
|
||||
function(result, ex, id) {
|
||||
_asyncNBTStatsHandler(result, ex, id, paneWidget);
|
||||
},
|
||||
"NBTPacketStats");
|
||||
}
|
||||
|
||||
function NBTStatsPlugIn() {
|
||||
var o = new Object();
|
||||
o.display = _NBTStatsPlugInDisplay;
|
||||
return o;
|
||||
}
|
258
swat/apps/samba/utils/admin_console.html
Normal file
258
swat/apps/samba/utils/admin_console.html
Normal file
@ -0,0 +1,258 @@
|
||||
<HTML>
|
||||
|
||||
<HEAD>
|
||||
<META http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<TITLE>Samba Admin Console</TITLE>
|
||||
|
||||
<LINK type="text/css" rel="stylesheet" href="../../resource/css/layout-samba.css"/>
|
||||
<!--[if IE]>
|
||||
<LINK
|
||||
type="text/css" rel="stylesheet" href="../../resource/css/layout-samba.css"/>
|
||||
<![endif]-->
|
||||
<SCRIPT type="text/javascript" src="../../script/qx.js"></SCRIPT>
|
||||
|
||||
<!--> Include plug-in applications <!-->
|
||||
<SCRIPT type="text/javascript" src="../../plug-ins/echo.js"></SCRIPT>
|
||||
<SCRIPT type="text/javascript" src="../../plug-ins/nbt_stats.js"></SCRIPT>
|
||||
</HEAD>
|
||||
|
||||
<BODY>
|
||||
<SCRIPT type="text/javascript" src="../../script/layout-samba.js"></SCRIPT>
|
||||
<DIV style="position: absolute; background-color: transparent; right:0; top:0; z-index: 1000000001;">
|
||||
<IMG src="../../../images/logo.png">
|
||||
</DIV>
|
||||
|
||||
<DIV id="demoHead">
|
||||
Samba Administrative Console
|
||||
</DIV>
|
||||
<SCRIPT type="text/javascript">
|
||||
|
||||
// All global variables will be members of this object.
|
||||
globals = new Object();
|
||||
|
||||
//paneWidget is the split-pane.
|
||||
globals.paneWidget = qx.ui.splitpane.SplitPane;
|
||||
|
||||
//appTree is paneWidget's left pane.
|
||||
globals.appTree = new Object();
|
||||
|
||||
//appInstance is paneWidget's right pane.
|
||||
globals.appInstance = new qx.ui.layout.CanvasLayout();
|
||||
|
||||
function createApplicationTree() {
|
||||
var app_treeRowStructure =
|
||||
qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard(
|
||||
"Plug-in Apps",
|
||||
"icon/16/desktop.png",
|
||||
"icon/16/dictionary.png");
|
||||
var app_tree = new
|
||||
qx.ui.treefullcontrol.Tree(app_treeRowStructure);
|
||||
|
||||
with (app_tree) {
|
||||
setBackgroundColor(255);
|
||||
setBorder(qx.renderer.border.BorderPresets.getInstance().inset);
|
||||
setOverflow("scrollY");
|
||||
setWidth("100%");
|
||||
setHeight("100%");
|
||||
};
|
||||
|
||||
app_tree.getManager().addEventListener("changeSelection", function(e) {
|
||||
sel = new Object();
|
||||
sel = app_tree.getSelectedElement();
|
||||
var appName = sel.getUserData("PlugIn Name");
|
||||
this.debug("changeSelection: " + appName);
|
||||
var obj = sel.getUserData("PlugIn Object");
|
||||
|
||||
obj.display(globals.appInstance);
|
||||
|
||||
});
|
||||
|
||||
return app_tree;
|
||||
}
|
||||
|
||||
function addButtonClickHandler(addMenu, el, e) {
|
||||
if (addMenu.isSeeable()) {
|
||||
addMenu.hide();
|
||||
} else {
|
||||
addMenu.setLeft(qx.dom.DomLocation.getPageBoxLeft(el));
|
||||
addMenu.setTop(qx.dom.DomLocation.getPageBoxBottom(el));
|
||||
addMenu.show();
|
||||
};
|
||||
}
|
||||
|
||||
function removeButtonExecuteHandler() {
|
||||
// Get list of installed plug-in applications.
|
||||
// Display list as a menu
|
||||
}
|
||||
|
||||
function aboutButtonExecuteHandler(aboutWindow) {
|
||||
aboutWindow.open();
|
||||
}
|
||||
|
||||
function addMenuButtonExecuteHandler(plugInName, plugIn) {
|
||||
treeRowStructure =
|
||||
qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard(plugInName);
|
||||
var treeElement =
|
||||
new qx.ui.treefullcontrol.TreeFolder(treeRowStructure);
|
||||
|
||||
treeElement.setUserData("PlugIn Name", plugInName);
|
||||
treeElement.setUserData("PlugIn Object", plugIn);
|
||||
|
||||
globals.appTree.add(treeElement);
|
||||
|
||||
// Select the most recently added plugin in the tree-menu.
|
||||
globals.appTree.setSelectedElement(globals.appTree.getLastTreeChild());
|
||||
|
||||
plugIn.display(globals.appInstance);
|
||||
}
|
||||
|
||||
function createConsoleButtons(mainWindow) {
|
||||
// Get list of available plug-in applications.
|
||||
// Display list of applications as a menu.
|
||||
var addMenu = new qx.ui.menu.Menu();
|
||||
var descriptionMenuButton =
|
||||
new qx.ui.menu.MenuButton("Select a plug-in.");
|
||||
var menuSeparator = new qx.ui.menu.MenuSeparator();
|
||||
var echoMenuButton = new qx.ui.menu.MenuButton("Echo");
|
||||
|
||||
with (echoMenuButton) {
|
||||
addEventListener("execute", function(e) {
|
||||
this.debug("executed: " + this.getLabel());
|
||||
var plugIn = new EchoPlugIn();
|
||||
addMenuButtonExecuteHandler("Echo Test", plugIn);
|
||||
});
|
||||
};
|
||||
|
||||
var NBTStatsMenuButton =
|
||||
new qx.ui.menu.MenuButton("NBT Packet Statistics");
|
||||
|
||||
with (NBTStatsMenuButton) {
|
||||
addEventListener("execute", function(e) {
|
||||
this.debug("executed: " + this.getLabel());
|
||||
var plugIn = new NBTStatsPlugIn();
|
||||
addMenuButtonExecuteHandler("NBT Packet Statistics", plugIn);
|
||||
});
|
||||
};
|
||||
|
||||
addMenu.add(descriptionMenuButton);
|
||||
addMenu.add(menuSeparator);
|
||||
addMenu.add(echoMenuButton);
|
||||
addMenu.add(NBTStatsMenuButton);
|
||||
|
||||
mainWindow.add(addMenu);
|
||||
|
||||
var addButton = new qx.ui.form.Button("Add Plug-in");
|
||||
|
||||
with (addButton) {
|
||||
setTop(0);
|
||||
setLeft(0);
|
||||
|
||||
addEventListener("click", function(e) {
|
||||
this.debug("clicked: " + this.getLabel());
|
||||
var el = this.getElement();
|
||||
addButtonClickHandler(addMenu, el);
|
||||
e.setPropagationStopped(true);
|
||||
});
|
||||
|
||||
addEventListener("mousedown", function(e) {
|
||||
this.debug("mousedown: " + this.getLabel());
|
||||
e.setPropagationStopped(true);
|
||||
});
|
||||
|
||||
setEnabled(true);
|
||||
};
|
||||
|
||||
var removeButton = new qx.ui.form.Button("Remove Plug-in");
|
||||
with (removeButton) {
|
||||
setTop(0);
|
||||
setLeft(66);
|
||||
|
||||
addEventListener("execute", function(e) {
|
||||
this.debug("Executed: " + this.getLabel());
|
||||
removeButtonExecuteHandler();
|
||||
});
|
||||
|
||||
setEnabled(true);
|
||||
};
|
||||
|
||||
var aboutWindow = new qx.ui.window.Window("About");
|
||||
aboutWindow.setSpace(100, "auto", 100, "auto");
|
||||
aboutWindow.setModal(false);
|
||||
aboutWindow.setShowMinimize(false);
|
||||
aboutWindow.setShowMaximize(false);
|
||||
|
||||
var aboutText = new qx.ui.basic.Label("Blah.");
|
||||
aboutWindow.add(aboutText);
|
||||
|
||||
mainWindow.add(aboutWindow);
|
||||
|
||||
var aboutButton = new qx.ui.form.Button("About");
|
||||
|
||||
with (aboutButton) {
|
||||
setTop(0);
|
||||
setLeft(154);
|
||||
addEventListener("execute", function(e) {
|
||||
this.debug("Executed: " + this.getLabel());
|
||||
aboutButtonExecuteHandler(aboutWindow);
|
||||
});
|
||||
setEnabled(true);
|
||||
};
|
||||
|
||||
mainWindow.add(addButton);
|
||||
mainWindow.add(removeButton);
|
||||
mainWindow.add(aboutButton);
|
||||
}
|
||||
|
||||
qx.core.Init.getInstance().defineMain(
|
||||
function() {
|
||||
// Enable JSON-RPC debugging.
|
||||
qx.Settings.setCustomOfClass("qx.io.Json", "enableDebug", true);
|
||||
|
||||
var consoleFrame = new qx.ui.layout.CanvasLayout;
|
||||
consoleFrame.setLocation(0,60);
|
||||
consoleFrame.setBottom(120);
|
||||
consoleFrame.setRight(280);
|
||||
consoleFrame.setPadding(20);
|
||||
|
||||
consoleFrame.addToDocument();
|
||||
|
||||
var mainWindow = new qx.ui.window.Window("Console");
|
||||
mainWindow.setSpace(0, 700, 0, 400);
|
||||
mainWindow.allowMinimize = false;
|
||||
mainWindow.showMinimize = false;
|
||||
|
||||
// The default window move method is slow.
|
||||
mainWindow.setMoveMethod("frame");
|
||||
|
||||
consoleFrame.add(mainWindow);
|
||||
|
||||
// We need buttons to add and remove plug-ins.
|
||||
createConsoleButtons(mainWindow);
|
||||
|
||||
// Make a splitpane.
|
||||
globals.paneWidget = new qx.ui.splitpane.HorizontalSplitPane("1*","2*");
|
||||
globals.paneWidget.setEdge(28,0);
|
||||
globals.paneWidget.setLiveResize(true);
|
||||
|
||||
mainWindow.add(globals.paneWidget);
|
||||
|
||||
// plug-in application tree is on the left.
|
||||
globals.appTree = createApplicationTree();
|
||||
|
||||
globals.paneWidget.addLeft(globals.appTree);
|
||||
|
||||
// What is drawn in the right pane is up to the plug-in.
|
||||
// It is a blank canvas for now.
|
||||
globals.appInstance.setTop(0);
|
||||
globals.appInstance.setLeft(0);
|
||||
globals.appInstance.setBottom(50);
|
||||
globals.appInstance.setRight(20);
|
||||
|
||||
globals.paneWidget.addRight(globals.appInstance);
|
||||
|
||||
mainWindow.open();
|
||||
}
|
||||
);
|
||||
</SCRIPT>
|
||||
</BODY>
|
||||
</HTML>
|
@ -38,6 +38,7 @@ swat_menus.esptest = simple_menu(
|
||||
swat_menus.json = simple_menu(
|
||||
"JSON Tests",
|
||||
"ldb browser", session_uri("/apps/samba/utils/ldbbrowse.html"),
|
||||
"admin console", session_uri("/apps/samba/utils/admin_console.html"),
|
||||
"qooxdoo examples", session_uri("/apps/qooxdoo-examples/index.html"));
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user