nn-ui-v2 / build /server /chunks /LogService-b0lb4PC5.js.map
muryshev's picture
ui update
05a241e
raw
history blame
No virus
20.6 kB
{"version":3,"file":"LogService-b0lb4PC5.js","sources":["../../../.svelte-kit/adapter-node/chunks/LogService.js"],"sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport { promisify } from \"util\";\nimport { format } from \"date-fns\";\nimport mongoose from \"mongoose\";\nimport ExcelJS from \"exceljs\";\nimport { d as private_env } from \"./shared-server.js\";\nimport { E as ExcelColumnsName } from \"./constants.js\";\nconst LogSchema = new mongoose.Schema({\n llmPrompt: { type: String },\n llmTemplate: { type: String },\n llmResponse: { type: String },\n searchResults: { type: [String] },\n selectedSearchResults: { type: [String] },\n uiSettings: { type: Object },\n consultations: { type: [String] },\n userRequest: { type: String },\n userScore: { type: String },\n userComment: { type: String },\n dateCreated: { type: Date, default: Date.now },\n dateUpdated: { type: Date, default: Date.now }\n});\nLogSchema.index({ dateCreated: 1 }, { unique: false });\nconst LogModel = mongoose.models.Log || mongoose.model(\"Log\", LogSchema);\nclass MongooseService {\n uri;\n options;\n connection;\n constructor(uri, options = {}) {\n try {\n this.uri = uri || process.env.MONGODB_URI || \"\";\n this.options = options;\n this.connection = null;\n if (!this.uri) {\n console.warn(\"MongoDB URI is not defined\");\n }\n } catch {\n console.warn(\"MongoDB URI is not defined. Logs wont be saved.\");\n }\n }\n /**\n * Connect to the MongoDB database\n * @returns {Promise<Connection>}\n */\n async connect() {\n if (this.connection) {\n return this.connection;\n }\n try {\n await mongoose.connect(this.uri, this.options);\n this.connection = mongoose.connection;\n console.log(\"Connected to MongoDB\");\n return this.connection;\n } catch (error) {\n console.warn(\"MongoDB URI is not defined. Logs wont be saved.\");\n }\n }\n /**\n * Disconnect from the MongoDB database\n * @returns {Promise<void>}\n */\n async disconnect() {\n if (!this.connection) {\n console.log(\"No active MongoDB connection to disconnect\");\n return;\n }\n try {\n await mongoose.disconnect();\n this.connection = null;\n console.log(\"Disconnected from MongoDB\");\n } catch (error) {\n console.error(\"Error disconnecting from MongoDB:\", error);\n throw new Error(\"Could not disconnect from MongoDB\");\n }\n }\n /**\n * Get the current MongoDB connection\n * @returns {Connection | null}\n */\n async getConnection() {\n if (!this.isConnected()) {\n await this.connect();\n }\n return this.connection;\n }\n isConnected() {\n return this.connection !== null && mongoose.connection.readyState === 1;\n }\n}\nconst writeFile = promisify(fs.writeFile);\nconst readDir = promisify(fs.readdir);\nconst readFile = promisify(fs.readFile);\nclass LogService {\n mongooseService;\n logModel;\n constructor() {\n if (private_env.ENABLE_DB_SUPPORT) {\n this.mongooseService = new MongooseService(private_env.MONGODB_URI || \"\");\n this.logModel = LogModel;\n }\n }\n /**\n * Сохраняет лог в базу данных MongoDB, если она доступна.\n * @param document - Лог-документ, который нужно сохранить.\n * @returns {Promise<string>} ID созданной записи.\n */\n async log(document) {\n if (!private_env.ENABLE_DB_SUPPORT) {\n return \"\";\n }\n try {\n await this.mongooseService.getConnection();\n const logEntry = new this.logModel(document);\n await logEntry.save();\n console.log(\"Log entry saved to MongoDB\");\n return logEntry._id;\n } catch (err) {\n console.error(\"MongoDB connection failed\", err);\n }\n return \"\";\n }\n /**\n * Обновляет поле userScore в записи с указанным ID.\n * @param id - ID записи, которую нужно обновить.\n * @param score - Новое значение для userScore.\n * @param comment - Новое значение для userComment.\n * @returns Количество обновленных записей.\n */\n async logUserScore(id, score, comment) {\n if (!private_env.ENABLE_DB_SUPPORT) {\n return \"\";\n }\n try {\n await this.mongooseService.getConnection();\n const LogModel2 = mongoose.model(\"Log\");\n const result = await LogModel2.updateOne(\n { _id: id },\n { $set: { userScore: score, userComment: comment } }\n );\n return result.modifiedCount;\n } catch (error) {\n console.error(\"Error while updating userScore:\", error);\n throw error;\n }\n }\n /**\n * Сохраняет лог-документ в файл JSON.\n * Имя файла основано на текущем времени.\n * @param document - Лог-документ, который нужно сохранить.\n * @returns {Promise<void>}\n */\n async saveLogToJsonFile(document) {\n const timestamp = format(/* @__PURE__ */ new Date(), \"dd-MM-yyyy:HH:mm:ss:SSS\");\n const logDir = path.join(private_env.LOGS_ROOT_FOLDER, \"log\");\n const logFile = path.join(logDir, `${timestamp}.json`);\n if (!fs.existsSync(logDir)) {\n fs.mkdirSync(logDir, { recursive: true });\n }\n const data = JSON.stringify(document, null, 2);\n await writeFile(logFile, data);\n console.log(`Log entry saved to file: ${logFile}`);\n }\n /**\n * Экспортирует логи из базы данных и/или файлов в формате JSON или Excel.\n * Записи сортируются по дате создания. Если указаны dateFrom и dateTo, применяется фильтрация по дате.\n * @param type - Тип экспорта: 'json' или 'excel'.\n * @param dateFrom - Дата начала фильтрации (необязательно).\n * @param dateTo - Дата окончания фильтрации (необязательно).\n * @param fields - Поля для экспорта\n * @returns {Promise<any>}\n */\n async export(type, dateFrom, dateTo, fields) {\n if (!private_env.ENABLE_DB_SUPPORT) {\n return \"\";\n }\n const mongoLogs = await this.fetchLogsFromMongo(dateFrom, dateTo, fields);\n const allLogs = [...mongoLogs];\n if (type === \"json\") {\n return await this.exportToJson(allLogs);\n } else if (type === \"excel\") {\n return await this.exportToExcel(allLogs);\n }\n }\n /**\n * Извлекает логи из базы данных MongoDB с учетом фильтрации по дате.\n * @param dateFrom - Дата начала фильтрации (необязательно).\n * @param dateTo - Дата окончания фильтрации (необязательно).\n * @returns {Promise<any[]>} - Возвращает массив логов.\n */\n async fetchLogsFromMongo(dateFrom, dateTo, fields) {\n if (!private_env.ENABLE_DB_SUPPORT) {\n return [];\n }\n const query = {};\n if (dateFrom || dateTo) {\n query.dateCreated = {};\n if (dateFrom)\n query.dateCreated.$gte = dateFrom;\n if (dateTo)\n query.dateCreated.$lte = dateTo;\n }\n await this.mongooseService.getConnection();\n return await this.logModel.find(query).select(fields ? fields.join(\" \") : \"\").sort({ dateCreated: 1 }).lean().exec();\n }\n /**\n * Извлекает логи из файлов JSON в папке /data/log с учетом фильтрации по дате.\n * @param dateFrom - Дата начала фильтрации (необязательно).\n * @param dateTo - Дата окончания фильтрации (необязательно).\n * @returns {Promise<any[]>} - Возвращает массив логов.\n */\n async fetchLogsFromFiles(dateFrom, dateTo) {\n const logDir = path.join(__dirname, \"../data/log\");\n const files = await readDir(logDir);\n const logs = [];\n for (const file of files) {\n const filePath = path.join(logDir, file);\n const content = await readFile(filePath, \"utf-8\");\n const logEntry = JSON.parse(content);\n const fileDate = format(\n new Date(file.split(\".\")[0].replace(/-/g, \":\")),\n \"yyyy-MM-dd HH:mm:ss:SSS\"\n );\n if ((!dateFrom || new Date(fileDate) >= dateFrom) && (!dateTo || new Date(fileDate) <= dateTo)) {\n logs.push(logEntry);\n }\n }\n logs.sort((a, b) => new Date(a.dateCreated).getTime() - new Date(b.dateCreated).getTime());\n return logs;\n }\n // /**\n // * Экспортирует массив логов в файл JSON.\n // * @param logs - Массив логов, который нужно экспортировать.\n // * @returns {Promise<void>}\n // */\n // private async exportToJson(logs: any[]): Promise<void> {\n // const exportFile = path.join(__dirname, '../data/export/logs.json');\n // await writeFile(exportFile, JSON.stringify(logs, null, 2));\n // console.log(`Logs exported to JSON file: ${exportFile}`);\n // }\n /**\n * Экспортирует массив логов в файл Excel.\n * @param logs - Массив логов, который нужно экспортировать.\n * @returns {Promise<void>}\n */\n async exportToExcel(logs) {\n const workbook = new ExcelJS.Workbook();\n const worksheet = workbook.addWorksheet(\"Logs\");\n if (private_env.ENABLE_DB_SUPPORT) {\n worksheet.columns = Object.keys(logs[0] ?? {}).map((key) => {\n return {\n header: ExcelColumnsName[key] ?? key,\n key,\n width: 30\n };\n });\n logs.forEach((log) => {\n const consultations = (log.consultations ?? []).map((v) => JSON.stringify(v));\n const searchResults = (log.searchResults ?? []).map((v) => JSON.stringify(v));\n const selectedSearchResults = (log.selectedSearchResults ?? []).map(\n (v) => JSON.stringify(v)\n );\n const serializedLog = Object.fromEntries(\n Object.entries(log).map(([key, value]) => [\n key,\n typeof value === \"object\" && value !== null ? JSON.stringify(value) : value\n ])\n );\n worksheet.addRow({\n ...serializedLog,\n consultations: consultations[0] ?? \"\",\n searchResults: searchResults[0] ?? \"\",\n selectedSearchResults: selectedSearchResults[0] ?? \"\"\n });\n const maxLength = Math.max(\n consultations.length,\n searchResults.length,\n selectedSearchResults.length\n );\n for (let index = 1; index < maxLength; index++) {\n worksheet.addRow({\n consultations: consultations[index] ?? \"\",\n searchResults: searchResults[index] ?? \"\",\n selectedSearchResults: selectedSearchResults[index] ?? \"\"\n });\n }\n });\n }\n const buffer = await workbook.xlsx.writeBuffer();\n return buffer;\n }\n}\nexport {\n LogService as L\n};\n"],"names":[],"mappings":"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"}