ATC_SIMPLE/BACKEND/app/ultils/templates/show_power.ts

40 lines
1.3 KiB
TypeScript

import XRegExp from 'xregexp'
// Parse the log data
const parseLog = (data: string) => {
const patterns = [
XRegExp('^NAME:\\s+"(?<name>.*)",\\s+DESCR:\\s+"(?<descr>.*)"'),
XRegExp('^PID:\\s+(?<pid>[\\S+]+|.*),.*VID:\\s+(?<vid>.*),.*SN:\\s+(?<sn>[\\w+\\d+]*)'),
XRegExp('^PID:\\s+,.*VID:\\s+(?<vid>.*),.*SN:\\s+(?<sn>[\\w+\\d+]*)'),
XRegExp('^PID:\\s+(?<pid>[\\S+]+|.*),.*VID:\\s+(?<vid>.*),.*SN:'),
]
const lines = data.split('\n')
const records = []
let currentRecord: any = { name: '', descr: '', pid: '', vid: '', sn: '' }
for (const line of lines) {
for (const pattern of patterns) {
const match = XRegExp.exec(line, pattern)
if (match) {
const item = match?.groups
// Update current record with matched fields
Object.keys(currentRecord).forEach((key) => {
if (item && item[key] !== undefined) {
currentRecord[key] = item[key]
}
})
// If "pid", "vid", or "sn" are matched, push a completed record
if (currentRecord.pid || currentRecord.vid || currentRecord.sn) {
records.push({ ...currentRecord })
currentRecord = { name: '', descr: '', pid: '', vid: '', sn: '' } // Reset for the next record
}
break // Stop checking other patterns for this line
}
}
}
return records
}
export default parseLog