HelperCamstarOracle

This commit is contained in:
2024-10-22 09:48:28 -07:00
parent 5cd2500983
commit 84d1b07301
14 changed files with 622 additions and 48 deletions

View File

@ -0,0 +1,116 @@
using File_Watcher.Infineon.Monitoring.MonA;
using File_Watcher.Models;
using System.Diagnostics;
using System.Globalization;
namespace File_Watcher.Helpers;
internal static partial class HelperCamstarOracle
{
private static IMonIn? _MonIn;
private static int? _LastValue;
private static Calendar? _Calendar;
private static DateTime? _LastUpload;
internal static void Heartbeat(AppSettings appSettings, IHttpClientFactory httpClientFactory, ILogger<Worker> logger, State state, CancellationToken cancellationToken)
{
_MonIn ??= MonIn.GetInstance(httpClientFactory);
CamstarOracleConfiguration camstarOracleConfiguration = appSettings.CamstarOracleConfiguration;
Task<HttpResponseMessage> httpResponseMessage = _MonIn.SendStatus(camstarOracleConfiguration.MonitorApplicationSite, camstarOracleConfiguration.MonitorApplicationResource, "Heartbeat", state);
httpResponseMessage.Wait(cancellationToken);
if (httpResponseMessage.Result.StatusCode != System.Net.HttpStatusCode.OK)
throw new Exception(httpResponseMessage.Result.StatusCode.ToString());
Task<string> body = httpResponseMessage.Result.Content.ReadAsStringAsync(cancellationToken);
body.Wait(cancellationToken);
logger.LogDebug(body.Result);
}
#pragma warning disable CA1416
private static List<EventLogEntry> GetOracleEventLogEntries(CamstarOracleConfiguration camstarOracleConfiguration, DateTime dateTime, CancellationToken cancellationToken)
{
List<EventLogEntry> results = [];
EventLog[] eventLogs = EventLog.GetEventLogs();
long ticks = dateTime.AddMinutes(-camstarOracleConfiguration.RollingMinutes).Ticks;
foreach (EventLog eventLog in eventLogs)
{
if (cancellationToken.IsCancellationRequested)
break;
if (!eventLog.Log.Contains(camstarOracleConfiguration.LogFilter))
continue;
foreach (object? item in eventLog.Entries)
{
if (cancellationToken.IsCancellationRequested)
break;
if (item is not EventLogEntry eventLogEntry)
continue;
if (eventLogEntry.TimeGenerated.Ticks < ticks)
continue;
if (!camstarOracleConfiguration.MessageFilters.Any(eventLogEntry.Message.Contains))
continue;
results.Add(eventLogEntry);
}
}
return results;
}
private static List<(DateTime, string)> GetOracleEventLogEntryMessages(CamstarOracleConfiguration camstarOracleConfiguration, DateTime dateTime, CancellationToken cancellationToken)
{
List<(DateTime, string)> results = [];
List<EventLogEntry> collection = GetOracleEventLogEntries(camstarOracleConfiguration, dateTime, cancellationToken);
foreach (EventLogEntry eventLogEntry in collection)
{
if (cancellationToken.IsCancellationRequested)
break;
results.Add(new(eventLogEntry.TimeGenerated, eventLogEntry.Message));
}
return results;
}
internal static bool Check(AppSettings appSettings, ILogger<Worker> logger, CancellationToken cancellationToken)
{
if (_MonIn is null)
throw new NullReferenceException(nameof(_MonIn));
string directory;
DateTime dateTime;
string weekOfYear;
string weekDirectory;
string formattedDateTime;
List<string> lines = [];
_Calendar ??= new CultureInfo("en-US").Calendar;
CamstarOracleConfiguration camstarOracleConfiguration = appSettings.CamstarOracleConfiguration;
string performanceName = string.Concat(camstarOracleConfiguration.MonitorApplicationResource, "_Count");
lines.Clear();
dateTime = DateTime.Now;
weekOfYear = _Calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
weekDirectory = $"{dateTime:yyyy}_Week_{weekOfYear}{@"\"}{dateTime:yyyy-MM-dd}";
directory = Path.Combine(camstarOracleConfiguration.Directory, weekDirectory);
if (!Directory.Exists(directory))
_ = Directory.CreateDirectory(directory);
logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
List<(DateTime, string)> collection = GetOracleEventLogEntryMessages(camstarOracleConfiguration, dateTime, cancellationToken);
foreach ((DateTime timeGenerated, string message) in collection)
{
if (cancellationToken.IsCancellationRequested)
break;
formattedDateTime = timeGenerated.ToString(camstarOracleConfiguration.DateFormat);
lines.Add($"{formattedDateTime}\t{message}");
}
File.WriteAllLines(Path.Combine(directory, $"{dateTime.Ticks}.tsv"), lines);
if (_LastValue is null || _LastUpload is null || _LastValue.Value != lines.Count || new TimeSpan(dateTime.Ticks - _LastUpload.Value.Ticks).TotalMinutes > 5)
{
Task<HttpResponseMessage> httpResponseMessage = _MonIn.SendPerformanceMessage(camstarOracleConfiguration.MonitorApplicationSite, camstarOracleConfiguration.MonitorApplicationResource, performanceName, value: lines.Count, description: string.Empty);
httpResponseMessage.Wait(cancellationToken);
if (httpResponseMessage.Result.StatusCode != System.Net.HttpStatusCode.OK)
throw new Exception(httpResponseMessage.Result.StatusCode.ToString());
Task<string> body = httpResponseMessage.Result.Content.ReadAsStringAsync(cancellationToken);
body.Wait(cancellationToken);
logger.LogDebug(body.Result);
_LastUpload = DateTime.Now;
_LastValue = lines.Count;
}
return true;
}
}

View File

@ -1,54 +1,11 @@
using File_Watcher.Models;
using System.Collections.ObjectModel;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Text;
using System.Text.Json.Serialization;
namespace File_Watcher.Helpers;
internal static partial class HelperInfinityQS
{
internal record Record([property: JsonPropertyName("count_se_sgtm")] int CountSeSubgroupTime,
[property: JsonPropertyName("date_time")] DateTime DateTime,
[property: JsonPropertyName("max_se_lot")] int MaxSeLot,
[property: JsonPropertyName("max_se_prcs")] int MaxSeProcess,
[property: JsonPropertyName("max_se_sgrp")] int MaxSeSubgroup,
[property: JsonPropertyName("max_se_test")] int MaxSeTest,
[property: JsonPropertyName("max_se_val")] float MaxSeValue,
[property: JsonPropertyName("min_se_sgrp")] int MinSeSubgroup,
[property: JsonPropertyName("test")] string Test);
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(Record[]))]
internal partial class RecordCollectionSourceGenerationContext : JsonSerializerContext
{
}
private static string GetCommandText(ReadOnlyCollection<int> subGroups)
{ // cSpell:disable
List<string> results = [];
results.Add(" update [spcepiworld].[dbo].[sgrp_ext] ");
results.Add(" set f_flag = 1 ");
results.Add(" where f_flag = 0 ");
results.Add($" and f_sgrp in ({string.Join(',', subGroups)}) ");
return string.Join(Environment.NewLine, results);
} // cSpell:enable
private static StringBuilder GetForJsonPath(InfinityQSConfiguration infinityQSConfiguration, string commandText)
{
StringBuilder stringBuilder = new();
using SqlConnection sqlConnection = new(infinityQSConfiguration.ConnectionString);
sqlConnection.Open();
using SqlCommand sqlCommand = new(commandText, sqlConnection);
SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(CommandBehavior.SequentialAccess);
while (sqlDataReader.Read())
_ = stringBuilder.Append(sqlDataReader.GetString(0));
return stringBuilder;
}
private static void RunMI()
{
#pragma warning disable CA1416