import XRegExp from 'xregexp' const parseShowEnvironment = (data: string) => { const patterns = [ // 1. Dạng Stack hiện đại: "1 1 OK" (Ưu tiên cao nhất để tránh nhầm với số) XRegExp( '^\\s*(?\\d+)\\s+(?\\d+)\\s+(?:\\w+\\s+)?(?OK|Faulty|Normal|Failure).*?$' ), // 2. Dạng Sensor/Table phức tạp (ISR 4k/ASR): "Sensor Value State" // VD: "Temp: CPU Die Temperature 47 Celsius Normal" XRegExp( '^(?Temp|Fan|Voltage|Power|Sensor):?\\s*(?.+?)\\s+(?\\d+(?:\\s+Deg\\s+C|\\s*Celsius|\\s*V|\\s*W)?)\\s+(?Normal|Critical|Shutdown|Warning|OK)$', 'i' ), // 3. Dạng: FAN is OK / POWER is OK / RPS is NOT PRESENT XRegExp('^(?[A-Z ]+?)\\s+is\\s+(?.+)$'), // 4. Dạng: FAN 1 is OK / POWER SUPPLY A is NOT PRESENT XRegExp('^(?[A-Z ]+?)\\s+(?[A-Z0-9]+)\\s+is\\s+(?.+)$'), // 5. Dạng bảng: Temp: Inlet Front Normal XRegExp( '^(?Temp|Fan|Voltage|Power):?\\s*(?[^\\s]+)\\s+(?[^\\s]+)\\s+(?.+)$' ), // 6. Dạng: Inlet Temperature Value: 27 Degree Celsius XRegExp('^(?.*?Temperature).*?:\\s*(?.+)$'), ] const lines = data.split('\n') const records: any[] = [] for (let line of lines) { line = line.trim() if (!line) continue // Bỏ prompt if (line.startsWith('Switch#')) continue for (const p of patterns) { const m = XRegExp.exec(line, p) if (m?.groups) { const record: any = { TYPE: m.groups.TYPE?.trim() || '', NAME: m.groups.NAME?.trim() || '', LOCATION: m.groups.LOCATION?.trim() || '', STATE: m.groups.STATE?.trim() || '', VALUE: m.groups.VALUE?.trim() || '', RAW: line, } records.push(record) break } } } return records } export default parseShowEnvironment