repo split: move projects to their own repos as submodules; bulk data purged to Gitea-Storage (Jupiter)

This commit is contained in:
2026-06-18 19:02:53 -07:00
parent d5bfe76780
commit 4fcd3088af
1266 changed files with 80 additions and 198742 deletions

View File

@@ -1,119 +0,0 @@
/**
* Parser for multi-line DAT files (DSCLOG, 5BLOG, 8BLOG, PWRLOG, SCTLOG, VASLOG)
*
* Format:
* "MODEL_NUMBER "
* measurement1,measurement2,measurement3,measurement4,"PASS/FAIL"
* ... (test data lines)
* 0
* "summary line 1"
* ...
* "SERIAL-NUM","MM-DD-YYYY"
*/
const fs = require('fs');
const path = require('path');
/**
* Parse a multi-line DAT file and extract test records
* @param {string} filePath - Path to the DAT file
* @param {string} logType - Type of log (DSCLOG, 5BLOG, etc.)
* @param {string} testStation - Test station identifier (TS-1L, etc.)
* @returns {Array} Array of parsed records
*/
function parseMultilineFile(filePath, logType, testStation = null) {
const records = [];
try {
const content = fs.readFileSync(filePath, 'utf8');
const lines = content.split('\n').map(l => l.trim());
let currentRecord = [];
let modelNumber = null;
for (let i = 0; i < lines.length; i++) {
const line = lines[i];
// Skip empty lines
if (!line) continue;
// Check if it's a serial/date line (format: "SERIAL","DATE")
const serialDateMatch = line.match(/^"(\d+-\d+[A-Za-z]?)","(\d{2}-\d{2}-\d{4})"$/);
if (serialDateMatch) {
// This is the end of a record
const serialNumber = serialDateMatch[1];
const dateStr = serialDateMatch[2];
if (modelNumber && currentRecord.length > 0) {
// Parse date from MM-DD-YYYY to YYYY-MM-DD
const [month, day, year] = dateStr.split('-');
const testDate = `${year}-${month}-${day}`;
// Determine overall result from raw data
const rawData = currentRecord.join('\n');
const overallResult = determineResult(rawData);
records.push({
log_type: logType,
model_number: modelNumber.trim(),
serial_number: serialNumber,
test_date: testDate,
test_station: testStation,
overall_result: overallResult,
raw_data: rawData,
source_file: filePath
});
}
// Reset for next record
currentRecord = [];
modelNumber = null;
}
// Check if this is a model number line
// Model numbers: single quoted string with product code (letters+numbers, possibly with dash)
// Examples: "DSCA38-1793 ", "SCM5B30-01 ", "8B30-01 "
else if (/^"[A-Z0-9]+[A-Z0-9-]*\s*"$/.test(line) && !line.includes(',') && !line.includes('PASS') && !line.includes('FAIL')) {
// This is a model number line - start new record
if (currentRecord.length > 0 && modelNumber) {
// Previous record didn't have serial/date - skip it
currentRecord = [];
}
modelNumber = line.replace(/"/g, '').trim();
currentRecord.push(line);
} else {
// Add line to current record
currentRecord.push(line);
}
}
} catch (err) {
console.error(`Error parsing ${filePath}: ${err.message}`);
}
return records;
}
/**
* Determine overall PASS/FAIL result from raw data
*/
function determineResult(rawData) {
const failCount = (rawData.match(/"FAIL/gi) || []).length;
const passCount = (rawData.match(/"PASS/gi) || []).length;
if (failCount > 0) return 'FAIL';
if (passCount > 0) return 'PASS';
return 'UNKNOWN';
}
/**
* Extract test station from file path
*/
function extractTestStation(filePath) {
const match = filePath.match(/TS-\d+[LR]/i);
return match ? match[0].toUpperCase() : null;
}
module.exports = {
parseMultilineFile,
extractTestStation
};