Finishing merge on v4 branch.

This commit is contained in:
Rodrigo Rodriguez 2018-09-01 13:51:58 -03:00
parent 3f9b289499
commit 2584717ae8
15 changed files with 96 additions and 111 deletions

View file

@ -112,8 +112,6 @@ export class GuaribasInstance extends Model<GuaribasInstance> implements IGBInst
@Column kb: string; @Column kb: string;
@Column(DataType.STRING(512)) nlpServerUrl: string;
@Column @Column
nlpAppId: string; nlpAppId: string;

View file

@ -85,7 +85,7 @@ export class GBConfigService {
break; break;
default: default:
logger.trace( logger.info(
`Guaribas General Error: Invalid key on .env file: '${key}'` `Guaribas General Error: Invalid key on .env file: '${key}'`
); );
break; break;

View file

@ -85,14 +85,14 @@ export class GBConversationalService implements IGBConversationalService {
res.entities && res.entities.length > 0 res.entities && res.entities.length > 0
? res.entities[0].entity.toUpperCase() ? res.entities[0].entity.toUpperCase()
: null; : null;
logger.trace( logger.info(
"luis: intent: [" + intent + "] entity: [" + entity + "]" "luis: intent: [" + intent + "] entity: [" + entity + "]"
); );
try { try {
dc.replace("/" + intent); dc.replace("/" + intent);
} catch (error) { } catch (error) {
logger.trace("error: intent: [" + intent + "] error: [" + error + "]"); logger.info("error: intent: [" + intent + "] error: [" + error + "]");
dc.context.sendActivity("Desculpe-me, não encontrei nada a respeito..."); dc.context.sendActivity("Desculpe-me, não encontrei nada a respeito...");
dc.replace("/ask", { isReturning: true }); dc.replace("/ask", { isReturning: true });

View file

@ -87,7 +87,7 @@ export class GBCoreService implements IGBCoreService {
} }
let logging = (GBConfigService.get("DATABASE_LOGGING") === "true") let logging = (GBConfigService.get("DATABASE_LOGGING") === "true")
? (str: string) => { logger.trace(str); } ? (str: string) => { logger.info(str); }
: false; : false;
let encrypt = (GBConfigService.get("DATABASE_ENCRYPT") === "true"); let encrypt = (GBConfigService.get("DATABASE_ENCRYPT") === "true");
@ -196,16 +196,16 @@ export class GBCoreService implements IGBCoreService {
if (GBConfigService.get("DATABASE_SYNC") === "true") { if (GBConfigService.get("DATABASE_SYNC") === "true") {
const alter = (GBConfigService.get("DATABASE_SYNC_ALTER") === "true"); const alter = (GBConfigService.get("DATABASE_SYNC_ALTER") === "true");
const force = (GBConfigService.get("DATABASE_SYNC_FORCE") === "true"); const force = (GBConfigService.get("DATABASE_SYNC_FORCE") === "true");
logger.trace("Syncing database..."); logger.info("Syncing database...");
this.sequelize.sync({ this.sequelize.sync({
alter: alter, alter: alter,
force: force force: force
}).then(value => { }).then(value => {
logger.trace("Database synced."); logger.info("Database synced.");
cb(); cb();
}, err => logger.error(err)); }, err => logger.error(err));
} else { } else {
logger.trace("Database synchronization is disabled."); logger.info("Database synchronization is disabled.");
cb(); cb();
} }
} }
@ -229,7 +229,7 @@ export class GBCoreService implements IGBCoreService {
if (reason.message.indexOf("no such table: GuaribasInstance") != -1) { if (reason.message.indexOf("no such table: GuaribasInstance") != -1) {
cb([], null); cb([], null);
} else { } else {
logger.trace(`GuaribasServiceError: ${reason}`); logger.info(`GuaribasServiceError: ${reason}`);
cb(null, reason); cb(null, reason);
} }
}); });
@ -255,7 +255,7 @@ export class GBCoreService implements IGBCoreService {
}) })
.catch(err => { .catch(err => {
cb(null, err); cb(null, err);
logger.trace(`GuaribasServiceError: ${err}`); logger.info(`GuaribasServiceError: ${err}`);
}); });
} }
} }

View file

@ -79,7 +79,7 @@ export class GBDeployer {
localPath, localPath,
(data, err) => { (data, err) => {
if (err) { if (err) {
logger.trace(err); logger.info(err);
} else { } else {
cb(data, null); cb(data, null);
} }
@ -216,8 +216,8 @@ export class GBDeployer {
this.deployPackageFromLocalPath( this.deployPackageFromLocalPath(
UrlJoin(deployFolder, bootPackage), UrlJoin(deployFolder, bootPackage),
(data, err) => { (data, err) => {
logger.trace(`Boot package deployed: ${bootPackage}`); logger.info(`Boot package deployed: ${bootPackage}`);
if (err) logger.trace(err); if (err) logger.info(err);
} }
); );
} }

View file

@ -99,7 +99,7 @@ export class GBImporter {
// PACKAGE: security.json loading // PACKAGE: security.json loading
let service = new SecService(); let service = new SecService();
service.importSecurityFile(localPath, instance); // TODO: service.importSecurityFile(localPath, instance);
cb(instance, null); cb(instance, null);
}); });

View file

@ -203,7 +203,7 @@ export class GBMinService {
e.sysPackages = new Array<IGBPackage>(); e.sysPackages = new Array<IGBPackage>();
[GBAdminPackage, GBAnalyticsPackage, GBCorePackage, GBSecurityPackage, [GBAdminPackage, GBAnalyticsPackage, GBCorePackage, GBSecurityPackage,
GBKBPackage, GBCustomerSatisfactionPackage, GBWhatsappPackage].forEach(sysPackage => { GBKBPackage, GBCustomerSatisfactionPackage, GBWhatsappPackage].forEach(sysPackage => {
logger.trace(`Loading sys package: ${sysPackage.name}...`); logger.info(`Loading sys package: ${sysPackage.name}...`);
let p = Object.create(sysPackage.prototype) as IGBPackage; let p = Object.create(sysPackage.prototype) as IGBPackage;
p.loadBot(min); p.loadBot(min);
e.sysPackages.push(p); e.sysPackages.push(p);
@ -226,7 +226,7 @@ export class GBMinService {
// Serves individual URL for each bot conversational interface... // Serves individual URL for each bot conversational interface...
let url = `/api/messages/${instance.botId}`; let url = `/api/messages/${instance.botId}`;
logger.trace( logger.info(
`GeneralBots(${instance.engineName}) listening on: ${url}.` `GeneralBots(${instance.engineName}) listening on: ${url}.`
); );
@ -293,7 +293,7 @@ export class GBMinService {
e.onNewSession(min, dc); e.onNewSession(min, dc);
}); });
logger.trace( logger.info(
`[RCV]: ChannelID: ${context.activity.channelId}, ConversationID: ${context.activity.conversation.id} `[RCV]: ChannelID: ${context.activity.channelId}, ConversationID: ${context.activity.conversation.id}
Type: ${context.activity.type}, Name: ${context.activity.name}, Text: ${context.activity.text}.` Type: ${context.activity.type}, Name: ${context.activity.name}, Text: ${context.activity.text}.`
); );
@ -308,11 +308,11 @@ export class GBMinService {
uiUrl, uiUrl,
express.static(UrlJoin(this.deployFolder, uiPackage, "build")) express.static(UrlJoin(this.deployFolder, uiPackage, "build"))
); );
logger.trace(`Bot UI ${uiPackage} acessible at: ${uiUrl}.`); logger.info(`Bot UI ${uiPackage} acessible at: ${uiUrl}.`);
// Setups handlers. // Setups handlers.
// send: function (context.activity, next) { // send: function (context.activity, next) {
// logger.trace( // logger.info(
// `[SND]: ChannelID: ${context.activity.address.channelId}, ConversationID: ${context.activity.address.conversation}, // `[SND]: ChannelID: ${context.activity.address.channelId}, ConversationID: ${context.activity.address.conversation},
// Type: ${context.activity.type} `); // Type: ${context.activity.type} `);
// this.core.createMessage( // this.core.createMessage(
@ -320,7 +320,7 @@ export class GBMinService {
// this.min.conversation.startedBy, // this.min.conversation.startedBy,
// context.activity.source, // context.activity.source,
// (data, err) => { // (data, err) => {
// logger.trace(context.activity.source); // logger.info(context.activity.source);
// } // }
// ); // );
// next(); // next();
@ -356,7 +356,7 @@ export class GBMinService {
let dirs = getDirectories(path); let dirs = getDirectories(path);
dirs.forEach(element => { dirs.forEach(element => {
if (element.startsWith('.')) { if (element.startsWith('.')) {
logger.trace(`Ignoring ${element}...`); logger.info(`Ignoring ${element}...`);
} }
else { else {
if (element.endsWith('.gbot')) { if (element.endsWith('.gbot')) {
@ -373,9 +373,9 @@ export class GBMinService {
} }
logger.trace(`Starting looking for generalPackages...`); logger.info(`Starting looking for generalPackages...`);
paths.forEach(e => { paths.forEach(e => {
logger.trace(`Looking in: ${e}...`); logger.info(`Looking in: ${e}...`);
doIt(e); doIt(e);
}); });
@ -385,17 +385,17 @@ export class GBMinService {
let appPackagesProcessed = 0; let appPackagesProcessed = 0;
gbappPackages.forEach(e => { gbappPackages.forEach(e => {
logger.trace(`Deploying app: ${e}...`); logger.info(`Deploying app: ${e}...`);
// Skips .gbapp inside deploy folder. // Skips .gbapp inside deploy folder.
if (!e.startsWith('deploy')) { if (!e.startsWith('deploy')) {
import(e).then(m => { import(e).then(m => {
let p = new m.Package(); let p = new m.Package();
p.loadPackage(core, core.sequelize); p.loadPackage(core, core.sequelize);
appPackages.push(p); appPackages.push(p);
logger.trace(`App (.gbapp) deployed: ${e}.`); logger.info(`App (.gbapp) deployed: ${e}.`);
appPackagesProcessed++; appPackagesProcessed++;
}).catch(err => { }).catch(err => {
logger.trace(`Error deploying App (.gbapp): ${e}: ${err}`); logger.info(`Error deploying App (.gbapp): ${e}: ${err}`);
appPackagesProcessed++; appPackagesProcessed++;
}); });
} else { } else {
@ -408,20 +408,20 @@ export class GBMinService {
.interval(1000) .interval(1000)
.times(10) .times(10)
.condition(function (cb) { .condition(function (cb) {
logger.trace(`Waiting for app package deployment...`); logger.info(`Waiting for app package deployment...`);
cb(appPackagesProcessed == gbappPackages.length); cb(appPackagesProcessed == gbappPackages.length);
}) })
.done(function (result) { .done(function (result) {
logger.trace(`App Package deployment done.`); logger.info(`App Package deployment done.`);
core.syncDatabaseStructure(cb => { core.syncDatabaseStructure(cb => {
/** Deploys all .gbot files first. */ /** Deploys all .gbot files first. */
botPackages.forEach(e => { botPackages.forEach(e => {
logger.trace(`Deploying bot: ${e}...`); logger.info(`Deploying bot: ${e}...`);
_this_.deployer.deployBot(e, (data, err) => { _this_.deployer.deployBot(e, (data, err) => {
logger.trace(`Bot: ${e} deployed...`); logger.info(`Bot: ${e} deployed...`);
}); });
}); });
@ -432,7 +432,7 @@ export class GBMinService {
generalPackages.forEach(filename => { generalPackages.forEach(filename => {
let filenameOnly = Path.basename(filename); let filenameOnly = Path.basename(filename);
logger.trace(`Deploying package: ${filename}...`); logger.info(`Deploying package: ${filename}...`);
/** Handles apps for general bots - .gbapp must stay out of deploy folder. */ /** Handles apps for general bots - .gbapp must stay out of deploy folder. */
@ -443,7 +443,7 @@ export class GBMinService {
} else if (Path.extname(filename) === ".gbtheme") { } else if (Path.extname(filename) === ".gbtheme") {
server.use("/themes/" + filenameOnly, express.static(filename)); server.use("/themes/" + filenameOnly, express.static(filename));
logger.trace(`Theme (.gbtheme) assets accessible at: ${"/themes/" + filenameOnly}.`); logger.info(`Theme (.gbtheme) assets accessible at: ${"/themes/" + filenameOnly}.`);
/** Knowledge base for bots. */ /** Knowledge base for bots. */
@ -453,7 +453,7 @@ export class GBMinService {
"/kb/" + filenameOnly + "/subjects", "/kb/" + filenameOnly + "/subjects",
express.static(UrlJoin(filename, "subjects")) express.static(UrlJoin(filename, "subjects"))
); );
logger.trace(`KB (.gbkb) assets acessible at: ${"/kb/" + filenameOnly}.`); logger.info(`KB (.gbkb) assets acessible at: ${"/kb/" + filenameOnly}.`);
} }
else if (Path.extname(filename) === ".gbui" || filename.endsWith(".git")) { else if (Path.extname(filename) === ".gbui" || filename.endsWith(".git")) {
@ -473,7 +473,7 @@ export class GBMinService {
.interval(1000) .interval(1000)
.times(5) .times(5)
.condition(function (cb) { .condition(function (cb) {
logger.trace(`Waiting for package deployment...`); logger.info(`Waiting for package deployment...`);
cb(totalPackages == (generalPackages.length)); cb(totalPackages == (generalPackages.length));
}) })
.done(function (result) { .done(function (result) {
@ -481,7 +481,7 @@ export class GBMinService {
logger.info(`The bot server is running empty: No bot instances have been found, at least one .gbot file must be deployed.`); logger.info(`The bot server is running empty: No bot instances have been found, at least one .gbot file must be deployed.`);
} }
else { else {
logger.trace(`Package deployment done.`); logger.info(`Package deployment done.`);
} }
resolve(); resolve();
}); });

View file

@ -75,7 +75,7 @@ export class QualityDialog extends IGBDialog {
user.lastQuestion, user.lastQuestion,
user.lastQuestionId, user.lastQuestionId,
(data, err) => { (data, err) => {
logger.trace("QuestionAlternate inserted."); logger.info("QuestionAlternate inserted.");
} }
); );

View file

@ -84,7 +84,7 @@ export class AskDialog extends IGBDialog {
// async (data, err) => { // async (data, err) => {
// var data = res.text; // var data = res.text;
// if (data != text) { // if (data != text) {
// logger.trace("Spelled Text: " + data); // logger.info("Spelled Text: " + data);
// text = data; // text = data;
// } // }

View file

@ -353,7 +353,7 @@ export class KBService {
cb([], null); cb([], null);
} else { } else {
cb(null, reason); cb(null, reason);
logger.trace(`GuaribasServiceError: ${reason}`); logger.info(`GuaribasServiceError: ${reason}`);
} }
}); });
} }
@ -394,7 +394,7 @@ export class KBService {
answer = Fs.readFileSync(mediaFilename, "utf8"); answer = Fs.readFileSync(mediaFilename, "utf8");
format = ".md"; format = ".md";
} else { } else {
logger.trace("[GBImporter] File not found: ", mediaFilename); logger.info("[GBImporter] File not found: ", mediaFilename);
answer = answer =
"Por favor, contate a administração para rever esta pergunta."; "Por favor, contate a administração para rever esta pergunta.";
} }
@ -524,16 +524,16 @@ export class KBService {
packageId, packageId,
(data, err) => { (data, err) => {
if (err) { if (err) {
logger.trace(err); logger.info(err);
} else { } else {
logger.trace("Import KB done."); logger.info("Import KB done.");
} }
} }
); );
} }
}, },
function (err) { function (err) {
if (err) logger.trace(err); if (err) logger.info(err);
} }
); );
} }
@ -602,7 +602,7 @@ export class KBService {
deployKb(core: IGBCoreService, deployer: GBDeployer, localPath: string, cb: GBServiceCallback<any>) { deployKb(core: IGBCoreService, deployer: GBDeployer, localPath: string, cb: GBServiceCallback<any>) {
let packageType = Path.extname(localPath); let packageType = Path.extname(localPath);
let packageName = Path.basename(localPath); let packageName = Path.basename(localPath);
logger.trace("[GBDeployer] Opening package: ", packageName); logger.info("[GBDeployer] Opening package: ", packageName);
let packageObject = JSON.parse( let packageObject = JSON.parse(
Fs.readFileSync(UrlJoin(localPath, "package.json"), "utf8") Fs.readFileSync(UrlJoin(localPath, "package.json"), "utf8")
); );

View file

@ -203,8 +203,8 @@ export class WhatsappDirectLine extends GBService {
if (activities && activities.length) { if (activities && activities.length) {
// Ignore own messages. // Ignore own messages.
// TODO: this.botId instead of "general-bot-9672a8d3" // TODO: this.botId instead of "general-bot-9672a8d3"
activities = activities.filter((m) => { return (m.from.id === "GeneralBot-Netshoes") && m.type === "message" }); activities = activities.filter((m) => { return (m.from.id === "GeneralBots") && m.type === "message" });
if (activities.length) { if (activities.length) {

View file

@ -38,37 +38,37 @@
"botbuilder-choices": "^4.0.0-preview1.2", "botbuilder-choices": "^4.0.0-preview1.2",
"botbuilder-dialogs": "^4.0.0-preview1.2", "botbuilder-dialogs": "^4.0.0-preview1.2",
"botbuilder-prompts": "^4.0.0-preview1.2", "botbuilder-prompts": "^4.0.0-preview1.2",
"botlib": "^0.0.28", "botlib": "^0.0.33",
"chokidar": "^2.0.3", "chokidar": "^2.0.4",
"csv-parse": "^2.4.0", "csv-parse": "^3.0.0",
"dotenv-extended": "^2.0.2", "dotenv-extended": "^2.2.0",
"express": "^4.16.2", "express": "^4.16.3",
"fs-extra": "^6.0.1", "fs-extra": "^7.0.0",
"fs-walk": "^0.0.2", "fs-walk": "^0.0.2",
"marked": "^0.3.12", "marked": "^0.5.0",
"pragmatismo-io-framework": "^1.0.14", "pragmatismo-io-framework": "^1.0.15",
"reflect-metadata": "^0.1.12", "reflect-metadata": "^0.1.12",
"request-promise-native": "^1.0.5", "request-promise-native": "^1.0.5",
"sequelize": "^4.37.10", "sequelize": "^4.38.0",
"sequelize-typescript": "^0.6.3", "sequelize-typescript": "^0.6.6",
"sqlite3": "^4.0.0", "sqlite3": "^4.0.2",
"swagger-client": "^2.1.18", "swagger-client": "^3.8.15",
"tedious": "^2.1.1", "tedious": "^2.6.4",
"url-join": "^4.0.0", "url-join": "^4.0.0",
"wait-until": "^0.0.2", "wait-until": "^0.0.2",
"winston": "^2.4.2" "winston": "^3.0.0"
}, },
"devDependencies": { "devDependencies": {
"@types/chai": "^4.1.3", "@types/chai": "^4.1.4",
"@types/mocha": "^5.2.0", "@types/mocha": "^5.2.5",
"@types/sequelize": "^4.27.20", "@types/sequelize": "^4.27.25",
"@types/url-join": "^0.8.2", "@types/url-join": "^0.8.2",
"@types/winston": "^2.3.9", "@types/winston": "^2.4.4",
"chai": "^4.1.2", "chai": "^4.1.2",
"mocha": "^5.2.0", "mocha": "^5.2.0",
"mocha-typescript": "^1.1.14", "mocha-typescript": "^1.1.17",
"ts-node": "^6.0.5", "ts-node": "^7.0.1",
"typedoc": "^0.11.1", "typedoc": "^0.12.0",
"typescript": "^2.8.3" "typescript": "^3.0.3"
} }
} }

View file

@ -99,7 +99,7 @@ export class GBServer {
[GBAdminPackage, GBAnalyticsPackage, GBCorePackage, GBSecurityPackage, [GBAdminPackage, GBAnalyticsPackage, GBCorePackage, GBSecurityPackage,
GBKBPackage, GBCustomerSatisfactionPackage, GBWhatsappPackage].forEach(e => { GBKBPackage, GBCustomerSatisfactionPackage, GBWhatsappPackage].forEach(e => {
logger.trace(`Loading sys package: ${e.name}...`); logger.info(`Loading sys package: ${e.name}...`);
let p = Object.create(e.prototype) as IGBPackage; let p = Object.create(e.prototype) as IGBPackage;
p.loadPackage(core, core.sequelize); p.loadPackage(core, core.sequelize);
}); });

View file

@ -30,55 +30,43 @@
| | | |
\*****************************************************************************/ \*****************************************************************************/
var winston = require('winston'); const { createLogger, format, transports } = require('winston');
var logger = new (winston.Logger)({ const config = {
levels: { levels: {
trace: 0, error: 0,
input: 1, debug: 1,
verbose: 2, warn: 2,
prompt: 3, data: 3,
debug: 4, info: 4,
info: 5, verbose: 5,
data: 6, silly: 6,
help: 7, custom: 7
warn: 8,
error: 9
}, },
colors: { colors: {
trace: 'magenta', error: 'red',
input: 'grey',
verbose: 'cyan',
prompt: 'grey',
debug: 'blue', debug: 'blue',
info: 'green',
data: 'grey',
help: 'cyan',
warn: 'yellow', warn: 'yellow',
error: 'red' data: 'grey',
info: 'green',
verbose: 'cyan',
silly: 'magenta',
custom: 'yellow'
} }
}); };
logger.add(winston.transports.Console, { const logger = createLogger({
label: 'General Bot Server', format: format.combine(
level: 'error', format.colorize(),
prettyPrint: true, format.simple(),
colorize: true, format.label({ label: 'GeneralBots' }),
silent: false, format.timestamp(),
timestamp: false format.printf(nfo => {
}); return `${nfo.timestamp} [${nfo.label}] ${nfo.level}: ${nfo.message}`;
})
logger.add(winston.transports.File, { ),
label: 'General Bot Server', levels: config.levels,
prettyPrint: true, transports: [new transports.Console()]
level: 'error',
silent: false,
colorize: false,
timestamp: true,
filename: './gbtrace.log',
maxsize: 999999999,
maxFiles: 1,
json: false
}); });
module.exports=logger; module.exports=logger;

View file

@ -5,7 +5,6 @@
"declaration": false, "declaration": false,
"emitDecoratorMetadata": true, "emitDecoratorMetadata": true,
"experimentalDecorators": true, "experimentalDecorators": true,
"keyofStringsOnly": true,
"skipLibCheck": true, "skipLibCheck": true,
"mapRoot": "./dist/", "mapRoot": "./dist/",
"module": "commonjs", "module": "commonjs",