Faster, better predefined MCI handling
This commit is contained in:
parent
8ca0c31fb8
commit
50dda3300a
|
@ -48,174 +48,182 @@ function userStatAsString(client, statName, defaultValue) {
|
||||||
return (StatLog.getUserStat(client.user, statName) || defaultValue).toString();
|
return (StatLog.getUserStat(client.user, statName) || defaultValue).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const PREDEFINED_MCI_GENERATORS = {
|
||||||
|
//
|
||||||
|
// Board
|
||||||
|
//
|
||||||
|
BN : function boardName() { return Config.general.boardName; },
|
||||||
|
|
||||||
|
// ENiGMA
|
||||||
|
VL : function versionLabel() { return 'ENiGMA½ v' + packageJson.version; },
|
||||||
|
VN : function version() { return packageJson.version; },
|
||||||
|
|
||||||
|
// +op info
|
||||||
|
SN : function opUserName() { return StatLog.getSystemStat('sysop_username'); },
|
||||||
|
SR : function opRealName() { return StatLog.getSystemStat('sysop_real_name'); },
|
||||||
|
SL : function opLocation() { return StatLog.getSystemStat('sysop_location'); },
|
||||||
|
SA : function opAffils() { return StatLog.getSystemStat('sysop_affiliation'); },
|
||||||
|
SS : function opSex() { return StatLog.getSystemStat('sysop_sex'); },
|
||||||
|
SE : function opEmail() { return StatLog.getSystemStat('sysop_email_address'); },
|
||||||
|
// :TODO: op age, web, ?????
|
||||||
|
|
||||||
|
//
|
||||||
|
// Current user / session
|
||||||
|
//
|
||||||
|
UN : function userName(client) { return client.user.username; },
|
||||||
|
UI : function userId(client) { return client.user.userId.toString(); },
|
||||||
|
UG : function groups(client) { return _.values(client.user.groups).join(', '); },
|
||||||
|
UR : function realName(client) { return userStatAsString(client, 'real_name', ''); },
|
||||||
|
LO : function location(client) { return userStatAsString(client, 'location', ''); },
|
||||||
|
UA : function age(client) { return client.user.getAge().toString(); },
|
||||||
|
BD : function birthdate(client) { return moment(client.user.properties.birthdate).format(client.currentTheme.helpers.getDateFormat()); }, // iNiQUiTY
|
||||||
|
US : function sex(client) { return userStatAsString(client, 'sex', ''); },
|
||||||
|
UE : function emailAddres(client) { return userStatAsString(client, 'email_address', ''); },
|
||||||
|
UW : function webAddress(client) { return userStatAsString(client, 'web_address', ''); },
|
||||||
|
UF : function affils(client) { return userStatAsString(client, 'affiliation', ''); },
|
||||||
|
UT : function themeId(client) { return userStatAsString(client, 'theme_id', ''); },
|
||||||
|
UC : function loginCount(client) { return userStatAsString(client, 'login_count', 0); },
|
||||||
|
ND : function connectedNode(client) { return client.node.toString(); },
|
||||||
|
IP : function clientIpAddress(client) { return client.remoteAddress; },
|
||||||
|
ST : function serverName(client) { return client.session.serverName; },
|
||||||
|
FN : function activeFileBaseFilterName(client) {
|
||||||
|
const activeFilter = FileBaseFilters.getActiveFilter(client);
|
||||||
|
return activeFilter ? activeFilter.name : '';
|
||||||
|
},
|
||||||
|
DN : function userNumDownloads(client) { return userStatAsString(client, 'dl_total_count', 0); }, // Obv/2
|
||||||
|
DK : function userByteDownload(client) { // Obv/2 uses DK=downloaded Kbytes
|
||||||
|
const byteSize = StatLog.getUserStatNum(client.user, 'dl_total_bytes');
|
||||||
|
return formatByteSize(byteSize, true); // true=withAbbr
|
||||||
|
},
|
||||||
|
UP : function userNumUploadsclient(client) { return userStatAsString(client, 'ul_total_count', 0); }, // Obv/2
|
||||||
|
UK : function userByteUpload(client) { // Obv/2 uses UK=uploaded Kbytes
|
||||||
|
const byteSize = StatLog.getUserStatNum(client.user, 'ul_total_bytes');
|
||||||
|
return formatByteSize(byteSize, true); // true=withAbbr
|
||||||
|
},
|
||||||
|
NR : function userUpDownRatio(client) { // Obv/2
|
||||||
|
return getRatio(client, 'ul_total_count', 'dl_total_count');
|
||||||
|
},
|
||||||
|
KR : function userUpDownByteRatio(client) { // Obv/2 uses KR=upload/download Kbyte ratio
|
||||||
|
return getRatio(client, 'ul_total_bytes', 'dl_total_bytes');
|
||||||
|
},
|
||||||
|
|
||||||
|
MS : function accountCreatedclient(client) { return moment(client.user.properties.account_created).format(client.currentTheme.helpers.getDateFormat()); },
|
||||||
|
PS : function userPostCount(client) { return userStatAsString(client, 'post_count', 0); },
|
||||||
|
PC : function userPostCallRatio(client) { return getRatio(client, 'post_count', 'login_count'); },
|
||||||
|
|
||||||
|
MD : function currentMenuDescription(client) {
|
||||||
|
return _.has(client, 'currentMenuModule.menuConfig.desc') ? client.currentMenuModule.menuConfig.desc : '';
|
||||||
|
},
|
||||||
|
|
||||||
|
MA : function messageAreaName(client) {
|
||||||
|
const area = getMessageAreaByTag(client.user.properties.message_area_tag);
|
||||||
|
return area ? area.name : '';
|
||||||
|
},
|
||||||
|
MC : function messageConfName(client) {
|
||||||
|
const conf = getMessageConferenceByTag(client.user.properties.message_conf_tag);
|
||||||
|
return conf ? conf.name : '';
|
||||||
|
},
|
||||||
|
ML : function messageAreaDescription(client) {
|
||||||
|
const area = getMessageAreaByTag(client.user.properties.message_area_tag);
|
||||||
|
return area ? area.desc : '';
|
||||||
|
},
|
||||||
|
CM : function messageConfDescription(client) {
|
||||||
|
const conf = getMessageConferenceByTag(client.user.properties.message_conf_tag);
|
||||||
|
return conf ? conf.desc : '';
|
||||||
|
},
|
||||||
|
|
||||||
|
SH : function termHeight(client) { return client.term.termHeight.toString(); },
|
||||||
|
SW : function termWidth(client) { return client.term.termWidth.toString(); },
|
||||||
|
|
||||||
|
//
|
||||||
|
// Date/Time
|
||||||
|
//
|
||||||
|
// :TODO: change to CD for 'Current Date'
|
||||||
|
DT : function date(client) { return moment().format(client.currentTheme.helpers.getDateFormat()); },
|
||||||
|
CT : function time(client) { return moment().format(client.currentTheme.helpers.getTimeFormat()) ;},
|
||||||
|
|
||||||
|
//
|
||||||
|
// OS/System Info
|
||||||
|
//
|
||||||
|
OS : function operatingSystem() {
|
||||||
|
return {
|
||||||
|
linux : 'Linux',
|
||||||
|
darwin : 'Mac OS X',
|
||||||
|
win32 : 'Windows',
|
||||||
|
sunos : 'SunOS',
|
||||||
|
freebsd : 'FreeBSD',
|
||||||
|
}[os.platform()] || os.type();
|
||||||
|
},
|
||||||
|
|
||||||
|
OA : function systemArchitecture() { return os.arch(); },
|
||||||
|
|
||||||
|
SC : function systemCpuModel() {
|
||||||
|
//
|
||||||
|
// Clean up CPU strings a bit for better display
|
||||||
|
//
|
||||||
|
return os.cpus()[0].model
|
||||||
|
.replace(/\(R\)|\(TM\)|processor|CPU/g, '')
|
||||||
|
.replace(/\s+(?= )/g, '');
|
||||||
|
},
|
||||||
|
|
||||||
|
// :TODO: MCI for core count, e.g. os.cpus().length
|
||||||
|
|
||||||
|
// :TODO: cpu load average (over N seconds): http://stackoverflow.com/questions/9565912/convert-the-output-of-os-cpus-in-node-js-to-percentage
|
||||||
|
NV : function nodeVersion() { return process.version; },
|
||||||
|
|
||||||
|
AN : function activeNodes() { return clientConnections.getActiveConnections().length.toString(); },
|
||||||
|
|
||||||
|
TC : function totalCalls() { return StatLog.getSystemStat('login_count').toString(); },
|
||||||
|
|
||||||
|
RR : function randomRumor() {
|
||||||
|
// start the process of picking another random one
|
||||||
|
setNextRandomRumor();
|
||||||
|
|
||||||
|
return StatLog.getSystemStat('random_rumor');
|
||||||
|
},
|
||||||
|
|
||||||
|
//
|
||||||
|
// System File Base, Up/Download Info
|
||||||
|
//
|
||||||
|
// :TODO: DD - Today's # of downloads (iNiQUiTY)
|
||||||
|
//
|
||||||
|
// :TODO: System stat log for total ul/dl, total ul/dl bytes
|
||||||
|
|
||||||
|
// :TODO: PT - Messages posted *today* (Obv/2)
|
||||||
|
// -> Include FTN/etc.
|
||||||
|
// :TODO: NT - New users today (Obv/2)
|
||||||
|
// :TODO: CT - Calls *today* (Obv/2)
|
||||||
|
// :TODO: TF - Total files on the system (Obv/2)
|
||||||
|
// :TODO: FT - Files uploaded/added *today* (Obv/2)
|
||||||
|
// :TODO: DD - Files downloaded *today* (iNiQUiTY)
|
||||||
|
// :TODO: TP - total message/posts on the system (Obv/2)
|
||||||
|
// -> Include FTN/etc.
|
||||||
|
// :TODO: LC - name of last caller to system (Obv/2)
|
||||||
|
// :TODO: TZ - Average *system* post/call ratio (iNiQUiTY)
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Special handling for XY
|
||||||
|
//
|
||||||
|
XY : function xyHack() { return; /* nothing */ },
|
||||||
|
};
|
||||||
|
|
||||||
function getPredefinedMCIValue(client, code) {
|
function getPredefinedMCIValue(client, code) {
|
||||||
|
|
||||||
if(!client || !code) {
|
if(!client || !code) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
const generator = PREDEFINED_MCI_GENERATORS[code];
|
||||||
return {
|
|
||||||
//
|
|
||||||
// Board
|
|
||||||
//
|
|
||||||
BN : function boardName() { return Config.general.boardName; },
|
|
||||||
|
|
||||||
// ENiGMA
|
if(generator) {
|
||||||
VL : function versionLabel() { return 'ENiGMA½ v' + packageJson.version; },
|
let value;
|
||||||
VN : function version() { return packageJson.version; },
|
try {
|
||||||
|
value = generator(client);
|
||||||
|
} catch(e) {
|
||||||
|
Log.error( { code : code, exception : e.message }, 'Exception caught generating predefined MCI value' );
|
||||||
|
}
|
||||||
|
|
||||||
// +op info
|
return value;
|
||||||
SN : function opUserName() { return StatLog.getSystemStat('sysop_username'); },
|
|
||||||
SR : function opRealName() { return StatLog.getSystemStat('sysop_real_name'); },
|
|
||||||
SL : function opLocation() { return StatLog.getSystemStat('sysop_location'); },
|
|
||||||
SA : function opAffils() { return StatLog.getSystemStat('sysop_affiliation'); },
|
|
||||||
SS : function opSex() { return StatLog.getSystemStat('sysop_sex'); },
|
|
||||||
SE : function opEmail() { return StatLog.getSystemStat('sysop_email_address'); },
|
|
||||||
// :TODO: op age, web, ?????
|
|
||||||
|
|
||||||
//
|
|
||||||
// Current user / session
|
|
||||||
//
|
|
||||||
UN : function userName() { return client.user.username; },
|
|
||||||
UI : function userId() { return client.user.userId.toString(); },
|
|
||||||
UG : function groups() { return _.values(client.user.groups).join(', '); },
|
|
||||||
UR : function realName() { return userStatAsString(client, 'real_name', ''); },
|
|
||||||
LO : function location() { return userStatAsString(client, 'location', ''); },
|
|
||||||
UA : function age() { return client.user.getAge().toString(); },
|
|
||||||
BD : function birthdate() { return moment(client.user.properties.birthdate).format(client.currentTheme.helpers.getDateFormat()); }, // iNiQUiTY
|
|
||||||
US : function sex() { return userStatAsString(client, 'sex', ''); },
|
|
||||||
UE : function emailAddres() { return userStatAsString(client, 'email_address', ''); },
|
|
||||||
UW : function webAddress() { return userStatAsString(client, 'web_address', ''); },
|
|
||||||
UF : function affils() { return userStatAsString(client, 'affiliation', ''); },
|
|
||||||
UT : function themeId() { return userStatAsString(client, 'theme_id', ''); },
|
|
||||||
UC : function loginCount() { return userStatAsString(client, 'login_count', 0); },
|
|
||||||
ND : function connectedNode() { return client.node.toString(); },
|
|
||||||
IP : function clientIpAddress() { return client.remoteAddress; },
|
|
||||||
ST : function serverName() { return client.session.serverName; },
|
|
||||||
FN : function activeFileBaseFilterName() {
|
|
||||||
const activeFilter = FileBaseFilters.getActiveFilter(client);
|
|
||||||
return activeFilter ? activeFilter.name : '';
|
|
||||||
},
|
|
||||||
DN : function userNumDownloads() { return userStatAsString(client, 'dl_total_count', 0); }, // Obv/2
|
|
||||||
DK : function userByteDownload() { // Obv/2 uses DK=downloaded Kbytes
|
|
||||||
const byteSize = StatLog.getUserStatNum(client.user, 'dl_total_bytes');
|
|
||||||
return formatByteSize(byteSize, true); // true=withAbbr
|
|
||||||
},
|
|
||||||
UP : function userNumUploads() { return userStatAsString(client, 'ul_total_count', 0); }, // Obv/2
|
|
||||||
UK : function userByteUpload() { // Obv/2 uses UK=uploaded Kbytes
|
|
||||||
const byteSize = StatLog.getUserStatNum(client.user, 'ul_total_bytes');
|
|
||||||
return formatByteSize(byteSize, true); // true=withAbbr
|
|
||||||
},
|
|
||||||
NR : function userUpDownRatio() { // Obv/2
|
|
||||||
return getRatio(client, 'ul_total_count', 'dl_total_count');
|
|
||||||
},
|
|
||||||
KR : function userUpDownByteRatio() { // Obv/2 uses KR=upload/download Kbyte ratio
|
|
||||||
return getRatio(client, 'ul_total_bytes', 'dl_total_bytes');
|
|
||||||
},
|
|
||||||
|
|
||||||
MS : function accountCreated() { return moment(client.user.properties.account_created).format(client.currentTheme.helpers.getDateFormat()); },
|
|
||||||
PS : function userPostCount() { return userStatAsString(client, 'post_count', 0); },
|
|
||||||
PC : function userPostCallRatio() { return getRatio(client, 'post_count', 'login_count'); },
|
|
||||||
|
|
||||||
MD : function currentMenuDescription() {
|
|
||||||
return _.has(client, 'currentMenuModule.menuConfig.desc') ? client.currentMenuModule.menuConfig.desc : '';
|
|
||||||
},
|
|
||||||
|
|
||||||
MA : function messageAreaName() {
|
|
||||||
const area = getMessageAreaByTag(client.user.properties.message_area_tag);
|
|
||||||
return area ? area.name : '';
|
|
||||||
},
|
|
||||||
MC : function messageConfName() {
|
|
||||||
const conf = getMessageConferenceByTag(client.user.properties.message_conf_tag);
|
|
||||||
return conf ? conf.name : '';
|
|
||||||
},
|
|
||||||
ML : function messageAreaDescription() {
|
|
||||||
const area = getMessageAreaByTag(client.user.properties.message_area_tag);
|
|
||||||
return area ? area.desc : '';
|
|
||||||
},
|
|
||||||
CM : function messageConfDescription() {
|
|
||||||
const conf = getMessageConferenceByTag(client.user.properties.message_conf_tag);
|
|
||||||
return conf ? conf.desc : '';
|
|
||||||
},
|
|
||||||
|
|
||||||
SH : function termHeight() { return client.term.termHeight.toString(); },
|
|
||||||
SW : function termWidth() { return client.term.termWidth.toString(); },
|
|
||||||
|
|
||||||
//
|
|
||||||
// Date/Time
|
|
||||||
//
|
|
||||||
// :TODO: change to CD for 'Current Date'
|
|
||||||
DT : function date() { return moment().format(client.currentTheme.helpers.getDateFormat()); },
|
|
||||||
CT : function time() { return moment().format(client.currentTheme.helpers.getTimeFormat()) ;},
|
|
||||||
|
|
||||||
//
|
|
||||||
// OS/System Info
|
|
||||||
//
|
|
||||||
OS : function operatingSystem() {
|
|
||||||
return {
|
|
||||||
linux : 'Linux',
|
|
||||||
darwin : 'Mac OS X',
|
|
||||||
win32 : 'Windows',
|
|
||||||
sunos : 'SunOS',
|
|
||||||
freebsd : 'FreeBSD',
|
|
||||||
}[os.platform()] || os.type();
|
|
||||||
},
|
|
||||||
|
|
||||||
OA : function systemArchitecture() { return os.arch(); },
|
|
||||||
SC : function systemCpuModel() {
|
|
||||||
//
|
|
||||||
// Clean up CPU strings a bit for better display
|
|
||||||
//
|
|
||||||
return os.cpus()[0].model.replace(/\(R\)|\(TM\)|processor|CPU/g, '')
|
|
||||||
.replace(/\s+(?= )/g, '');
|
|
||||||
},
|
|
||||||
|
|
||||||
// :TODO: MCI for core count, e.g. os.cpus().length
|
|
||||||
|
|
||||||
// :TODO: cpu load average (over N seconds): http://stackoverflow.com/questions/9565912/convert-the-output-of-os-cpus-in-node-js-to-percentage
|
|
||||||
NV : function nodeVersion() { return process.version; },
|
|
||||||
|
|
||||||
AN : function activeNodes() { return clientConnections.getActiveConnections().length.toString(); },
|
|
||||||
|
|
||||||
TC : function totalCalls() { return StatLog.getSystemStat('login_count').toString(); },
|
|
||||||
|
|
||||||
RR : function randomRumor() {
|
|
||||||
// start the process of picking another random one
|
|
||||||
setNextRandomRumor();
|
|
||||||
|
|
||||||
return StatLog.getSystemStat('random_rumor');
|
|
||||||
},
|
|
||||||
|
|
||||||
//
|
|
||||||
// System File Base, Up/Download Info
|
|
||||||
//
|
|
||||||
// :TODO: DD - Today's # of downloads (iNiQUiTY)
|
|
||||||
//
|
|
||||||
// :TODO: System stat log for total ul/dl, total ul/dl bytes
|
|
||||||
|
|
||||||
// :TODO: PT - Messages posted *today* (Obv/2)
|
|
||||||
// -> Include FTN/etc.
|
|
||||||
// :TODO: NT - New users today (Obv/2)
|
|
||||||
// :TODO: CT - Calls *today* (Obv/2)
|
|
||||||
// :TODO: TF - Total files on the system (Obv/2)
|
|
||||||
// :TODO: FT - Files uploaded/added *today* (Obv/2)
|
|
||||||
// :TODO: DD - Files downloaded *today* (iNiQUiTY)
|
|
||||||
// :TODO: TP - total message/posts on the system (Obv/2)
|
|
||||||
// -> Include FTN/etc.
|
|
||||||
// :TODO: LC - name of last caller to system (Obv/2)
|
|
||||||
// :TODO: TZ - Average *system* post/call ratio (iNiQUiTY)
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Special handling for XY
|
|
||||||
//
|
|
||||||
XY : function xyHack() { return; /* nothing */ },
|
|
||||||
|
|
||||||
}[code](); // :TODO: Just call toString() here and remove above - DRY
|
|
||||||
|
|
||||||
} catch(e) {
|
|
||||||
// Don't use client.log here as we may not have a client logger established yet!!
|
|
||||||
Log.warn( { code : code, exception : e.message }, 'Exception caught attempting to construct predefined MCI value');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue