This commit is contained in:
meelstorm
2025-10-01 08:17:10 +02:00
parent 1aecb79ade
commit 63afb2dcfb
17 changed files with 168 additions and 55 deletions

View File

@@ -25,11 +25,14 @@ namespace VisionBuilder.UI.Statistics
private string _currentRecipe;
private string _fileName;
private string _directoryPath;
private int _total = 0;
private const string BY_EVENTS_FILE_NAME = "statistics_by_events.csv";
private const string MONTHLY_FILE_NAME = "statistics_month.csv";
private const string EMPTY_DATE = "";
private const string EMPTY_TIME = "";
private const string DATE_FORMAT = "dd.MM.yyyy";
private const string TIME_FORMAT = "HH:mm:ss";
public bool DoNotDeleteTempFiles { get; set; } = false;
public VisionBuilderStatistics(VisionBuilderStatisticsSettings settings, IRecognitionControl recognitionControl, ILoadingService loadingService)
@@ -51,7 +54,7 @@ namespace VisionBuilder.UI.Statistics
_loadingService.StartLoading("Writing statistics for " + _settings.CameraName);
try
{
_csvStatistics.WriteLine([_startTime.ToString("d"), _startTime.ToString("T"), endedAt.ToString("d"), endedAt.ToString("T"), "", "", ""]);
_csvStatistics.WriteLine([_startTime.ToString(DATE_FORMAT), _startTime.ToString(TIME_FORMAT), endedAt.ToString(DATE_FORMAT), endedAt.ToString(TIME_FORMAT), "", "", ""]);
_csvStatistics.Dispose();
_csvStatistics = null;
@@ -67,19 +70,21 @@ namespace VisionBuilder.UI.Statistics
private void _recognitionControl_ImageProcessed(ImageProcessedEvent obj)
{
var sw = Stopwatch.StartNew();
_total++;
if (obj.HasError)
{
RecordBadImage(obj.ErrorNames[0]);
}
sw.Stop();
Console.WriteLine($"Recording statistics took {sw.ElapsedMilliseconds} ms");
Log.Debug($"Recording statistics took {sw.ElapsedMilliseconds} ms");
}
private void _recognitionControl_SessionStarted(SessionStartedEvent obj)
{
_startTime = obj.SessionStarted;
_total = 0;
_currentRecipe = obj.RecipeName;
_fileName = "tmp_"+Guid.NewGuid().ToString()+".csv";
_fileName = BY_EVENTS_FILE_NAME;
_directoryPath = PathSettingsUtils.ConvertVariables(_settings.PathTemplate, _startTime, _startTime,
obj.RecipeName, cameraName: _settings.CameraName);
_filePath = Path.Combine(_directoryPath, _fileName);
@@ -89,7 +94,7 @@ namespace VisionBuilder.UI.Statistics
Directory.CreateDirectory(Path.GetDirectoryName(_filePath));
}
_csvStatistics = new CsvStatistics(_filePath, headers);
_csvStatistics.WriteLine([_startTime.ToString("d"), _startTime.ToString("T")]); // session started
_csvStatistics.WriteLine([_startTime.ToString(DATE_FORMAT), _startTime.ToString(TIME_FORMAT)]); // session started
_defects = new ConcurrentDictionary<string, int>();
}
@@ -101,7 +106,7 @@ namespace VisionBuilder.UI.Statistics
_csvStatistics.WriteLine(
[_startTime.ToString("d"), _startTime.ToString("T"), EMPTY_DATE, EMPTY_TIME, DateTime.Now.ToString("T"), _currentRecipe, defectName, Metadata]
[_startTime.ToString(DATE_FORMAT), _startTime.ToString(TIME_FORMAT), EMPTY_DATE, EMPTY_TIME, DateTime.Now.ToString(TIME_FORMAT), _currentRecipe, defectName, Metadata]
);
@@ -119,16 +124,56 @@ namespace VisionBuilder.UI.Statistics
var monthFilePath = Path.Combine(_directoryPath, MONTHLY_FILE_NAME);
var monthStatistics = new CsvStatistics(monthFilePath, [
"Date start","Time start","Date end", "Time end" ,"Product","Error type","Error count"
]);
monthStatistics.WriteLine(
["Start", _startTime.ToString($"{DATE_FORMAT} {TIME_FORMAT}")]
);
monthStatistics.WriteLine([
_settings.MetadataColumnName, Metadata
]);
monthStatistics.WriteLine(
[_settings.ProductColumnName, _currentRecipe]
);
monthStatistics.WriteLine(
[_settings.ErrorColumnName, "Amount"]
);
foreach (var defect in _defects)
{
monthStatistics.WriteLine(
[startDate.ToString("d"), startTime.ToString("T"), endDate.ToString("d"), endTime.ToString("T"), _currentRecipe, defect.Key, defect.Value.ToString()]
[defect.Key, defect.Value.ToString()]
);
}
var totalDefects = 0;
foreach (var defect in _defects)
{
totalDefects += defect.Value;
}
monthStatistics.WriteLine([]);
monthStatistics.WriteLine(
["Total errors", totalDefects.ToString()]
);
monthStatistics.WriteLine(
["Total produced(including errors)", _total.ToString()]
);
var percentage = _total > 0 ? (double)totalDefects / _total * 100 : 0;
monthStatistics.WriteLine(
["Error rate", percentage.ToString("F2") + "%"]
);
monthStatistics.WriteLine(
[
"End", _endTime.ToString($"{DATE_FORMAT} {TIME_FORMAT}")
]);
monthStatistics.WriteLine([]);
monthStatistics.WriteLine([]);
monthStatistics.Dispose();