diff --git a/package-lock.json b/package-lock.json index 1b282208a..f419a5f3f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,7 +34,6 @@ "firebase-admin": "^12.5.0", "graphql": "^16.9.0", "graphql-request": "^6.1.0", - "graylog2": "^0.2.1", "inline-css": "^4.0.2", "intuit-oauth": "^4.1.2", "ioredis": "^5.4.1", @@ -5338,14 +5337,6 @@ "graphql": "14 - 16" } }, - "node_modules/graylog2": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/graylog2/-/graylog2-0.2.1.tgz", - "integrity": "sha512-vjysakwOhrAqMeIvSK0WZcmzKvkpxY6pCfT9QqtdSVAidPFIynuin7adqbdFp9MCCTbTE402WIxvg8cph5OWTA==", - "engines": { - "node": ">=0.6.11" - } - }, "node_modules/gtoken": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.0.1.tgz", diff --git a/package.json b/package.json index c8c5c38b4..589b49295 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,6 @@ "firebase-admin": "^12.5.0", "graphql": "^16.9.0", "graphql-request": "^6.1.0", - "graylog2": "^0.2.1", "inline-css": "^4.0.2", "intuit-oauth": "^4.1.2", "ioredis": "^5.4.1", diff --git a/server/accounting/qbo/qbo-receivables.js b/server/accounting/qbo/qbo-receivables.js index 38edd0af9..f57c6711a 100644 --- a/server/accounting/qbo/qbo-receivables.js +++ b/server/accounting/qbo/qbo-receivables.js @@ -211,7 +211,7 @@ exports.default = async (req, res) => { res.status(200).json(ret); } catch (error) { - console.log(error); + //console.log(error); logger.log("qbo-receivable-create-error", "ERROR", req.user.email, { error: error.message, stack: error.stack diff --git a/server/intellipay/intellipay.js b/server/intellipay/intellipay.js index 3c6289b9b..c231f8261 100644 --- a/server/intellipay/intellipay.js +++ b/server/intellipay/intellipay.js @@ -78,7 +78,7 @@ exports.lightbox_credentials = async (req, res) => { res.send(response.data); } catch (error) { - console.log(error); + //console.log(error); logger.log("intellipay-lightbox-credentials-error", "ERROR", req.user?.email, null, { error: JSON.stringify(error) }); @@ -109,7 +109,7 @@ exports.payment_refund = async (req, res) => { res.send(response.data); } catch (error) { - console.log(error); + //console.log(error); logger.log("intellipay-refund-error", "ERROR", req.user?.email, null, { error: JSON.stringify(error) }); @@ -143,7 +143,7 @@ exports.generate_payment_url = async (req, res) => { res.send(response.data); } catch (error) { - console.log(error); + //console.log(error); logger.log("intellipay-payment-url-error", "ERROR", req.user?.email, null, { error: JSON.stringify(error) }); diff --git a/server/ioevent/ioevent.js b/server/ioevent/ioevent.js index a657e31d8..5d4223f73 100644 --- a/server/ioevent/ioevent.js +++ b/server/ioevent/ioevent.js @@ -28,10 +28,10 @@ exports.default = async (req, res) => { // } // }); - ioRedis.to(getBodyshopRoom(bodyshopid)).emit("bodyshop-message", { - operationName, - useremail - }); + // ioRedis.to(getBodyshopRoom(bodyshopid)).emit("bodyshop-message", { + // operationName, + // useremail + // }); res.sendStatus(200); } catch (error) { diff --git a/server/job/job-totals-USA.js b/server/job/job-totals-USA.js index ca9a74bca..4e123850e 100644 --- a/server/job/job-totals-USA.js +++ b/server/job/job-totals-USA.js @@ -866,8 +866,8 @@ function CalculateTaxesTotals(job, otherTotals) { } }); - console.log("*** Taxable Amounts***"); - console.table(JSON.parse(JSON.stringify(taxableAmounts))); + // console.log("*** Taxable Amounts***"); + // console.table(JSON.parse(JSON.stringify(taxableAmounts))); //For the taxable amounts, figure out which tax type applies. //Then sum up the total of that tax type and then calculate the thresholds. @@ -979,8 +979,8 @@ function CalculateTaxesTotals(job, otherTotals) { } const remainingTaxableAmounts = taxableAmountsByTier; - console.log("*** Taxable Amounts by Tier***"); - console.table(JSON.parse(JSON.stringify(taxableAmountsByTier))); + // console.log("*** Taxable Amounts by Tier***"); + // console.table(JSON.parse(JSON.stringify(taxableAmountsByTier))); Object.keys(taxableAmountsByTier).forEach((taxTierKey) => { try { @@ -1030,8 +1030,8 @@ function CalculateTaxesTotals(job, otherTotals) { } }); - console.log("*** Total Tax by Tier Amounts***"); - console.table(JSON.parse(JSON.stringify(totalTaxByTier))); + // console.log("*** Total Tax by Tier Amounts***"); + // console.table(JSON.parse(JSON.stringify(totalTaxByTier))); stateTax = stateTax .add(totalTaxByTier.ty1Tax) diff --git a/server/job/job-totals.js b/server/job/job-totals.js index 079f54cba..4cd45e13c 100644 --- a/server/job/job-totals.js +++ b/server/job/job-totals.js @@ -182,7 +182,7 @@ async function AutoAddAtsIfRequired({ job, client }) { job.joblines[atsLineIndex].act_price = atsAmount; } - console.log(job.jobLines); + //console.log(job.jobLines); } } diff --git a/server/opensearch/os-handler.js b/server/opensearch/os-handler.js index ba35eebd9..930933373 100644 --- a/server/opensearch/os-handler.js +++ b/server/opensearch/os-handler.js @@ -148,7 +148,7 @@ async function OpenSearchUpdateHandler(req, res) { }; const response = await osClient.index(payload); - console.log(response.body); + //console.log(response.body); res.status(200).json(response.body); } } catch (error) { @@ -255,7 +255,7 @@ async function OpenSearchSearchHandler(req, res) { res.json(body); } catch (error) { - console.log(error); + //console.log(error); logger.log("os-search-error", "ERROR", req.user.email, null, { error: JSON.stringify(error) }); diff --git a/server/render/canvas-handler.js b/server/render/canvas-handler.js index 010a3bec3..0af2a7f53 100644 --- a/server/render/canvas-handler.js +++ b/server/render/canvas-handler.js @@ -1,18 +1,19 @@ const { createCanvas } = require("canvas"); const Chart = require("chart.js/auto"); +const logger = require("../utils/logger"); const { backgroundColors, borderColors } = require("./canvas-colors"); const { isObject, defaultsDeep, isNumber } = require("lodash"); exports.canvastest = function (req, res) { - console.log("Incoming test request.", req); + //console.log("Incoming test request.", req); res.status(200).send("OK"); }; exports.canvas = function (req, res) { const { w, h, values, keys, override } = req.body; - console.log("Incoming Canvas Request:", w, h, values, keys, override); - + //console.log("Incoming Canvas Request:", w, h, values, keys, override); + logger.log("inbound-canvas-creation", "debug", "jsr", null, { w, h, values, keys, override }); // Gate required values if (!values || !keys) { res.status(400).send("Missing required data"); diff --git a/server/sms/receive.js b/server/sms/receive.js index ad9291a7f..c34147833 100644 --- a/server/sms/receive.js +++ b/server/sms/receive.js @@ -47,7 +47,7 @@ exports.receive = async (req, res) => { //Found a bodyshop - should always happen. if (response.bodyshops[0].conversations.length === 0) { //No conversation Found, create one. - console.log("[SMS Receive] No conversation found. Creating one."); + //console.log("[SMS Receive] No conversation found. Creating one."); newMessage.conversation = { data: { bodyshopid: response.bodyshops[0].id, @@ -56,7 +56,7 @@ exports.receive = async (req, res) => { }; } else if (response.bodyshops[0].conversations.length === 1) { //Just add it to the conversation - console.log("[SMS Receive] Conversation found. Added ID."); + //console.log("[SMS Receive] Conversation found. Added ID."); newMessage.conversationid = response.bodyshops[0].conversations[0].id; } else { //We should never get here. @@ -123,7 +123,14 @@ exports.receive = async (req, res) => { } } } catch (e1) { - console.log("e1", e1); + logger.log("sms-inbound-error", "ERROR", "api", null, { + msid: req.body.SmsMessageSid, + text: req.body.Body, + image: !!req.body.MediaUrl0, + image_path: generateMediaArray(req.body), + messagingServiceSid: req.body.MessagingServiceSid, + error: e1 + }); res.sendStatus(500).json(e1); } } diff --git a/server/utils/logger.js b/server/utils/logger.js index 0b7b9b0e4..183442dc6 100644 --- a/server/utils/logger.js +++ b/server/utils/logger.js @@ -1,10 +1,4 @@ -const graylog2 = require("graylog2"); const InstanceManager = require("../utils/instanceMgr").default; - -const logger = new graylog2.graylog({ - servers: [{ host: "logs.bodyshop.app", port: 12201 }] -}); - const winston = require("winston"); const WinstonCloudWatch = require("winston-cloudwatch"); @@ -19,28 +13,47 @@ const winstonLogger = winston.createLogger({ //level: "debug", format: winston.format.json(), transports: [ - ...(process.env.NODE_ENV !== "production" ? [new winston.transports.Console({ level: "silly" })] : []), - new WinstonCloudWatch({ - level: "error", - logGroupName: logGroupName, - logStreamName: "errors", - awsRegion: region, - jsonMessage: true - }), - new WinstonCloudWatch({ - level: "warn", - logGroupName: logGroupName, - logStreamName: "warn", - awsRegion: region, - jsonMessage: true - }), - new WinstonCloudWatch({ - level: "debug", - logGroupName: logGroupName, - logStreamName: "debug", - awsRegion: region, - jsonMessage: true - }) + ...(process.env.NODE_ENV !== "production" + ? [ + new winston.transports.Console({ + level: "silly", + format: winston.format.combine( + winston.format.colorize(), // Colorize the output + winston.format.timestamp(), // Add timestamps + winston.format.printf(({ level, message, timestamp, user, record, object }) => { + // Format the log message for pretty printing + return `${timestamp} [${level}]: ${message} ${ + user ? `| user: ${JSON.stringify(user)}` : "" + } ${record ? `| record: ${JSON.stringify(record)}` : ""} ${ + object ? `| object: ${JSON.stringify(object, null, 2)}` : "" + }`; + }) + ) + }) + ] + : [ + new WinstonCloudWatch({ + level: "error", + logGroupName: logGroupName, + logStreamName: "errors", + awsRegion: region, + jsonMessage: true + }), + new WinstonCloudWatch({ + level: "warn", + logGroupName: logGroupName, + logStreamName: "warn", + awsRegion: region, + jsonMessage: true + }), + new WinstonCloudWatch({ + level: "debug", + logGroupName: logGroupName, + logStreamName: "debug", + awsRegion: region, + jsonMessage: true + }) + ]) ] }); @@ -52,15 +65,9 @@ function log(message, type, user, record, object) { message: message, user: user, record: record, - object: object + meta: object }); - // logger.log(message, message, { - // type, - // env: process.env.NODE_ENV || "development", - // user, - // record, - // ...object - // }); + } module.exports = { log }; diff --git a/server/web-sockets/redisSocketEvents.js b/server/web-sockets/redisSocketEvents.js index f0c028d17..a19953311 100644 --- a/server/web-sockets/redisSocketEvents.js +++ b/server/web-sockets/redisSocketEvents.js @@ -8,7 +8,7 @@ const redisSocketEvents = ({ }) => { // Logging helper functions const createLogEvent = (socket, level, message) => { - console.log(`[IOREDIS LOG EVENT] - ${socket?.user?.email} - ${socket.id} - ${message}`); + //console.log(`[IOREDIS LOG EVENT] - ${socket?.user?.email} - ${socket.id} - ${message}`); logger.log("ioredis-log-event", level, socket?.user?.email, null, { wsmessage: message }); }; @@ -33,7 +33,7 @@ const redisSocketEvents = ({ next(new Error("Authentication error - no authorization token.")); } } catch (error) { - console.log("Uncaught connection error:::", error); + //console.log("Uncaught connection error:::", error); logger.log("websocket-connection-error", "error", null, null, { ...error }); diff --git a/server/web-sockets/web-socket.js b/server/web-sockets/web-socket.js index ef6e6dc13..3140c2e87 100644 --- a/server/web-sockets/web-socket.js +++ b/server/web-sockets/web-socket.js @@ -31,7 +31,7 @@ io.use(function (socket, next) { next(new Error("Authentication error - no authorization token.")); } } catch (error) { - console.log("Uncaught connection error:::", error); + //console.log("Uncaught connection error:::", error); logger.log("websocket-connection-error", "error", null, null, { token: socket.handshake.auth.token, ...error @@ -148,7 +148,7 @@ function createLogEvent(socket, level, message) { function createJsonEvent(socket, level, message, json) { if (LogLevelHierarchy(socket.log_level) >= LogLevelHierarchy(level)) { - console.log(`[WS LOG EVENT] ${level} - ${new Date()} - ${socket.user.email} - ${socket.id} - ${message}`); + //console.log(`[WS LOG EVENT] ${level} - ${new Date()} - ${socket.user.email} - ${socket.id} - ${message}`); socket.emit("log-event", { timestamp: new Date(), level,