mirror of
https://github.com/sudoxnym/habitica-self-host.git
synced 2026-04-15 12:07:43 +00:00
Make Kafka dep optional (#10129)
* Made kafka optional * make kafka optional
This commit is contained in:
parent
2195464772
commit
70dec611e3
3 changed files with 4817 additions and 2608 deletions
7295
package-lock.json
generated
7295
package-lock.json
generated
File diff suppressed because it is too large
Load diff
78
package.json
78
package.json
|
|
@ -5,17 +5,17 @@
|
|||
"main": "./website/server/index.js",
|
||||
"dependencies": {
|
||||
"@slack/client": "^3.8.1",
|
||||
"accepts": "^1.3.2",
|
||||
"accepts": "^1.3.5",
|
||||
"amazon-payments": "^0.2.6",
|
||||
"amplitude": "^3.5.0",
|
||||
"apidoc": "^0.17.5",
|
||||
"autoprefixer": "^8.0.0",
|
||||
"aws-sdk": "^2.200.0",
|
||||
"autoprefixer": "^8.1.0",
|
||||
"aws-sdk": "^2.209.0",
|
||||
"axios": "^0.18.0",
|
||||
"axios-progress-bar": "^1.1.8",
|
||||
"babel-core": "^6.0.0",
|
||||
"babel-eslint": "^8.2.2",
|
||||
"babel-loader": "^7.1.2",
|
||||
"babel-loader": "^7.1.4",
|
||||
"babel-plugin-syntax-async-functions": "^6.13.0",
|
||||
"babel-plugin-syntax-dynamic-import": "^6.18.0",
|
||||
"babel-plugin-transform-async-to-module-method": "^6.8.0",
|
||||
|
|
@ -29,21 +29,21 @@
|
|||
"bluebird": "^3.3.5",
|
||||
"body-parser": "^1.15.0",
|
||||
"bootstrap": "^4.0.0",
|
||||
"bootstrap-vue": "^2.0.0-rc.1",
|
||||
"bootstrap-vue": "^2.0.0-rc.2",
|
||||
"compression": "^1.7.2",
|
||||
"cookie-session": "^1.2.0",
|
||||
"coupon-code": "^0.4.5",
|
||||
"cross-env": "^5.1.3",
|
||||
"cross-env": "^5.1.4",
|
||||
"css-loader": "^0.28.0",
|
||||
"csv-stringify": "^2.0.4",
|
||||
"cwait": "^1.1.1",
|
||||
"domain-middleware": "~0.1.0",
|
||||
"express": "^4.16.2",
|
||||
"express": "^4.16.3",
|
||||
"express-basic-auth": "^1.1.4",
|
||||
"express-validator": "^5.0.1",
|
||||
"express-validator": "^5.0.3",
|
||||
"extract-text-webpack-plugin": "^3.0.2",
|
||||
"glob": "^7.1.2",
|
||||
"got": "^8.2.0",
|
||||
"got": "^8.3.0",
|
||||
"gulp": "^4.0.0",
|
||||
"gulp-babel": "^7.0.1",
|
||||
"gulp-imagemin": "^4.1.0",
|
||||
|
|
@ -53,22 +53,21 @@
|
|||
"hellojs": "^1.15.1",
|
||||
"html-webpack-plugin": "^2.8.1",
|
||||
"image-size": "^0.6.2",
|
||||
"in-app-purchase": "^1.1.6",
|
||||
"in-app-purchase": "^1.8.9",
|
||||
"intro.js": "^2.6.0",
|
||||
"jquery": ">=3.0.0",
|
||||
"js2xmlparser": "^3.0.0",
|
||||
"lodash": "^4.17.4",
|
||||
"merge-stream": "^1.0.0",
|
||||
"method-override": "^2.3.5",
|
||||
"moment": "^2.13.0",
|
||||
"moment": "^2.21.0",
|
||||
"moment-recur": "^1.0.7",
|
||||
"mongoose": "^5.0.9",
|
||||
"mongoose": "^5.0.10",
|
||||
"morgan": "^1.7.0",
|
||||
"nconf": "^0.10.0",
|
||||
"node-gcm": "^0.14.4",
|
||||
"node-rdkafka": "^2.2.3",
|
||||
"node-sass": "^4.5.0",
|
||||
"nodemailer": "^4.5.0",
|
||||
"node-sass": "^4.8.2",
|
||||
"nodemailer": "^4.6.3",
|
||||
"ora": "^2.0.0",
|
||||
"pageres": "^4.1.1",
|
||||
"passport": "^0.4.0",
|
||||
|
|
@ -76,21 +75,21 @@
|
|||
"passport-google-oauth20": "1.0.0",
|
||||
"paypal-ipn": "3.0.0",
|
||||
"paypal-rest-sdk": "^1.8.1",
|
||||
"popper.js": "^1.13.0",
|
||||
"popper.js": "^1.14.1",
|
||||
"postcss-easy-import": "^3.0.0",
|
||||
"ps-tree": "^1.0.0",
|
||||
"pug": "^2.0.0-rc.4",
|
||||
"pug": "^2.0.1",
|
||||
"push-notify": "git://github.com/habitrpg/push-notify.git#6bc2b5fdb1bdc9649b9ec1964d79ca50187fc8a9",
|
||||
"pusher": "^1.3.0",
|
||||
"rimraf": "^2.4.3",
|
||||
"sass-loader": "^6.0.2",
|
||||
"sass-loader": "^6.0.7",
|
||||
"shelljs": "^0.8.1",
|
||||
"stackimpact": "^1.2.1",
|
||||
"stripe": "^5.5.0",
|
||||
"superagent": "^3.4.3",
|
||||
"svg-inline-loader": "^0.8.0",
|
||||
"svg-url-loader": "^2.0.2",
|
||||
"svgo": "^1.0.4",
|
||||
"svg-url-loader": "^2.3.2",
|
||||
"svgo": "^1.0.5",
|
||||
"svgo-loader": "^2.1.0",
|
||||
"universal-analytics": "^0.4.16",
|
||||
"url-loader": "^0.6.2",
|
||||
|
|
@ -98,17 +97,17 @@
|
|||
"uuid": "^3.0.1",
|
||||
"validator": "^9.4.1",
|
||||
"vinyl-buffer": "^1.0.1",
|
||||
"vue": "^2.5.2",
|
||||
"vue-loader": "^14.1.1",
|
||||
"vue": "^2.5.16",
|
||||
"vue-loader": "^14.2.1",
|
||||
"vue-mugen-scroll": "^0.2.1",
|
||||
"vue-router": "^3.0.0",
|
||||
"vue-style-loader": "^4.0.2",
|
||||
"vue-template-compiler": "^2.5.2",
|
||||
"vue-template-compiler": "^2.5.16",
|
||||
"vuedraggable": "^2.15.0",
|
||||
"vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#5d237615463a84a23dd6f3f77c6ab577d68593ec",
|
||||
"webpack": "^3.11.0",
|
||||
"webpack-merge": "^4.0.0",
|
||||
"winston": "^2.1.0",
|
||||
"winston": "^2.4.1",
|
||||
"winston-loggly-bulk": "^2.0.2",
|
||||
"xml2js": "^0.4.4"
|
||||
},
|
||||
|
|
@ -142,20 +141,20 @@
|
|||
"apidoc": "gulp apidoc"
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-plugin-istanbul": "^4.0.0",
|
||||
"babel-plugin-istanbul": "^4.1.6",
|
||||
"chai": "^4.1.2",
|
||||
"chai-as-promised": "^7.1.1",
|
||||
"chalk": "^2.3.1",
|
||||
"chromedriver": "^2.27.2",
|
||||
"chalk": "^2.3.2",
|
||||
"chromedriver": "^2.36.0",
|
||||
"connect-history-api-fallback": "^1.1.0",
|
||||
"coveralls": "^3.0.0",
|
||||
"cross-spawn": "^6.0.4",
|
||||
"eslint": "^4.18.1",
|
||||
"cross-spawn": "^6.0.5",
|
||||
"eslint": "^4.18.2",
|
||||
"eslint-config-habitrpg": "^4.0.0",
|
||||
"eslint-friendly-formatter": "^3.0.0",
|
||||
"eslint-loader": "^1.3.0",
|
||||
"eslint-plugin-html": "^4.0.2",
|
||||
"eslint-plugin-mocha": "^4.7.0",
|
||||
"eslint-plugin-mocha": "^4.12.1",
|
||||
"eventsource-polyfill": "^0.9.6",
|
||||
"expect.js": "^0.3.1",
|
||||
"http-proxy-middleware": "^0.17.0",
|
||||
|
|
@ -171,19 +170,22 @@
|
|||
"karma-sinon-stub-promise": "^1.0.0",
|
||||
"karma-sourcemap-loader": "^0.3.7",
|
||||
"karma-spec-reporter": "0.0.32",
|
||||
"karma-webpack": "^2.0.2",
|
||||
"karma-webpack": "^2.0.13",
|
||||
"lcov-result-merger": "^2.0.0",
|
||||
"mocha": "^5.0.1",
|
||||
"mocha": "^5.0.4",
|
||||
"monk": "^6.0.5",
|
||||
"nightwatch": "^0.9.12",
|
||||
"puppeteer": "^1.1.0",
|
||||
"nightwatch": "^0.9.20",
|
||||
"puppeteer": "^1.1.1",
|
||||
"require-again": "^2.0.0",
|
||||
"selenium-server": "^3.9.1",
|
||||
"sinon": "^4.3.0",
|
||||
"selenium-server": "^3.11.0",
|
||||
"sinon": "^4.4.5",
|
||||
"sinon-chai": "^2.8.0",
|
||||
"sinon-stub-promise": "^4.0.0",
|
||||
"webpack-bundle-analyzer": "^2.2.1",
|
||||
"webpack-bundle-analyzer": "^2.11.1",
|
||||
"webpack-dev-middleware": "^2.0.5",
|
||||
"webpack-hot-middleware": "^2.6.1"
|
||||
"webpack-hot-middleware": "^2.21.2"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"node-rdkafka": "^2.3.0"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import Kafka from 'node-rdkafka';
|
||||
import nconf from 'nconf';
|
||||
import logger from '../logger';
|
||||
|
||||
const GROUP_ID = nconf.get('KAFKA:GROUP_ID');
|
||||
const CLOUDKARAFKA_BROKERS = nconf.get('KAFKA:CLOUDKARAFKA_BROKERS');
|
||||
|
|
@ -7,36 +7,52 @@ const CLOUDKARAFKA_USERNAME = nconf.get('KAFKA:CLOUDKARAFKA_USERNAME');
|
|||
const CLOUDKARAFKA_PASSWORD = nconf.get('KAFKA:CLOUDKARAFKA_PASSWORD');
|
||||
const CLOUDKARAFKA_TOPIC_PREFIX = nconf.get('KAFKA:CLOUDKARAFKA_TOPIC_PREFIX');
|
||||
|
||||
const kafkaConf = {
|
||||
'group.id': GROUP_ID,
|
||||
'metadata.broker.list': CLOUDKARAFKA_BROKERS ? CLOUDKARAFKA_BROKERS.split(',') : '',
|
||||
'socket.keepalive.enable': true,
|
||||
'security.protocol': 'SASL_SSL',
|
||||
'sasl.mechanisms': 'SCRAM-SHA-256',
|
||||
'sasl.username': CLOUDKARAFKA_USERNAME,
|
||||
'sasl.password': CLOUDKARAFKA_PASSWORD,
|
||||
debug: 'generic,broker,security',
|
||||
};
|
||||
|
||||
const prefix = CLOUDKARAFKA_TOPIC_PREFIX;
|
||||
const topic = `${prefix}-default`;
|
||||
const producer = new Kafka.Producer(kafkaConf);
|
||||
|
||||
producer.connect();
|
||||
let Kafka;
|
||||
let producer;
|
||||
|
||||
try {
|
||||
Kafka = require('node-rdkafka'); // eslint-disable-line global-require
|
||||
} catch (er) {
|
||||
Kafka = null;
|
||||
}
|
||||
|
||||
function createProducer () {
|
||||
const kafkaConf = {
|
||||
'group.id': GROUP_ID,
|
||||
'metadata.broker.list': CLOUDKARAFKA_BROKERS ? CLOUDKARAFKA_BROKERS.split(',') : '',
|
||||
'socket.keepalive.enable': true,
|
||||
'security.protocol': 'SASL_SSL',
|
||||
'sasl.mechanisms': 'SCRAM-SHA-256',
|
||||
'sasl.username': CLOUDKARAFKA_USERNAME,
|
||||
'sasl.password': CLOUDKARAFKA_PASSWORD,
|
||||
debug: 'generic,broker,security',
|
||||
};
|
||||
|
||||
producer = new Kafka.Producer(kafkaConf);
|
||||
|
||||
producer.connect();
|
||||
}
|
||||
|
||||
if (Kafka && GROUP_ID && CLOUDKARAFKA_BROKERS && CLOUDKARAFKA_USERNAME && CLOUDKARAFKA_PASSWORD && CLOUDKARAFKA_TOPIC_PREFIX) {
|
||||
createProducer();
|
||||
}
|
||||
|
||||
process.on('exit', () => {
|
||||
if (producer.isConnected()) producer.disconnect();
|
||||
if (producer && producer.isConnected()) producer.disconnect();
|
||||
});
|
||||
|
||||
const api = {};
|
||||
|
||||
api.sendMessage = function sendMessage (message, key) {
|
||||
if (!producer.isConnected()) return;
|
||||
if (!producer || !producer.isConnected()) return;
|
||||
|
||||
try {
|
||||
producer.produce(topic, -1, new Buffer(JSON.stringify(message)), key);
|
||||
} catch (e) {
|
||||
// @TODO: Send the to loggly?
|
||||
} catch (err) {
|
||||
logger.error(err);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue