diff --git a/BACKEND/app/services/line_connection.ts b/BACKEND/app/services/line_connection.ts index 8fd70f6..2d6af9a 100644 --- a/BACKEND/app/services/line_connection.ts +++ b/BACKEND/app/services/line_connection.ts @@ -42,7 +42,7 @@ interface LineConfig { openCLI: boolean userEmailOpenCLI: string userOpenCLI: string - inventory: string + inventory: any latestScenario?: { name: string time: number @@ -109,7 +109,7 @@ export default class LineConnection { private outputScenario: string // private bufferCommand: string public dataDPELP: DataDPELP | string - private retryConnect: number + private listScenarios: number[] public handleClearLine: () => void constructor(config: LineConfig, socketIO: any, handleClearLine: () => void) { @@ -134,7 +134,7 @@ export default class LineConnection { issues: ['No data'], summary: '', } - this.retryConnect = 0 + this.listScenarios = [] this.handleClearLine = handleClearLine } @@ -445,7 +445,7 @@ export default class LineConnection { const logScenarios = this.outputScenario const data = textfsmResults(logScenarios, '') - let pid = '' + let pid = this.config.inventory?.pid || '' try { data.forEach((item) => { if (item?.textfsm && isValidJson(item?.textfsm)) { @@ -469,9 +469,10 @@ export default class LineConnection { item.textfsm = JSON.parse(item.textfsm) } }) - const scenario = await detectScenarioByModel(pid) - // console.log(pid, scenario) + const scenario = await detectScenarioByModel(pid, this.listScenarios) + console.log(pid, scenario?.title, this.listScenarios) if (scenario && scenario.id !== script.id) { + this.listScenarios.push(scenario.id) this.outputScenario = '' this.runScript(scenario, userName) // this.socketIO.emit('confirm_scenario', { @@ -510,7 +511,7 @@ export default class LineConnection { } catch (error) { console.log(error) } - + this.listScenarios = [] this.outputScenario = '' resolve(true) return diff --git a/BACKEND/app/ultils/helper.ts b/BACKEND/app/ultils/helper.ts index 59d5140..6dfe025 100644 --- a/BACKEND/app/ultils/helper.ts +++ b/BACKEND/app/ultils/helper.ts @@ -307,12 +307,13 @@ export function sendMessageToZulip( } // Catch scenario with key longer -export const detectScenarioByModel = async (model: string) => { +export const detectScenarioByModel = async (model: string, listScenarios: number[]) => { let scenarios = await Scenario.query().preload('brand').preload('category') const normalizedModel = model.trim().toUpperCase() let matched: { scenario: Scenario; score: number } | null = null for (const scenario of scenarios) { + if (listScenarios.includes(scenario.id)) continue const seriesList: string[] = Array.isArray(scenario.series) ? scenario.series : JSON.parse(scenario.series || '[]') diff --git a/BACKEND/providers/socket_io_provider.ts b/BACKEND/providers/socket_io_provider.ts index 6bf9f44..1a28345 100644 --- a/BACKEND/providers/socket_io_provider.ts +++ b/BACKEND/providers/socket_io_provider.ts @@ -1025,6 +1025,7 @@ export class WebSocketIo { } async waitUntilAllReady(lineIds: number[]) { + await sleep(5000) return new Promise((resolve) => { const interval = setInterval(() => { let allReady = true