472 lines
20 KiB
C#
472 lines
20 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
using C4IT.Logging;
|
|
using C4IT.XML;
|
|
using C4IT.DataHistoryProvider;
|
|
using C4IT.FASD.Base;
|
|
|
|
using static C4IT.Logging.cLogManager;
|
|
using Newtonsoft.Json.Linq;
|
|
using static C4IT.DataHistoryProvider.cNxqlDailyCollector;
|
|
|
|
namespace C4IT_DataHistoryProvider_Test
|
|
{
|
|
public partial class ctrlTestFunctions : UserControl
|
|
{
|
|
private readonly List<string> MessageLines = new List<string>();
|
|
|
|
public ctrlTestFunctions()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
private async void ctrlTestFunctions_Load(object sender, EventArgs e)
|
|
{
|
|
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
|
|
|
|
if (Program.Collector == null)
|
|
return;
|
|
|
|
try
|
|
{
|
|
Cursor = Cursors.WaitCursor;
|
|
|
|
ctrlProtocolBox1.ClearMessages();
|
|
|
|
Program.mainForm.DisableAllTabPages(this);
|
|
|
|
Program.Collector.CleanupUiMessageHandler();
|
|
Program.Collector.ProcessUiMessage += ProcessMessage;
|
|
|
|
var _requestInfo = new cF4sdWebRequestInfo("ctrlTestFunctions_Load", null);
|
|
await GetUsersAndComputersAsync(_requestInfo, 1);
|
|
|
|
if (Program.Collector.M42WpmCollector != null)
|
|
await Program.Collector.M42WpmCollector.ValidateConnectionAsync(true, CancellationToken.None);
|
|
|
|
}
|
|
catch (Exception E)
|
|
{
|
|
LogException(E);
|
|
}
|
|
finally
|
|
{
|
|
ctrlProtocolBox1.ProcessMessage("");
|
|
Program.mainForm.EnableAllTabPages();
|
|
Cursor = Cursors.Default;
|
|
if (CM != null) LogMethodEnd(CM);
|
|
}
|
|
}
|
|
|
|
private async Task GetUsersAndComputersAsync(cF4sdWebRequestInfo requestInfo, int LogDeep)
|
|
{
|
|
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
|
|
if (cPerformanceLogger.IsActive && requestInfo != null) { if (CM == null) CM = MethodBase.GetCurrentMethod(); cPerformanceLogger.LogPerformanceStart(LogDeep, CM, requestInfo.id, requestInfo.created); }
|
|
var _startTime = DateTime.UtcNow;
|
|
|
|
try
|
|
{
|
|
Program.UserList = await Program.Collector.GetInfoClassListTest(C4IT.FASD.Base.enumFasdInformationClass.User, checkBoxFiltered.Checked, requestInfo, LogDeep+1, CancellationToken.None);
|
|
|
|
comboBoxUserSelect.Items.AddRange(Program.UserList.ToArray());
|
|
ctrlProtocolBox1.ProcessMessage("");
|
|
|
|
var list = await Program.Collector.GetInfoClassListTest(C4IT.FASD.Base.enumFasdInformationClass.Computer, checkBoxFiltered.Checked, requestInfo, LogDeep+1, CancellationToken.None); ; ;
|
|
comboBoxComputerSelect.Items.AddRange(list.ToArray());
|
|
ctrlProtocolBox1.ProcessMessage("");
|
|
}
|
|
catch (Exception E)
|
|
{
|
|
LogException(E);
|
|
}
|
|
finally
|
|
{
|
|
if (cPerformanceLogger.IsActive && requestInfo != null) { cPerformanceLogger.LogPerformanceEnd(LogDeep, CM, requestInfo.id, requestInfo.created, _startTime); }
|
|
if (CM != null) LogMethodEnd(CM);
|
|
}
|
|
|
|
}
|
|
|
|
public void ProcessMessage(cDataHistoryUiStatusMessage Message)
|
|
{
|
|
string line = new string(' ', Message.Indent * 3) + Message.Message;
|
|
ctrlProtocolBox1.ProcessMessage(line);
|
|
}
|
|
|
|
private async void buttonGetUserComputerActivities_Click(object sender, EventArgs e)
|
|
{
|
|
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
|
|
try
|
|
{
|
|
if (!(comboBoxUserSelect.SelectedItem is cDataHistoryInfoClassListEntry Entry))
|
|
return;
|
|
|
|
var RetVal = await Program.Collector.GetUsageFromAgentData(C4IT.FASD.Base.enumFasdInformationClass.User, new List<Guid>() { Entry.id }, 90, CancellationToken.None, null, 0);
|
|
ctrlProtocolBox1.ProcessMessage("");
|
|
if (RetVal == null || RetVal.Count == 0)
|
|
ctrlProtocolBox1.ProcessMessage("no further information found.");
|
|
else
|
|
{
|
|
comboBoxTickets.Items.Clear();
|
|
ctrlProtocolBox1.ProcessMessage($"{RetVal.Count} related objects found:");
|
|
foreach (var Entry2 in RetVal)
|
|
{
|
|
if (Entry2.Type == enumF4sdSearchResultClass.Ticket)
|
|
comboBoxTickets.Items.Add(Entry2);
|
|
ctrlProtocolBox1.ProcessMessage($" {Entry2.Type} {Entry2.Name} {{{Entry2.id}}}:");
|
|
ctrlProtocolBox1.ProcessMessage($" LastUsed: {Entry2.LastUsed}");
|
|
ctrlProtocolBox1.ProcessMessage($" Usage weight: {Entry2.UsingLevel}");
|
|
foreach (var Entry3 in Entry2.Infos)
|
|
ctrlProtocolBox1.ProcessMessage($" {Entry3.Key}: {Entry3.Value}");
|
|
}
|
|
if (comboBoxTickets.Items.Count > 0)
|
|
comboBoxTickets.SelectedIndex = 0;
|
|
}
|
|
}
|
|
catch (Exception E)
|
|
{
|
|
LogException(E);
|
|
}
|
|
finally
|
|
{
|
|
if (CM != null) LogMethodEnd(CM);
|
|
}
|
|
}
|
|
|
|
private async void buttonComputerUserActivities_Click(object sender, EventArgs e)
|
|
{
|
|
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
|
|
try
|
|
{
|
|
if (!(comboBoxComputerSelect.SelectedItem is cDataHistoryInfoClassListEntry Entry))
|
|
return;
|
|
|
|
var RetVal = await Program.Collector.GetUsageFromAgentData(C4IT.FASD.Base.enumFasdInformationClass.Computer, new List<Guid>() { Entry.id }, 90, CancellationToken.None, null, 0);
|
|
ctrlProtocolBox1.ProcessMessage("");
|
|
if (RetVal == null || RetVal.Count == 0)
|
|
ctrlProtocolBox1.ProcessMessage("no users found.");
|
|
else
|
|
{
|
|
ctrlProtocolBox1.ProcessMessage($"{RetVal.Count} related users found:");
|
|
foreach (var Entry2 in RetVal)
|
|
{
|
|
ctrlProtocolBox1.ProcessMessage($" {Entry2.Type} {Entry2.Name} {{{Entry2.id}}}:");
|
|
ctrlProtocolBox1.ProcessMessage($" LastUsed: {Entry2.LastUsed}");
|
|
ctrlProtocolBox1.ProcessMessage($" Usage weight: {Entry2.UsingLevel}");
|
|
foreach (var Entry3 in Entry2.Infos)
|
|
ctrlProtocolBox1.ProcessMessage($" {Entry3.Key}: {Entry3.Value}");
|
|
}
|
|
}
|
|
}
|
|
catch (Exception E)
|
|
{
|
|
LogException(E);
|
|
}
|
|
finally
|
|
{
|
|
if (CM != null) LogMethodEnd(CM);
|
|
}
|
|
}
|
|
|
|
private void comboBoxUserSelect_SelectedValueChanged(object sender, EventArgs e)
|
|
{
|
|
comboBoxTickets.Items.Clear();
|
|
comboBoxTickets.SelectedItem = null;
|
|
|
|
GetTables();
|
|
}
|
|
|
|
private void comboBoxComputerSelect_SelectedValueChanged(object sender, EventArgs e)
|
|
{
|
|
GetTables();
|
|
}
|
|
|
|
private void comboBoxTickets_SelectedValueChanged(object sender, EventArgs e)
|
|
{
|
|
GetTables();
|
|
}
|
|
|
|
private void GetTables()
|
|
{
|
|
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
|
|
try
|
|
{
|
|
bool HasUser = comboBoxUserSelect.SelectedItem != null;
|
|
bool HasComputer = comboBoxComputerSelect.SelectedItem != null;
|
|
bool HasTicket = comboBoxTickets.SelectedItem != null;
|
|
|
|
var Tables = new List<cDataHistoryConfigTable>();
|
|
foreach (var table in Program.Collector.ClusterConfig.Tables.Values)
|
|
{
|
|
if ((HasUser && table.ParentCluster.InformationClass == C4IT.FASD.Base.enumFasdInformationClass.User) ||
|
|
(HasComputer && table.ParentCluster.InformationClass == C4IT.FASD.Base.enumFasdInformationClass.Computer) ||
|
|
(HasTicket && table.ParentCluster.InformationClass == C4IT.FASD.Base.enumFasdInformationClass.Ticket))
|
|
{
|
|
Tables.Add(table);
|
|
}
|
|
}
|
|
|
|
comboBoxTable.Items.Clear();
|
|
if (Tables.Count == 0)
|
|
{
|
|
comboBoxTable.Enabled = false;
|
|
}
|
|
else
|
|
{
|
|
comboBoxTable.Items.AddRange(Tables.ToArray());
|
|
comboBoxTable.Enabled = true;
|
|
}
|
|
}
|
|
catch (Exception E)
|
|
{
|
|
LogException(E);
|
|
}
|
|
finally
|
|
{
|
|
if (CM != null) LogMethodEnd(CM);
|
|
}
|
|
}
|
|
|
|
private void comboBoxTable_SelectedValueChanged(object sender, EventArgs e)
|
|
{
|
|
buttonGetRawValues.Enabled = comboBoxTable.SelectedItem != null;
|
|
}
|
|
|
|
private void ListSelectionRecords(cF4SDHealthCardRawData.cHealthCardTable _tableResult, int Offset)
|
|
{
|
|
var _cnt = _tableResult.Columns.First().Value.Values.Count;
|
|
for (int i = 0; i < _cnt; i++)
|
|
{
|
|
{
|
|
var strLine = $"";
|
|
foreach (var _col in _tableResult.Columns.Values)
|
|
{
|
|
if (strLine != "")
|
|
strLine += " | ";
|
|
else
|
|
strLine = $"{i + Offset} : ";
|
|
strLine += _col.Values[i]?.ToString();
|
|
}
|
|
ctrlProtocolBox1.ProcessMessage($" " + strLine);
|
|
}
|
|
}
|
|
}
|
|
|
|
private async void buttonGetRawValues_Click(object sender, EventArgs e)
|
|
{
|
|
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
|
|
try
|
|
{
|
|
Cursor = Cursors.WaitCursor;
|
|
this.Enabled = false;
|
|
Application.DoEvents();
|
|
|
|
var Identities = new List<cF4sdIdentityEntry>();
|
|
if (comboBoxComputerSelect.SelectedItem is cDataHistoryInfoClassListEntry ComputerEntry)
|
|
Identities.Add(new cF4sdIdentityEntry() { Class = enumFasdInformationClass.Computer, Id = ComputerEntry.id });
|
|
if (comboBoxUserSelect.SelectedItem is cDataHistoryInfoClassListEntry UserEntry)
|
|
Identities.Add(new cF4sdIdentityEntry() { Class = enumFasdInformationClass.User, Id = UserEntry.id, AccountType = enumAccountType.AD });
|
|
if (comboBoxTickets.SelectedItem is cF4sdApiSearchResultRelation TicketEntry)
|
|
Identities.Add(new cF4sdIdentityEntry() { Class = enumFasdInformationClass.Ticket, Id = TicketEntry.id });
|
|
if (!(comboBoxTable.SelectedItem is cDataHistoryConfigTable Table))
|
|
return;
|
|
|
|
if (Identities.Count == 0 || comboBoxTable.SelectedItem == null)
|
|
return;
|
|
|
|
ctrlProtocolBox1.ProcessMessage("");
|
|
|
|
if (Table.Type == eDataHistoryTableType.Events || Table.Type == eDataHistoryTableType.StaticDetails)
|
|
{
|
|
var Res = await Program.Collector.GetDetailsTableResultsAsync(new List<string>() { Table.Name }, Identities, DateTime.Now.Date.ToUniversalTime(), 90, CancellationToken.None, null,0);
|
|
|
|
if (Res == null || Res.Count == 0)
|
|
{
|
|
ctrlProtocolBox1.ProcessMessage("could not get a valid raw table");
|
|
return;
|
|
}
|
|
|
|
foreach (var _Table in Res)
|
|
{
|
|
ctrlProtocolBox1.ProcessMessage("");
|
|
ctrlProtocolBox1.ProcessMessage($"resulting table name: {_Table.Name}");
|
|
ctrlProtocolBox1.ProcessMessage(" the table is an event details table");
|
|
|
|
ctrlProtocolBox1.ProcessMessage("");
|
|
var strCols = "";
|
|
foreach (var strCol in _Table.Columns)
|
|
{
|
|
if (strCols != "")
|
|
strCols += " | ";
|
|
strCols += strCol;
|
|
}
|
|
ctrlProtocolBox1.ProcessMessage(" Event columns: " + strCols);
|
|
|
|
foreach (var _day in _Table.Values)
|
|
{
|
|
ctrlProtocolBox1.ProcessMessage($" Day {_day.Key}:");
|
|
foreach (var _event in _day.Value)
|
|
{
|
|
var strLine = "";
|
|
foreach (var val in _event)
|
|
{
|
|
if (strLine != "")
|
|
strLine += " | ";
|
|
strLine += (val != null) ? val.ToString() : null;
|
|
}
|
|
ctrlProtocolBox1.ProcessMessage($" " + strLine);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (Table.Type == eDataHistoryTableType.Selection)
|
|
{
|
|
var _Count = await Program.Collector.GetSelectionTableResultCountAsync(Table.Name, Identities, null, null, CancellationToken.None);
|
|
if (_Count > 0)
|
|
{
|
|
var _tableResult = await Program.Collector.GetSelectionTableResultAsync(Table.Name, Identities, "", 15, 0, null, CancellationToken.None);
|
|
if (_tableResult != null)
|
|
{
|
|
ctrlProtocolBox1.ProcessMessage("");
|
|
ctrlProtocolBox1.ProcessMessage($"resulting table name: {_tableResult.Name}");
|
|
ctrlProtocolBox1.ProcessMessage($" the table is a selection table, {_Count} entries determined.");
|
|
|
|
ctrlProtocolBox1.ProcessMessage("");
|
|
var strCols = "";
|
|
foreach (var strCol in _tableResult.Columns.Keys)
|
|
{
|
|
if (strCols != "")
|
|
strCols += " | ";
|
|
strCols += strCol;
|
|
}
|
|
ctrlProtocolBox1.ProcessMessage(" Columns: " + strCols);
|
|
|
|
ListSelectionRecords(_tableResult, 0);
|
|
|
|
if (_Count > 15)
|
|
{
|
|
_tableResult = await Program.Collector.GetSelectionTableResultAsync(Table.Name, Identities, "", 15, 1, null, CancellationToken.None);
|
|
ctrlProtocolBox1.ProcessMessage("");
|
|
ListSelectionRecords(_tableResult, 15);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var Res = await Program.Collector.GetTableResults(new List<string>() { Table.Name }, Identities, DateTime.Now.Date.ToUniversalTime(), 14, true, CancellationToken.None, null,0);
|
|
|
|
if (Res == null || Res.Tables.Count == 0)
|
|
{
|
|
ctrlProtocolBox1.ProcessMessage("could not get a valid raw table");
|
|
return;
|
|
}
|
|
|
|
foreach (var _Table in Res.Tables.Values)
|
|
{
|
|
ctrlProtocolBox1.ProcessMessage("");
|
|
ctrlProtocolBox1.ProcessMessage($"resulting table name: {_Table.Name}");
|
|
switch (_Table.TableType)
|
|
{
|
|
case eDataHistoryTableType.Static:
|
|
ctrlProtocolBox1.ProcessMessage(" the table is static");
|
|
break;
|
|
case eDataHistoryTableType.History:
|
|
ctrlProtocolBox1.ProcessMessage(" the table is historical");
|
|
break;
|
|
case eDataHistoryTableType.HistoryEvents:
|
|
ctrlProtocolBox1.ProcessMessage(" the table is a historical event table");
|
|
break;
|
|
}
|
|
|
|
ctrlProtocolBox1.ProcessMessage("");
|
|
ctrlProtocolBox1.ProcessMessage("Values:");
|
|
foreach (var Entry in _Table.Columns.Values)
|
|
{
|
|
ctrlProtocolBox1.ProcessMessage($" [{Entry.ColumnName}]: {getValueString(Entry.Values)}");
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
catch (Exception E)
|
|
{
|
|
LogException(E);
|
|
}
|
|
finally
|
|
{
|
|
Cursor = Cursors.Default;
|
|
this.Enabled = true;
|
|
if (CM != null) LogMethodEnd(CM);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
private string getValueString(List<object> Values)
|
|
{
|
|
var RetVal = "";
|
|
if (Values != null && Values.Count > 0)
|
|
foreach (var Entry in Values)
|
|
{
|
|
if (RetVal != "")
|
|
RetVal += " | ";
|
|
var val = Entry?.ToString();
|
|
if (val != null && val.Length > 200)
|
|
val = val.Substring(0, 197) + "...";
|
|
RetVal += (Entry == null) ? "-" : val;
|
|
}
|
|
|
|
return RetVal;
|
|
}
|
|
|
|
private void buttonClear_Click(object sender, EventArgs e)
|
|
{
|
|
MessageLines.Clear();
|
|
ctrlProtocolBox1.ClearMessages();
|
|
}
|
|
|
|
private async void checkBoxFiltered_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
|
|
try
|
|
{
|
|
Cursor = Cursors.WaitCursor;
|
|
this.Enabled = false;
|
|
Application.DoEvents();
|
|
|
|
var _requestInfo = new cF4sdWebRequestInfo("checkBoxFiltered_CheckedChanged", null);
|
|
await GetUsersAndComputersAsync(_requestInfo, 1);
|
|
|
|
}
|
|
catch (Exception E)
|
|
{
|
|
LogException(E);
|
|
}
|
|
finally
|
|
{
|
|
Cursor = Cursors.Default;
|
|
this.Enabled = true;
|
|
if (CM != null) LogMethodEnd(CM);
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
}
|