Make the Aphlict server more resilient.

Summary:
Currently, the Aphlict server will crash if invalid JSON data is `POST`ed to it. I have fixed this to, instead, return a 400. Also made some minor formatting changes.

Ref T4324. Ref T5284. Also, modify the data structure that is passed around (i.e. `POST`ed to the Aphlict server and broadcast to the Aphlict clients) to include the subscribers. Initially, I figured that we shouldn't expose this information to the clients... however, it is necessary for T4324 that the `AphlictMaster` is able to route a notification to the appropriate clients.

Test Plan:
Making the following `curl` request: `curl --data "{" http://localhost:22281/`.

**Before**
```
sudo ./bin/aphlict debug
Starting Aphlict server in foreground...
Launching server:

    $ 'nodejs' '/usr/src/phabricator/src/applications/aphlict/management/../../../../support/aphlict/server/aphlict_server.js' --port='22280' --admin='22281' --host='localhost' --user='aphlict'

[Wed Jun 11 2014 17:07:51 GMT+0000 (UTC)] Started Server (PID 2033)
[Wed Jun 11 2014 17:07:55 GMT+0000 (UTC)]
<<< UNCAUGHT EXCEPTION! >>>

SyntaxError: Unexpected end of input
>>> Server exited!
```

**After**
(No output... the bad JSON is caught and a 400 is returned)

Reviewers: #blessed_reviewers, epriestley

Reviewed By: #blessed_reviewers, epriestley

Subscribers: epriestley, Korvin

Maniphest Tasks: T4324, T5284

Differential Revision: https://secure.phabricator.com/D9480
This commit is contained in:
Joshua Spence
2014-06-11 10:16:31 -07:00
committed by epriestley
parent bb06e36986
commit ab4324148a
10 changed files with 65 additions and 62 deletions

View File

@@ -4,16 +4,16 @@ var fs = require('fs');
var util = require('util');
JX.install('AphlictLog', {
construct : function() {
construct: function() {
this._writeToLogs = [];
this._writeToConsoles = [];
},
members : {
_writeToConsoles : null,
_writeToLogs : null,
members: {
_writeToConsoles: null,
_writeToLogs: null,
addLogfile : function(path) {
addLogfile: function(path) {
var options = {
flags: 'a',
encoding: 'utf8',
@@ -27,12 +27,12 @@ JX.install('AphlictLog', {
return this;
},
addConsole : function(console) {
addConsole: function(console) {
this._writeToConsoles.push(console);
return this;
},
log : function(pattern) {
log: function(pattern) {
var str = util.format.apply(null, arguments);
var date = new Date().toLocaleString();
str = '[' + date + '] ' + str;