1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-09-19 16:58:48 +02:00

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

@ -476,7 +476,7 @@ return array(
'rsrc/js/phuix/PHUIXActionListView.js' => 'b5c256b8',
'rsrc/js/phuix/PHUIXActionView.js' => '6e8cefa4',
'rsrc/js/phuix/PHUIXDropdownMenu.js' => 'bd4c8dca',
'rsrc/swf/aphlict.swf' => 'b7c2d7aa',
'rsrc/swf/aphlict.swf' => 'f45c3edc',
),
'symbols' =>
array(

View file

@ -176,10 +176,8 @@ final class PhabricatorFeedStoryPublisher {
private function sendNotification($chrono_key) {
$data = array(
'data' => array(
'key' => (string)$chrono_key,
'type' => 'notification',
),
'subscribers' => $this->subscribedPHIDs,
);

View file

@ -2,7 +2,7 @@
final class PhabricatorNotificationClient {
const EXPECT_VERSION = 5;
const EXPECT_VERSION = 6;
public static function getServerStatus() {
$uri = PhabricatorEnv::getEnvConfig('notification.server-uri');

View file

@ -107,8 +107,6 @@ var messages_in = 0;
var start_time = new Date().getTime();
var receive_server = http.createServer(function(request, response) {
response.writeHead(200, {'Content-Type' : 'text/plain'});
// Publishing a notification.
if (request.method == 'POST') {
var body = '';
@ -118,12 +116,20 @@ var receive_server = http.createServer(function(request, response) {
});
request.on('end', function() {
++messages_in;
try {
var msg = JSON.parse(body);
debug.log('notification: ' + JSON.stringify(msg));
broadcast(msg.data);
++messages_in;
broadcast(msg);
response.writeHead(200, {'Content-Type': 'text/plain'});
} catch (err) {
response.statusCode = 400;
response.write('400 Bad Request');
} finally {
response.end();
}
});
} else if (request.url == '/status/') {
request.on('data', function(data) {
@ -139,9 +145,10 @@ var receive_server = http.createServer(function(request, response) {
'messages.in': messages_in,
'messages.out': messages_out,
'log': config.log,
'version': 5
'version': 6
};
response.writeHead(200, {'Content-Type': 'text/plain'});
response.write(JSON.stringify(status));
response.end();
});

View file

@ -13,9 +13,7 @@ JX.install('AphlictListenerList', {
_totalListenerCount: 0,
addListener: function(socket) {
var listener = new JX.AphlictListener(
this._generateNextID(),
socket);
var listener = new JX.AphlictListener(this._generateNextID(), socket);
this._listeners[listener.getID()] = listener;
this._activeListenerCount++;

Binary file not shown.