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

63 lines
1.6 KiB
TypeScript

import XRegExp from 'xregexp'
// Patterns for each field
// Parser function
const parseLog = (data: string) => {
const patterns = [
XRegExp('^Index\\s+\\d+\\s+Feature:\\s+(?<FEATURE>\\S+)'),
XRegExp('^Period\\s+left:\\s+(?<PERIOD_LEFT>.+)'),
XRegExp('^Period\\s+Used:\\s+(?<PERIOD_USED>.+)'),
XRegExp('^License\\s+Type:\\s+(?<LICENSE_TYPE>.+)'),
XRegExp('^License\\s+State:\\s+(?<LICENSE_STATE>.+)'),
XRegExp('^License\\s+Count:\\s+(?<LICENSE_COUNT>.+)'),
XRegExp('^License\\s+Priority:\\s+(?<LICENSE_PRIORITY>.+)'),
]
const lines = data.split('\n')
const records = []
let currentRecord: any = null
for (const line of lines) {
if (XRegExp.test(line, XRegExp('^Index\\s+\\d+\\s+Feature:'))) {
// Start a new record
if (currentRecord) {
records.push(currentRecord)
}
currentRecord = {
FEATURE: '',
PERIOD_LEFT: '',
PERIOD_USED: '',
LICENSE_TYPE: '',
LICENSE_STATE: '',
LICENSE_COUNT: '',
LICENSE_PRIORITY: '',
}
}
if (currentRecord) {
for (const pattern of patterns) {
const match = XRegExp.exec(line, pattern)
if (match) {
const item = match?.groups || {}
Object.keys(item).forEach((key) => {
if (item && item[key] !== undefined) {
currentRecord[key] = item[key]
}
})
break // Stop processing this line once a pattern matches
}
}
}
}
// Push the last record if it exists
if (currentRecord) {
records.push(currentRecord)
}
return records
}
export default parseLog