Host from Windows

This commit is contained in:
2024-06-17 17:11:36 -07:00
parent 6737ddfb59
commit da3e839a48
36 changed files with 1918 additions and 667 deletions

View File

@ -4,6 +4,7 @@ namespace OI.Metrology.Server.ApiControllers;
using OI.Metrology.Shared.DataModels;
using OI.Metrology.Shared.Models.Stateless;
using System.Data;
using System.Text.Json;
[Route("api/[controller]")]
@ -11,9 +12,13 @@ public class ExportController : Controller, IExportController<IActionResult>
{
private readonly IExportRepository _ExportRepository;
private readonly IMetrologyRepository _MetrologyRepository;
public ExportController(IExportRepository exportRepository) =>
public ExportController(IExportRepository exportRepository, IMetrologyRepository metrologyRepository)
{
_ExportRepository = exportRepository;
_MetrologyRepository = metrologyRepository;
}
private static string? GetJson(Stream stream)
{
@ -79,4 +84,21 @@ public class ExportController : Controller, IExportController<IActionResult>
public IActionResult PostProcessDataStandardFormat() =>
Content(_ExportRepository.GetProcessDataStandardFormat(GetHeaderCommon(Request.Body)));
[HttpGet]
[Route("{toolTypeId}/export")]
public IActionResult GetExportData(int toolTypeId, [FromQuery] string? datebegin, [FromQuery] string? dateend)
{
Result<DataTable> r = _ExportRepository.GetExportData(_MetrologyRepository, toolTypeId, datebegin, dateend);
string json = Newtonsoft.Json.JsonConvert.SerializeObject(r);
return Content(json);
}
[HttpGet]
[Route("{toolTypeId}/csv")]
public IActionResult GetCSVExport(int toolTypeId, [FromQuery] string? datebegin, [FromQuery] string? dateend, [FromQuery] string? filename)
{
string r = _ExportRepository.GetCSVExport(_MetrologyRepository, toolTypeId, datebegin, dateend);
return File(r, "application/octet-stream", filename);
}
}

View File

@ -66,23 +66,6 @@ public class ToolTypesController : Controller, IToolTypesController<IActionResul
return Content(json);
}
[HttpGet]
[Route("{toolTypeId}/export")]
public IActionResult GetExportData(int toolTypeId, [FromQuery] string? datebegin, [FromQuery] string? dateend)
{
Shared.DataModels.Result<DataTable> r = _ToolTypesRepository.GetExportData(_MetrologyRepo, toolTypeId, datebegin, dateend);
string json = JsonConvert.SerializeObject(r);
return Content(json);
}
[HttpGet]
[Route("{toolTypeId}/csv")]
public IActionResult GetCSVExport(int toolTypeId, [FromQuery] string? datebegin, [FromQuery] string? dateend, [FromQuery] string? filename)
{
byte[] r = _ToolTypesRepository.GetCSVExport(_MetrologyRepo, toolTypeId, datebegin, dateend);
return File(r, "application/octet-stream", filename);
}
[HttpGet]
[Route("{toolTypeId}/{tabletype}/files/{attachmentId}/{filename}")]
public IActionResult GetAttachment(int toolTypeId, string tabletype, string attachmentId, string filename)

View File

@ -1,160 +0,0 @@
using Infineon.Monitoring.MonA;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using OI.Metrology.Server.Models;
using OI.Metrology.Shared.DataModels;
using OI.Metrology.Shared.Models.Stateless;
using OI.Metrology.Shared.ViewModels;
using System.Text;
namespace OI.Metrology.Server.Controllers;
public class ExportController : Controller
{
private readonly ILogger _Logger;
private readonly AppSettings _AppSettings;
private readonly bool _IsTestDatabase;
private readonly IMetrologyRepository _MetrologyRepository;
public ExportController(AppSettings appSettings, ILogger<ExportController> logger, IMetrologyRepository metrologyRepository)
{
_Logger = logger;
_AppSettings = appSettings;
_MetrologyRepository = metrologyRepository;
_IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
}
public override void OnActionExecuted(ActionExecutedContext context)
{
base.OnActionExecuted(context);
ViewBag.IsTestDatabase = _IsTestDatabase;
}
private string GetApiUrl() => string.IsNullOrEmpty(_AppSettings.ApiUrl) ? Url.Content("~/") : _AppSettings.ApiUrl[0] == '~' ? Url.Content(_AppSettings.ApiUrl) : _AppSettings.ApiUrl;
[HttpGet]
[Route("/Export")]
public ActionResult Index()
{
Export model = new()
{
StartTime = DateTime.Now.AddMonths(-1),
EndTime = DateTime.Now
};
MonIn monIn = MonIn.GetInstance();
_ = monIn.SendStatus(_AppSettings.MonASite, _AppSettings.MonAResource, "Heartbeat", State.Up);
ViewBag.ApiUrl = GetApiUrl();
return View(model);
}
[HttpPost]
[Route("/ExportData")]
public ActionResult ExportData(Export model)
{
ToolType? toolType = null;
if (string.IsNullOrEmpty(model.ToolType))
ModelState.AddModelError("Exception", "Invalid selection");
else
{
if (model.StartTime > model.EndTime)
ModelState.AddModelError("EndTime", "End time must be after start time");
IEnumerable<ToolType> toolTypes = _MetrologyRepository.GetToolTypes();
toolType = toolTypes.Where(tt => tt.ID.ToString() == model.ToolType).SingleOrDefault();
if (toolType is null)
ModelState.AddModelError("ToolType", "Invalid selection");
else if (string.IsNullOrWhiteSpace(toolType.ExportSPName))
ModelState.AddModelError("ToolType", "Tool type is not exportable");
}
if (ModelState.IsValid)
{
try
{
DateTime startDT = model.StartDate.Date.Add(model.StartTime.TimeOfDay);
DateTime endDT = model.EndDate.Date.Add(model.EndTime.TimeOfDay);
return DoCSVExport(toolType?.ToolTypeName, toolType?.ExportSPName, startDT, endDT);
}
catch (Exception ex)
{
ModelState.AddModelError("Exception", "Error exporting data");
ModelState.AddModelError("Exception", ex.Message);
string errorMessage = $"Error exporting: {ex}";
_Logger.LogError(message: errorMessage);
MonIn monIn = MonIn.GetInstance();
_ = monIn.SendStatus(_AppSettings.MonASite, _AppSettings.MonAResource, "Heartbeat", State.Warning);
}
}
ViewBag.ApiUrl = GetApiUrl();
return View("Index", model);
}
protected ActionResult DoCSVExport(string? toolTypeName, string? spName, DateTime startTime, DateTime endTime)
{
string fileName = string.Format("Export_{0}_{1:yyyyMMddHHmm}_to_{2:yyyyMMddHHmm}.csv", toolTypeName, startTime, endTime);
StringBuilder sb = new();
if (spName is null)
throw new NullReferenceException(nameof(spName));
System.Data.DataTable dt = _MetrologyRepository.ExportData(spName, startTime, endTime);
_ = sb.AppendLine(GetColumnHeaders(dt));
foreach (System.Data.DataRow dr in dt.Rows)
_ = sb.AppendLine(GetRowData(dr));
byte[] contents = Encoding.UTF8.GetBytes(sb.ToString());
return File(contents, "application/octet-stream", fileName);
}
protected static string GetRowData(System.Data.DataRow dr)
{
StringBuilder r = new();
for (int i = 0; i < dr.Table.Columns.Count; i++)
{
if (i > 0)
_ = r.Append(',');
object v = dr[i];
if (!Convert.IsDBNull(v))
{
string? c = Convert.ToString(v);
if (c is not null)
_ = r.Append(FormatForCSV(c));
}
}
return r.ToString();
}
protected static string GetColumnHeaders(System.Data.DataTable dt)
{
StringBuilder r = new();
for (int i = 0; i < dt.Columns.Count; i++)
{
if (i > 0)
_ = r.Append(',');
_ = r.Append(FormatForCSV(dt.Columns[i].ColumnName.TrimEnd('_')));
}
return r.ToString();
}
protected static string FormatForCSV(string v)
{
bool doubleQuoted = false;
StringBuilder r = new(v.Length + 2);
if (v.StartsWith(' ') || v.EndsWith(' ') || v.Contains(',') || v.Contains('"'))
{
_ = r.Append('"');
doubleQuoted = true;
}
foreach (char c in v)
{
_ = c switch
{
'\r' or '\n' => r.Append(' '),
'"' => r.Append("\"\""),
_ => r.Append(c),
};
}
if (doubleQuoted)
_ = r.Append('"');
return r.ToString();
}
}

View File

@ -2,7 +2,9 @@ using OI.Metrology.Server.Models;
using OI.Metrology.Shared.DataModels;
using OI.Metrology.Shared.Models;
using OI.Metrology.Shared.Models.Stateless;
using System.Data;
using System.Globalization;
using System.Text;
using System.Text.Json;
namespace OI.Metrology.Server.Repository;
@ -160,4 +162,86 @@ public class ExportRepository : IExportRepository
return result;
}
Result<DataTable> IExportRepository.GetExportData(IMetrologyRepository metrologyRepository, int toolTypeId, string? datebegin, string? dateend)
{
Result<DataTable>? r;
DateTime dateEnd = dateend is null ? DateTime.Now : DateTime.Parse(dateend);
DateTime dateBegin = datebegin is null ? dateEnd.AddMonths(-1) : DateTime.Parse(datebegin);
ToolType tt = metrologyRepository.GetToolTypeByID(toolTypeId);
if (string.IsNullOrEmpty(tt.ExportSPName))
throw new NullReferenceException(nameof(tt.ExportSPName));
DataTable dataTable = metrologyRepository.ExportData(tt.ExportSPName, dateBegin, dateEnd);
r = new()
{
Results = dataTable,
TotalRows = dataTable.Rows.Count,
};
return r;
}
protected static string FormatForCSV(string v)
{
StringBuilder result = new(v.Length + 2);
bool doubleQuoted = false;
if (v.StartsWith(' ') || v.EndsWith(' ') || v.Contains(',') || v.Contains('"'))
{
_ = result.Append('"');
doubleQuoted = true;
}
foreach (char c in v)
{
_ = c switch
{
'\r' or '\n' => result.Append(' '),
'"' => result.Append("\"\""),
_ => result.Append(c),
};
}
if (doubleQuoted)
_ = result.Append('"');
return result.ToString();
}
protected static string GetColumnHeaders(DataTable dataTable)
{
StringBuilder result = new();
for (int i = 0; i < dataTable.Columns.Count; i++)
{
if (i > 0)
_ = result.Append(',');
_ = result.Append(FormatForCSV(dataTable.Columns[i].ColumnName.TrimEnd('_')));
}
return result.ToString();
}
protected static string GetRowData(DataRow dr)
{
StringBuilder result = new();
for (int i = 0; i < dr.Table.Columns.Count; i++)
{
if (i > 0)
_ = result.Append(',');
object v = dr[i];
if (v is not null && !Convert.IsDBNull(v))
_ = result.Append(FormatForCSV(string.Concat(Convert.ToString(v))));
}
return result.ToString();
}
string IExportRepository.GetCSVExport(IMetrologyRepository metrologyRepository, int toolTypeId, string? datebegin, string? dateend)
{
string results;
Result<DataTable> result;
IExportRepository repository = this;
result = repository.GetExportData(metrologyRepository, toolTypeId, datebegin, dateend);
if (result.Results is null)
throw new NullReferenceException(nameof(result.Results));
StringBuilder stringBuilder = new();
_ = stringBuilder.AppendLine(GetColumnHeaders(result.Results));
foreach (DataRow dr in result.Results.Rows)
_ = stringBuilder.AppendLine(GetRowData(dr));
results = stringBuilder.ToString();
return results;
}
}

View File

@ -3,7 +3,6 @@ using OI.Metrology.Shared.DataModels;
using OI.Metrology.Shared.Models.Stateless;
using OI.Metrology.Shared.Services;
using System.Data;
using System.Text;
using System.Text.Json;
namespace OI.Metrology.Server.Repository;
@ -237,96 +236,4 @@ public class ToolTypesRepository : IToolTypesRepository
return result;
}
Result<DataTable> IToolTypesRepository.GetExportData(IMetrologyRepository metrologyRepository, int toolTypeId, string? datebegin, string? dateend)
{
Result<DataTable>? r;
if (!string.IsNullOrEmpty(_MockRoot))
{
string json = File.ReadAllText(Path.Combine(string.Concat(AppContext.BaseDirectory, _MockRoot), $"{_RepositoryName}-{nameof(IToolTypesRepository.GetExportData)}.json"));
r = Newtonsoft.Json.JsonConvert.DeserializeObject<Result<DataTable>>(json);
if (r is null)
throw new NullReferenceException(nameof(r));
}
else
{
DateTime dateEnd = dateend is null ? DateTime.Now : DateTime.Parse(dateend);
DateTime dateBegin = datebegin is null ? dateEnd.AddMonths(-1) : DateTime.Parse(datebegin);
ToolType tt = metrologyRepository.GetToolTypeByID(toolTypeId);
if (string.IsNullOrEmpty(tt.ExportSPName))
throw new NullReferenceException(nameof(tt.ExportSPName));
DataTable dataTable = metrologyRepository.ExportData(tt.ExportSPName, dateBegin, dateEnd);
r = new()
{
Results = dataTable,
TotalRows = dataTable.Rows.Count,
};
}
return r;
}
protected static string FormatForCSV(string v)
{
StringBuilder result = new(v.Length + 2);
bool doubleQuoted = false;
if (v.StartsWith(' ') || v.EndsWith(' ') || v.Contains(',') || v.Contains('"'))
{
_ = result.Append('"');
doubleQuoted = true;
}
foreach (char c in v)
{
_ = c switch
{
'\r' or '\n' => result.Append(' '),
'"' => result.Append("\"\""),
_ => result.Append(c),
};
}
if (doubleQuoted)
_ = result.Append('"');
return result.ToString();
}
protected static string GetColumnHeaders(DataTable dataTable)
{
StringBuilder result = new();
for (int i = 0; i < dataTable.Columns.Count; i++)
{
if (i > 0)
_ = result.Append(',');
_ = result.Append(FormatForCSV(dataTable.Columns[i].ColumnName.TrimEnd('_')));
}
return result.ToString();
}
protected static string GetRowData(DataRow dr)
{
StringBuilder result = new();
for (int i = 0; i < dr.Table.Columns.Count; i++)
{
if (i > 0)
_ = result.Append(',');
object v = dr[i];
if (v is not null && !Convert.IsDBNull(v))
_ = result.Append(FormatForCSV(string.Concat(Convert.ToString(v))));
}
return result.ToString();
}
byte[] IToolTypesRepository.GetCSVExport(IMetrologyRepository metrologyRepository, int toolTypeId, string? datebegin, string? dateend)
{
byte[] results;
Result<DataTable> result;
IToolTypesRepository repository = this;
result = repository.GetExportData(metrologyRepository, toolTypeId, datebegin, dateend);
if (result.Results is null)
throw new NullReferenceException(nameof(result.Results));
StringBuilder stringBuilder = new();
_ = stringBuilder.AppendLine(GetColumnHeaders(result.Results));
foreach (DataRow dr in result.Results.Rows)
_ = stringBuilder.AppendLine(GetRowData(dr));
results = Encoding.UTF8.GetBytes(stringBuilder.ToString());
return results;
}
}

View File

@ -1,96 +0,0 @@
@using OI.Metrology.Shared.ViewModels
@model OI.Metrology.Shared.ViewModels.Export
@{
ViewData["Title"] = "Export Data";
}
<style>
td {
padding-bottom: 2em;
padding-right: 1em;
}
</style>
<h3>Export Data</h3>
<hr />
<form asp-controller="Export" asp-action="ExportData" method="post" class="form-inline">
<div class="form-group">
<label for="ToolType">Tool Type</label>
<div class="form-control" id="ToolType" name="ToolType"></div>
@Html.ValidationMessage("ToolType", new { @class = "text-danger" })
</div>
<div class="form-group">
<label for="StartDate">Start Time</label>
<div class="form-control mb-2 mr-sm-2" id="StartDateControl"></div>
<div class="form-control mb-2 mr-sm-2" id="StartTimeControl"></div>
@Html.ValidationMessage("StartDate", new { @class = "text-danger" })
</div>
<div class="form-group">
<label for="EndDate">End Time</label>
<div class="form-control mb-2 mr-sm-2" id="EndDateControl"></div>
<div class="form-control mb-2 mr-sm-2" id="EndTimeControl"></div>
@Html.ValidationMessage("EndDate", new { @class = "text-danger" })
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Export Data</button>
</div>
<div class="form-group">
@Html.ValidationMessage("Exception", new { @class = "text-danger" })
</div>
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
</form>
<script>
$(document).ready(function () {
var apiUrl = "@ViewBag.ApiUrl";
$("#ToolType").igCombo({
dataSource: apiUrl + '/tooltypes',
responseDataKey: "Results",
textKey: "ToolTypeName",
valueKey: "ID",
mode: "dropdown",
width: 150
});
var startTime = new Date("@Model.StartTime.ToString("yyyy-MM-ddTHH:mm")");
$("#StartDateControl").igDatePicker({
dateInputFormat: "date",
value: startTime,
width: 125,
inputName: "StartDate",
});
$("#StartTimeControl").igTimePicker({
dateInputFormat: "time",
value: startTime,
width: 110,
inputName: "StartTime",
});
var endTime = new Date("@Model.EndTime.ToString("yyyy-MM-ddTHH:mm")");
$("#EndDateControl").igDatePicker({
dateInputFormat: "date",
value: endTime,
width: 125,
inputName: "EndDate",
});
$("#EndTimeControl").igTimePicker({
dateInputFormat: "time",
value: endTime,
width: 110,
inputName: "EndTime",
});
});
</script>

View File

@ -6,41 +6,41 @@
<meta name="viewport" content="width=device-width" />
<title>@ViewBag.Title</title>
<script src="https://metrology-viewer-prod.mes.infineon.com/js/modernizr-3.6.0-custom.js?no-cache=2024-06-14-16-48"
<script src="https://oi-metrology-viewer-prod.mes.infineon.com/js/modernizr-3.6.0-custom.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
<link href="https://metrology-viewer-prod.mes.infineon.com/styles/bootstrap.min.css?no-cache=2024-06-14-16-48"
<link href="https://oi-metrology-viewer-prod.mes.infineon.com/styles/bootstrap.min.css?no-cache=2024-06-17-17-10"
rel="stylesheet" />
<link
href="https://metrology-viewer-prod.mes.infineon.com/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?no-cache=2024-06-14-16-48"
href="https://oi-metrology-viewer-prod.mes.infineon.com/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?no-cache=2024-06-17-17-10"
rel="stylesheet" />
<link
href="https://metrology-viewer-prod.mes.infineon.com/igniteui/css/structure/infragistics.css?no-cache=2024-06-14-16-48"
href="https://oi-metrology-viewer-prod.mes.infineon.com/igniteui/css/structure/infragistics.css?no-cache=2024-06-17-17-10"
rel="stylesheet" />
<link href="https://metrology-viewer-prod.mes.infineon.com/styles/site-server.css?no-cache=2024-06-14-16-48"
<link href="https://oi-metrology-viewer-prod.mes.infineon.com/styles/site-server.css?no-cache=2024-06-17-17-10"
rel="stylesheet" />
<link href="https://metrology-viewer-prod.mes.infineon.com/styles/index.css?no-cache=2024-06-14-16-48"
<link href="https://oi-metrology-viewer-prod.mes.infineon.com/styles/index.css?no-cache=2024-06-17-17-10"
rel="stylesheet" />
<script src="https://metrology-viewer-prod.mes.infineon.com/js/jquery-3.6.0.min.js?no-cache=2024-06-14-16-48"
<script src="https://oi-metrology-viewer-prod.mes.infineon.com/js/jquery-3.6.0.min.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
<script src="https://metrology-viewer-prod.mes.infineon.com/js/jquery-ui.min.js?no-cache=2024-06-14-16-48"
<script src="https://oi-metrology-viewer-prod.mes.infineon.com/js/jquery-ui.min.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
<script
src="https://metrology-viewer-prod.mes.infineon.com/igniteui/js/infragistics.core.js?no-cache=2024-06-14-16-48"
src="https://oi-metrology-viewer-prod.mes.infineon.com/igniteui/js/infragistics.core.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
<script
src="https://metrology-viewer-prod.mes.infineon.com/igniteui/js/infragistics.lob.js?no-cache=2024-06-14-16-48"
src="https://oi-metrology-viewer-prod.mes.infineon.com/igniteui/js/infragistics.lob.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
<script
src="https://metrology-viewer-prod.mes.infineon.com/igniteui/js/infragistics.dv.js?no-cache=2024-06-14-16-48"
src="https://oi-metrology-viewer-prod.mes.infineon.com/igniteui/js/infragistics.dv.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
<script src="https://metrology-viewer-prod.mes.infineon.com/js/chart-4.3.0.min.js" type="module"></script>
<script src="https://oi-metrology-viewer-prod.mes.infineon.com/js/chart-4.3.0.min.js" type="module"></script>
<script src="https://metrology-viewer-prod.mes.infineon.com/js/common.js?no-cache=2024-06-14-16-48"
<script src="https://oi-metrology-viewer-prod.mes.infineon.com/js/common.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
<script src="https://metrology-viewer-prod.mes.infineon.com/js/site-server.js?no-cache=2024-06-14-16-48"
<script src="https://oi-metrology-viewer-prod.mes.infineon.com/js/site-server.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
</head>
@ -63,8 +63,8 @@
<span class="icon-bar"></span>
</button>
<div class="navbar-brand">
<a href="https://metrology-viewer-prod.mes.infineon.com"><img
src="https://metrology-viewer-prod.mes.infineon.com/images/IFX_LOGO_RGB.png"
<a href="https://oi-metrology-viewer-prod.mes.infineon.com"><img
src="https://oi-metrology-viewer-prod.mes.infineon.com/images/IFX_LOGO_RGB.png"
height="20" /></a>
OI Metrology Viewer
</div>
@ -99,9 +99,9 @@
<div id="MessageModal"></div>
<script src="https://metrology-viewer-prod.mes.infineon.com/js/bootstrap.min.js?no-cache=2024-06-14-16-48"
<script src="https://oi-metrology-viewer-prod.mes.infineon.com/js/bootstrap.min.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
<script src="https://metrology-viewer-prod.mes.infineon.com/js/respond.min.js?no-cache=2024-06-14-16-48"
<script src="https://oi-metrology-viewer-prod.mes.infineon.com/js/respond.min.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
@RenderSection("scripts", required: false)
</body>

View File

@ -6,41 +6,41 @@
<meta name="viewport" content="width=device-width" />
<title>Run Information</title>
<script src="https://metrology-viewer-prod.mes.infineon.com/js/modernizr-3.6.0-custom.js?no-cache=2024-06-14-15-53"
<script src="https://metrology-viewer-prod.mes.infineon.com/js/modernizr-3.6.0-custom.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
<link href="https://metrology-viewer-prod.mes.infineon.com/styles/bootstrap.min.css?no-cache=2024-06-14-15-53"
<link href="https://metrology-viewer-prod.mes.infineon.com/styles/bootstrap.min.css?no-cache=2024-06-17-17-10"
rel="stylesheet" />
<link
href="https://metrology-viewer-prod.mes.infineon.com/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?no-cache=2024-06-14-15-53"
href="https://metrology-viewer-prod.mes.infineon.com/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?no-cache=2024-06-17-17-10"
rel="stylesheet" />
<link
href="https://metrology-viewer-prod.mes.infineon.com/igniteui/css/structure/infragistics.css?no-cache=2024-06-14-15-53"
href="https://metrology-viewer-prod.mes.infineon.com/igniteui/css/structure/infragistics.css?no-cache=2024-06-17-17-10"
rel="stylesheet" />
<link href="https://metrology-viewer-prod.mes.infineon.com/styles/site-server.css?no-cache=2024-06-14-15-53"
<link href="https://metrology-viewer-prod.mes.infineon.com/styles/site-server.css?no-cache=2024-06-17-17-10"
rel="stylesheet" />
<link href="https://metrology-viewer-prod.mes.infineon.com/styles/index.css?no-cache=2024-06-14-15-53"
<link href="https://metrology-viewer-prod.mes.infineon.com/styles/index.css?no-cache=2024-06-17-17-10"
rel="stylesheet" />
<script src="https://metrology-viewer-prod.mes.infineon.com/js/jquery-3.6.0.min.js?no-cache=2024-06-14-15-53"
<script src="https://metrology-viewer-prod.mes.infineon.com/js/jquery-3.6.0.min.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
<script src="https://metrology-viewer-prod.mes.infineon.com/js/jquery-ui.min.js?no-cache=2024-06-14-15-53"
<script src="https://metrology-viewer-prod.mes.infineon.com/js/jquery-ui.min.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
<script
src="https://metrology-viewer-prod.mes.infineon.com/igniteui/js/infragistics.core.js?no-cache=2024-06-14-15-53"
src="https://metrology-viewer-prod.mes.infineon.com/igniteui/js/infragistics.core.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
<script
src="https://metrology-viewer-prod.mes.infineon.com/igniteui/js/infragistics.lob.js?no-cache=2024-06-14-15-53"
src="https://metrology-viewer-prod.mes.infineon.com/igniteui/js/infragistics.lob.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
<script
src="https://metrology-viewer-prod.mes.infineon.com/igniteui/js/infragistics.dv.js?no-cache=2024-06-14-15-53"
src="https://metrology-viewer-prod.mes.infineon.com/igniteui/js/infragistics.dv.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
<script src="https://metrology-viewer-prod.mes.infineon.com/js/chart-4.3.0.min.js" type="module"></script>
<script src="https://metrology-viewer-prod.mes.infineon.com/js/common.js?no-cache=2024-06-14-15-53"
<script src="https://metrology-viewer-prod.mes.infineon.com/js/common.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
<script src="https://metrology-viewer-prod.mes.infineon.com/js/site-server.js?no-cache=2024-06-14-15-53"
<script src="https://metrology-viewer-prod.mes.infineon.com/js/site-server.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
</head>
@ -54,7 +54,8 @@
<span class="icon-bar"></span>
</button>
<div class="navbar-brand">
<a href="https://metrology-viewer-prod.mes.infineon.com"><img src="images/IFX_LOGO_RGB.png"
<a href="https://metrology-viewer-prod.mes.infineon.com"><img
src="https://metrology-viewer-prod.mes.infineon.com/images/IFX_LOGO_RGB.png"
height="20" /></a>
OI Metrology Viewer
</div>
@ -171,11 +172,11 @@
<div id="MessageModal"></div>
<script src="https://metrology-viewer-prod.mes.infineon.com/js/bootstrap.min.js?no-cache=2024-06-14-15-53"
<script src="https://metrology-viewer-prod.mes.infineon.com/js/bootstrap.min.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
<script src="https://metrology-viewer-prod.mes.infineon.com/js/respond.min.js?no-cache=2024-06-14-15-53"
<script src="https://metrology-viewer-prod.mes.infineon.com/js/respond.min.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
<script src="https://metrology-viewer-prod.mes.infineon.com/js/index.js?no-cache=2024-06-14-15-53"
<script src="https://metrology-viewer-prod.mes.infineon.com/js/index.js?no-cache=2024-06-17-17-10"
type="text/javascript"></script>
</body>