Skip to content

Commit 1fccda6

Browse files
committed
migrate to @backkit/autoconf
1 parent f8ed1df commit 1fccda6

File tree

3 files changed

+2087
-358
lines changed

3 files changed

+2087
-358
lines changed

configure.js

Lines changed: 150 additions & 163 deletions
Original file line numberDiff line numberDiff line change
@@ -1,177 +1,164 @@
1-
const fs = require('fs');
21
const path = require('path');
3-
const inquirer = require('inquirer');
4-
const yaml = require('js-yaml');
2+
const autoconf = require("@backkit/autoconf");
53
const beautifyjs = require('js-beautify').js;
64

7-
const skipPrompt = process.env.NO_INTERACTIVE || process.env.NO_PROMPT ? true : false;
8-
const skipAutoconf = process.env.NO_AUTOCONF ? true : false;
9-
10-
const generate = (serviceName, moduleName, config) => {
11-
const serviceDir = `${__dirname}/../../services`;
12-
const servicePath = `${__dirname}/../../services/${serviceName}.js`;
13-
const configDir = `${__dirname}/../../config`;
14-
const configPath = `${__dirname}/../../config/${serviceName}.yml`;
15-
const resourceBaseDir = `${__dirname}/../../res`;
16-
const resourceDir = `${__dirname}/../../res/${serviceName}`;
17-
18-
console.log("");
19-
console.log(`${serviceName} service config:`);
20-
console.log(JSON.stringify(config, null, ' '));
21-
console.log("");
22-
23-
// save service config
24-
console.log(`writing config: ${configPath}`);
25-
if (!fs.existsSync(configDir)) {
26-
fs.mkdirSync(configDir, {recursive: true});
27-
}
28-
if (!fs.existsSync(configPath)) {
29-
fs.writeFileSync(configPath, yaml.safeDump(config, {skipInvalid: true}));
30-
}
31-
32-
// enable service
33-
console.log(`creating service alias: ${servicePath}`);
34-
if (!fs.existsSync(serviceDir)) {
35-
fs.mkdirSync(serviceDir, {recursive: true});
36-
}
37-
if (!fs.existsSync(servicePath)) {
38-
fs.writeFileSync(servicePath, `module.exports = require('${moduleName}')`);
39-
}
40-
41-
// ensure resource dir exist
42-
console.log(`creating resources folder: ${resourceDir}`);
43-
if (!fs.existsSync(resourceBaseDir)) {
44-
fs.mkdirSync(resourceBaseDir, {recursive: true});
45-
}
46-
if (!fs.existsSync(resourceDir)) {
47-
fs.mkdirSync(resourceDir, {recursive: true});
48-
for (let queueName in config) {
49-
fs.writeFileSync(`${resourceDir}/${queueName}.js`,
50-
beautifyjs(`
5+
autoconf('bee')
6+
.generator(self => {
7+
let arr = [
8+
{
9+
putFileOnce: self.serviceConfigMainYML,
10+
contentYml: self.config
11+
},
12+
{
13+
putFileOnce: self.serviceCodeMainJS,
14+
content: `module.exports = require('${self.npmModuleName}')`
15+
}
16+
];
17+
for (let queueName in self.config) {
18+
arr.push({
19+
putFileOnce: `${self.serviceResourceDir}${path.sep}${queueName}.js`,
20+
content: beautifyjs(`
5121
module.exports = ({bee}) => bee.worker('${queueName}', async (job) => {
5222
return await true;
5323
});`,
54-
{ indent_size: 2 }));
55-
}
24+
{ indent_size: 2 })
25+
});
5626
}
57-
};
58-
59-
if (!skipAutoconf) {
60-
const packageJson = require('./package.json');
61-
const serviceName = 'bee';
62-
const moduleName = packageJson.name;
63-
const defaultConf = {
64-
default: {
65-
queue: {
66-
redis: {
67-
host: "127.0.0.1",
68-
port: 6379,
69-
db: 0,
70-
options: {}
71-
},
72-
removeOnSuccess: false,
73-
removeOnFailure: false,
74-
stallInterval: 5000,
75-
nearTermWindow: 60000,
76-
delayedDebounce: 500
27+
return arr;
28+
})
29+
.default(self => ({
30+
default: {
31+
queue: {
32+
redis: {
33+
host: "127.0.0.1",
34+
port: 6379,
35+
db: 0,
36+
options: {}
7737
},
78-
worker: {
79-
concurrency: 100
80-
}
38+
removeOnSuccess: false,
39+
removeOnFailure: false,
40+
stallInterval: 5000,
41+
nearTermWindow: 60000,
42+
delayedDebounce: 500
43+
},
44+
worker: {
45+
concurrency: 100
8146
}
82-
};
83-
84-
if (!skipPrompt) {
85-
const questions = [
86-
{
87-
type: 'input',
88-
name: 'default_queue_name',
89-
message: "default queue name",
90-
default: 'default',
91-
validate: function(value) {
92-
return true;
93-
}
94-
},
95-
{
96-
type: 'input',
97-
name: 'default_queue_redis_host',
98-
message: "redis host for default queue",
99-
default: defaultConf.default.queue.redis.host,
100-
validate: function(value) {
101-
return true;
102-
}
103-
},
104-
{
105-
type: 'input',
106-
name: 'default_queue_redis_port',
107-
message: "redis port for default queue",
108-
default: defaultConf.default.queue.redis.port,
109-
validate: function(value) {
110-
return ~~(value) > 0;
111-
}
112-
},
113-
{
114-
type: 'input',
115-
name: 'default_queue_redis_db',
116-
message: "redis database id for default queue",
117-
default: defaultConf.default.queue.redis.db,
118-
validate: function(value) {
119-
return ~~(value) >= 0;
120-
}
121-
},
122-
{
123-
type: 'input',
124-
name: 'default_worker_concurrency',
125-
message: "concurrency for default worker",
126-
default: defaultConf.default.worker.concurrency,
127-
validate: function(value) {
128-
return ~~(value) > 0;
129-
}
130-
},
131-
{
132-
type: 'confirm',
133-
name: 'default_queue_remove_on_success',
134-
message: "remove a job on success ?",
135-
default: defaultConf.default.queue.removeOnSuccess,
136-
validate: function(value) {
137-
console.log("default_queue_remove_on_success", value);
138-
return true;
139-
}
140-
},
141-
{
142-
type: 'confirm',
143-
name: 'default_queue_remove_on_failure',
144-
message: "remove a job on failure ?",
145-
default: defaultConf.default.queue.removeOnFailure,
146-
validate: function(value) {
147-
console.log("default_queue_remove_on_failure", value);
148-
return true;
149-
}
150-
}
151-
];
47+
}
48+
}))
49+
.prompt(self => ([
50+
{
51+
if: {
52+
fileNotFound: self.serviceConfigMainYML
53+
},
54+
type: 'input',
55+
name: 'default_queue_name',
56+
message: "default queue name",
57+
default: 'default',
58+
validate: function(value) {
59+
return true;
60+
}
61+
},
62+
{
63+
if: {
64+
fileNotFound: self.serviceConfigMainYML
65+
},
66+
type: 'input',
67+
name: 'default_queue_redis_host',
68+
message: "redis host for default queue",
69+
default: self.defaultConfig.default.queue.redis.host,
70+
validate: function(value) {
71+
return true;
72+
}
73+
},
74+
{
75+
if: {
76+
fileNotFound: self.serviceConfigMainYML
77+
},
78+
type: 'input',
79+
name: 'default_queue_redis_port',
80+
message: "redis port for default queue",
81+
default: self.defaultConfig.default.queue.redis.port,
82+
validate: function(value) {
83+
return ~~(value) > 0;
84+
}
85+
},
86+
{
87+
if: {
88+
fileNotFound: self.serviceConfigMainYML
89+
},
90+
type: 'input',
91+
name: 'default_queue_redis_db',
92+
message: "redis database id for default queue",
93+
default: self.defaultConfig.default.queue.redis.db,
94+
validate: function(value) {
95+
return ~~(value) >= 0;
96+
}
97+
},
98+
{
99+
if: {
100+
fileNotFound: self.serviceConfigMainYML
101+
},
102+
type: 'input',
103+
name: 'default_worker_concurrency',
104+
message: "concurrency for default worker",
105+
default: self.defaultConfig.default.worker.concurrency,
106+
validate: function(value) {
107+
return ~~(value) > 0;
108+
}
109+
},
110+
{
111+
if: {
112+
fileNotFound: self.serviceConfigMainYML
113+
},
114+
type: 'confirm',
115+
name: 'default_queue_remove_on_success',
116+
message: "remove a job on success ?",
117+
default: self.defaultConfig.default.queue.removeOnSuccess,
118+
validate: function(value) {
119+
console.log("default_queue_remove_on_success", value);
120+
return true;
121+
}
122+
},
123+
{
124+
if: {
125+
fileNotFound: self.serviceConfigMainYML
126+
},
127+
type: 'confirm',
128+
name: 'default_queue_remove_on_failure',
129+
message: "remove a job on failure ?",
130+
default: self.defaultConfig.default.queue.removeOnFailure,
131+
validate: function(value) {
132+
console.log("default_queue_remove_on_failure", value);
133+
return true;
134+
}
135+
}
152136

153-
inquirer.prompt(questions).then(conf => {
154-
generate(serviceName, moduleName, {
155-
[conf.default_queue_name]: {
156-
queue: {
157-
redis: {
158-
host: conf.default_queue_redis_host,
159-
port: ~~(conf.default_queue_redis_port),
160-
db: ~~(conf.default_queue_redis_db)
161-
},
162-
removeOnSuccess: conf.default_queue_remove_on_success,
163-
removeOnFailure: conf.default_queue_remove_on_failure,
164-
stallInterval: defaultConf.default.queue.stallInterval,
165-
nearTermWindow: defaultConf.default.queue.nearTermWindow,
166-
delayedDebounce: defaultConf.default.queue.delayedDebounce
137+
]))
138+
.answersToConfig((self, answers) => {
139+
if (answers.default_queue_name) {
140+
return {
141+
[answers.default_queue_name]: {
142+
queue: {
143+
redis: {
144+
host: answers.default_queue_redis_host,
145+
port: ~~(answers.default_queue_redis_port),
146+
db: ~~(answers.default_queue_redis_db)
167147
},
168-
worker: {
169-
concurrency: ~~(conf.default_worker_concurrency)
170-
}
148+
removeOnSuccess: answers.default_queue_remove_on_success,
149+
removeOnFailure: answers.default_queue_remove_on_failure,
150+
stallInterval: self.defaultConfig.default.queue.stallInterval,
151+
nearTermWindow: self.defaultConfig.default.queue.nearTermWindow,
152+
delayedDebounce: self.defaultConfig.default.queue.delayedDebounce
153+
},
154+
worker: {
155+
concurrency: ~~(answers.default_worker_concurrency)
171156
}
172-
});
173-
});
157+
}
158+
};
174159
} else {
175-
generate(serviceName, moduleName, defaultConf);
160+
return {};
176161
}
177-
}
162+
})
163+
.run()
164+

0 commit comments

Comments
 (0)