This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.5 KiB
57 lines
1.5 KiB
/** |
|
* Copyright (c) 2015-present, Facebook, Inc. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
* |
|
* @providesModule BridgeSpyStallHandler |
|
* @flow |
|
*/ |
|
'use strict'; |
|
|
|
const JSEventLoopWatchdog = require('JSEventLoopWatchdog'); |
|
const MessageQueue = require('MessageQueue'); |
|
|
|
const infoLog = require('infoLog'); |
|
|
|
const BridgeSpyStallHandler = { |
|
register: function() { |
|
let spyBuffer = []; |
|
MessageQueue.spy((data) => { |
|
spyBuffer.push(data); |
|
}); |
|
const TO_JS = 0; |
|
JSEventLoopWatchdog.addHandler({ |
|
onStall: () => { |
|
infoLog( |
|
spyBuffer.length + ' bridge messages during stall: ', |
|
spyBuffer.map((info) => { |
|
let args = '<args>'; |
|
try { |
|
args = JSON.stringify(info.args); |
|
} catch (e1) { |
|
if (Array.isArray(info.args)) { |
|
args = info.args.map((arg) => { |
|
try { |
|
return JSON.stringify(arg); |
|
} catch (e2) { |
|
return '?'; |
|
} |
|
}); |
|
} else { |
|
args = 'keys:' + JSON.stringify(Object.keys(info.args)); |
|
} |
|
} |
|
return `${info.type === TO_JS ? 'N->JS' : 'JS->N'} : ` + |
|
`${info.module ? (info.module + '.') : ''}${info.method}(${JSON.stringify(args)})`; |
|
}), |
|
); |
|
}, |
|
onIterate: () => { |
|
spyBuffer = []; |
|
}, |
|
}); |
|
}, |
|
}; |
|
|
|
module.exports = BridgeSpyStallHandler;
|
|
|