first commit

This commit is contained in:
2023-11-15 13:36:30 +01:00
commit b2be88c07f
24 changed files with 4259 additions and 0 deletions

345
views/upload.pug Normal file
View File

@ -0,0 +1,345 @@
doctype html
include includes/head.pug
body
include includes/navigation.pug
.container-fluid
.row.page-container
.col-md-12.col-sm-12.col-xs-12
.row
.col
.container-fluid
.tab
button(class="tablinks" onclick="openTab(event, 'Details')") Details
button(class="tablinks hidden" onclick="openTab(event, 'Tasks')") Tasks
button(class="tablinks" onclick="openTab(event, 'Options')") Options
button(class="tablinks hidden" onclick="openTab(event, 'Errors')") Errors
button(class="tablinks hidden" onclick="openTab(event, 'Exceptions')") Exceptions
button(class="tablinks hidden" onclick="openTab(event, 'Warnings')") Warnings
button(class="tablinks" onclick="openTab(event, 'Full')") Full log
#Details(class="tabcontent default")
h3 Details
#Tasks(class="tabcontent")
h3 Tasks
#Options(class="tabcontent")
h3 Options
#Errors(class="tabcontent")
h3 Errors
#Exceptions(class="tabcontent")
h3 Exceptions
#Warnings(class="tabcontent")
h3 Warnings
#Full(class="tabcontent")
h3 Full log
.row
.col.croppie
.container-fluid
#content
script.
var file = !{JSON.stringify(files.logfile.path)}
var data = !{JSON.stringify(data)}
var jobType = !{JSON.stringify(jobtype)}
var details = document.getElementById('Details');
var tasks = document.getElementById('Tasks');
var options = document.getElementById('Options');
var errors = document.getElementById('Errors');
var exceptions = document.getElementById('Exceptions');
var warnings = document.getElementById('Warnings');
var content = document.getElementById('Full');
var alldata = {
'Clients': [],
'Job status': {},
'Tasks': {},
'Warnings': [],
'Errors': [],
'Exceptions': [],
'Job globals': [],
'Job options': [],
'Node options': {}
}
data.forEach(function(line, idx) {
checkVersion(line);
checkJobType(line);
checkJobGlobals(line);
checkJobGlobalOptions(line);
checkJobOptions(line);
checkCompletitionStatus(line);
checkTasks(line);
getClientName(line);
findWarnings(line);
findErrors(line);
findExceptions(line);
writeLog(line, idx + 1);
})
// write to tabs
if (Object.entries(alldata['Clients']).length > 0) {
details.insertAdjacentHTML('beforeend', '<p class="description"><h3>Clients</h3>')
for (let i in alldata['Clients']) {
details.insertAdjacentHTML('beforeend', '<p class="description">' + alldata['Clients'][i] + ' - ' + [i] + '</p>')
}
}
if (Object.entries(alldata['Job status']).length > 0) {
details.insertAdjacentHTML('beforeend', '<p class="description"><h3>Status</h3>')
if (parseInt(alldata['Job status']['Status']) !== 0) {
details.insertAdjacentHTML('beforeend', '<p class="description"><b>Completition status:</b> <span class=" code error">' + alldata['Job status']['Status'] + '</span></p>')
} else {
details.insertAdjacentHTML('beforeend', '<p class="description"><b>Completition status:</b> <span class=" code success">' + alldata['Job status']['Status'] + '</span></p>')
}
details.insertAdjacentHTML('beforeend', '<p class="description"><b>Run time:</b> ' + alldata['Job status']['Run time'] + '</p>')
details.insertAdjacentHTML('beforeend', '<p class="description"><b>Data volume:</b> ' + alldata['Job status']['Data volume'] + '</p>')
details.insertAdjacentHTML('beforeend', '<p class="description"><b>Throughput:</b> ' + alldata['Job status']['Throughput'] + '</p>')
details.insertAdjacentHTML('beforeend', '<p class="description"><b>Transfer rate:</b> ' + alldata['Job status']['Transfer rate'] + '</p>')
}
if (Object.entries(alldata['Tasks']).length > 0) {
Object.entries(alldata['Tasks']).forEach(function(el) {
var status = parseInt(el[1]["Status"]);
var bg = "#9FF781";
if (status !== 0) {
status = '<span class="code error">' + status + '</span>';
bg = "#F5A9A9";
}
tasks.insertAdjacentHTML('beforeend', '<div class="row" style="border: 1px solid black; margin: 8px; background: #fcfcfc"><div class="col-1" style="background: ' + bg + '">Task ' + el[0] + '</div><div class="col">Node: '+ el[1]["Node"] + '<br>Disk: '+ el[1]["Disk"] + '<br>Status: '+ status + '<br>Run time: '+ el[1]["Run time"] + '<br>Data volume: '+ el[1]["Data volume"] + '<br>Throughput: '+ el[1]["Throughput"] + '</div></div>')
})
jQuery('button:contains("Tasks")').removeClass('hidden');
}
if (alldata['Errors'].length > 0) {
alldata['Errors'].forEach(function(el) {
errors.insertAdjacentHTML('beforeend', '<p class="code">' + el + '</p>')
});
jQuery('button:contains("Errors")').removeClass('hidden');
}
if (alldata['Warnings'].length > 0) {
alldata['Warnings'].forEach(function(el) {
warnings.insertAdjacentHTML('beforeend', '<p class="code">' + el + '</p>')
});
jQuery('button:contains("Warnings")').removeClass('hidden');
}
if (alldata['Exceptions'].length > 0) {
alldata['Exceptions'].forEach(function(el) {
exceptions.insertAdjacentHTML('beforeend', '<p class="code">' + el + '</p>')
});
jQuery('button:contains("Exceptions")').removeClass('hidden');
}
if (alldata['Job globals'].length > 0) {
options.insertAdjacentHTML('beforeend', '<p class="description"><b>Job globals:</b></p>')
alldata['Job globals'].forEach(function(el) {
options.insertAdjacentHTML('beforeend', '<p class="description">' + el + '</p>')
});
options.insertAdjacentHTML('beforeend', '<p class="description">&nbsp;</p>')
}
if (alldata['Job options'].length > 0) {
options.insertAdjacentHTML('beforeend', '<p class="description"><b>Job options:</b></p>')
alldata['Job options'].forEach(function(el) {
options.insertAdjacentHTML('beforeend', '<p class="description">' + el + '</p>')
});
options.insertAdjacentHTML('beforeend', '<p class="description">&nbsp;</p>')
}
if (Object.entries(alldata['Node options']).length > 0) {
Object.entries(alldata['Node options']).forEach(function(el) {
options.insertAdjacentHTML('beforeend', '<p class="description"><b>Node options:</b> ' + el[0] + '</p>');
el[1].forEach(function(els) {
options.insertAdjacentHTML('beforeend', '<p class="description">' + els + '</p>');
})
options.insertAdjacentHTML('beforeend', '<p class="description">&nbsp;</p>');
})
}
// extract functions
function checkVersion(line) {
if (/SNBSVH_200J/.test(line)) {
var version = line.match(/([0-9]\.[0-9])(?:;)/)[1];
alldata['Version'] = version;
alldata['Master IP'] = getIp(line);
details.insertAdjacentHTML('beforeend', '<p class="description"><b>DPX Version:</b> ' + version + '</p>')
details.insertAdjacentHTML('beforeend', '<p class="description"><b>DPX Master IP:</b> ' + getIp(line) + '</p>')
}
if (/SNBJH_3075J/.test(line)) {
var version = line.match(/([0-9]\.[0-9])(?:;)/)[1];
alldata['Version'] = version;
alldata['Master IP'] = getIp(line);
details.insertAdjacentHTML('beforeend', '<p class="description"><b>DPX Version:</b> ' + version + '</p>')
details.insertAdjacentHTML('beforeend', '<p class="description"><b>DPX Master IP:</b> ' + getIp(line) + '</p>')
}
}
function checkJobType(line) {
if (/SNBSVH_220J/.test(line)) {
var jobtype = line.match(/(?:type: )(.*)(?:\))/)[1];
var jobname = line.match(/(?:name: )(.*)(?:,)/)[1];
alldata['Job Name'] = jobname;
alldata['Job Type'] = jobtype;
details.insertAdjacentHTML('beforeend', '<p class="description"><b>Name of job:</b> ' + jobname + '</p>')
details.insertAdjacentHTML('beforeend', '<p class="description"><b>Type of job:</b> ' + jobtype + '</p>')
}
if (/SNBJH_3403J/.test(line)) {
alldata['Job Name'] = "Condense";
alldata['Job Type'] = "Condense";
details.insertAdjacentHTML('beforeend', '<p class="description"><b>Name of job:</b> Condense</p>')
details.insertAdjacentHTML('beforeend', '<p class="description"><b>Type of job:</b> Condense</p>')
}
if (/SNBJH_3208J/.test(line)) {
var jobname = line.match(/New Job ([A-Z,a-z,0-9,\-,_]{1,16})/)[1];
var jobtype = line.match(/job type (.*)\)/)[1];
alldata['Job Name'] = jobname;
alldata['Job Type'] = jobtype;
details.insertAdjacentHTML('beforeend', '<p class="description"><b>Name of job:</b> ' + jobname + '</p>')
details.insertAdjacentHTML('beforeend', '<p class="description"><b>Type of job:</b> ' + jobtype + '</p>')
}
}
function checkJobOptions(line) {
if (/SNBSVH_264J/.test(line)) {
var jobOptions = line.match(/Node\((.*)\) options:(.*)/);
if (alldata['Node options'][jobOptions[1]] == undefined) {
alldata['Node options'][jobOptions[1]] = [];
}
var optionsArray = jobOptions[2].split(',');
optionsArray.forEach(function(el) {
alldata['Node options'][jobOptions[1]].push(el.trim());
});
}
}
function checkJobGlobals(line) {
if (/SNBSVH_361J/.test(line)) {
var jobOptions = line.match(/Job globals:(.*)/);
var optionsArray = jobOptions[1].split(';');
optionsArray.forEach(function(el) {
alldata['Job globals'].push(el.trim());
});
}
}
function checkJobGlobalOptions(line) {
if (/SNBSVH_222J/.test(line)) {
var jobOptions = line.match(/Job options:(.*)/);
var optionsArray = jobOptions[1].split(',');
optionsArray.forEach(function(el) {
alldata['Job options'].push(el.trim());
});
}
if (/SNBJH_3498J/.test(line)) {
var jobOptions = line.match(/Job options: (.*)/);
var optionsArray = jobOptions[1].split(';');
optionsArray.forEach(function(el) {
alldata['Job options'].push(el.trim());
});
}
}
function checkCompletitionStatus(line) {
if (/SNBSVH_225J/.test(line)) {
var status = line.match(/Job [0-9]{10}: (.*)/)[1];
var taskStatus = line.match(/(?:Completion status )([0-9]{1,2});/)[1];
var runTime = line.match(/(?:Run time )([0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2});/)[1];
var dataVolume = line.match(/(?:Data volume)(.+(bytes|KB|MB|GB|n\/a));/)[1];
var throughPut = line.match(/(?:Throughput)(.+(bytes|KB\/s|MB\/s|GB\/s|n\/a));/)[1];
var transferRate = line.match(/(?:Data transfer rate)(.+(bytes|KB\/s|MB\/s|GB\/s|n\/a))/)[1];
alldata['Job status']['Status'] = taskStatus;
alldata['Job status']['Run time'] = runTime;
alldata['Job status']['Data volume'] = dataVolume;
alldata['Job status']['Throughput'] = throughPut;
alldata['Job status']['Transfer rate'] = transferRate;
}
}
function checkTasks(line) {
if (/SNBSVH_232J/.test(line)) {
var tasks = line.match(/Task ([0-9]{1,2})/)[1];
var taskStatus = line.match(/(?:Completion status )([0-9]{1,2});/)[1];
var runTime = line.match(/(?:Run time )([0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2});/)[1];
var dataVolume = line.match(/(?:Data volume)(.+(bytes|KB|MB|GB|n\/a));/)[1];
var throughPut = line.match(/(?:Throughput)(.+(bytes|KB\/s|MB\/s|GB\/s|n\/a))/)[1]
if (alldata['Tasks'][tasks] == undefined) {
alldata['Tasks'][tasks] = {}
}
alldata['Tasks'][tasks]['Status'] = taskStatus;
alldata['Tasks'][tasks]['Run time'] = runTime;
alldata['Tasks'][tasks]['Data volume'] = dataVolume.trim();
alldata['Tasks'][tasks]['Throughput'] = throughPut.trim();
}
if (/SNBSVH_230J/.test(line)) {
var tasks = line.match(/Task ([0-9]{1,2})/)[1];
var taskDisk = line.match(/disk: (.*)\)/)[1];
var taskNode = line.match(/node: (.*)\,/)[1];
if (alldata['Tasks'][tasks] == undefined) {
alldata['Tasks'][tasks] = {}
}
alldata['Tasks'][tasks]['Disk'] = taskDisk;
alldata['Tasks'][tasks]['Node'] = taskNode;
}
}
function findWarnings(line) {
if (/\s[A-Z]{6}([0-9]|_)[0-9]{3}W/.test(line)) {
alldata['Warnings'].push(line);
}
}
function findErrors(line) {
if (/\s[A-Z]{5}([A-Z]|_)([0-9]|_)[0-9]{3}E/.test(line)) {
alldata['Errors'].push(line);
}
}
function findExceptions(line) {
if (/\s[A-Z]{5}([A-Z]|_)([0-9]|_)[0-9]{3}X/.test(line)) {
alldata['Exceptions'].push(line);
}
}
function getIp(line) {
return line.match(/^(?:[0-9]{1,3}\.){3}[0-9]{1,3}/)[0];
}
function getClientName(line) {
if (/SNBAPH_466J/.test(line)) {
var clientIp = getIp(line);
var clientName = line.match(/\((.*)\)/)[1];
alldata['Clients'][clientName] = clientIp;
}
}
function writeLog(line, idx) {
if (/\s[A-Z]{5}([A-Z]|_)([0-9]|_)[0-9]{3}E/.test(line)) {
content.insertAdjacentHTML('beforeend', '<p class="code error"><span class="idx">' + idx + '</span> ' + line + '</p>')
} else if (/\s[A-Z]{5}([A-Z]|_)([0-9]|_)[0-9]{3}W/.test(line)) {
content.insertAdjacentHTML('beforeend', '<p class="code warning"><span class="idx">' + idx + '</span> ' + line + '</p>')
} else if (/\s[A-Z]{5}([A-Z]|_)([0-9]|_)[0-9]{3}X/.test(line)) {
content.insertAdjacentHTML('beforeend', '<p class="code error"><span class="idx">' + idx + '</span> ' + line + '</p>')
}else {
content.insertAdjacentHTML('beforeend', '<p class="code"><span class="idx">' + idx + '</span> ' + line + '</p>')
}
}
function openTab(evt, tabName) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
tablinks = document.getElementsByClassName("tablinks");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" active", "");
}
document.getElementById(tabName).style.display = "block";
evt.currentTarget.className += " active";
}