From 2584717ae89e30167d89a3f518c2c5085341a840 Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Sat, 1 Sep 2018 13:51:58 -0300 Subject: [PATCH] Finishing merge on v4 branch. --- deploy/core.gbapp/models/GBModel.ts | 2 - deploy/core.gbapp/services/GBConfigService.ts | 2 +- .../services/GBConversationalService.ts | 4 +- deploy/core.gbapp/services/GBCoreService.ts | 12 ++-- deploy/core.gbapp/services/GBDeployer.ts | 6 +- deploy/core.gbapp/services/GBImporter.ts | 2 +- deploy/core.gbapp/services/GBMinService.ts | 42 +++++------ .../dialogs/QualityDialog.ts | 2 +- deploy/kb.gbapp/dialogs/AskDialog.ts | 2 +- deploy/kb.gbapp/services/KBService.ts | 12 ++-- .../services/WhatsappDirectLine.ts | 4 +- package.json | 44 ++++++------ src/app.ts | 2 +- src/logger.ts | 70 ++++++++----------- tsconfig.json | 1 - 15 files changed, 96 insertions(+), 111 deletions(-) diff --git a/deploy/core.gbapp/models/GBModel.ts b/deploy/core.gbapp/models/GBModel.ts index d319cec8..5c263f51 100644 --- a/deploy/core.gbapp/models/GBModel.ts +++ b/deploy/core.gbapp/models/GBModel.ts @@ -111,8 +111,6 @@ export class GuaribasInstance extends Model implements IGBInst @Column ui: string; @Column kb: string; - - @Column(DataType.STRING(512)) nlpServerUrl: string; @Column nlpAppId: string; diff --git a/deploy/core.gbapp/services/GBConfigService.ts b/deploy/core.gbapp/services/GBConfigService.ts index 7088aad5..b037e2f2 100644 --- a/deploy/core.gbapp/services/GBConfigService.ts +++ b/deploy/core.gbapp/services/GBConfigService.ts @@ -85,7 +85,7 @@ export class GBConfigService { break; default: - logger.trace( + logger.info( `Guaribas General Error: Invalid key on .env file: '${key}'` ); break; diff --git a/deploy/core.gbapp/services/GBConversationalService.ts b/deploy/core.gbapp/services/GBConversationalService.ts index 774bbdbe..61903cda 100644 --- a/deploy/core.gbapp/services/GBConversationalService.ts +++ b/deploy/core.gbapp/services/GBConversationalService.ts @@ -85,14 +85,14 @@ export class GBConversationalService implements IGBConversationalService { res.entities && res.entities.length > 0 ? res.entities[0].entity.toUpperCase() : null; - logger.trace( + logger.info( "luis: intent: [" + intent + "] entity: [" + entity + "]" ); try { dc.replace("/" + intent); } 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.replace("/ask", { isReturning: true }); diff --git a/deploy/core.gbapp/services/GBCoreService.ts b/deploy/core.gbapp/services/GBCoreService.ts index d33d75d7..6ce94220 100644 --- a/deploy/core.gbapp/services/GBCoreService.ts +++ b/deploy/core.gbapp/services/GBCoreService.ts @@ -87,7 +87,7 @@ export class GBCoreService implements IGBCoreService { } let logging = (GBConfigService.get("DATABASE_LOGGING") === "true") - ? (str: string) => { logger.trace(str); } + ? (str: string) => { logger.info(str); } : false; let encrypt = (GBConfigService.get("DATABASE_ENCRYPT") === "true"); @@ -196,16 +196,16 @@ export class GBCoreService implements IGBCoreService { if (GBConfigService.get("DATABASE_SYNC") === "true") { const alter = (GBConfigService.get("DATABASE_SYNC_ALTER") === "true"); const force = (GBConfigService.get("DATABASE_SYNC_FORCE") === "true"); - logger.trace("Syncing database..."); + logger.info("Syncing database..."); this.sequelize.sync({ alter: alter, force: force }).then(value => { - logger.trace("Database synced."); + logger.info("Database synced."); cb(); }, err => logger.error(err)); } else { - logger.trace("Database synchronization is disabled."); + logger.info("Database synchronization is disabled."); cb(); } } @@ -229,7 +229,7 @@ export class GBCoreService implements IGBCoreService { if (reason.message.indexOf("no such table: GuaribasInstance") != -1) { cb([], null); } else { - logger.trace(`GuaribasServiceError: ${reason}`); + logger.info(`GuaribasServiceError: ${reason}`); cb(null, reason); } }); @@ -255,7 +255,7 @@ export class GBCoreService implements IGBCoreService { }) .catch(err => { cb(null, err); - logger.trace(`GuaribasServiceError: ${err}`); + logger.info(`GuaribasServiceError: ${err}`); }); } } diff --git a/deploy/core.gbapp/services/GBDeployer.ts b/deploy/core.gbapp/services/GBDeployer.ts index 6227203a..a99c7733 100644 --- a/deploy/core.gbapp/services/GBDeployer.ts +++ b/deploy/core.gbapp/services/GBDeployer.ts @@ -79,7 +79,7 @@ export class GBDeployer { localPath, (data, err) => { if (err) { - logger.trace(err); + logger.info(err); } else { cb(data, null); } @@ -216,8 +216,8 @@ export class GBDeployer { this.deployPackageFromLocalPath( UrlJoin(deployFolder, bootPackage), (data, err) => { - logger.trace(`Boot package deployed: ${bootPackage}`); - if (err) logger.trace(err); + logger.info(`Boot package deployed: ${bootPackage}`); + if (err) logger.info(err); } ); } diff --git a/deploy/core.gbapp/services/GBImporter.ts b/deploy/core.gbapp/services/GBImporter.ts index 7a64d702..81ee3968 100644 --- a/deploy/core.gbapp/services/GBImporter.ts +++ b/deploy/core.gbapp/services/GBImporter.ts @@ -99,7 +99,7 @@ export class GBImporter { // PACKAGE: security.json loading let service = new SecService(); - service.importSecurityFile(localPath, instance); + // TODO: service.importSecurityFile(localPath, instance); cb(instance, null); }); diff --git a/deploy/core.gbapp/services/GBMinService.ts b/deploy/core.gbapp/services/GBMinService.ts index 08e8de6d..7f8e2ea2 100644 --- a/deploy/core.gbapp/services/GBMinService.ts +++ b/deploy/core.gbapp/services/GBMinService.ts @@ -203,7 +203,7 @@ export class GBMinService { e.sysPackages = new Array(); [GBAdminPackage, GBAnalyticsPackage, GBCorePackage, GBSecurityPackage, 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; p.loadBot(min); e.sysPackages.push(p); @@ -226,7 +226,7 @@ export class GBMinService { // Serves individual URL for each bot conversational interface... let url = `/api/messages/${instance.botId}`; - logger.trace( + logger.info( `GeneralBots(${instance.engineName}) listening on: ${url}.` ); @@ -293,7 +293,7 @@ export class GBMinService { e.onNewSession(min, dc); }); - logger.trace( + logger.info( `[RCV]: ChannelID: ${context.activity.channelId}, ConversationID: ${context.activity.conversation.id} Type: ${context.activity.type}, Name: ${context.activity.name}, Text: ${context.activity.text}.` ); @@ -308,11 +308,11 @@ export class GBMinService { uiUrl, 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. // send: function (context.activity, next) { - // logger.trace( + // logger.info( // `[SND]: ChannelID: ${context.activity.address.channelId}, ConversationID: ${context.activity.address.conversation}, // Type: ${context.activity.type} `); // this.core.createMessage( @@ -320,7 +320,7 @@ export class GBMinService { // this.min.conversation.startedBy, // context.activity.source, // (data, err) => { - // logger.trace(context.activity.source); + // logger.info(context.activity.source); // } // ); // next(); @@ -356,7 +356,7 @@ export class GBMinService { let dirs = getDirectories(path); dirs.forEach(element => { if (element.startsWith('.')) { - logger.trace(`Ignoring ${element}...`); + logger.info(`Ignoring ${element}...`); } else { 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 => { - logger.trace(`Looking in: ${e}...`); + logger.info(`Looking in: ${e}...`); doIt(e); }); @@ -385,17 +385,17 @@ export class GBMinService { let appPackagesProcessed = 0; gbappPackages.forEach(e => { - logger.trace(`Deploying app: ${e}...`); + logger.info(`Deploying app: ${e}...`); // Skips .gbapp inside deploy folder. if (!e.startsWith('deploy')) { import(e).then(m => { let p = new m.Package(); p.loadPackage(core, core.sequelize); appPackages.push(p); - logger.trace(`App (.gbapp) deployed: ${e}.`); + logger.info(`App (.gbapp) deployed: ${e}.`); appPackagesProcessed++; }).catch(err => { - logger.trace(`Error deploying App (.gbapp): ${e}: ${err}`); + logger.info(`Error deploying App (.gbapp): ${e}: ${err}`); appPackagesProcessed++; }); } else { @@ -408,20 +408,20 @@ export class GBMinService { .interval(1000) .times(10) .condition(function (cb) { - logger.trace(`Waiting for app package deployment...`); + logger.info(`Waiting for app package deployment...`); cb(appPackagesProcessed == gbappPackages.length); }) .done(function (result) { - logger.trace(`App Package deployment done.`); + logger.info(`App Package deployment done.`); core.syncDatabaseStructure(cb => { /** Deploys all .gbot files first. */ botPackages.forEach(e => { - logger.trace(`Deploying bot: ${e}...`); + logger.info(`Deploying bot: ${e}...`); _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 => { 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. */ @@ -443,7 +443,7 @@ export class GBMinService { } else if (Path.extname(filename) === ".gbtheme") { 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. */ @@ -453,7 +453,7 @@ export class GBMinService { "/kb/" + filenameOnly + "/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")) { @@ -473,7 +473,7 @@ export class GBMinService { .interval(1000) .times(5) .condition(function (cb) { - logger.trace(`Waiting for package deployment...`); + logger.info(`Waiting for package deployment...`); cb(totalPackages == (generalPackages.length)); }) .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.`); } else { - logger.trace(`Package deployment done.`); + logger.info(`Package deployment done.`); } resolve(); }); diff --git a/deploy/customer-satisfaction.gbapp/dialogs/QualityDialog.ts b/deploy/customer-satisfaction.gbapp/dialogs/QualityDialog.ts index cee6e1dc..b3873961 100644 --- a/deploy/customer-satisfaction.gbapp/dialogs/QualityDialog.ts +++ b/deploy/customer-satisfaction.gbapp/dialogs/QualityDialog.ts @@ -75,7 +75,7 @@ export class QualityDialog extends IGBDialog { user.lastQuestion, user.lastQuestionId, (data, err) => { - logger.trace("QuestionAlternate inserted."); + logger.info("QuestionAlternate inserted."); } ); diff --git a/deploy/kb.gbapp/dialogs/AskDialog.ts b/deploy/kb.gbapp/dialogs/AskDialog.ts index c146a35a..850f2055 100644 --- a/deploy/kb.gbapp/dialogs/AskDialog.ts +++ b/deploy/kb.gbapp/dialogs/AskDialog.ts @@ -84,7 +84,7 @@ export class AskDialog extends IGBDialog { // async (data, err) => { // var data = res.text; // if (data != text) { - // logger.trace("Spelled Text: " + data); + // logger.info("Spelled Text: " + data); // text = data; // } diff --git a/deploy/kb.gbapp/services/KBService.ts b/deploy/kb.gbapp/services/KBService.ts index c0dc2fbb..c7e1ca86 100644 --- a/deploy/kb.gbapp/services/KBService.ts +++ b/deploy/kb.gbapp/services/KBService.ts @@ -353,7 +353,7 @@ export class KBService { cb([], null); } else { cb(null, reason); - logger.trace(`GuaribasServiceError: ${reason}`); + logger.info(`GuaribasServiceError: ${reason}`); } }); } @@ -394,7 +394,7 @@ export class KBService { answer = Fs.readFileSync(mediaFilename, "utf8"); format = ".md"; } else { - logger.trace("[GBImporter] File not found: ", mediaFilename); + logger.info("[GBImporter] File not found: ", mediaFilename); answer = "Por favor, contate a administração para rever esta pergunta."; } @@ -524,16 +524,16 @@ export class KBService { packageId, (data, err) => { if (err) { - logger.trace(err); + logger.info(err); } else { - logger.trace("Import KB done."); + logger.info("Import KB done."); } } ); } }, 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) { let packageType = Path.extname(localPath); let packageName = Path.basename(localPath); - logger.trace("[GBDeployer] Opening package: ", packageName); + logger.info("[GBDeployer] Opening package: ", packageName); let packageObject = JSON.parse( Fs.readFileSync(UrlJoin(localPath, "package.json"), "utf8") ); diff --git a/deploy/whatsapp.gblib/services/WhatsappDirectLine.ts b/deploy/whatsapp.gblib/services/WhatsappDirectLine.ts index 7201f349..2f6e80d8 100644 --- a/deploy/whatsapp.gblib/services/WhatsappDirectLine.ts +++ b/deploy/whatsapp.gblib/services/WhatsappDirectLine.ts @@ -203,8 +203,8 @@ export class WhatsappDirectLine extends GBService { if (activities && activities.length) { // Ignore own messages. -// TODO: this.botId instead of "general-bot-9672a8d3" - activities = activities.filter((m) => { return (m.from.id === "GeneralBot-Netshoes") && m.type === "message" }); + // TODO: this.botId instead of "general-bot-9672a8d3" + activities = activities.filter((m) => { return (m.from.id === "GeneralBots") && m.type === "message" }); if (activities.length) { diff --git a/package.json b/package.json index fa4166d7..e3d78fca 100644 --- a/package.json +++ b/package.json @@ -38,37 +38,37 @@ "botbuilder-choices": "^4.0.0-preview1.2", "botbuilder-dialogs": "^4.0.0-preview1.2", "botbuilder-prompts": "^4.0.0-preview1.2", - "botlib": "^0.0.28", - "chokidar": "^2.0.3", - "csv-parse": "^2.4.0", - "dotenv-extended": "^2.0.2", - "express": "^4.16.2", - "fs-extra": "^6.0.1", + "botlib": "^0.0.33", + "chokidar": "^2.0.4", + "csv-parse": "^3.0.0", + "dotenv-extended": "^2.2.0", + "express": "^4.16.3", + "fs-extra": "^7.0.0", "fs-walk": "^0.0.2", - "marked": "^0.3.12", - "pragmatismo-io-framework": "^1.0.14", + "marked": "^0.5.0", + "pragmatismo-io-framework": "^1.0.15", "reflect-metadata": "^0.1.12", "request-promise-native": "^1.0.5", - "sequelize": "^4.37.10", - "sequelize-typescript": "^0.6.3", - "sqlite3": "^4.0.0", - "swagger-client": "^2.1.18", - "tedious": "^2.1.1", + "sequelize": "^4.38.0", + "sequelize-typescript": "^0.6.6", + "sqlite3": "^4.0.2", + "swagger-client": "^3.8.15", + "tedious": "^2.6.4", "url-join": "^4.0.0", "wait-until": "^0.0.2", - "winston": "^2.4.2" + "winston": "^3.0.0" }, "devDependencies": { - "@types/chai": "^4.1.3", - "@types/mocha": "^5.2.0", - "@types/sequelize": "^4.27.20", + "@types/chai": "^4.1.4", + "@types/mocha": "^5.2.5", + "@types/sequelize": "^4.27.25", "@types/url-join": "^0.8.2", - "@types/winston": "^2.3.9", + "@types/winston": "^2.4.4", "chai": "^4.1.2", "mocha": "^5.2.0", - "mocha-typescript": "^1.1.14", - "ts-node": "^6.0.5", - "typedoc": "^0.11.1", - "typescript": "^2.8.3" + "mocha-typescript": "^1.1.17", + "ts-node": "^7.0.1", + "typedoc": "^0.12.0", + "typescript": "^3.0.3" } } diff --git a/src/app.ts b/src/app.ts index b76b3285..ea15669a 100644 --- a/src/app.ts +++ b/src/app.ts @@ -99,7 +99,7 @@ export class GBServer { [GBAdminPackage, GBAnalyticsPackage, GBCorePackage, GBSecurityPackage, 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; p.loadPackage(core, core.sequelize); }); diff --git a/src/logger.ts b/src/logger.ts index e9a77b4c..03b8b8be 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -30,55 +30,43 @@ | | \*****************************************************************************/ -var winston = require('winston'); +const { createLogger, format, transports } = require('winston'); -var logger = new (winston.Logger)({ +const config = { levels: { - trace: 0, - input: 1, - verbose: 2, - prompt: 3, - debug: 4, - info: 5, - data: 6, - help: 7, - warn: 8, - error: 9 + error: 0, + debug: 1, + warn: 2, + data: 3, + info: 4, + verbose: 5, + silly: 6, + custom: 7 }, colors: { - trace: 'magenta', - input: 'grey', - verbose: 'cyan', - prompt: 'grey', + error: 'red', debug: 'blue', - info: 'green', - data: 'grey', - help: 'cyan', warn: 'yellow', - error: 'red' + data: 'grey', + info: 'green', + verbose: 'cyan', + silly: 'magenta', + custom: 'yellow' } -}); +}; -logger.add(winston.transports.Console, { - label: 'General Bot Server', - level: 'error', - prettyPrint: true, - colorize: true, - silent: false, - timestamp: false -}); - -logger.add(winston.transports.File, { - label: 'General Bot Server', - prettyPrint: true, - level: 'error', - silent: false, - colorize: false, - timestamp: true, - filename: './gbtrace.log', - maxsize: 999999999, - maxFiles: 1, - json: false +const logger = createLogger({ + format: format.combine( + format.colorize(), + format.simple(), + format.label({ label: 'GeneralBots' }), + format.timestamp(), + format.printf(nfo => { + return `${nfo.timestamp} [${nfo.label}] ${nfo.level}: ${nfo.message}`; + }) + ), + levels: config.levels, + transports: [new transports.Console()] }); module.exports=logger; \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index d583fed9..e8fb0b5e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,6 @@ "declaration": false, "emitDecoratorMetadata": true, "experimentalDecorators": true, - "keyofStringsOnly": true, "skipLibCheck": true, "mapRoot": "./dist/", "module": "commonjs",