slash commands: Add /ping command (via zcommand).

This adds a /ping command that will be useful for users
to see what the round trip to the Zulip server is (including
only a tiny bit of actual server time to basically give a
200).

It also introduce the "/zcommand" endpoint and zcommand.js
module.
This commit is contained in:
Steve Howell
2018-06-02 11:59:02 +00:00
committed by Tim Abbott
parent 87ba752758
commit 4b2e8b83c4
8 changed files with 119 additions and 1 deletions

82
static/js/zcommand.js Normal file
View File

@@ -0,0 +1,82 @@
var zcommand = (function () {
var exports = {};
/*
What in the heck is a zcommand?
A zcommand is basically a specific type of slash
command where the client does almost no work and
the server just does something pretty simple like
flip a setting.
The first zcommand we wrote is for "/ping", and
the server just responds with a 200 for that.
Not all slash commands use zcommand under the hood.
For more exotic things like /poll see submessage.js
and widgetize.js
*/
exports.send = function (opts) {
var command = opts.command;
var on_success = opts.on_success;
var data = {
command: command,
};
channel.post({
url: '/json/zcommand',
data: data,
success: function (data) {
on_success(data);
},
error: function () {
exports.tell_user('server did not respond');
},
});
};
exports.tell_user = function (msg) {
// This is a bit hacky, but we don't have a super easy API now
// for just telling users stuff.
$('#compose-send-status').removeClass(common.status_classes)
.addClass('alert-error')
.stop(true).fadeTo(0, 1);
$('#compose-error-msg').text(msg);
};
exports.process = function (message_content) {
var content = message_content.trim();
if (content === '/ping') {
var start_time = new Date();
exports.send({
command: 'ping',
on_success: function () {
var end_time = new Date();
var diff = end_time - start_time;
diff = Math.round(diff);
var msg = "ping time: " + diff + "ms";
exports.tell_user(msg);
},
});
return true;
}
// It is incredibly important here to return false
// if we don't see an actual zcommand, so that compose.js
// knows this is a normal message.
return false;
};
return exports;
}());
if (typeof module !== 'undefined') {
module.exports = zcommand;
}