Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 8c57aa0f authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

refactoring: add job-local run-id to run-data, refactor writing results, adapt testcases

parent 2b64edac
Branches
Tags
No related merge requests found
Showing
with 2890 additions and 2847 deletions
......@@ -101,6 +101,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
public XElement InputDataHash { get; internal set; }
public int JobRunId { get; internal set; }
public class AuxData
{
// ReSharper disable once InconsistentNaming
......
......@@ -51,6 +51,11 @@ namespace TUGraz.VectoCore.Models.Simulation
/// </summary>
int RunIdentifier { get; }
/// <summary>
/// identifier of a simulation run within a job
/// </summary>
int JobRunIdentifier { get; }
string RunName { get; }
string CycleName { get; }
......
......@@ -162,6 +162,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
return Runs.ToDictionary(
r => r.Run.RunIdentifier,
r => new ProgressEntry {
RunId = r.Run.RunIdentifier,
JobRunId = r.Run.JobRunIdentifier,
RunName = r.Run.RunName,
CycleName = r.Run.CycleName,
RunSuffix = r.Run.RunSuffix,
......@@ -176,6 +178,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
public class ProgressEntry
{
public int RunId;
public int JobRunId;
public string RunName;
public double Progress;
public double ExecTime;
......@@ -208,12 +212,14 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
} catch (Exception ex) {
Log.Error(ex, "Error during simulation run!");
ExecException = ex;
}
throw;
} finally {
stopWatch.Stop();
Success = Run.FinishedWithoutErrors && ExecException == null;
Done = true;
ExecTime = stopWatch.Elapsed.TotalMilliseconds;
JobContainer.JobCompleted();
}
});
}
......
......@@ -137,8 +137,6 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
public IEnumerable<IVectoRun> SimulationRuns()
{
var i = 0;
var warning1Hz = false;
foreach (var data in DataReader.NextRun()) {
......@@ -148,6 +146,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
Log.Error("Output filter for 1Hz results is only available for distance-based cycles!");
warning1Hz = true;
}
var current = i++;
data.JobRunId = current;
IModalDataContainer modContainer =
new ModalDataContainer(data, ModWriter,
addReportResult: _mode == ExecutionMode.Declaration ? addReportResult : null,
......@@ -156,7 +156,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
WriteAdvancedAux = data.AdvancedAux != null && data.AdvancedAux.AuxiliaryAssembly == AuxiliaryModel.Advanced,
WriteModalResults = _mode != ExecutionMode.Declaration || WriteModalResults
};
var current = i++;
var builder = new PowertrainBuilder(modContainer, modData => {
if (SumData != null) {
SumData.Write(modData, JobNumber, current, d);
......
......@@ -76,6 +76,11 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
get { return Container.RunData.ModFileSuffix; }
}
public int JobRunIdentifier
{
get { return Container.RunData.JobRunId; }
}
public double Progress
{
get { return CyclePort.Progress; }
......
......@@ -32,6 +32,9 @@
using System;
using System.Data;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCore.Configuration;
using TUGraz.VectoCore.Utils;
......@@ -94,24 +97,47 @@ namespace TUGraz.VectoCore.OutputData.FileIO
return Path.Combine(BasePath, modFileName);
}
public void WriteModData(string runName, string cycleName, string runSuffix, DataTable modData)
public void WriteModData(int jobRunId, string runName, string cycleName, string runSuffix, DataTable modData)
{
VectoCSVFile.Write(GetModDataFileName(runName, cycleName, runSuffix), modData, true);
}
public Stream WriteStream(ReportType type)
public virtual void WriteReport(ReportType type, XDocument data)
{
string fileName = null;
switch (type) {
case ReportType.DeclarationReportManufacturerXML:
fileName = XMLFullReportName;
break;
case ReportType.DeclarationReportCustomerXML:
fileName = XMLCustomerReportName;
break;
default:
throw new ArgumentOutOfRangeException("type");
}
using (var writer = new FileStream(fileName, FileMode.Create)) {
using (var xmlWriter = new XmlTextWriter(writer, Encoding.UTF8)) {
xmlWriter.Formatting = Formatting.Indented;
data.WriteTo(xmlWriter);
xmlWriter.Flush();
xmlWriter.Close();
}
}
}
public virtual void WriteReport(ReportType type, Stream data)
{
Stream stream = null;
switch (type) {
case ReportType.DeclarationReportPdf:
return new FileStream(PDFReportName, FileMode.Create);
case ReportType.DeclarationReportXMLFulll:
return new FileStream(XMLFullReportName, FileMode.Create);
case ReportType.DeclarationReportXMLCOC:
return new FileStream(XMLCustomerReportName, FileMode.Create);
stream = new FileStream(PDFReportName, FileMode.Create);
break;
default:
throw new ArgumentOutOfRangeException("type");
}
data.CopyToAsync(stream);
//stream.Write(data);
}
}
}
\ No newline at end of file
......@@ -31,6 +31,7 @@
using System.Data;
using System.IO;
using System.Xml.Linq;
namespace TUGraz.VectoCore.OutputData
{
......@@ -38,7 +39,7 @@ namespace TUGraz.VectoCore.OutputData
public interface IModalDataWriter
{
void WriteModData(string runName, string cycleName, string runSuffix, DataTable modData);
void WriteModData(int jobRunId, string runName, string cycleName, string runSuffix, DataTable modData);
}
public interface ISummaryWriter
......@@ -48,13 +49,15 @@ namespace TUGraz.VectoCore.OutputData
public interface IReportWriter
{
Stream WriteStream(ReportType type);
void WriteReport(ReportType type, XDocument data);
void WriteReport(ReportType type, Stream data);
}
public enum ReportType
{
DeclarationReportPdf,
DeclarationReportXMLFulll,
DeclarationReportXMLCOC
DeclarationReportManufacturerXML,
DeclarationReportCustomerXML
}
}
\ No newline at end of file
......@@ -54,6 +54,7 @@ namespace TUGraz.VectoCore.OutputData
private readonly IModalDataWriter _writer;
private readonly List<string> _additionalColumns = new List<string>();
private Exception SimException;
public int JobRunId { get; private set; }
public string RunName { get; private set; }
public string CycleName { get; private set; }
public string RunSuffix { get; private set; }
......@@ -68,15 +69,15 @@ namespace TUGraz.VectoCore.OutputData
public bool WriteAdvancedAux { get; set; }
public ModalDataContainer(string runName, FuelType fuel, IModalDataWriter writer, bool writeEngineOnly = false)
: this(runName, "", fuel, "", writer, _ => { }, writeEngineOnly) {}
: this(0, runName, "", fuel, "", writer, _ => { }, writeEngineOnly) {}
public ModalDataContainer(VectoRunData runData, IModalDataWriter writer, Action<ModalDataContainer> addReportResult,
bool writeEngineOnly, params IModalDataFilter[] filter)
: this(
runData.JobName, runData.Cycle.Name, runData.EngineData.FuelType, runData.ModFileSuffix, writer, addReportResult,
runData.JobRunId, runData.JobName, runData.Cycle.Name, runData.EngineData.FuelType, runData.ModFileSuffix, writer, addReportResult,
writeEngineOnly, filter) {}
protected ModalDataContainer(string runName, string cycleName, FuelType fuelType, string runSuffix,
protected ModalDataContainer(int jobRunId, string runName, string cycleName, FuelType fuelType, string runSuffix,
IModalDataWriter writer,
Action<ModalDataContainer> addReportResult, bool writeEngineOnly, params IModalDataFilter[] filters)
{
......@@ -84,6 +85,7 @@ namespace TUGraz.VectoCore.OutputData
RunName = runName;
CycleName = cycleName;
RunSuffix = runSuffix;
JobRunId = jobRunId;
_writer = writer;
FuelData = Models.Declaration.FuelData.Instance().Lookup(fuelType);
......@@ -98,6 +100,7 @@ namespace TUGraz.VectoCore.OutputData
WriteAdvancedAux = false;
}
public bool HasTorqueConverter { get; set; }
public void CommitSimulationStep()
......@@ -235,7 +238,7 @@ namespace TUGraz.VectoCore.OutputData
RunSuffix += "_" + filter.ID;
filteredData = filter.Filter(filteredData);
}
_writer.WriteModData(RunName, CycleName, RunSuffix, new DataView(filteredData).ToTable(false, strCols.ToArray()));
_writer.WriteModData(JobRunId, RunName, CycleName, RunSuffix, new DataView(filteredData).ToTable(false, strCols.ToArray()));
}
_addReportResult(this);
......
......@@ -45,7 +45,7 @@ namespace TUGraz.VectoCore.OutputData.XML
{
public class XMLDeclarationReport : DeclarationReport<XMLDeclarationReport.ResultEntry>
{
private readonly XMLFullReport _fullReport;
private readonly XMLManufacturerReport _manufacturerReport;
private readonly XMLCustomerReport _customerReport;
private readonly IOutputDataWriter _writer;
......@@ -116,7 +116,7 @@ namespace TUGraz.VectoCore.OutputData.XML
public XMLDeclarationReport(IOutputDataWriter writer = null)
{
_fullReport = new XMLFullReport(); //new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
_manufacturerReport = new XMLManufacturerReport(); //new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
_customerReport = new XMLCustomerReport();
//CustomerReport = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
......@@ -125,7 +125,7 @@ namespace TUGraz.VectoCore.OutputData.XML
public XDocument FullReport
{
get { return _fullReport.Report; }
get { return _manufacturerReport.Report; }
}
public XDocument CustomerReport
......@@ -142,28 +142,17 @@ namespace TUGraz.VectoCore.OutputData.XML
protected internal override void DoWriteReport()
{
foreach (var result in Missions.OrderBy(m => m.Key)) {
_fullReport.AddResult(result.Value);
_manufacturerReport.AddResult(result.Value);
_customerReport.AddResult(result.Value);
}
_fullReport.GenerateReport();
var fullReportHash = GetSignature(_fullReport.Report);
_manufacturerReport.GenerateReport();
var fullReportHash = GetSignature(_manufacturerReport.Report);
_customerReport.GenerateReport(fullReportHash);
if (_writer != null) {
using (var xmlWriter = new XmlTextWriter(_writer.WriteStream(ReportType.DeclarationReportXMLFulll), Encoding.UTF8)) {
xmlWriter.Formatting = Formatting.Indented;
_fullReport.Report.WriteTo(xmlWriter);
xmlWriter.Flush();
xmlWriter.Close();
}
using (var xmlWriter = new XmlTextWriter(_writer.WriteStream(ReportType.DeclarationReportXMLCOC), Encoding.UTF8)) {
xmlWriter.Formatting = Formatting.Indented;
_customerReport.Report.WriteTo(xmlWriter);
xmlWriter.Flush();
xmlWriter.Close();
}
_writer.WriteReport(ReportType.DeclarationReportCustomerXML, _customerReport.Report);
_writer.WriteReport(ReportType.DeclarationReportManufacturerXML, _manufacturerReport.Report);
}
}
......@@ -175,7 +164,7 @@ namespace TUGraz.VectoCore.OutputData.XML
protected override void DoInitializeReport(VectoRunData modelData, Segment segment)
{
_fullReport.Initialize(modelData, segment);
_manufacturerReport.Initialize(modelData, segment);
_customerReport.Initialize(modelData, segment);
}
......
......@@ -95,6 +95,7 @@ namespace TUGraz.VectoCore.Tests.Integration
var driverData = CreateDriverData(AccelerationFile, overspeed);
var runData = new VectoRunData() {
JobRunId = 0,
AxleGearData = axleGearData,
VehicleData = vehicleData,
AirdragData = airdragData,
......
......@@ -95,6 +95,7 @@ namespace TUGraz.VectoCore.Tests.Integration
var engine = new CombustionEngine(container, engineData);
var runData = new VectoRunData() {
JobRunId = 0,
AxleGearData = axleGearData,
VehicleData = vehicleData,
AirdragData = airdragData,
......
......@@ -96,6 +96,7 @@ namespace TUGraz.VectoCore.Tests.Integration
var airDragData = CreateAirdragData();
var runData = new VectoRunData() {
JobRunId = 0,
VehicleData = vehicleData,
AxleGearData = axleGearData,
GearboxData = gearboxData,
......
......@@ -104,6 +104,7 @@ namespace TUGraz.VectoCore.Tests.Integration
var clutch = new Clutch(container, engineData);
var runData = new VectoRunData() {
JobRunId = 0,
EngineData = engineData,
VehicleData = vehicleData,
AirdragData = airdragData,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment