Better reconnect logic.

This commit is contained in:
Tony Garnock-Jones 2012-05-01 15:39:06 -04:00
parent dd969a4b31
commit 8ae2c89490
8 changed files with 96 additions and 50 deletions

View File

@ -17,13 +17,15 @@
</head>
<body>
<div class="navbar navbar-fixed-top"><div class="navbar-inner"><div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></a><a class="brand" href="http://github.com/tonyg/ocamlmsg/">Ocamlmsg</a><div class="nav-collapse">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></a><a class="brand" href="/">Ocamlmsg</a><div class="nav-collapse">
<ul class="nav">
<li class="btn-danger"><a href="about.html">About</a></li>
<li><a href="/">Main</a></li>
<li><a href="/nodes.html">Nodes</a></li>
</ul>
<ul class="nav pull-right"><li><a id="server_status_message_container"><span id="server_status_message">Connected</span></a></li></ul>
<ul class="nav pull-right">
<li><a id="server_status_message_container"><span id="server_status_message">Connected</span></a></li>
<li><a href="about.html">About</a></li>
</ul>
</div>
</div></div></div>
<div class="container"><body>
@ -33,6 +35,11 @@
Ocamlmsg is a prototype of a sensible recursive message broker.
</p>
<h2>Homepage</h2>
<p>
The project is currently hosted on github at <a href="http://github.com/tonyg/ocamlmsg/">http://github.com/tonyg/ocamlmsg/</a>.
</p>
<h2>Copyright &amp; Licence</h2>
<p>
Ocamlmsg is Copyright (C) 2012 Tony Garnock-Jones.
@ -66,6 +73,6 @@
</p>
</body></div>
<script src="bootstrap/js/bootstrap-transition.js"></script><script src="bootstrap/js/bootstrap-alert.js"></script><script src="bootstrap/js/bootstrap-modal.js"></script><script src="bootstrap/js/bootstrap-dropdown.js"></script><script src="bootstrap/js/bootstrap-scrollspy.js"></script><script src="bootstrap/js/bootstrap-tab.js"></script><script src="bootstrap/js/bootstrap-tooltip.js"></script><script src="bootstrap/js/bootstrap-popover.js"></script><script src="bootstrap/js/bootstrap-button.js"></script><script src="bootstrap/js/bootstrap-collapse.js"></script><script src="bootstrap/js/bootstrap-carousel.js"></script><script src="bootstrap/js/bootstrap-typeahead.js"></script>
<script>Ocamlmsg.install_tap({});</script><script src="bootstrap/js/bootstrap-transition.js"></script><script src="bootstrap/js/bootstrap-alert.js"></script><script src="bootstrap/js/bootstrap-modal.js"></script><script src="bootstrap/js/bootstrap-dropdown.js"></script><script src="bootstrap/js/bootstrap-scrollspy.js"></script><script src="bootstrap/js/bootstrap-tab.js"></script><script src="bootstrap/js/bootstrap-tooltip.js"></script><script src="bootstrap/js/bootstrap-popover.js"></script><script src="bootstrap/js/bootstrap-button.js"></script><script src="bootstrap/js/bootstrap-collapse.js"></script><script src="bootstrap/js/bootstrap-carousel.js"></script><script src="bootstrap/js/bootstrap-typeahead.js"></script>
</body>
</html>

View File

@ -39,10 +39,9 @@
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="http://github.com/tonyg/ocamlmsg/">Ocamlmsg</a>
<a class="brand" href="/">Ocamlmsg</a>
<div class="nav-collapse">
<ul class="nav">
<li class="btn-danger"><a href="about.html">About</a></li>
<xsl:for-each select="document('nav.xml')/navitems/navitem">
<li>
<xsl:if test="@id = $active-section">
@ -54,6 +53,7 @@
</ul>
<ul class="nav pull-right">
<li><a id="server_status_message_container"><span id="server_status_message">Connected</span></a></li>
<li><a href="about.html">About</a></li>
</ul>
</div>
</div>
@ -65,6 +65,7 @@
</div>
<xsl:copy-of select="script" />
<script>Ocamlmsg.install_tap({});</script>
<script src="bootstrap/js/bootstrap-transition.js"></script>
<script src="bootstrap/js/bootstrap-alert.js"></script>

View File

@ -7,6 +7,12 @@
Ocamlmsg is a prototype of a sensible recursive message broker.
</p>
<h2>Homepage</h2>
<p>
The project is currently hosted on github at <a
href="http://github.com/tonyg/ocamlmsg/">http://github.com/tonyg/ocamlmsg/</a>.
</p>
<h2>Copyright &amp; Licence</h2>
<p>
Ocamlmsg is Copyright (C) 2012 Tony Garnock-Jones.

View File

@ -17,13 +17,15 @@
</head>
<body>
<div class="navbar navbar-fixed-top"><div class="navbar-inner"><div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></a><a class="brand" href="http://github.com/tonyg/ocamlmsg/">Ocamlmsg</a><div class="nav-collapse">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></a><a class="brand" href="/">Ocamlmsg</a><div class="nav-collapse">
<ul class="nav">
<li class="btn-danger"><a href="about.html">About</a></li>
<li class="active"><a href="/">Main</a></li>
<li><a href="/nodes.html">Nodes</a></li>
</ul>
<ul class="nav pull-right"><li><a id="server_status_message_container"><span id="server_status_message">Connected</span></a></li></ul>
<ul class="nav pull-right">
<li><a id="server_status_message_container"><span id="server_status_message">Connected</span></a></li>
<li><a href="about.html">About</a></li>
</ul>
</div>
</div></div></div>
<div class="container"><body>
@ -49,6 +51,6 @@
<h2>Debug</h2>
<pre id="debug_container"></pre>
</body></div>
<script>$(document).ready(ui_main);</script><script src="bootstrap/js/bootstrap-transition.js"></script><script src="bootstrap/js/bootstrap-alert.js"></script><script src="bootstrap/js/bootstrap-modal.js"></script><script src="bootstrap/js/bootstrap-dropdown.js"></script><script src="bootstrap/js/bootstrap-scrollspy.js"></script><script src="bootstrap/js/bootstrap-tab.js"></script><script src="bootstrap/js/bootstrap-tooltip.js"></script><script src="bootstrap/js/bootstrap-popover.js"></script><script src="bootstrap/js/bootstrap-button.js"></script><script src="bootstrap/js/bootstrap-collapse.js"></script><script src="bootstrap/js/bootstrap-carousel.js"></script><script src="bootstrap/js/bootstrap-typeahead.js"></script>
<script>$(document).ready(ui_main);</script><script>Ocamlmsg.install_tap({});</script><script src="bootstrap/js/bootstrap-transition.js"></script><script src="bootstrap/js/bootstrap-alert.js"></script><script src="bootstrap/js/bootstrap-modal.js"></script><script src="bootstrap/js/bootstrap-dropdown.js"></script><script src="bootstrap/js/bootstrap-scrollspy.js"></script><script src="bootstrap/js/bootstrap-tab.js"></script><script src="bootstrap/js/bootstrap-tooltip.js"></script><script src="bootstrap/js/bootstrap-popover.js"></script><script src="bootstrap/js/bootstrap-button.js"></script><script src="bootstrap/js/bootstrap-collapse.js"></script><script src="bootstrap/js/bootstrap-carousel.js"></script><script src="bootstrap/js/bootstrap-typeahead.js"></script>
</body>
</html>

View File

@ -1,30 +1,40 @@
function server_disconnected() {
$("#server_stats_connection_count").text("—");
$("#server_stats_boot_time").text("—");
$("#server_stats_uptime").text("—");
$("#server_classes").text("—");
}
function refresh_server_stats() {
$.getJSON("/_/server_stats", function (data) {
$("#server_stats_connection_count").text(data.connection_count);
$("#server_stats_boot_time").text(new Date(data.boot_time * 1000));
$("#server_stats_uptime").text(data.uptime);
$("#server_classes").text(data.classes.join(", "));
switch (Ocamlmsg.$tap.readyState) {
case 0: // connecting
case 1: // open
case 2: // closing
break;
case 3: // closed
Ocamlmsg.force_reinstall();
}
}).error(server_disconnected);
}
function ui_main() {
refresh_server_stats();
setInterval(refresh_server_stats, 5000);
var uptime = -1;
var refresh_pending = false;
function server_disconnected() {
$("#server_stats_connection_count").text("—");
$("#server_stats_boot_time").text("—");
set_uptime(-1);
$("#server_classes").text("—");
}
function set_uptime(new_uptime) {
uptime = new_uptime;
if (uptime == -1) {
$("#server_stats_uptime").text("—");
} else {
$("#server_stats_uptime").text(uptime);
}
}
function refresh_server_stats() {
$.getJSON("/_/server_stats", function (data) {
$("#server_stats_connection_count").text(data.connection_count);
$("#server_stats_boot_time").text(new Date(data.boot_time * 1000));
set_uptime(data.uptime);
$("#server_classes").text(data.classes.join(", "));
}).error(server_disconnected);
refresh_pending = false;
}
function bump_uptime() {
if (uptime != -1) {
set_uptime(uptime + 1);
}
}
setInterval(bump_uptime, 1000);
Ocamlmsg.$open_hooks.push(function (event, stream) {
refresh_server_stats();
@ -34,9 +44,11 @@ function ui_main() {
Ocamlmsg.subscribe("system.log", "", "log_messages", "completion3");
});
Ocamlmsg.$close_hooks.push(server_disconnected);
Ocamlmsg.install_tap({
message: function (event, stream) {
$("#debug_container").append(JSON.stringify(event.data) + "\n");
},
Ocamlmsg.$message_hooks.push(function (event, stream) {
if (!refresh_pending) {
refresh_pending = true;
setTimeout(refresh_server_stats, 1000);
}
$("#debug_container").append(JSON.stringify(event.data) + "\n");
});
}

View File

@ -17,13 +17,15 @@
</head>
<body>
<div class="navbar navbar-fixed-top"><div class="navbar-inner"><div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></a><a class="brand" href="http://github.com/tonyg/ocamlmsg/">Ocamlmsg</a><div class="nav-collapse">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></a><a class="brand" href="/">Ocamlmsg</a><div class="nav-collapse">
<ul class="nav">
<li class="btn-danger"><a href="about.html">About</a></li>
<li><a href="/">Main</a></li>
<li class="active"><a href="/nodes.html">Nodes</a></li>
</ul>
<ul class="nav pull-right"><li><a id="server_status_message_container"><span id="server_status_message">Connected</span></a></li></ul>
<ul class="nav pull-right">
<li><a id="server_status_message_container"><span id="server_status_message">Connected</span></a></li>
<li><a href="about.html">About</a></li>
</ul>
</div>
</div></div></div>
<div class="container"><body>
@ -47,6 +49,6 @@
</div>
</div>
</body></div>
<script>$(document).ready(nodes_main);</script><script src="bootstrap/js/bootstrap-transition.js"></script><script src="bootstrap/js/bootstrap-alert.js"></script><script src="bootstrap/js/bootstrap-modal.js"></script><script src="bootstrap/js/bootstrap-dropdown.js"></script><script src="bootstrap/js/bootstrap-scrollspy.js"></script><script src="bootstrap/js/bootstrap-tab.js"></script><script src="bootstrap/js/bootstrap-tooltip.js"></script><script src="bootstrap/js/bootstrap-popover.js"></script><script src="bootstrap/js/bootstrap-button.js"></script><script src="bootstrap/js/bootstrap-collapse.js"></script><script src="bootstrap/js/bootstrap-carousel.js"></script><script src="bootstrap/js/bootstrap-typeahead.js"></script>
<script>$(document).ready(nodes_main);</script><script>Ocamlmsg.install_tap({});</script><script src="bootstrap/js/bootstrap-transition.js"></script><script src="bootstrap/js/bootstrap-alert.js"></script><script src="bootstrap/js/bootstrap-modal.js"></script><script src="bootstrap/js/bootstrap-dropdown.js"></script><script src="bootstrap/js/bootstrap-scrollspy.js"></script><script src="bootstrap/js/bootstrap-tab.js"></script><script src="bootstrap/js/bootstrap-tooltip.js"></script><script src="bootstrap/js/bootstrap-popover.js"></script><script src="bootstrap/js/bootstrap-button.js"></script><script src="bootstrap/js/bootstrap-collapse.js"></script><script src="bootstrap/js/bootstrap-carousel.js"></script><script src="bootstrap/js/bootstrap-typeahead.js"></script>
</body>
</html>

View File

@ -27,5 +27,4 @@ function refresh_node_list() {
function nodes_main() {
Ocamlmsg.$open_hooks.push(refresh_node_list);
Ocamlmsg.install_tap({});
}

View File

@ -3,12 +3,17 @@ var Ocamlmsg = {
$args: null,
$open_hooks: [],
$message_hooks: [],
$close_hooks: [],
run_open_hooks: function (event, stream) {
$.each(Ocamlmsg.$open_hooks, function (i, f) { f(event, stream); });
},
run_message_hooks: function (event, stream) {
$.each(Ocamlmsg.$message_hooks, function (i, f) { f(event, stream); });
},
run_close_hooks: function (event, stream) {
$.each(Ocamlmsg.$close_hooks, function (i, f) { f(event, stream); });
},
@ -67,21 +72,33 @@ var Ocamlmsg = {
Ocamlmsg._send(Ocamlmsg._create(classname, arg, reply_name, factory));
},
install_tap: function (args) {
Ocamlmsg.$args = args;
_install_tap: function () {
Ocamlmsg.$tap = $.stream("/_/tap", {
type: "http",
dataType: "json",
enableXDR: true,
open: Ocamlmsg.run_open_hooks,
message: args.message,
message: Ocamlmsg.run_message_hooks,
error: Ocamlmsg.run_close_hooks,
close: Ocamlmsg.run_close_hooks
});
},
force_reinstall: function () {
Ocamlmsg.install_tap(Ocamlmsg.$args);
install_tap: function (args) {
Ocamlmsg.$args = args;
Ocamlmsg._install_tap();
setInterval(Ocamlmsg.check_connectivity, 5000);
},
check_connectivity: function () {
switch (Ocamlmsg.$tap.readyState) {
case 0: // connecting
case 1: // open
case 2: // closing
break;
case 3: // closed
Ocamlmsg._install_tap();
}
}
}