first commit

This commit is contained in:
Meik
2025-11-11 11:12:05 +01:00
commit 69e2cda8cd
912 changed files with 428004 additions and 0 deletions

View File

@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Text.Encodings.Web" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.7" newVersion="9.0.0.7" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.4.0" newVersion="4.2.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.7" newVersion="9.0.0.7" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.3.0" newVersion="6.0.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.7" newVersion="9.0.0.7" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.6.0" newVersion="4.1.6.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Bcl.TimeProvider" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.7" newVersion="9.0.0.7" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.7" newVersion="9.0.0.7" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.7" newVersion="9.0.0.7" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View File

@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8" ?>
<F4SD-CopyTemplate-Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="F4SD-CopyTemplate-Configuration.xsd">
<CopyTemplates Default="Ticket-Information">
<CopyTemplate Name="Ticket-Information">
<Name Lang="DE">Ticket-Information</Name>
<Description Lang="EN">Transfers the relevant information for ticket creation to the clipboard.</Description>
<Description Lang="DE">Überträgt die relevanten Informationen für eine Ticket Erstellung in den Zwischenspeicher.</Description>
<Icon Name="misc_ticket" IconType="intern"/>
<CopyContent Format="UNICODE">%DeviceName.Label% %DeviceName.Value%
%UserFullName.Label% %UserFullName.Value%
%UserAccount.Label% %UserAccount.Value%
%DeviceModel.Label% %DeviceModel.Value%
%OsInfo.Label% %OsInfo.Value%
%IpAddress.Label% %IpAddress.Value%
%LastBoot.Label% %LastBoot.Value%
%LastSeen.Label% %LastSeen.Value%</CopyContent>
<CopyContent Format="HTML">&lt;table border=&quot;1&quot; cellpadding=&quot;5,1,5,1&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;%DeviceName.Label%&lt;/em&gt;&lt;/td&gt;&lt;td style=&quot;color: #0000ff;&quot;&gt;%DeviceName.Value%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;%UserFullName.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%UserFullName.Value%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;%UserAccount.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%UserAccount.Value%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;%OsInfo.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%OsInfo.Value%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;%IpAddress.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%IpAddress.Value%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;%LastBoot.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%LastBoot.Value%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;%LastSeen.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%LastSeen.Value%&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;</CopyContent>
</CopyTemplate>
<CopyTemplate Name="Computer name">
<Name Lang="DE">Computer Name</Name>
<Section>DemoActions</Section>
<Icon Name="misc_computer" IconType="intern"/>
<CopyContent Format="UNICODE">%DeviceName.Value%</CopyContent>
</CopyTemplate>
<CopyTemplate Name="User name">
<Name Lang="DE">Anwendername</Name>
<Icon Name="misc_user" IconType="intern"/>
<CopyContent Format="UNICODE">%UserFullName.Value%</CopyContent>
</CopyTemplate>
<CopyTemplate Name="User account">
<Name Lang="DE">Anwender Account</Name>
<Icon Name="misc_user" IconType="intern"/>
<CopyContent Format="UNICODE">%UserAccount.Value%</CopyContent>
</CopyTemplate>
</CopyTemplates>
</F4SD-CopyTemplate-Configuration>

View File

@@ -0,0 +1,118 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:simpleType name="CopyTemplateFormatTypeEnum">
<xs:restriction base="xs:NCName">
<xs:enumeration value="HTML"/>
<xs:enumeration value="UNICODE"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="LanguageId">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]{2}" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="IconTypes">
<xs:restriction base="xs:NCName">
<xs:enumeration value="material" />
<xs:enumeration value="intern" />
<xs:enumeration value="byImage" />
</xs:restriction>
</xs:simpleType>
<xs:element name="F4SD-CopyTemplate-Configuration">
<xs:complexType>
<xs:sequence>
<xs:element ref="CopyTemplates" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CopyTemplates">
<xs:complexType>
<xs:sequence>
<xs:element ref="CopyTemplate" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="Default" type="xs:string" use="optional"/>
</xs:complexType>
<xs:key name ="CopyTemplateId">
<xs:selector xpath ="./CopyTemplate"/>
<xs:field xpath ="@Name"/>
</xs:key>
<xs:keyref name="CopyTemplateKeyRef" refer="CopyTemplateId">
<xs:selector xpath="."/>
<xs:field xpath="@Default"/>
</xs:keyref>
</xs:element>
<xs:element name="CopyTemplate">
<xs:complexType>
<xs:sequence>
<xs:element ref="Name" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="Section" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="Description" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="Icon" minOccurs="0" maxOccurs="1"/>
<xs:element ref="CopyContent" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="Name" type="xs:string" use="optional"/>
<xs:attribute name="Section" type="xs:NCName" use="optional"/>
<xs:attribute name="Description" type="xs:string" use="optional"/>
<xs:attribute name="HiddenInTicketDialog" type="xs:boolean" use="optional" default="false"/>
<!-- visibility controlling attributes -->
<xs:attribute name="Hidden" type="xs:boolean" use="optional" default="false"/>
<xs:attribute name="IsVisibleByParameter" type="xs:string" use="optional" />
<xs:attribute name="RequiredRoles" use="optional">
<xs:simpleType>
<xs:list itemType="xs:NCName" />
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Name">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Lang" type="LanguageId" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Section">
<xs:simpleType>
<xs:restriction base="xs:NCName" />
</xs:simpleType>
</xs:element>
<xs:element name="Icon">
<xs:complexType>
<xs:attribute name="Name" type="xs:NCName" use="required" />
<xs:attribute name="IconType" type="IconTypes" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="Description">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Lang" type="LanguageId" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="CopyContent">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Format" type="CopyTemplateFormatTypeEnum" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,430 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:simpleType name="InformationClassEnum">
<xs:restriction base="xs:NCName">
<xs:enumeration value="User"/>
<xs:enumeration value="Computer"/>
<xs:enumeration value="Ticket"/>
<xs:enumeration value="VirtualSession"/>
<xs:enumeration value="MobileDevice"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="OriginEnum">
<xs:restriction base="xs:NCName">
<xs:enumeration value="Main"/>
<xs:enumeration value="NexthinkNxql"/>
<xs:enumeration value="ActiveDirectory"/>
<xs:enumeration value="AzureAD"/>
<xs:enumeration value="F4sdAgent"/>
<xs:enumeration value="M42Wpm"/>
<xs:enumeration value="Intune"/>
<xs:enumeration value="Citrix"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TableTypeEnum">
<xs:restriction base="xs:NCName">
<xs:enumeration value="Static"/>
<xs:enumeration value="History"/>
<xs:enumeration value="HistoryEvents"/>
<xs:enumeration value="Events"/>
<xs:enumeration value="Selection"/>
<xs:enumeration value="StaticDetails"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TableCachedEnum">
<xs:restriction base="xs:NCName">
<xs:enumeration value="Default"/>
<xs:enumeration value="Yes"/>
<xs:enumeration value="No"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="StaticSourceTypeEnum">
<xs:restriction base="xs:NCName">
<xs:enumeration value="Query"/>
<xs:enumeration value="Static"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TableColumnTypeEnum">
<xs:restriction base="xs:NCName">
<xs:enumeration value="string"/>
<xs:enumeration value="guid"/>
<xs:enumeration value="int"/>
<xs:enumeration value="bigint"/>
<xs:enumeration value="float"/>
<xs:enumeration value="datetime"/>
<xs:enumeration value="version"/>
<xs:enumeration value="md5"/>
<xs:enumeration value="sid"/>
<xs:enumeration value="ipv4"/>
<xs:enumeration value="ipv6"/>
<xs:enumeration value="text"/>
<xs:enumeration value="boolean"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TableColumnCharCaseEnum">
<xs:restriction base="xs:NCName">
<xs:enumeration value="none"/>
<xs:enumeration value="lower"/>
<xs:enumeration value="upper"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="AggregationEnum">
<xs:restriction base="xs:NCName">
<xs:enumeration value="first"/>
<xs:enumeration value="min"/>
<xs:enumeration value="max"/>
<xs:enumeration value="sum"/>
<xs:enumeration value="average"/>
<xs:enumeration value="count"/>
<xs:enumeration value="valuecount"/>
<xs:enumeration value="latestValue"/>
<xs:enumeration value="latestTime"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="M42PickupSortEnum">
<xs:restriction base="xs:NCName">
<xs:enumeration value="byPosition"/>
<xs:enumeration value="byName"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="guid">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ColumnList">
<xs:list itemType="xs:NCName"/>
</xs:simpleType>
<xs:element name="F4SD-DataClusters-Configuration">
<xs:complexType>
<xs:sequence>
<xs:element ref="InformationClasses" minOccurs="1" maxOccurs="1"/>
<xs:element ref="DataCluster" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:key name="TableId">
<xs:selector xpath="./DataCluster/Table"/>
<xs:field xpath="@Name"/>
</xs:key>
<xs:unique name="UniqueTables">
<xs:selector xpath="./DataCluster/Table"/>
<xs:field xpath="@Name"/>
</xs:unique>
</xs:element>
<xs:element name="InformationClasses">
<xs:complexType>
<xs:sequence>
<xs:element ref="InformationClass" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="InformationClass">
<xs:complexType>
<xs:sequence>
<xs:element ref="InformationClass-Column" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="Name" type="xs:NCName" use="required"/>
<xs:attribute name="Description" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:complexType name="TableColumnBaseType">
<xs:choice>
<xs:element ref="DataCategories" minOccurs="0" maxOccurs="1" />
</xs:choice>
<xs:attribute name="Name" type="xs:NCName" use="required"/>
<xs:attribute name="Type" use="required" type="TableColumnTypeEnum"/>
<xs:attribute name="Cardinal" type="xs:int" use="optional"/>
<xs:attribute name="Default" type="xs:string" use="optional"/>
<xs:attribute name="CharCase" type="TableColumnCharCaseEnum" use="optional"/>
<xs:attribute name="Description" type="xs:string" use="optional"/>
<xs:attribute name="DisplayName" type="xs:string" use="optional"/>
</xs:complexType>
<xs:element name="DataCategories">
<xs:complexType>
<xs:sequence>
<xs:element name="Category" minOccurs="1" maxOccurs="unbounded">
<xs:simpleType>
<xs:restriction base="xs:string" />
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="InformationClass-Column">
<xs:complexType>
<xs:complexContent>
<xs:extension base="TableColumnBaseType">
<xs:attribute name="Index" type="xs:boolean" use="optional"/>
<xs:attribute name="Search" type="xs:boolean" use="optional"/>
<xs:attribute name="Reverse" type="xs:boolean" use="optional"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="DataCluster">
<xs:complexType>
<xs:sequence>
<xs:choice maxOccurs="unbounded" minOccurs="1">
<xs:element ref="Table"/>
<xs:element ref="JoinedTable"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="Name" type="xs:NCName" use="required"/>
<xs:attribute name="Origin" use="required" type="OriginEnum"/>
<xs:attribute name="InformationClass" type="InformationClassEnum" use="required"/>
<xs:attribute name="Description" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:complexType name="TableBaseType">
<xs:sequence>
<xs:choice>
<xs:element ref="Nexthink-NXQL-Template" maxOccurs="1" minOccurs="0"/>
<xs:element ref="Matrix42-Pickup-Template" maxOccurs="1" minOccurs="0"/>
<xs:element ref="Matrix42-DataQueryItems-Template" maxOccurs="1" minOccurs="0"/>
</xs:choice>
<xs:element ref="Table-Columns" maxOccurs="1" minOccurs="1"/>
</xs:sequence>
<xs:attribute name="Name" type="xs:NCName" use="required"/>
<xs:attribute name="Description" type="xs:string" use="optional"/>
</xs:complexType>
<xs:element name="Table">
<xs:complexType>
<xs:complexContent>
<xs:extension base="TableBaseType">
<xs:sequence>
<xs:element ref="AdditionalTableName" maxOccurs="unbounded" minOccurs="0"/>
<xs:element ref="AutoCreate-Historic-Table" maxOccurs="unbounded" minOccurs="0"/>
<xs:element ref="Table-Reference" maxOccurs="unbounded" minOccurs="0"/>
<xs:element ref="Table-Index" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="SourceName" type="xs:string" use="optional"/>
<xs:attribute name="Type" type="TableTypeEnum" use="required"/>
<xs:attribute name="Key" type="ColumnList" use="required"/>
<xs:attribute name="Cached" type="TableCachedEnum" use="optional"/>
<xs:attribute name="EventTimeCol" type="xs:NCName" use="optional"/>
<xs:attribute name="LateDelivery" type="xs:boolean" use="optional"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:keyref name="TableJoinToRef" refer="TableId">
<xs:selector xpath="."/>
<xs:field xpath="@JoinTo"/>
</xs:keyref>
</xs:element>
<xs:element name="JoinedTable">
<xs:complexType>
<xs:sequence>
<xs:element ref="SubTable" maxOccurs="unbounded" minOccurs="1"/>
<xs:element ref="Table-Reference" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Name" type="xs:NCName" use="required"/>
<xs:attribute name="Type" type="TableTypeEnum" use="required"/>
<xs:attribute name="Cached" type="TableCachedEnum" use="optional"/>
<xs:attribute name="Key" type="ColumnList" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="SubTable">
<xs:complexType>
<xs:complexContent>
<xs:extension base="TableBaseType">
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="AdditionalTableName">
<xs:complexType>
<xs:attribute name="Name" type="xs:NCName" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="AutoCreate-Historic-Table">
<xs:complexType>
<xs:attribute name="Name" type="xs:NCName" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Nexthink-NXQL-Template">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Limit" type="xs:unsignedLong" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Matrix42-Pickup-Template">
<xs:complexType>
<xs:attribute name="PickupName" type="xs:string" use="required"/>
<xs:attribute name="FilteredGroup" type="xs:positiveInteger" use="optional"/>
<xs:attribute name="Sorting" type="M42PickupSortEnum" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="Matrix42-DataQueryItems-Template">
<xs:complexType>
<xs:attribute name="EntityClassName" type="xs:NCName" use="required"/>
<xs:attribute name="EntityTypeNames" type="ColumnList" use="required"/>
<xs:attribute name="OrderBy" type="xs:string " use="optional"/>
<xs:attribute name="WhereExpression" type="xs:string " use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="Table-Columns">
<xs:complexType>
<xs:sequence>
<xs:choice maxOccurs="unbounded" minOccurs="1">
<xs:element ref="Table-Column"/>
<xs:element ref="Table-Column-Computation"/>
<xs:element ref="Table-Column-NxtCompute"/>
<xs:element ref="Table-Column-NxtCategory"/>
<xs:element ref="Table-Column-NxtScore"/>
<xs:element ref="Table-Column-NxtAction"/>
<xs:element ref="Table-Column-NxtCampaign"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
<xs:unique name="UniqueTableColumns">
<xs:selector xpath="./Table-Column"/>
<xs:field xpath="@Name"/>
</xs:unique>
</xs:element>
<xs:complexType name="TableColumnType">
<xs:complexContent>
<xs:extension base="TableColumnBaseType">
<xs:attribute name="SourceType" use="optional" type="StaticSourceTypeEnum"/>
<xs:attribute name="SourceName" type="xs:string" use="optional"/>
<xs:attribute name="SourceTable" type="xs:string" use="optional"/>
<xs:attribute name="SourceJsonField" type="xs:string" use="optional"/>
<xs:attribute name="SourceJsonColumn" type="xs:nonNegativeInteger" use="optional"/>
<xs:attribute name="Aggregation" type="AggregationEnum" use="optional"/>
<xs:attribute name="FillEmptyEntries" type="xs:boolean" use="optional"/>
<xs:attribute name="LateDelivery" type="xs:boolean" use="optional"/>
<xs:attribute name="IsWritable" type="xs:boolean" use="optional"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="Table-Column" type="TableColumnType"/>
<xs:element name="Table-Column-NxtCompute" type="TableColumnType"/>
<xs:element name="Table-Column-NxtCategory" type="TableColumnType"/>
<xs:element name="Table-Column-NxtScore">
<xs:complexType>
<xs:complexContent>
<xs:extension base="TableColumnBaseType">
<xs:attribute name="ScoreName" type="xs:string" use="required"/>
<xs:attribute name="ValueName" type="xs:string" use="required"/>
<xs:attribute name="ScoreID" type="guid" use="optional"/>
<xs:attribute name="ValueID" type="guid" use="optional"/>
<xs:attribute name="Payload" type="xs:boolean" use="optional"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="Table-Column-NxtAction">
<xs:complexType>
<xs:complexContent>
<xs:extension base="TableColumnBaseType">
<xs:attribute name="ActionName" type="xs:string" use="required"/>
<xs:attribute name="ValueName" type="xs:string" use="required"/>
<xs:attribute name="ActionID" type="guid" use="optional"/>
<xs:attribute name="ValueID" type="guid" use="optional"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="Table-Column-NxtCampaign">
<xs:complexType>
<xs:complexContent>
<xs:extension base="TableColumnBaseType">
<xs:attribute name="CampaignName" type="xs:string" use="required"/>
<xs:attribute name="ValueName" type="xs:string" use="required"/>
<xs:attribute name="CampaignID" type="guid" use="optional"/>
<xs:attribute name="ValueID" type="xs:int" use="optional"/>
<xs:attribute name="AsText" type="xs:boolean" use="optional"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="Table-Column-Computation">
<xs:complexType>
<xs:complexContent>
<xs:extension base="TableColumnBaseType">
<xs:sequence>
<xs:choice maxOccurs="1" minOccurs="1">
<xs:element ref="Computation-LinearTransform"/>
<xs:element ref="Computation-RegEx"/>
</xs:choice>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="Computation-LinearTransform">
<xs:complexType>
<xs:attribute name="Column" type="xs:NCName" use="required"/>
<xs:attribute name="m" type="xs:float" use="required"/>
<xs:attribute name="b" type="xs:float" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Computation-RegEx">
<xs:complexType>
<xs:attribute name="Column" type="xs:NCName" use="required"/>
<xs:attribute name="RegExFilter" type="xs:string" use="required"/>
<xs:attribute name="Replacement" type="xs:string" use="optional"/>
<xs:attribute name="AutoTrim" type="xs:boolean" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="Table-Index">
<xs:complexType>
<xs:attribute name="Name" type="xs:NCName" use="required"/>
<xs:attribute name="Columns" type="ColumnList" use="required"/>
<xs:attribute name="Unique" type="xs:boolean" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="Table-Reference">
<xs:complexType>
<xs:attribute name="ForeignTable" type="xs:NCName" use="required"/>
<xs:attribute name="Columns" type="ColumnList" use="required"/>
<xs:attribute name="ForeignIndex" type="xs:NCName" use="optional"/>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<F4SD-Global-Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="F4SD-Global-Configuration.xsd">
<ShouldSkipSlimView Policy="Default" Value="true" />
<SmallViewAlignment Policy="Default" Value="Right" />
<FavouriteBarAlignment Policy="Default" Value="Right" />
<InformationClassSearchPriority Policy="Hidden">
<InformationClass Type="User" />
<InformationClass Type="Computer" />
<InformationClass Type="VirtualSession" />
<InformationClass Type="Ticket" />
</InformationClassSearchPriority>
<TicketConfiguration>
<DisableAutomaticTimeTracking Policy="Mandatory" Value="true" />
<CompletitionPolicy Policy="Mandatory" Value="IfRequired" />
<NotesMandatory Policy="Mandatory" Value="true" />
<ShowOverview Policy="Mandatory" Value="true" />
<OverviewPollingPersonal Policy="Mandatory" Value="10" />
<OverviewPollingRole Policy="Mandatory" Value="5" />
</TicketConfiguration>
</F4SD-Global-Configuration>

View File

@@ -0,0 +1,156 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:simpleType name="InformationClassEnum">
<xs:restriction base="xs:NCName">
<xs:enumeration value="User"/>
<xs:enumeration value="Computer"/>
<xs:enumeration value="VirtualSession"/>
<xs:enumeration value="Ticket"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="PolicyEnum">
<xs:restriction base="xs:NCName">
<xs:enumeration value="Default"/>
<xs:enumeration value="Mandatory"/>
<xs:enumeration value="Hidden"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TicketCompletitionPolicyEnum">
<xs:restriction base="xs:NCName">
<xs:enumeration value="IfRequired"/>
<xs:enumeration value="false"/>
<xs:enumeration value="true"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="HorizontalAlignmentEnum">
<xs:restriction base="xs:NCName">
<xs:enumeration value="Default"/>
<xs:enumeration value="Right"/>
<xs:enumeration value="Center"/>
<xs:enumeration value="Left"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="StringNode">
<xs:attribute name="Policy" type="PolicyEnum" use="required"/>
<xs:attribute name="Value" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType name="IntegerNode">
<xs:attribute name="Policy" type="PolicyEnum" use="required"/>
<xs:attribute name="Value" type="xs:integer" use="required"/>
</xs:complexType>
<xs:complexType name="BoolNode">
<xs:attribute name="Policy" type="PolicyEnum" use="required"/>
<xs:attribute name="Value" type="xs:boolean" use="required"/>
</xs:complexType>
<xs:complexType name="PolicyNode">
<xs:attribute name="Policy" type="PolicyEnum" use="required"/>
</xs:complexType>
<xs:element name="F4SD-Global-Configuration">
<xs:complexType>
<xs:all>
<xs:element name="ShouldSkipSlimView" minOccurs="0" maxOccurs="1">
<xs:complexType><xs:complexContent><xs:extension base="BoolNode"></xs:extension></xs:complexContent></xs:complexType>
</xs:element>
<xs:element name="SmallViewAlignment" minOccurs="0" maxOccurs="1">
<xs:complexType> <xs:complexContent><xs:extension base="PolicyNode">
<xs:attribute name="Value" type="HorizontalAlignmentEnum" use="required"/>
</xs:extension></xs:complexContent></xs:complexType>
</xs:element>
<xs:element name="FavouriteBarAlignment" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:complexContent>
<xs:extension base="PolicyNode">
<xs:attribute name="Value" type="HorizontalAlignmentEnum" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element ref="InformationClassSearchPriority" minOccurs="0" maxOccurs="1"/>
<xs:element ref="TicketConfiguration" minOccurs="0" maxOccurs="1"/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="InformationClassSearchPriority">
<xs:complexType>
<xs:complexContent>
<xs:extension base="PolicyNode">
<xs:sequence>
<xs:element ref="InformationClass" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="InformationClass">
<xs:complexType>
<xs:attribute name="Type" type="InformationClassEnum" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="TicketConfiguration">
<xs:complexType>
<xs:all>
<xs:element name="NotesMandatory" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:complexContent>
<xs:extension base="BoolNode"></xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="DisableAutomaticTimeTracking" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:complexContent>
<xs:extension base="BoolNode"></xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="CompletitionPolicy" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:complexContent>
<xs:extension base="PolicyNode">
<xs:attribute name="Value" type="TicketCompletitionPolicyEnum" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="ShowOverview" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:complexContent>
<xs:extension base="BoolNode"></xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="OverviewPollingPersonal" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:complexContent>
<xs:extension base="PolicyNode">
<xs:attribute name="Value" type="xs:positiveInteger" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="OverviewPollingRole" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:complexContent>
<xs:extension base="PolicyNode">
<xs:attribute name="Value" type="xs:positiveInteger" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8" ?>
<F4SD-Icon-Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="F4SD-Icon-Configuration.xsd">
<IconDefinitions>
<IconDefinition-Image Name="TestImage" IconType="byImage">
<IconImage SizeX="10" SizeY="10">iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKBAMAAAB/HNKOAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAGUExURf8AbgAAAJpakjMAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAaSURBVBjTY4ADARDBCCYFQCQjRAQLCQEMDAAQ+wCDR98HLQAAAABJRU5ErkJggg==</IconImage>
<IconImage SizeX="20" SizeY="20">iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAANjgAADY4BAtAkWgAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAAFwSURBVDhPY5CzydVStM+ZoGifNZMynDMBZBaDrEX8A0WHnP/UwCCzGEAMBfvsbbJWSVKUYJAZILMgBjpkr2WgEIDMGDgDgWqSFe2zTwAD/i7Qa3eA7AuKdllVksZpXFAlpBmo4JCVJ2+fZSBvl+MJZPsr2mXrAvVVgWioEtIMVLNPE1F0yL4GVDcNlDwU7HOuyNtlB0KlwYAkA0FA1SldGujdqQoOOfMU7fJMGUJDmaFSYECygQqOWfIgVynYZrrJ22U6QoXhgCQDFe0ym7DlDqg0GJBkoIJ91k2QOnQMlQYDVAPx5BQZi0JOsIH22V+AmnYDI+cckH4I0mdsnMYKU4ecU+6DGLgwMLlEggwERsYvIB8U00DDst+D5Z0y9ZDVAvF9wqWNbboZxMtgQyYB1W4AJpuLIANU7HNlEGqhpQ0xABaGQIM+QLwOdi1KGJIEwF4GGWaXvQgSjjnXKDYQZAA6hkqTDqhuIDEJGwIYGACByknB6/EnhgAAAABJRU5ErkJggg==</IconImage>
<!--<IconImage SizeX="30" SizeY="30">iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeBAMAAADJHrORAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAGUExURQD//wAAALEGeLIAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABLSURBVCjPYyAPCAoKoHAZGBiRBMBsZD6cYEATJIEviMYXQFOOymcUROOia0dTj0VAgIADiHYw1GSEeeDAQ7YP6DpUB2O6lyzAwAAAsakB4ouF7nUAAAAASUVORK5CYII=</IconImage>-->
<!--<IconImage SizeX="40" SizeY="40">iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAIAAAADnC86AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAL9SURBVFhH7ZdLaBNRFIb/mTxa+ohtfFRFxQbrq+haoaCgG0UXbqQ7V4IoqKCLghSX4kI3LgSh6kah6kJwKbhxValdKF0UFVubNpQ2zaOvZJ6eM7lJKprOnRmJiH6Em5szM/efc+65594op2z8EVTxXXf+HmHLgpZBdhimJiz+8CxcTGH0Kj5ewvxbYfGHN2Hbxvg9TD/Fwof6Ci9NYHoQtoFwDB2nhdEfHoQtE8kBFKb4oQ3HETso7P7wILz8Faln7G6kDdvOQY0Iuz9khS0DE/dZm56IH0HbIWEnbBMrUyjOcQbIIyVMI2aGMPWE3Y3GsfMiIq3VS4ufMNaP7JCwSCIlrM1j7Aa0WSghdJxBew8URVyyipxuqRfQM8Iiibsw5dTkQ8chG00JdF5BuFFcIrQ5pN/AXIKxKCySuAsXJpF8xJ6FmpG4jtY9wl5Cz0JL8ztZK8IiiYswTeG3ASx9BhTEe7DlLEd7NXoORo47ls7y8rgIU+IkH8PWEWnHrj5EYsJewcjCLPlqOq00awmbBr7cRmGa79p4AusOV3OqAq0iq8Ady+O+vpZwbhgzL2lINGxGVx/CUWFfjZ52gkx4FK55AinmMHQM+ffcbzmATSe5VCn0nipUmuaQUy5szL5GhnYLG103sbufU+HnqPySmsLjDzB6GXaR+0qYR3R65aY8OrtrcSdxDXtv8Z2SwjVD3bofzZ1QyMsGp6URQ+xxaVxyt/SpRFgEXJqaHhtF5N4hM8zpyhG2uJJQS5WZCmeFmVfIj/Br7biA7rsePA50yiSPR3qReg61EdvPo/sOVJoUOdbKalfMZeh57pAerfXfWUBcoMg7i1iJOvGnn9LawYQVx0mb884swHbSW5JAwqEm/hDkrpmvozBlu+qUM4qwpf2Q7a4ECzVRmlTylWqZl6UcVNhY4JZ2a9q+KuVMhqDCLft4DCpt648iXD6IyRBUmCor6akN7DHNt2TZIoL+P9ZySA1ykLf2Vo+eMgQV9k3grPbLf+G68a8JA98BgX8KuPKybbkAAAAASUVORK5CYII=</IconImage>-->
</IconDefinition-Image>
</IconDefinitions>
</F4SD-Icon-Configuration>

View File

@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:simpleType name="LanguageId">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]{2}" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="IconTypes">
<xs:restriction base="xs:NCName">
<xs:enumeration value="material" />
<xs:enumeration value="intern" />
<xs:enumeration value="byImage" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="MultiLanguageEntry">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Lang" type="LanguageId" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="F4SD-Icon-Configuration">
<xs:complexType>
<xs:sequence>
<xs:element ref="IconDefinitions" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="IconDefinitions">
<xs:complexType>
<xs:sequence>
<xs:element ref="IconDefinition-Image" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="IconDefinition-Image">
<xs:complexType>
<xs:sequence>
<xs:element ref="IconImage" minOccurs="1" maxOccurs="unbounded" />
<xs:element ref="Description" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="Name" type="xs:NCName" use="required" />
<xs:attribute name="IconType" type="IconTypes" use="required" />
<xs:attribute name="Description" type="IconTypes" use="optional" />
</xs:complexType>
</xs:element>
<xs:element name="Description">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="MultiLanguageEntry" />
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="IconImage">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="SizeX" type="xs:integer" />
<xs:attribute name="SizeY" type="xs:integer" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<F4SD-Infrastructure-Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="F4SD-Infrastructure-Configuration.xsd">
<Credentials>
<Credential Name="SQL" Domain="c4it" User="tusr_nxt_collector">vmmiabBaKKefRcRRwaKiJCLniIPEzOu+BGwMLrnlNq6jANT4P3Z0802c8XMxEQgxcITj9J3pb9uIGjZUM+nfM719dHbAmS3z6glAre0Wae+uIBTNbDpn3KVjkCJwbQsOk+yeRrGhWwuWAP7DCUYq9OyGd+DY7dYAF2qKFO7zaeo=</Credential>
<Credential Name="SQLTest" Domain="" User="sa">WSof9/qG1DikRY7NLa1Bt5hYKQsm9YvNFXukg95J5OvCR/Z0c8U1bo+QvKLW+/K8L9wgVvVbyzJQiSYeWNktbdK5qMkcphw4mciJkLkzYyeRgx27Vr7KzBOlmK9JQ1Z0c40VebDzGOh6mB+s+STfOLp2Tseq5lcz9qf8oP6XlkM=</Credential>
<!--qMfZiLQTbTdFmgusoJX4-->
<Credential Name="NXT" Domain="" User="tusr_nxt_collector@c4it.intra">R0ICvoG+yjJFGXGgagNQbzAwcBacJr47wRHOIwYhBl/YGDmxpoRWrI1GZ9x1C7ofSqeE1UeZNHX/oqMo/04h+jfUrqk1QHo/6e43Lns1z7UVhWrzOlPSxYwCjv7e4+6wqTWTx6UNGR5jCeD/eHAXHW24dGu7mph9xhcB3VC1kRY=</Credential>
<Credential Name="NXCLOUD" Domain="" User="sd002">ZLAAU+jFXU/+x9FVjx4EAZRnK/D+G/OpZGkn4ek56vhDUeoR5QnSAsNu/cMa1yM3Zxa3CgmSjUmpBy+X2gr1Vo8yAeLVhqI8k9hzev+/LhrinTZIqVZZ4CaA5TEiBuNAy2uB8WEkned6uh3hRyIVNavlfoO9sToZn8f+xn8NKrM=</Credential>
<Credential Name="AGENTAPI" Domain="" User="management-client">gdZccNCwzFrAdA+qGOA9I9ChD8hJQq/4Xuc5iC2i2I+Rtp6KCRrlgqPU0Wn6zwQ8SKitRLUSeNCJcspzkpewfv0Lnb2VIDMhdDeA5zyxVss0dZqDrMgYRhZcT+odtFTX8GlWUTyqBSQpUh8YQYdggvFZkE5ZOTaFU6kqUoKAgcs=</Credential>
<Credential Name="M42API-Demo" Domain="" User="F4SD API Access">a2btKvTS6UnTiD3vTaLX4JjQe3YB8iOpgqwDD3Imy9QzfIZwOBkKuI+jZDtea9VPpFsO6P7pVPmL5y3eZQpVe9oBlw74Ve0hMvX+RrNjAO5DINbBNG8JxZ4gPIMQsUnYVVkHH3pvoiJIJ8AlctQuMEQ2v2slnOvEhTMWiJF2vzQWPgY7vCu6hp92AJvalKIOmK6qT3u7gf45L06R16hpzxD73DbmYwEnMs1ZuF9e1NrLdXRBr+/m4/K8RneZf/hLnW70JJm1IfA/PEVYUEk5HG0fWZFTnsBI3xNXuxXg4OdiR/7Bcrmpj36ATEU6XfWnJBP5qZwhvNzIdMMcDLOnk52b56Szjr5wEOSJIvG93knmZJAFPDIqnRY9BLYtZb6rZ6sCpLMD7R97HKhUy0CFgNNY43CniAtIiARpnGFpdxPISSWeVFsqrckEDeya4hUpZQRUf7T53nTnOBFMuygDgWxfJnMxEl0tg6m5kfAhkguyFDRueA/XkSs0bXQ8xuERBZpKCWA7TJZnMbljK9G22VMYPFCJbB8hHkBjW49wsM8rF0MAS2KvweJdvFjclhqRNSH6sXHKTh4r870YYhYXNnrqobikmP81ZCoq6avKH10/1UPJJAQjBT4MwM488M7TfPv4q9l0ezi7v91fnl2MORRlZljoQ57ao6flIf/KCgQhxl20PtYPz4TcRU/onZ5OKRDXEgaWpkJZkt4ZZX2NgjIvEI8wTEATY3Eu2dBOKeWKD7jwhkPJtnRka8+miNSFanhwJ78WjIx1B/s9jMJ2njCMAzsabjVDMZPwedXigz67zcSl3NnCg4ycCukPnk/Vs2r90XjYKOCuvlU6CsTCeQLLX28Y2AaABY+7vQIEV3XPZVc4kimy6EEShfNZkkLNHQjoZqVXkFp8AKxWCZLzJOFyGFTAX0UqsN9O6soJ/rzAF68ByjYT2y9iggA8GDYUAHZxe0fX/b01+8D+I14c9qPctBaEPhJ2DjYOfJhKRglP1nkIX6U/wd0A19brME7fr50k/ndYpavzGOhVFHrcnxufn6CDJ9/8XeeQ3XdqHwCnYT4G0dUBDEQXcCGWJa0KVkefl4vW25A8Uz5aa4yQoOj7wsnJdLVoijClWEj4a7AWP1AaH9l+dQels1ek7nJ5M8BgjGK5QSSbSrgdNLVRTRZ8PxsSdSjs1tXpSZB6SfSIWW0l48HADpUdmJjr8RlARLvpeHJs+Sqw03TnAPZo+0NOrjrfFnH0UNCVcIaNYwunMhp76s77sUpmozOxL0s95hXNlGPRcJMF5kxTXzV5hbTFr0ZsG/33gmbup9Vo9OJza9EeSbQUZj26TWotabTFrrzU/OgboiHWUmXM9HSwrXatWsCjdOr602+Hve5eDcbYUMAWvXz77QfniJgj54dM4kdNRP3e4iWQRD/EW2crlacOPEyqCGYoHm+BlgtXg2IUUYxuqYJi3/RAn0TZzEKe9oDET2jc7RRRXUzglPVU6LPnw4qPbpu054GVDfddTvPthIPKBwyB21laqmFIDRCqkcmOuVuXBxhF5DLJh7dXl7Azo3X1R7sBhX3gFOynvbDYoGmxpxetR0rKxWP9toh/UPubuYYTtOeAuLGdhIFu9LdeV/LkRHeHlFgtaZjd/CmmHavRMiKs8rKlXCRQAJYIu6DzcDCjkDfOOhEKOoi9PVzCJsLahRmlsvty+bVrbgZwNJoBH9p50dx+5rw9diNKXJrY5zCl5YnacXDHQ7lY4VV8a0f7I3zGOffTYSbADOrQ+V35YQIkzQ8yBNTKHxkKUY+qR4YHkN5P3Wq/xhZkVwAO1UEMyjdZCyibAMnvNsGSZiZSvn1374ygn1xL/gKU7nGGh4xtBU3cCzHkxfWMSDmk3m9Gp7cdFd8/jr0TLaLT1roEO6/Btdwh17XSFU2xUQzYieMIESuZuO/NzEem0V8qtT7Jh3AkfXumzvhBysc2PG0/ydghgL8kO+42zU+bslPhk+hQ7w1UouGNhtMgMi31sjxizjoeS7z2v7qCmC8P9ho3Lsexxoefj/pJ3wgF</Credential>
<!-- M42 API KEY: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1bmlxdWVfbmFtZSI6ImltYWdvdmVydW0uY29tXFx2dm9nZWwiLCJuYW1laWQiOiJpbWFnb3ZlcnVtLmNvbVxcdnZvZ2VsIiwiVXNlckZyYWdtZW50SWQiOiI3ZWRhYTljNy03YjMzLWU1MTEtODBmNi0wMDUwNTYyZjk1MTYiLCJpc3MiOiJodHRwczovL3N0cy5tYXRyaXg0Mi5jb20iLCJhdWQiOiJ1cm46bWF0cml4NDJBcGkiLCJleHAiOjIxNDc0ODM2MTIsIm5iZiI6MTY2NTU4Mzc3Mn0.MQntDtbSafCY42UDkyEHiSE8VLZX6B_EIkSg04wdrAc-->
<Credential Name="M42API-Demo-Dieter" Domain="" User="F4SD API Access">QbduWLGx6U0/XFMzVkVF4UZGxLrCx3c/R+GpiRctqCbf1mLApqNxMrctKpdUjfSwW04UgCl+ERtERvkgr5gluxto+oY6AtmHhCdANU1ZpzAFObEhjxGA1rQGp4PRBcpLPVg3AyBw0mNv8GqrJSdt/+sDcQY7R405ZNMUaBGdkh6CxZNo8OFstpZ9Q4QlRljO9sh62uTMGTqPw+DCaJnFlcAvRMCas1oVJ4bUJ0ODiaBmjf7N9+aO1OnOFYK5XLnlyRvlBSNMPftjbQewA46efMe8kG1t50drtObXJLsQs/FM6BkmDzKlclG3crSPBWL6MH6QVhf/NDL/Spntxpu+o4a/cfR4BpIyZc/GnLnHDwCzCv7l5uLG+T8GXoFLTbjNTKpdSHFD3EZrOXs9BdFXHxCs2zHDtSZBhftzvDrzRUPyD0t9p6Q4FVT4KTv8QGPCFme+sYLy1I20n9QH4736Dvx0IZO6TBPZc7ryIjvChmWQojudhIz/eObraSsRI2DYfU5COLCESDKd4SwwyAHkwJmh1Qc1YMGBNv9mxOn6qbFk/HQ9me2VxVw1p+YwgFH7xcfWEpk3kyIBxGdDfAqzhWBirYjsFWDbSkRyloczdh8VI1A+51ABIBB9Bd1pMyDbXfZWi/UpIlLjRRJzdfwBJ0U/xlFS2BE5N7hmUOqFIMx+8ZSJoJ0NJLWcerVa6OA3P0IxZukyOxuW9GamX58jyNwdZVY5Mydit/8FS5d/v0JGdiK0EVdCj/snyflHeNukeOsy/lAfkjoX+lDX5/BN6cM+JJtWGoLPY6w5WdrNff/Y+8GzK3m5u2fz60Kfjbmh+X4jGA775xTEZoOsGHGU56WwdVixPQAJBQcQPyulf7I23mKQkOXBQiQi7405sBS0cEnuZdxpi6oBknDs5442P4GFHhNTL5zCRL34zUpSMxelETjKyqMuxsTs5+UFycEmLkgWw6Jxz9hc8uoWAaPkqlhMEJc9aae6z2b4EJr3guKkMOA5A1V8Y9x+rOQxTcCsFU6Sxk5PI4phlfU+yyhgcYtAI5bvNkAo02hBCYwZQdTsrBj/E4bqghwJs42QDYL3Y9etWFUgcDniKTsRN4ig9IWQcJL/VrpcAhWneC+Ih0etKX9YAFFdn1sXhLsamr0RSzP/g587XxdnTi8CYN7cijwNmzXCnNjJy5N55P1+dEKPSwoAcm2fh8oM8XPIV7CLpzt61Vb6CuT08jAWKYfq/gAHN/6KAxhZ7PcstYMkz5z4fieEfpto0yaz6GcAE5Y6SGOqz9P4fyCmxVj4yz4wwBi/QEyWCXeguQoIXgkWtaVm+iLuliMNV7BM1PkFNu/ugQqgqAU4yPd7Zr398aWi/Y77ESvtRylmanZB4yU2KmdTFUCYrFSOImyqe2hz4BcpQeQTCp95UNn/zQ3PdAFlkQM3mde0x0WoxNfQiA1jqOU7GOOzYngSvQNHh3VEno0X7wdzi9bVT2JkNvmGoipjRL6PabhzlphkosV+WuJSIk0xOZa2wGCGNPp92rD2f3YmLACTeYoyReb/C6NzVetroTgdVoULTVPf9nlM9P87tJZlLBQBAU5T4zbhjU4fCCdTSJnW/B2GntO5bioC3ngDCG95pgUjC0Wq8Yl7x+WjK5hBCBWYE8pTLF2pwlBE+xB8QZOM48gh/b23rGrhZMwxix62KgbSyIUvvPjrPwRc+2NMOP13UQe6RK28aomg1M6eqRIT04m4SUMVX4/vdUrqSmzX09FF/Eyw4PlRf5eazXswa6XL+cNiOL+hvnj0kpUgYO9tWRYJJ6UfXHQsVxwBsCjXjQUrvvDd5rNaKQRi68P96nMTNWLFK4nxuJVey1mBBJ2zpx+gCglwXyy+Q+egcQWmsnrus7EZ7VHhRUlg3j76MnMJSJR6SaBFRQQKjOWJxCA5sSVL8lCalojS8gReVqW44LzNAclVMBJtaCOnM9JIj9bq5av1DYxxrGrzNrKQMmSLFsCOlXhT42a89S+l7VzFMBH7YMypyczIEswUsTss4APTMa3fCv2CDZUY4W07ojMQINHqwCy5ip5X/9G19Y5/DY8mu+iu0wmE2VEWuwnRqYrtdAEYCXOpstWbVqkqPTL1O37FTBKvF+pMqiKv4l6tDl4vMoBPhhrByqa+nF92JnXecZoXKxlVz1ksiUH+7CR34EAmryG7nJGNATNvh9bc2oPcAIwdApflNFe8tEs=</Credential>
<!-- M42 API KEY: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1bmlxdWVfbmFtZSI6ImltYWdvdmVydW0uY29tXFx3c21zZXJ2aWNlcyIsIm5hbWVpZCI6ImltYWdvdmVydW0uY29tXFx3c21zZXJ2aWNlcyIsIlVzZXJGcmFnbWVudElkIjoiYmZlY2IxOWUtY2MwOS1lNTExLWQzODAtMDA1MDU2MmY5NTE2IiwiaXNzIjoiaHR0cHM6Ly9zdHMubWF0cml4NDIuY29tIiwiYXVkIjoidXJuOm1hdHJpeDQyQXBpIiwiZXhwIjoyMTQ3NDgzNjA3LCJuYmYiOjE2ODMwMjI0MDd9.k4lcNXAHQfkRH28MVOZz6cONe794JoZW3wV9A0V7PAQ -->
<Credential Name="AzureAccess" Domain="" User="a818cddc-4c80-4600-bd6d-2f25b65fb679">ZU68NkYtmNMVx9gQiACXzLKXrRT9PsxEtO5mYutTgPD5yX19EBPAy/lHY/7SD8Mqrhx4OWSsYKSg3Zc2E5PzVVm+9HGf68BnsUZqH0AMbh7F7R9cYumOTQ5g9d8KYyTXdpkHaqx+z/Oey/hE/Dbj0AT3p48/+DfpysgPWv8seh0CkewE9Sj7CPEitSxBdRi64L2W5BX6Mo/kkJKxolwY6qjSIFDES9IS5O0pXxVZ3P6N8jriMTuAobk3XSAg9m4l+JNvo7bt137s9dhNqqDVlpVNtcGLhiNlnOVmfCvps56LWu+yF0reqL6VxlSFmD418P2mvhQegVtR151J2QF6kA==</Credential>
<Credential Name="AzureAccess_Dieter" Domain="" User="c1cf923b-f286-407b-ae4f-bf60c4c5a85a">BS5gl9Ch0SwtWg2DNwVaphKTtcIDH0KtLnDryUEb4MD+/9Wm8ox01MiB/PgnSQ1mj2RVOv+LPq8Ax7liwuou+BlJMyIM2Z0+V8dCif8zYS6Tnsk/fgv0yP0bvxk9GFOroW5amdQQTpMUEg3jIWwXqNRG0MHwKDwNS+PxqGjfcv9061Q2o1ZPDtkhaxpa+lpNzly6Vl4lyTpUI6aUaMaAETX/qrzB1TdxBBeJN5d7TLAUp5/qVX09Qsol8nC018KgtyI+q2ir1mqGLtmgzQaxpg4NBwStpjfSAHUezV80tGK+je5dVnYZrKuirSNY5l+f+PL5YdrGXxX0vAqAwgT2tw==</Credential>
<Credential Name="CitrixAccess" Domain="" User="bd3b468a-8ea2-4e48-9c04-eece3ccda693">N/yOeyE/pc81TA36JWPWws+2tB3pIfteJZp0u/Ko9dKTUaOmJHuvL8qJ+C2cEth0XZC91V6rQQOyoC1bDfrgM7eRvGGn92T01YaVlMI1RPVy/r1OUOGRhCilE7jFoiuEYMxvXLCAOT02j0noNNZn2ko/ssG4scWIf0HHJr71kFE=</Credential>
</Credentials>
<DB-Connections>
<SQL-Connection Name="DataHistoryDB" Credential="SQL" NativeAccount="false" Server="c4-sql03.c4it.intra" Database="C4-FASD-2.0-Dev" Timeout="60"/>
<!--<SQL-Connection Name="F4SDAnalyticsDB" Credential="SQL" NativeAccount="false" Server="c4-sql03.c4it.intra" Database="C4-F4SD-Analytics" Timeout="60"/>-->
<SQL-Connection Name="F4SDAnalyticsDB" Credential="SQLTest" NativeAccount="true" Server="localhost" Database="C4-F4SD-Analytics_Test2" Timeout="60"/>
<!--<SQL-Connection Name="DataHistoryDB" Credential="SQL" NativeAccount="false" Server="localhost" Instance ="MSSQLSERVER17" Database="C4-FASD-2.0-Dev" Timeout="60"/>-->
<!--<SQL-Connection Name="DataHistoryDB" Credential="SQL" NativeAccount="false" Server="localhost" Database="C4-FASD-2.0-Dev" Timeout="60"/>-->
<SQL-Connection Name="ClientAgentDB" Credential="SQL" NativeAccount="false" Server="c4-sql03.c4it.intra" Database="c4it-fasd-prod-v2" Timeout="60"/>
<!--<SQL-Connection Name="ClientAgentDB" Credential="SQL" NativeAccount="false" Server="localhost" Instance ="MSSQLSERVER17" Database="C4IT-F4SD-Agent" Timeout="60"/>-->
</DB-Connections>
<DataHistory-DB DB-Connection="DataHistoryDB" SearchForPhoneNumbers="true" SearchWithLike="true" DaysToCache="30">
<Cleanup-Timeframe StartDay="Mon" StartTime="19:00" StopTime="05:00" Timezone="W. Europe Standard Time"/>
<Cleanup-Timeframe StartDay="Tue" StartTime="19:00" StopTime="05:00" Timezone="W. Europe Standard Time"/>
<Cleanup-Timeframe StartDay="Wed" StartTime="19:00" StopTime="05:00" Timezone="W. Europe Standard Time"/>
<Cleanup-Timeframe StartDay="Thu" StartTime="19:00" StopTime="05:00" Timezone="W. Europe Standard Time"/>
<Cleanup-Timeframe StartDay="Fri" StartTime="19:00" StopDay="Mon" StopTime="05:00" Timezone="W. Europe Standard Time"/>
</DataHistory-DB>
<F4SDAnalytics-DB EnableUserId="false" SessionTimeout = "60" CaseTimeout="2" SessionCheckInterval="20" CaseCheckInterval="1" DB-Connection="F4SDAnalyticsDB"/>
<ClientAgent DB-Connection="ClientAgentDB" Server-Url="https://f4sd01.consulting4it.de/f4sdagent/server/" MaxDeviceAge="30" Organization="Consulting4IT" Api-Credential="AGENTAPI">
<Scan-Timing ScanInterval="01:00" ScanOffset="20:05" Timezone="W. Europe Standard Time"/>
<Local-Account-Assignment Domain="C4IT" RegExFilter="" AccountMask ="*" />
<Local-Account-Assignment Domain="Training" RegExFilter="" AccountMask ="*" />
</ClientAgent>
<Active-Directory ScanPhoneNumbers ="true">
<Scan-Timing ScanInterval="24:00" ScanOffset="00:10" Timezone="W. Europe Standard Time"/>
<AD-Domains>
<AD-Domain Name="C4IT" FQDN="c4it.intra" Credential="SQL">
<AD-Server FQDN="c4-dc04.c4it.intra" UseSSL="true" Port="636"/>
<AD-Server FQDN="c4-dc01.c4it.intra" UseSSL="true"/>
</AD-Domain>
<AD-Domain Name="Training" FQDN="training.local" Credential="SQL">
<AD-Server FQDN="C4-SCHUL-DC01.Training.local" UseSSL="false"/>
</AD-Domain>
</AD-Domains>
<AD-Scans>
<AD-Scan Name="Employee" Type="User">
<AD-Scan-Node AD-Domain="C4IT" Path="OU=Employees,OU=_Users" LDAP-Filter="" Filter-Property="distinguishedName" Wildcard-Filter="" RegEx-Filter="" />
</AD-Scan>
<AD-Scan Name="AdminUser" Type="User">
<AD-Scan-Node AD-Domain="C4IT" Path="OU=C4IT-Admins,OU=_Users" LDAP-Filter="" RegEx-Filter=""/>
</AD-Scan>
<AD-Scan Name="C4itComputer" Type="Computer">
<AD-Scan-Node AD-Domain="C4IT" Path="OU=Consulting4IT,OU=Clients,OU=_Computers" LDAP-Filter="" RegEx-Filter=""/>
</AD-Scan>
<AD-Scan Name="TelesalesComputer" Type="Computer">
<AD-Scan-Node AD-Domain="C4IT" Path="OU=Telesales4U,OU=Clients,OU=_Computers" LDAP-Filter="" RegEx-Filter=""/>
</AD-Scan>
<AD-Scan Name="RemainingUser" Type="User">
<AD-Scan-Node AD-Domain="C4IT" Path="" LDAP-Filter="" RegEx-Filter=""/>
</AD-Scan>
<AD-Scan Name="RemainingComputer" Type="Computer">
<AD-Scan-Node AD-Domain="C4IT" Path="" LDAP-Filter="" RegEx-Filter=""/>
</AD-Scan>
<AD-Scan Name="TrainingUser" Type="User">
<AD-Scan-Node AD-Domain="Training" Path="" LDAP-Filter="" Wildcard-Filter="" RegEx-Filter="" />
</AD-Scan>
<AD-Scan Name="TrainingComputer" Type="Computer">
<AD-Scan-Node AD-Domain="Training" Path="" LDAP-Filter="" Wildcard-Filter="" RegEx-Filter="" />
</AD-Scan>
</AD-Scans>
</Active-Directory>
<Azure-AD>
<Azure-Tenant Domain="c4it365.onmicrosoft.com" TenantID="8f773186-362b-4432-a3e9-d3ad4685f3f1" Credential="AzureAccess" ScanIntuneDevices = "true" WithMobileDevices="true"/>
<!--<Azure-Tenant Domain="sd0024.onmicrosoft.com" TenantID="07362148-410e-4636-a9cb-795fba1a5452" Credential="AzureAccess_Dieter"/>-->
</Azure-AD>
<Matrix42-WPM Server="srvwsm001.imagoverum.com" Credential="M42API-Demo" ClosedTicketHistory="9999" DisplayName="M42 Demo server (imagoverum)" ApiTokenLifetime ="30 days" ActivityQueueFilter="ticketsAndListedQueues">
<Matrix42-Ticket DisableAutomaticTimeTracking="1"
ShowDocumentCaseDialog="ifRequired"/>
<DisplayName Lang="DE">M42 Demo Server (Imagoverum)</DisplayName>
<Queues>
<Queue QueueName="HR" QueueID="2a7e8099-3d57-f011-1988-00155d320605" />
<Queue QueueName="FM" QueueID="2a7a8099-3d47-f011-1988-00155d320505" />
</Queues>
</Matrix42-WPM>
<!--<Matrix42-WPM Server="m42server.imagoverum.com" Credential="M42API-Demo-Dieter" ClosedTicketHistory="9999"/>-->
<Nexthink>
<Scan-Timing ScanInterval="24:00" ScanOffset="00:10" Timezone="W. Europe Standard Time"/>
<!--
<Nxt-Portal Name="NxtLocal" Address="c4-nexthink.c4it.intra" Credential="NXT" IsCloud="false">
<Nxt-Engine Name="NEXThink" Address="10.33.1.65" Port="1671"/>
</Nxt-Portal>
-->
<Nxt-Portal Name="NxtCloud" Address="c4it.demo.nexthink.cloud" Credential="NXCLOUD" IsCloud="true">
<Nxt-Engine Name="engine-1" Address="c4it-engine-1.demo.nexthink.cloud" Port="443"/>
</Nxt-Portal>
</Nexthink>
<Citrix>
<Scan-Timing ScanInterval="24:00" ScanOffset="00:10" Timezone="W. Europe Standard Time"/>
<Citrix-Tenant Domain="api.cloud.com" TenantID="7wxfk9afgnd7" InstanceID="07ac970e-8bde-454e-b14d-9c7f58cf8a8d" Credential="CitrixAccess"/>
</Citrix>
<Authorization>
<Membership-Groups>
<Membership-Groups-AD Domain="C4IT">
<Membership-Group-AD Name="C4IT-F4SD-Users" Account="C4IT-F4SD-Users"/>
<Membership-Group-AD Name="C4IT-F4SD-Admins" Account="C4IT-F4SD-Admins"/>
</Membership-Groups-AD>
<Membership-Groups-Matrix42>
<Membership-Group-Matrix42 Name="M42_Incident_Management" RoleName="Incident Management" RoleID="2E9F1A61-17C4-42F3-9514-66B5C61E7E17"/>
</Membership-Groups-Matrix42>
</Membership-Groups>
<Roles>
<Role Name="Cockpit.User" Group="C4IT-F4SD-Users"/>
<Role Name="Cockpit.Admin">
<GroupRef Name="C4IT-F4SD-Admins"/>
</Role>
<Role Name="Cockpit.TicketAgent" Group="M42_Incident_Management"/>
</Roles>
</Authorization>
</F4SD-Infrastructure-Configuration>

View File

@@ -0,0 +1,708 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:simpleType name="BooleanTypeEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="false"/>
<xs:enumeration value="true"/>
<xs:enumeration value="0"/>
<xs:enumeration value="1"/>
<xs:enumeration value="no"/>
<xs:enumeration value="yes"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="AdScanTypeEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="User"/>
<xs:enumeration value="Computer"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="HourMinuteType">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{2}:[0-9]{2}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="DayTypeEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="Mon"/>
<xs:enumeration value="Tue"/>
<xs:enumeration value="Wed"/>
<xs:enumeration value="Thu"/>
<xs:enumeration value="Fri"/>
<xs:enumeration value="Sat"/>
<xs:enumeration value="Sun"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="guid">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="NameList">
<xs:list itemType="xs:NCName"/>
</xs:simpleType>
<xs:simpleType name="LdapFilterProperyEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="commonName"/>
<xs:enumeration value="distinguishedName"/>
<xs:enumeration value="samAccountName"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="M42ApiTokenLifetime">
<xs:restriction base="xs:string">
<xs:enumeration value="30 days"/>
<xs:enumeration value="90 days"/>
<xs:enumeration value="180 days"/>
<xs:enumeration value="1 year"/>
<xs:enumeration value="never"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Matrix42-Ticket">
<xs:restriction base="xs:string">
<xs:enumeration value="30 days"/>
<xs:enumeration value="90 days"/>
<xs:enumeration value="180 days"/>
<xs:enumeration value="1 year"/>
<xs:enumeration value="never"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TimezoneType">
<xs:restriction base="xs:string">
<xs:enumeration value="Dateline Standard Time"/>
<xs:enumeration value="UTC-11"/>
<xs:enumeration value="Hawaiian Standard Time"/>
<xs:enumeration value="Alaskan Standard Time"/>
<xs:enumeration value="Pacific Standard Time (Mexico)"/>
<xs:enumeration value="Pacific Standard Time"/>
<xs:enumeration value="US Mountain Standard Time"/>
<xs:enumeration value="Mountain Standard Time (Mexico)"/>
<xs:enumeration value="Mountain Standard Time"/>
<xs:enumeration value="Central Standard Time"/>
<xs:enumeration value="Central Standard Time (Mexico)"/>
<xs:enumeration value="Central America Standard Time"/>
<xs:enumeration value="Canada Central Standard Time"/>
<xs:enumeration value="SA Pacific Standard Time"/>
<xs:enumeration value="Eastern Standard Time (Mexico)"/>
<xs:enumeration value="Eastern Standard Time"/>
<xs:enumeration value="US Eastern Standard Time"/>
<xs:enumeration value="Venezuela Standard Time"/>
<xs:enumeration value="Paraguay Standard Time"/>
<xs:enumeration value="Atlantic Standard Time"/>
<xs:enumeration value="Central Brazilian Standard Time"/>
<xs:enumeration value="SA Western Standard Time"/>
<xs:enumeration value="Newfoundland Standard Time"/>
<xs:enumeration value="E. South America Standard Time"/>
<xs:enumeration value="Argentina Standard Time"/>
<xs:enumeration value="SA Eastern Standard Time"/>
<xs:enumeration value="Greenland Standard Time"/>
<xs:enumeration value="Montevideo Standard Time"/>
<xs:enumeration value="Bahia Standard Time"/>
<xs:enumeration value="Pacific SA Standard Time"/>
<xs:enumeration value="UTC-02"/>
<xs:enumeration value="Mid-Atlantic Standard Time"/>
<xs:enumeration value="Azores Standard Time"/>
<xs:enumeration value="Cape Verde Standard Time"/>
<xs:enumeration value="Morocco Standard Time"/>
<xs:enumeration value="GMT Standard Time"/>
<xs:enumeration value="UTC"/>
<xs:enumeration value="Greenwich Standard Time"/>
<xs:enumeration value="W. Europe Standard Time"/>
<xs:enumeration value="Central Europe Standard Time"/>
<xs:enumeration value="Romance Standard Time"/>
<xs:enumeration value="Central European Standard Time"/>
<xs:enumeration value="W. Central Africa Standard Time"/>
<xs:enumeration value="Namibia Standard Time"/>
<xs:enumeration value="Jordan Standard Time"/>
<xs:enumeration value="GTB Standard Time"/>
<xs:enumeration value="Middle East Standard Time"/>
<xs:enumeration value="Syria Standard Time"/>
<xs:enumeration value="South Africa Standard Time"/>
<xs:enumeration value="FLE Standard Time"/>
<xs:enumeration value="Turkey Standard Time"/>
<xs:enumeration value="Israel Standard Time"/>
<xs:enumeration value="Egypt Standard Time"/>
<xs:enumeration value="Kaliningrad Standard Time"/>
<xs:enumeration value="E. Europe Standard Time"/>
<xs:enumeration value="Libya Standard Time"/>
<xs:enumeration value="Arabic Standard Time"/>
<xs:enumeration value="Arab Standard Time"/>
<xs:enumeration value="Belarus Standard Time"/>
<xs:enumeration value="Russian Standard Time"/>
<xs:enumeration value="E. Africa Standard Time"/>
<xs:enumeration value="Iran Standard Time"/>
<xs:enumeration value="Arabian Standard Time"/>
<xs:enumeration value="Azerbaijan Standard Time"/>
<xs:enumeration value="Caucasus Standard Time"/>
<xs:enumeration value="Russia Time Zone 3"/>
<xs:enumeration value="Mauritius Standard Time"/>
<xs:enumeration value="Georgian Standard Time"/>
<xs:enumeration value="Afghanistan Standard Time"/>
<xs:enumeration value="West Asia Standard Time"/>
<xs:enumeration value="Pakistan Standard Time"/>
<xs:enumeration value="Ekaterinburg Standard Time"/>
<xs:enumeration value="India Standard Time"/>
<xs:enumeration value="Sri Lanka Standard Time"/>
<xs:enumeration value="Nepal Standard Time"/>
<xs:enumeration value="Central Asia Standard Time"/>
<xs:enumeration value="Bangladesh Standard Time"/>
<xs:enumeration value="N. Central Asia Standard Time"/>
<xs:enumeration value="Myanmar Standard Time"/>
<xs:enumeration value="SE Asia Standard Time"/>
<xs:enumeration value="North Asia Standard Time"/>
<xs:enumeration value="North Asia East Standard Time"/>
<xs:enumeration value="Singapore Standard Time"/>
<xs:enumeration value="China Standard Time"/>
<xs:enumeration value="W. Australia Standard Time"/>
<xs:enumeration value="Taipei Standard Time"/>
<xs:enumeration value="Ulaanbaatar Standard Time"/>
<xs:enumeration value="Yakutsk Standard Time"/>
<xs:enumeration value="Tokyo Standard Time"/>
<xs:enumeration value="Korea Standard Time"/>
<xs:enumeration value="Cen. Australia Standard Time"/>
<xs:enumeration value="AUS Central Standard Time"/>
<xs:enumeration value="E. Australia Standard Time"/>
<xs:enumeration value="AUS Eastern Standard Time"/>
<xs:enumeration value="West Pacific Standard Time"/>
<xs:enumeration value="Tasmania Standard Time"/>
<xs:enumeration value="Magadan Standard Time"/>
<xs:enumeration value="Vladivostok Standard Time"/>
<xs:enumeration value="Central Pacific Standard Time"/>
<xs:enumeration value="Russia Time Zone 10"/>
<xs:enumeration value="Russia Time Zone 11"/>
<xs:enumeration value="New Zealand Standard Time"/>
<xs:enumeration value="Fiji Standard Time"/>
<xs:enumeration value="UTC+12"/>
<xs:enumeration value="Kamchatka Standard Time"/>
<xs:enumeration value="Tonga Standard Time"/>
<xs:enumeration value="Samoa Standard Time"/>
<xs:enumeration value="Line Islands Standard Time"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="LanguageId">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]{2}" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="MultiLanguageEntry">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Lang" type="LanguageId" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="DisplayName">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="MultiLanguageEntry" />
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="F4SD-Infrastructure-Configuration">
<xs:complexType>
<xs:all>
<xs:element ref="Credentials" maxOccurs="1" minOccurs="1"/>
<xs:element ref="DB-Connections" maxOccurs="1" minOccurs="1"/>
<xs:element ref="DataHistory-DB" maxOccurs="1" minOccurs="1"/>
<xs:element ref="F4SDAnalytics-DB" maxOccurs="1" minOccurs="0"/>
<xs:element ref="ClientAgent" maxOccurs="1" minOccurs="1"/>
<xs:element ref="Active-Directory" maxOccurs="1" minOccurs="1"/>
<xs:element ref="Azure-AD" maxOccurs="1" minOccurs="0"/>
<xs:element ref="Matrix42-WPM" maxOccurs="1" minOccurs="0"/>
<xs:element ref="Nexthink" maxOccurs="1" minOccurs="0"/>
<xs:element ref="Citrix" maxOccurs="1" minOccurs="0"/>
<xs:element ref="Authorization" maxOccurs="1" minOccurs="0"/>
</xs:all>
</xs:complexType>
<xs:key name="CredentialId">
<xs:selector xpath="./Credentials/*"/>
<xs:field xpath="@Name"/>
</xs:key>
<xs:key name="DbConnectionId">
<xs:selector xpath="./DB-Connections/*"/>
<xs:field xpath="@Name"/>
</xs:key>
</xs:element>
<xs:element name="Credentials">
<xs:complexType>
<xs:sequence>
<xs:element ref="Credential" maxOccurs="unbounded" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="UniqueCredentials">
<xs:selector xpath="./*"/>
<xs:field xpath="@Name"/>
</xs:unique>
</xs:element>
<xs:element name="Credential">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Name" type="xs:NCName" use="required"/>
<xs:attribute name="User" type="xs:string" use="required"/>
<xs:attribute name="Domain" type="xs:string" use="optional"/>
<xs:attribute name="Description" type="xs:string" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="DB-Connections">
<xs:complexType>
<xs:sequence>
<xs:element ref="SQL-Connection" maxOccurs="unbounded" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="UniqueSqlConnection">
<xs:selector xpath="./*"/>
<xs:field xpath="@Name"/>
</xs:unique>
</xs:element>
<xs:element name="SQL-Connection">
<xs:complexType>
<xs:attribute name="Name" type="xs:NCName" use="required"/>
<xs:attribute name="Credential" type="xs:NCName" use="required"/>
<xs:attribute name="NativeAccount" type="BooleanTypeEnum" use="optional"/>
<xs:attribute name="Server" type="xs:string" use="required"/>
<xs:attribute name="Instance" type="xs:string" use="optional"/>
<xs:attribute name="Database" type="xs:string" use="required"/>
<xs:attribute name="Timeout" type="xs:nonNegativeInteger" use="optional"/>
</xs:complexType>
<xs:keyref name="SqlConnectionCredentialRef" refer="CredentialId">
<xs:selector xpath="."/>
<xs:field xpath="@Credential"/>
</xs:keyref>
</xs:element>
<xs:element name="F4SDAnalytics-DB">
<xs:complexType>
<xs:attribute name="DB-Connection" type="xs:NCName" use="required"/>
<xs:attribute name="EnableUserId" type="xs:boolean" use="optional"/>
<xs:attribute name="SessionTimeout" type="xs:positiveInteger" use="optional" default="60"/>
<xs:attribute name="CaseTimeout" type="xs:positiveInteger" use="optional" default="5"/>
<xs:attribute name="SessionCheckInterval" type="xs:positiveInteger" use="optional" default="20"/>
<xs:attribute name="CaseCheckInterval" type="xs:positiveInteger" use="optional" default="2"/>
</xs:complexType>
<xs:keyref name="F4SDAnalyticsDbSqlConnectionRef" refer="DbConnectionId">
<xs:selector xpath="."/>
<xs:field xpath="@DB-Connection"/>
</xs:keyref>
</xs:element>
<xs:element name="DataHistory-DB">
<xs:complexType>
<xs:sequence>
<xs:element ref="Cleanup-Timeframe" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="DB-Connection" type="xs:NCName" use="required"/>
<xs:attribute name="SearchForPhoneNumbers" type="xs:boolean" use="optional"/>
<xs:attribute name="SearchWithLike" type="xs:boolean" use="optional"/>
<xs:attribute name="DaysToCache" type="xs:positiveInteger" use="optional"/>
</xs:complexType>
<xs:keyref name="DataHistoryDbSqlConnectionRef" refer="DbConnectionId">
<xs:selector xpath="."/>
<xs:field xpath="@DB-Connection"/>
</xs:keyref>
</xs:element>
<xs:element name="ClientAgent">
<xs:complexType>
<xs:sequence>
<xs:element ref="Scan-Timing" maxOccurs="1" minOccurs="0"/>
<xs:element ref="Local-Account-Assignment" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="DB-Connection" type="xs:NCName" use="required"/>
<xs:attribute name="Server-Url" type="xs:anyURI" use="required"/>
<xs:attribute name="MaxDeviceAge" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="Organization" type="xs:string" use="required"/>
<xs:attribute name="Api-Credential" type="xs:NCName" use="required"/>
<xs:attribute name="Api-Path" type="xs:anyURI" use="optional"/>
</xs:complexType>
<xs:keyref name="ClientAgentDbSqlConnectionRef" refer="DbConnectionId">
<xs:selector xpath="."/>
<xs:field xpath="@DB-Connection"/>
</xs:keyref>
<xs:keyref name="ApiCredentialRef" refer="CredentialId">
<xs:selector xpath="."/>
<xs:field xpath="@Credential"/>
</xs:keyref>
</xs:element>
<xs:element name="Local-Account-Assignment">
<xs:complexType>
<xs:attribute name="Domain" type="xs:string" use="required"/>
<xs:attribute name="RegExFilter" type="xs:string" use="optional"/>
<xs:attribute name="AccountMask" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="Azure-AD">
<xs:complexType>
<xs:sequence>
<xs:element ref="Azure-Tenant" maxOccurs="unbounded" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="UniqueTenants">
<xs:selector xpath="./*"/>
<xs:field xpath="@Domain"/>
</xs:unique>
</xs:element>
<xs:element name="Azure-Tenant">
<xs:complexType>
<xs:sequence>
</xs:sequence>
<xs:attribute name="Domain" type="xs:string" use="required"/>
<xs:attribute name="TenantID" type="guid" use="required"/>
<xs:attribute name="Credential" type="xs:NCName" use="required"/>
<xs:attribute name="ScanIntuneDevices" type="xs:boolean" use="optional"/>
<xs:attribute name="WithMobileDevices" type="xs:boolean" use="optional"/>
</xs:complexType>
<xs:keyref name="AzureTenantCredentialRef" refer="CredentialId">
<xs:selector xpath="."/>
<xs:field xpath="@Credential"/>
</xs:keyref>
</xs:element>
<xs:element name="Citrix">
<xs:complexType>
<xs:sequence>
<xs:element ref="Scan-Timing" maxOccurs="1" minOccurs="0"/>
<xs:element ref="Citrix-Tenant" maxOccurs="unbounded" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="UniqueCitrixTenants">
<xs:selector xpath="./*"/>
<xs:field xpath="@Domain"/>
</xs:unique>
</xs:element>
<xs:element name="Citrix-Tenant">
<xs:complexType>
<xs:sequence>
</xs:sequence>
<xs:attribute name="Domain" type="xs:string" use="required"/>
<xs:attribute name="TenantID" type="xs:string" use="required"/>
<xs:attribute name="InstanceID" type="guid" use="required"/>
<xs:attribute name="Credential" type="xs:NCName" use="required"/>
</xs:complexType>
<xs:keyref name="CitrixTenantCredentialRef" refer="CredentialId">
<xs:selector xpath="."/>
<xs:field xpath="@Credential"/>
</xs:keyref>
</xs:element>
<xs:element name="Active-Directory">
<xs:complexType>
<xs:sequence>
<xs:element ref="Scan-Timing" maxOccurs="1" minOccurs="0"/>
<xs:element ref="AD-Domains" maxOccurs="unbounded" minOccurs="0"/>
<xs:element ref="AD-Scans" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="ScanPhoneNumbers" type="xs:boolean" use="optional"/>
</xs:complexType>
<xs:key name="AdDomainId">
<xs:selector xpath="./AD-Domains/*"/>
<xs:field xpath="@Name"/>
</xs:key>
</xs:element>
<xs:element name="Scan-Timing">
<xs:complexType>
<xs:attribute name="ScanInterval" type="HourMinuteType" use="required"/>
<xs:attribute name="ScanOffset" type="HourMinuteType" use="optional"/>
<xs:attribute name="Timezone" type="TimezoneType" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="Cleanup-Timeframe">
<xs:complexType>
<xs:attribute name="StartDay" type="DayTypeEnum" use="required"/>
<xs:attribute name="StartTime" type="HourMinuteType" use="required"/>
<xs:attribute name="StopDay" type="DayTypeEnum" use="optional"/>
<xs:attribute name="StopTime" type="HourMinuteType" use="required"/>
<xs:attribute name="Timezone" type="TimezoneType" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="AD-Domains">
<xs:complexType>
<xs:sequence>
<xs:element ref="AD-Domain" maxOccurs="unbounded" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="UniqueAdDomains">
<xs:selector xpath="./*"/>
<xs:field xpath="@Name"/>
</xs:unique>
</xs:element>
<xs:element name="AD-Domain">
<xs:complexType>
<xs:sequence>
<xs:element ref="AD-Server" maxOccurs="unbounded" minOccurs="1"/>
</xs:sequence>
<xs:attribute name="Name" type="xs:NCName" use="required"/>
<xs:attribute name="FQDN" type="xs:string" use="required"/>
<xs:attribute name="Credential" type="xs:NCName" use="required"/>
</xs:complexType>
<xs:unique name="UniqueAdServers">
<xs:selector xpath="./*"/>
<xs:field xpath="@FQDN"/>
</xs:unique>
<xs:keyref name="AdDomainCredentialRef" refer="CredentialId">
<xs:selector xpath="."/>
<xs:field xpath="@Credential"/>
</xs:keyref>
</xs:element>
<xs:element name="AD-Server">
<xs:complexType>
<xs:attribute name="FQDN" type="xs:string" use="required"/>
<xs:attribute name="UseSSL" type="BooleanTypeEnum" use="required"/>
<xs:attribute name="Port" type="xs:integer" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="AD-Scans">
<xs:complexType>
<xs:sequence>
<xs:element ref="AD-Scan" maxOccurs="unbounded" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="UniqueAdScans">
<xs:selector xpath="./*"/>
<xs:field xpath="@Name"/>
</xs:unique>
</xs:element>
<xs:element name="AD-Scan">
<xs:complexType>
<xs:sequence>
<xs:element ref="AD-Scan-Node" maxOccurs="unbounded" minOccurs="1"/>
</xs:sequence>
<xs:attribute name="Name" type="xs:NCName" use="optional"/>
<xs:attribute name="Type" type="AdScanTypeEnum" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="AD-Scan-Node">
<xs:complexType>
<xs:attribute name="AD-Domain" type="xs:NCName" use="required"/>
<xs:attribute name="Path" type="xs:string" use="required"/>
<xs:attribute name="LDAP-Filter" type="xs:string" use="optional"/>
<xs:attribute name="Filter-Property" type="LdapFilterProperyEnum" use="optional"/>
<xs:attribute name="Wildcard-Filter" type="xs:string" use="optional"/>
<xs:attribute name="RegEx-Filter" type="xs:string" use="optional"/>
</xs:complexType>
<xs:keyref name="AdScanNodeDomainRef" refer="AdDomainId">
<xs:selector xpath="."/>
<xs:field xpath="@AD-Domain"/>
</xs:keyref>
</xs:element>
<xs:element name="Nexthink">
<xs:complexType>
<xs:sequence>
<xs:element ref="Scan-Timing" maxOccurs="1" minOccurs="0"/>
<xs:element ref="Nxt-Portal" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Nxt-Portal">
<xs:complexType>
<xs:sequence>
<xs:element ref="Nxt-Engine" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Name" type="xs:NCName" use="required"/>
<xs:attribute name="Address" type="xs:string" use="required"/>
<xs:attribute name="Credential" type="xs:NCName" use="required"/>
<xs:attribute name="IsCloud" type="BooleanTypeEnum" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="Nxt-Engine">
<xs:complexType>
<xs:attribute name="Name" type="xs:NCName" use="required"/>
<xs:attribute name="Address" type="xs:string" use="required"/>
<xs:attribute name="Port" type="xs:nonNegativeInteger" use="optional"/>
</xs:complexType>
</xs:element>
<xs:simpleType name="ShowDocumentCaseDialogOptions">
<xs:restriction base="xs:string">
<xs:enumeration value="always">
<xs:annotation>
<xs:documentation>Immer fragen</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="ifRequired">
<xs:annotation>
<xs:documentation>Fragen, wenn QuickAction und/oder Notizen vorhanden sind (Standard)</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="never">
<xs:annotation>
<xs:documentation>Niemals fragen</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ActivityQueueFilterOptions">
<xs:restriction base="xs:string">
<xs:enumeration value="showAll">
<xs:annotation>
<xs:documentation>Alle anzeigen (Standard)</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="ticketsAndListedQueues">
<xs:annotation>
<xs:documentation>Alle Tickets / Incidents ohne Queue oder mit angegebener Queue</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="onlyListedQueues">
<xs:annotation>
<xs:documentation>Nur Tickets / Incidents mit angegebener Queue</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="onlyTickets">
<xs:annotation>
<xs:documentation>Nur Tickets / Incidents</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:element name="Matrix42-Ticket">
<xs:complexType>
<xs:attribute name="DisableAutomaticTimeTracking" type="xs:string" use="optional"/>
<xs:attribute name="ShowDocumentCaseDialog" type="ShowDocumentCaseDialogOptions" use="optional" default="ifRequired"/>
</xs:complexType>
</xs:element>
<xs:element name="Queues">
<xs:complexType>
<xs:sequence>
<xs:element ref="Queue" maxOccurs="unbounded" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Queue">
<xs:complexType>
<xs:attribute name="QueueName" type="xs:string" use="required"/>
<xs:attribute name="QueueID" type="guid" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="Matrix42-WPM">
<xs:complexType>
<xs:sequence>
<xs:element ref="Matrix42-Ticket" minOccurs="0" maxOccurs="1" />
<xs:element ref="DisplayName" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="Queues" maxOccurs="1" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Server" type="xs:string" use="required"/>
<xs:attribute name="Credential" type="xs:NCName" use="required"/>
<xs:attribute name="ClosedTicketHistory" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="DisplayName" type="xs:string" use="optional"/>
<xs:attribute name="ApiTokenLifetime" type="M42ApiTokenLifetime" use="optional"/>
<xs:attribute name="ActivityQueueFilter" type="ActivityQueueFilterOptions" use="optional" default="showAll"/>
</xs:complexType>
<xs:keyref name="M42WpmCredentialRef" refer="CredentialId">
<xs:selector xpath="."/>
<xs:field xpath="@Credential"/>
</xs:keyref>
</xs:element>
<xs:element name="Authorization">
<xs:complexType>
<xs:sequence>
<xs:element ref="Membership-Groups" maxOccurs="1" minOccurs="0"/>
<xs:element ref="Roles" maxOccurs="1" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Membership-Groups">
<xs:complexType>
<xs:sequence>
<xs:element ref="Membership-Groups-AD" maxOccurs="unbounded" minOccurs="0"/>
<xs:element ref="Membership-Groups-Matrix42" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Membership-Groups-AD">
<xs:complexType>
<xs:sequence>
<xs:element ref="Membership-Group-AD" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Domain" type="xs:NCName" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Membership-Group-AD">
<xs:complexType>
<xs:attribute name="Name" type="xs:NCName" use="required"/>
<xs:attribute name="Account" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Roles">
<xs:complexType>
<xs:sequence>
<xs:element ref="Role" maxOccurs="unbounded" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Role">
<xs:complexType>
<xs:sequence>
<xs:element ref="GroupRef" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Name" type="xs:NCName" use="required"/>
<xs:attribute name="Group" type="xs:NCName" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="GroupRef">
<xs:complexType>
<xs:attribute name="Name" type="xs:NCName" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Membership-Groups-Matrix42">
<xs:complexType>
<xs:sequence>
<xs:element ref="Membership-Group-Matrix42" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Membership-Group-Matrix42">
<xs:complexType>
<xs:attribute name="Name" type="xs:NCName" use="required"/>
<xs:attribute name="RoleName" type="xs:string" use="required"/>
<xs:attribute name="RoleID" type="guid" use="optional"/>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8" ?>
<F4SD-MenuSection-Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="F4SD-MenuSection-Configuration.xsd">
<Sections>
<Section TechName="Ticket" Name="Ticket" Description="Scripts dealing with tickets.">
<Name Lang="DE">Ticket</Name>
<Description Lang="DE">Skripte, die sich mit Tickets beschäftigen.</Description>
<Icon Name="ic_mail" IconType="material"/>
</Section>
<Section TechName="Favourites" Name="Favourites">
<Name Lang="DE">Favoriten</Name>
<Icon Name="ic_star" IconType="material"/>
</Section>
<Section TechName="Communication" Name="Communication" Description="Quick Actions dealing with communication.">
<Name Lang="DE">Kommunikation</Name>
<Description Lang="DE">Quick Actions, die mit Kommunikation zu tun haben</Description>
<Icon IconType="material" Name="ic_perm_phone_msg"/>
</Section>
<!-- <Section TechName="ActiveDirectory" Name="Active Directory" Description="Scripts dealing with the active directory.">
<Name Lang="DE">Active Directory</Name>
<Description Lang="DE">Skripte, die sich mit dem Active Directory beschäftigen.</Description>
<Icon Name="misc_user" IconType="intern"/>
</Section> -->
<Section TechName="FastBoot" Name="Fast boot options" Description="Scripts dealing with the windows fast boot option.">
<Name Lang="DE">Schnellstart Optionen</Name>
<Description Lang="DE">Skripte, die die Windows Schnellstart Option betreffen.</Description>
<Icon Name="ic_directions_run" IconType="material"/>
</Section>
<Section TechName="ClearCache" Name="Clear Cache" Description="Quick Actions for clearing cache.">
<Name Lang="DE">Cache leeren</Name>
<Description Lang="DE">Quick Actions um Caches zu leeren.</Description>
<Icon IconType="material" Name="ic_delete_sweep"/>
</Section>
<Section TechName="GetInfo" Name="Obtain information" Description="Obtain further information about the computer.">
<Name Lang="DE">Informationen einholen</Name>
<Description Lang="DE">Weitere Informationen über den Computer einholen.</Description>
<Icon IconType="material" Name="ic_add_to_photos"/>
</Section>
<Section TechName="Intune" Name="Intune">
<Name Lang="DE">Intune</Name>
<Icon IconType="material" Name="ic_assessment"/>
</Section>
<Section TechName="Citrix" Name="Citrix">
<Name Lang="DE">Citrix</Name>
<Icon IconType="material" Name="ic_assessment"/>
</Section>
<Section TechName="MobileDevice" Name="Mobil Device">
<Name Lang="DE">Mobil Geräte</Name>
<Icon IconType="material" Name="ic_assessment"/>
</Section>
<Section TechName="C4ITIntern" Name="C4IT internal" Description="Scripts for C4IT internal purposes.">
<Name Lang="DE">C4IT Intern</Name>
<Description Lang="DE">Skripte für den internen C4IT Gebrauch.</Description>
<Icon IconType="intern" Name="misc_tool" />
</Section>
<Section TechName="TestSection" Name="Test" Description="Scripts that need testing for release.">
<Name Lang="DE">Test</Name>
<Description Lang="DE">Skripte, die für das nächste Release getestet werden.</Description>
<Icon IconType="intern" Name="misc_tool"/>
</Section>
<Section TechName="Sandbox" Name="Quick Actions Sandbox" Description="Experimental scripts.">
<Name Lang="DE">Quick Actions Sandbox</Name>
<Description Lang="DE">Experimentelle Skripte.</Description>
<Icon IconType="intern" Name="misc_tool"/>
</Section>
</Sections>
</F4SD-MenuSection-Configuration>

View File

@@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:simpleType name="LanguageId">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]{2}" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="IconTypes">
<xs:restriction base="xs:NCName">
<xs:enumeration value="material" />
<xs:enumeration value="intern" />
<xs:enumeration value="byImage" />
</xs:restriction>
</xs:simpleType>
<xs:element name="F4SD-MenuSection-Configuration">
<xs:complexType>
<xs:sequence>
<xs:element ref="Sections" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Sections">
<xs:complexType>
<xs:sequence>
<xs:element ref="Section" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Section">
<xs:complexType>
<xs:sequence>
<xs:element ref="Name" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="Description" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="Icon" minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="TechName" type="xs:NCName" use="required" />
<xs:attribute name="Name" type="xs:string" use="optional" />
<xs:attribute name="Title" type="xs:string" use="optional" />
<xs:attribute name="Description" type="xs:string" use="optional" />
<!-- visibility controlling attributes -->
<xs:attribute name="Hidden" type="xs:boolean" use="optional" default="false"/>
<xs:attribute name="IsVisibleByParameter" type="xs:string" use="optional" />
<xs:attribute name="RequiredRoles" use="optional">
<xs:simpleType>
<xs:list itemType="xs:NCName" />
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:complexType name="MultiLanguageEntry">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Lang" type="LanguageId" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="Name">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="MultiLanguageEntry" />
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Description">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="MultiLanguageEntry" />
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Icon">
<xs:complexType>
<xs:attribute name="Name" type="xs:NCName" use="required" />
<xs:attribute name="IconType" type="IconTypes" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,664 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:simpleType name="guid">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="LanguageId">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]{2}" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="IconTypes">
<xs:restriction base="xs:NCName">
<xs:enumeration value="material" />
<xs:enumeration value="intern" />
<xs:enumeration value="byImage" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="InformationClass">
<xs:restriction base="xs:string">
<xs:enumeration value="Main" />
<xs:enumeration value="User" />
<xs:enumeration value="Computer" />
<xs:enumeration value="Ticket" />
<xs:enumeration value="VirtuelSession" />
<xs:enumeration value="MobileDevice" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="DisplayTypes">
<xs:restriction base="xs:NCName">
<xs:enumeration value="STRING" />
<xs:enumeration value="INTEGER" />
<xs:enumeration value="PERCENT" />
<xs:enumeration value="PERCENT100" />
<xs:enumeration value="TIME" />
<xs:enumeration value="DATE" />
<xs:enumeration value="DATETIME" />
<xs:enumeration value="DURATION_DAY" />
<xs:enumeration value="DURATION_HOUR" />
<xs:enumeration value="DURATION_MILLI" />
<xs:enumeration value="DURATION_DAY_SINCE_NOW" />
<xs:enumeration value="BITS_PERSECOND" />
<xs:enumeration value="BYTES" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Browsers">
<xs:restriction base="xs:string">
<xs:enumeration value="Default" />
<xs:enumeration value="Google Chrome" />
<xs:enumeration value="Internet Explorer" />
<xs:enumeration value="Microsoft Edge" />
<xs:enumeration value="Mozilla Firefox" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ResultTypes">
<xs:restriction base="xs:string">
<xs:enumeration value="Undefined" />
<xs:enumeration value="Information" />
<xs:enumeration value="Repair" />
<xs:enumeration value="ExternalApplication" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ExecutionTypes">
<xs:restriction base="xs:string">
<xs:enumeration value="Undefined" />
<xs:enumeration value="LocalScript" />
<xs:enumeration value="RemoteScript" />
<xs:enumeration value="ExternalApplication" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="StateLevels">
<xs:restriction base="xs:NCName">
<xs:enumeration value="None" />
<xs:enumeration value="Ok" />
<xs:enumeration value="Warning" />
<xs:enumeration value="Error" />
<xs:enumeration value="Info" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="QuickActionSuccess">
<xs:restriction base="xs:NCName">
<xs:enumeration value="finished" />
<xs:enumeration value="successfull" />
</xs:restriction>
</xs:simpleType>
<xs:element name="F4SD-QuickAction-Configuration">
<xs:complexType>
<xs:sequence>
<xs:element ref="Translations" minOccurs="0" maxOccurs="1" />
<xs:element ref="QuickActions" minOccurs="1" maxOccurs="1" />
<xs:element ref="QuickTips" minOccurs="0" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Translations">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element ref="Translator" minOccurs="0" maxOccurs="unbounded" />
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="Translator">
<xs:complexType>
<xs:sequence>
<xs:element ref="DefaultTranslation" minOccurs="0" maxOccurs="1" />
<xs:element ref="Translation" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="Name" type="xs:NCName" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="DefaultTranslation">
<xs:complexType>
<xs:sequence>
<xs:element ref="Name" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="Name" type="xs:string" use="required" />
<xs:attribute name="StateLevel" type="StateLevels" use="optional" default="None" />
</xs:complexType>
</xs:element>
<xs:element name="Translation">
<xs:complexType>
<xs:sequence>
<xs:element ref="Name" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="Value" minOccurs="0" maxOccurs="unbounded">
<xs:simpleType>
<xs:restriction base="xs:string" />
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute name="Name" type="xs:string" use="required" />
<xs:attribute name="StateLevel" type="StateLevels" use="optional" default="None" />
</xs:complexType>
</xs:element>
<xs:element name="QuickActions">
<xs:complexType>
<xs:sequence>
<xs:element ref="QuickAction" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="QuickAction" abstract="true" />
<xs:complexType name="QuickAction" abstract="true">
<xs:sequence>
<xs:element ref="Name" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="Section" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="Description" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="AlternativeDescription" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="Icon" minOccurs="0" maxOccurs="1"/>
<xs:element ref="CheckNamedParameterValues" minOccurs="0" maxOccurs="1" />
<xs:element ref="AdjustableParameters" minOccurs="0" maxOccurs="1"/>
<xs:element ref="ColumnOutputFormattings" minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="Id" type="guid" use="optional" />
<xs:attribute name="Name" type="xs:string" use="required"/>
<xs:attribute name="InformationClass" use="required">
<xs:simpleType>
<xs:list itemType="InformationClass" />
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Description" type="xs:string" use="optional" />
<xs:attribute name="Section" type="xs:NCName" use="optional" />
<xs:attribute name="Params" type="xs:string" use="optional" />
<xs:attribute name="CheckNamedParameter" type="xs:NCName" use="optional" />
<xs:attribute name="CheckFilePath" type="xs:string" use="optional" />
<xs:attribute name="CheckRegistryEntry" type="xs:string" use="optional" />
<xs:attribute name="RunImmediate" type="xs:boolean" use="optional" />
<xs:attribute name="ExecutionType" type="ExecutionTypes" use="optional" default="Undefined" />
<xs:attribute name="ResultType" type="ResultTypes" use="optional" default="Undefined" />
<!-- visibility controlling attributes -->
<xs:attribute name="Hidden" type="xs:boolean" use="optional" default="false"/>
<xs:attribute name="IsVisibleByParameter" type="xs:string" use="optional" />
<xs:attribute name="RequiredRoles" use="optional">
<xs:simpleType>
<xs:list itemType="xs:NCName" />
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="QuickAction-Local" abstract="true">
<xs:complexContent>
<xs:extension base="QuickAction">
<xs:attribute name="RequireAdministrator" use="optional" />
<xs:attribute name="StartWithAlternateCredentials" type="xs:boolean" use="optional" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="QuickAction-Local-Script" substitutionGroup="QuickAction">
<xs:complexType>
<xs:complexContent>
<xs:extension base="QuickAction-Local">
<xs:sequence>
<xs:element ref="Script" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="QuickAction-Local-Cmd" substitutionGroup="QuickAction">
<xs:complexType>
<xs:complexContent>
<xs:extension base="QuickAction-Local">
<xs:attribute name="Cmd" type="xs:string" use="required" />
<xs:attribute name="DontUseShell" type="xs:boolean" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="QuickAction-Local-WebRequest" substitutionGroup="QuickAction">
<xs:complexType>
<xs:complexContent>
<xs:extension base="QuickAction-Local">
<xs:sequence>
<xs:element ref="QueryString" minOccurs="1" maxOccurs="1"/>
<xs:element ref="QueryParameter" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="Browser" type="Browsers" use="optional" default="Default" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="QuickAction-Server" substitutionGroup="QuickAction">
<xs:complexType>
<xs:complexContent>
<xs:extension base="QuickAction-Remote">
<xs:attribute name="Category" use="optional" />
<xs:attribute name="Action" use="optional" />
<xs:attribute name="ParamaterType" use="optional" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="QuickActionMeasure">
<xs:complexType>
<xs:sequence>
<xs:element ref="Name" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="Name" type="xs:string" use="required" />
<xs:attribute name="MeasureId" type="xs:int" use="required" />
<xs:attribute name="Display" type="DisplayTypes" use="optional" default="STRING" />
</xs:complexType>
</xs:element>
<xs:element name="QuickActionMeasures">
<xs:complexType>
<xs:sequence>
<xs:element ref="QuickActionMeasure" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="QuickActionMeasureResult">
<xs:complexType>
<xs:attribute name="Id" type="xs:positiveInteger" use="required" />
<xs:attribute name="Value" type="xs:string" use="required" />
<xs:attribute name="PostValue" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="QuickActionMeasureResults">
<xs:complexType>
<xs:sequence>
<xs:element ref="QuickActionMeasureResult" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="QuickAction-Demo" substitutionGroup="QuickAction">
<xs:complexType>
<xs:complexContent>
<xs:extension base="QuickAction">
<xs:sequence>
<xs:element ref="DemoResult" minOccurs="0" maxOccurs="1"/>
<xs:element ref="QuickActionMeasures" minOccurs="0" maxOccurs="1" />
<xs:element ref="QuickActionMeasureResults" minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="SimulatedClientConnect" type="xs:nonNegativeInteger" use="optional" />
<xs:attribute name="SimulatedRuntime" type="xs:nonNegativeInteger" use="optional" />
<xs:attribute name="Type" type="ExecutionTypes" use="optional" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="DemoResult">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Result" type="QuickActionSuccess" use="optional" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="QueryString">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="ParameterName" type="xs:NCName" use="optional" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="QueryParameter">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Name" type="xs:string" use="required"/>
<xs:attribute name="ParameterName" type="xs:NCName" use="optional" />
<xs:attribute name="ValueRequired" type="xs:boolean" use="optional" default="false" />
<xs:attribute name="UseHtmlValue" type="xs:boolean" use="optional" default="false" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:complexType name="QuickAction-Remote" abstract="true">
<xs:complexContent>
<xs:extension base="QuickAction">
<xs:sequence>
<xs:element ref="QuickActionMeasures" minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="ScriptId" use="optional" />
<xs:attribute name="ScriptName" use="optional" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="QuickAction-Remote-User" substitutionGroup="QuickAction">
<xs:complexType>
<xs:complexContent>
<xs:extension base="QuickAction-Remote">
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="QuickAction-Remote-Computer" substitutionGroup="QuickAction">
<xs:complexType>
<xs:complexContent>
<xs:extension base="QuickAction-Remote">
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="QuickAction-Chained" substitutionGroup="QuickAction">
<xs:complexType>
<xs:complexContent>
<xs:extension base="QuickAction">
<xs:sequence>
<xs:element ref="QuickAction-Reference" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="QuickAction-Reference">
<xs:complexType>
<xs:attribute name="Name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:complexType name="MultiLanguageEntry">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Lang" type="LanguageId" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="Name">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="MultiLanguageEntry" />
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Section">
<xs:simpleType>
<xs:restriction base="xs:NCName" />
</xs:simpleType>
</xs:element>
<xs:element name="Description">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="MultiLanguageEntry" />
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="AlternativeDescription">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="MultiLanguageEntry" />
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Script">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="IsBase64" type="xs:boolean" use="optional" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Icon">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="IconType" type="IconTypes" use="required" />
<xs:attribute name="Name" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="CheckNamedParameterValues">
<xs:complexType>
<xs:sequence>
<xs:element ref="CheckNamedParameterValue" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CheckNamedParameterValue">
<xs:simpleType>
<xs:restriction base="xs:string" />
</xs:simpleType>
</xs:element>
<xs:element name="AdjustableParameters">
<xs:complexType>
<xs:sequence>
<xs:element ref="AdjustableParameter" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="AdjustableParameter" abstract="true" />
<xs:complexType name="AdjustableParameter" abstract="true">
<xs:sequence>
<xs:element ref="Name" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="Description" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="Name" type="xs:string" use="required"/>
<xs:attribute name="ParameterName" type="xs:NCName" use="required" />
<xs:attribute name="IsOptional" type="xs:boolean" use="optional" default="false" />
</xs:complexType>
<xs:element name="AdjustableParameter-Boolean" substitutionGroup="AdjustableParameter">
<xs:complexType>
<xs:complexContent>
<xs:extension base="AdjustableParameter">
<xs:attribute name="Default" type="xs:boolean" use="optional" default="false" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="AdjustableParameter-Numerical" substitutionGroup="AdjustableParameter">
<xs:complexType>
<xs:complexContent>
<xs:extension base="AdjustableParameter">
<xs:attribute name="Default" type="xs:double" use="optional" default="0" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="AdjustableParameter-DropDown" substitutionGroup="AdjustableParameter">
<xs:complexType>
<xs:complexContent>
<xs:extension base="AdjustableParameter">
<xs:sequence>
<xs:element ref="AdjustableParameter-DropDownValue" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="Default" type="xs:string" use="optional" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="AdjustableParameter-DropDownValue">
<xs:complexType>
<xs:sequence>
<xs:element ref="AdjustableParameter-DropDownDisplayValue" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="Value" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="AdjustableParameter-DropDownDisplayValue">
<xs:complexType>
<xs:complexContent>
<xs:extension base="MultiLanguageEntry" />
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="ColumnOutputFormattings">
<xs:complexType>
<xs:sequence>
<xs:element ref="ColumnOutputFormatting" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="ShowAllOutputContent" type="xs:boolean" use="optional" default="false" />
</xs:complexType>
</xs:element>
<xs:element name="ColumnOutputFormatting">
<xs:complexType>
<xs:sequence>
<xs:element ref="Name" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="ValueName" type="xs:NCName" use="required" />
<xs:attribute name="Name" type="xs:string" use="optional" />
<xs:attribute name="Translation" type="xs:NCName" use="optional" />
<xs:attribute name="Display" type="DisplayTypes" use="optional" />
<xs:attribute name="Hidden" type="xs:boolean" use="optional" default="false" />
<xs:attribute name="IsSecret" type="xs:boolean" use="optional" default="false" />
</xs:complexType>
</xs:element>
<xs:element name="QuickTips">
<xs:complexType>
<xs:sequence>
<xs:element ref="QuickTip" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="QuickTip">
<xs:complexType>
<xs:sequence>
<xs:element ref="Name" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="Section" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="Description" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="AlternativeDescription" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="Icon" minOccurs="0" maxOccurs="1" />
<xs:element ref="QuickTipElements" minOccurs="1" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="Id" type="guid" use="optional" />
<xs:attribute name="Name" type="xs:string" use="required" />
<xs:attribute name="Description" type="xs:string" use="optional" />
<xs:attribute name="Section" type="xs:NCName" use="optional" />
<xs:attribute name="FixedSequence" type="xs:boolean" use="optional" />
<xs:attribute name="InformationClass" use="required">
<xs:simpleType>
<xs:list itemType="InformationClass" />
</xs:simpleType>
</xs:attribute>
<!-- visibility controlling attributes -->
<xs:attribute name="Hidden" type="xs:boolean" use="optional" default="false"/>
<xs:attribute name="IsVisibleByParameter" type="xs:string" use="optional" />
<xs:attribute name="RequiredRoles" use="optional">
<xs:simpleType>
<xs:list itemType="xs:NCName" />
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="QuickTipElements">
<xs:complexType>
<xs:sequence>
<xs:element ref="QuickTipElement" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="QuickTipElement" abstract="true" />
<xs:complexType name="QuickTipElement" abstract="true">
<xs:sequence>
<xs:element ref="Name" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="TextBlock" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="Name" type="xs:string" use="required" />
<xs:attribute name="IsRequired" type="xs:boolean" use="optional" />
</xs:complexType>
<xs:element name="TextBlock">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="MultiLanguageEntry" />
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="TextElement" substitutionGroup="QuickTipElement">
<xs:complexType>
<xs:complexContent>
<xs:extension base="QuickTipElement" />
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="ManualStep" substitutionGroup="QuickTipElement">
<xs:complexType>
<xs:complexContent>
<xs:extension base="QuickTipElement">
<xs:sequence>
<xs:element ref="Icon" minOccurs="0" maxOccurs="1" />
<xs:element ref="Summary" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="Summary">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="MultiLanguageEntry" />
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="AutomatedStep" substitutionGroup="QuickTipElement">
<xs:complexType>
<xs:complexContent>
<xs:extension base="QuickTipElement">
<xs:attribute name="QuickAction" type="xs:string" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:simpleType name="LanguageId">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]{2}|[.]" />
</xs:restriction>
</xs:simpleType>
<xs:element name="UILanguage">
<xs:complexType>
<xs:sequence>
<xs:element ref="UIImage" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="UISubstitution" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="UIItem" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="UIImage">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Lang" type="LanguageId" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="UISubstitution">
<xs:complexType>
<xs:sequence>
<xs:element ref="Language" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="Lang" type="LanguageId" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="UIItem">
<xs:complexType>
<xs:sequence>
<xs:element ref="Language" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="Name" type="xs:NCName" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Language">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Lang" type="LanguageId" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,340 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{5F839FF6-3EBC-438F-8775-7F6A25402E66}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>C4IT_DataHistoryProvider_Test</RootNamespace>
<AssemblyName>F4SD-Cockpit-Collector</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>false</Deterministic>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release-Demo|AnyCPU'">
<OutputPath>bin\Release-Demo\</OutputPath>
<DefineConstants>TRACE;DEMOLICENSE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-Demo|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug-Demo\</OutputPath>
<DefineConstants>TRACE;DEBUG;DEMOLICENSE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>logo_FASD.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<PlatformTarget>x64</PlatformTarget>
<OutputPath>bin\x64\Debug\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<PlatformTarget>x64</PlatformTarget>
<OutputPath>bin\x64\Release\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release-Demo|x64'">
<PlatformTarget>x64</PlatformTarget>
<OutputPath>bin\x64\Release-Demo\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-Demo|x64'">
<PlatformTarget>x64</PlatformTarget>
<OutputPath>bin\x64\Debug-Demo\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<PlatformTarget>x86</PlatformTarget>
<OutputPath>bin\x86\Debug\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<PlatformTarget>x86</PlatformTarget>
<OutputPath>bin\x86\Release\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release-Demo|x86'">
<PlatformTarget>x86</PlatformTarget>
<OutputPath>bin\x86\Release-Demo\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-Demo|x86'">
<PlatformTarget>x86</PlatformTarget>
<OutputPath>bin\x86\Debug-Demo\</OutputPath>
</PropertyGroup>
<PropertyGroup />
<PropertyGroup>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\CommonAssemblyInfo.cs">
<Link>Properties\CommonAssemblyInfo.cs</Link>
</Compile>
<Compile Include="ctrlActiveDirectory.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ctrlActiveDirectory.Designer.cs">
<DependentUpon>ctrlActiveDirectory.cs</DependentUpon>
</Compile>
<Compile Include="ctrlCleanup.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ctrlCleanup.Designer.cs">
<DependentUpon>ctrlCleanup.cs</DependentUpon>
</Compile>
<Compile Include="ctrlClientAgent.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ctrlClientAgent.Designer.cs">
<DependentUpon>ctrlClientAgent.cs</DependentUpon>
</Compile>
<Compile Include="ctrlM42Wpm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ctrlM42Wpm.Designer.cs">
<DependentUpon>ctrlM42Wpm.cs</DependentUpon>
</Compile>
<Compile Include="ctrlMainFunction.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ctrlMainFunction.Designer.cs">
<DependentUpon>ctrlMainFunction.cs</DependentUpon>
</Compile>
<Compile Include="ctrlNexthink.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ctrlNexthink.Designer.cs">
<DependentUpon>ctrlNexthink.cs</DependentUpon>
</Compile>
<Compile Include="ctrlProtocolBox.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ctrlProtocolBox.Designer.cs">
<DependentUpon>ctrlProtocolBox.cs</DependentUpon>
</Compile>
<Compile Include="ctrlF4SDAnalytics.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ctrlF4SDAnalytics.Designer.cs">
<DependentUpon>ctrlF4SDAnalytics.cs</DependentUpon>
</Compile>
<Compile Include="ctrlTestFunctions.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ctrlTestFunctions.Designer.cs">
<DependentUpon>ctrlTestFunctions.cs</DependentUpon>
</Compile>
<Compile Include="frmMain2.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmMain2.Designer.cs">
<DependentUpon>frmMain2.cs</DependentUpon>
</Compile>
<Compile Include="frmPasssword.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmPasssword.Designer.cs">
<DependentUpon>frmPasssword.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ctrlCitrix.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ctrlCitrix.Designer.cs">
<DependentUpon>ctrlCitrix.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="ctrlActiveDirectory.resx">
<DependentUpon>ctrlActiveDirectory.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ctrlCleanup.resx">
<DependentUpon>ctrlCleanup.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ctrlClientAgent.resx">
<DependentUpon>ctrlClientAgent.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="ctrlM42Wpm.resx">
<DependentUpon>ctrlM42Wpm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ctrlMainFunction.resx">
<DependentUpon>ctrlMainFunction.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ctrlNexthink.resx">
<DependentUpon>ctrlNexthink.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ctrlProtocolBox.resx">
<DependentUpon>ctrlProtocolBox.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ctrlF4SDAnalytics.resx">
<DependentUpon>ctrlF4SDAnalytics.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ctrlTestFunctions.resx">
<DependentUpon>ctrlTestFunctions.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="frmMain2.resx">
<DependentUpon>frmMain2.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="frmPasssword.resx">
<DependentUpon>frmPasssword.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<EmbeddedResource Include="Config\F4SD-Infrastructure-Configuration.xsd">
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="..\..\C4IT FASD\_Common\XmlSchemas\F4SD-CopyTemplate-Configuration.xsd">
<Link>Config\F4SD-CopyTemplate-Configuration.xsd</Link>
<SubType>Designer</SubType>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="..\..\C4IT FASD\_Common\XmlSchemas\F4SD-HealthCard-Configuration.xsd">
<Link>Config\F4SD-HealthCard-Configuration.xsd</Link>
<SubType>Designer</SubType>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="..\..\C4IT FASD\_Common\XmlSchemas\F4SD-Icon-Configuration.xsd">
<Link>Config\F4SD-Icon-Configuration.xsd</Link>
<SubType>Designer</SubType>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="..\..\C4IT FASD\_Common\XmlSchemas\F4SD-MenuSection-Configuration.xsd">
<Link>Config\F4SD-MenuSection-Configuration.xsd</Link>
<SubType>Designer</SubType>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="..\..\C4IT FASD\_Common\XmlSchemas\F4SD-QuickAction-Configuration.xsd">
<Link>Config\F4SD-QuickAction-Configuration.xsd</Link>
<SubType>Designer</SubType>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="ctrlCitrix.resx">
<DependentUpon>ctrlCitrix.cs</DependentUpon>
</EmbeddedResource>
<None Include="app.manifest" />
<EmbeddedResource Include="Config\F4SD-Global-Configuration.xsd">
<SubType>Designer</SubType>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<EmbeddedResource Include="Config\F4SD-DataClusters-Configuration.xsd">
<SubType>Designer</SubType>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include="Config\F4SD-CopyTemplate-Configuration.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Config\F4SD-DataClusters-Configuration.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Config\F4SD-Global-Configuration.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Config\F4SD-HealthCard-Configuration.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Config\F4SD-Icon-Configuration.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Config\F4SD-Infrastructure-Configuration.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Config\F4SD-MenuSection-Configuration.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Config\F4SD-QuickAction-Configuration.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Graphics\Error_24.png" />
<Content Include="Graphics\OK_24.png" />
<Content Include="Graphics\Warning_24.png" />
<Content Include="License\F4SD_License.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="logo_FASD.ico" />
<None Include="Resources\Intrinsic_F4SD_License.xml" />
<EmbeddedResource Include="DataHistorySql.xml" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\C4IT_DataHistoryProvider_Base\F4SD-Cockpit-Server.csproj">
<Project>{49452fc2-05ce-4077-8b40-8adf5eca212e}</Project>
<Name>F4SD-Cockpit-Server</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PreBuildEvent>
copy "$(ProjectDir)..\..\C4IT FASD\_Common\XmlSchemas\*" "$(ProjectDir)Config"
</PreBuildEvent>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,10 @@
""
{
"FILE_VERSION" = "9237"
"ENLISTMENT_CHOICE" = "NEVER"
"PROJECT_FILE_RELATIVE_PATH" = ""
"NUMBER_OF_EXCLUDED_FILES" = "0"
"ORIGINAL_PROJECT_FILE_PATH" = ""
"NUMBER_OF_NESTED_PROJECTS" = "0"
"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 677 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 758 B

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<C4IT-License-Info Product="First Aid Service Desk (F4SD)" Id="776D99A6-D341-4B70-BA4B-2CC55B76A079">
<License Id="FAE53860-0AE2-4A15-A5D5-7E56D4D29FDE" Revision="1.0" Type="PRODUCTIVE" Customer="Consulting4IT" CustomerId="A3A5E66E-6A91-44E2-9F3A-F04C67642BCB" StartDate="2024-12-01" EndDate="2025-12-31" Signature="SeNeSrKAq/rnvCVui7TMBHkTS4AnygizDBNdLe1w7EdMGaQ2xxTvOcsOrshwqznK/shgGvxofdux0YWV3XyxWeeGwfKqjPobWOnKhp5v3xfeVk+59dx29Yn3/4j+vcJrs8kBhOrZEAkeAHojFVZYsO/SbqWoOcqP5fDw673gjW8=">
<License-Metrics Type="ManagedUsers" Count="10000" />
<Modules>
<Module Name="F4SD client agent connector" Id="F8A3284C-E481-4D08-A921-949D2EBD4E0B" />
<Module Name="MS Active Directory connector" Id="B2D48023-56E8-44D5-AB77-BE1DCF4EA4EB" />
<Module Name="Matrix42 WPM conntector" Id="9CE1A6BE-6A0C-4A27-94A5-44AB997B8E62" />
<Module Name="Nexthink NXQL conntector" Id="51EA7764-3AD3-4F90-89DB-DEB0C60D655C" />
</Modules>
</License>
</C4IT-License-Info>

View File

@@ -0,0 +1,112 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;
using C4IT.Security;
using C4IT.Logging;
using C4IT.DataHistoryProvider;
using C4IT.FASD.Security;
using C4IT.FASD.Licensing;
using System.Reflection;
using static C4IT.Logging.cLogManager;
using System.IO;
namespace C4IT_DataHistoryProvider_Test
{
static class Program
{
public static frmMain2 mainForm;
public static cDataHistoryCollector Collector = null;
public static List<cDataHistoryInfoClassListEntry> UserList = null;
static public Mutex AppMutex = null;
[STAThread]
static void Main(string[] args)
{
// initialize the logging
var LM = cLogManagerFile.Create(true, SubFolder: "Logs", DebugFlags: new List<string>() { "Performance", "ApiTiming" });
cLogManager.DefaultLogger = LM.GetLogger();
cLogManager.Instance = LM;
cLogManager.DefaultLogger.LogAssemblyInfo();
if (LM.CheckDebugFlag("Performance"))
{
var FN = LM.GetLogFileName();
var FN2 = Path.Combine(Path.GetDirectoryName(FN), Path.GetFileNameWithoutExtension(FN) + "-Perf.log");
cPerformanceLogger.SetManager(cLogManagerFile.Create(FN2));
}
DataHistorySqlHelper.LogSql = LM.CheckDebugFlag("ApiTiming");
if (DataHistorySqlHelper.LogSql)
DataHistorySqlHelper.SqlLogFileName = DataHistorySqlHelper.GetSqlLogFileName();
// initialize the password securitiy
FasdSecurity.Init();
// check this program is already started
Assembly assembly = Assembly.GetExecutingAssembly();
var ProductName = FileVersionInfo.GetVersionInfo(assembly.Location).ProductName;
var attribute = (GuidAttribute)assembly.GetCustomAttributes(typeof(GuidAttribute), true)[0];
var AssemblyGuid = attribute.Value;
string MutexName = "Global\\" + ProductName + AssemblyGuid.ToString();
try
{
AppMutex = new Mutex(false, MutexName);
if (!AppMutex.WaitOne(0))
{
LogEntry("Application already started, exiting...", LogLevels.Info);
AppMutex.Dispose();
AppMutex = null;
return;
}
}
catch (Exception E)
{
LogEntry("Cannot create application mutex, exiting...", LogLevels.Fatal);
LogException(E);
return;
}
// get the commandline command
string Command = "";
if ((args.Length > 0))
Command = args[0].ToUpper();
if (Command.StartsWith("/") || Command.StartsWith("-"))
Command = Command.Remove(0, 1);
// get the license file
#if DEMOLICENSE
var strLicPath = cF4SDLicense.GetProgramFolderLocation(Assembly.GetExecutingAssembly(), "..", "F4SD_License.xml");
cF4SDLicense.Instance.LoadFromFile(strLicPath, false);
if (!cF4SDLicense.Instance.IsValid)
{
cLogManager.DefaultLogger.LogEntry(LogLevels.Fatal, $"No valid license found, aborting...");
return;
}
#endif
// start the application
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
switch (Command)
{
case "PASSWORD":
Application.Run(new frmPassword());
break;
default:
mainForm = new frmMain2(Command == "COLLECT");
Application.Run(mainForm);
break;
}
}
}
}

View File

@@ -0,0 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("F4SD Cockpit Collector")]
[assembly: ComVisible(false)]
[assembly: Guid("5f839ff6-3ebc-438f-8775-7f6a25402e66")]

View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace C4IT_DataHistoryProvider_Test.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("C4IT_DataHistoryProvider_Test.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace C4IT_DataHistoryProvider_Test.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<C4IT-License-Info Product="First Aid Service Desk (F4SD)" Id="776D99A6-D341-4B70-BA4B-2CC55B76A079">
<License Id="38EF5CD9-98E9-4B5B-B7EA-7BE6CBC2C883" Revision="1.0" Type="PRODUCTIVE" Customer="Intrinsic F4SD License" CustomerId="BF0B090F-EC5E-4F37-ADD2-3C8EA53BB1D5" Signature="l0pt5WlsKNdjXv5L7+V2uoz6r2NVgxRXM7Z4wOMEgR19T4xgpjKa4IZbQz45W4gVP9ZVSwipwz6AqskWEgZ7/s5IHXgDDb0l7rfHlAzcJuHEBW1T9iwCD8Huwc7ZhUds/OEg3r1iVlQCO0sy279lcA07d66j09mNhE2EP8rYF7c=">
<License-Metrics Type="ManagedUsers" Count="10000" />
<Modules>
<Module Name="F4SD client agent connector" Id="F8A3284C-E481-4D08-A921-949D2EBD4E0B" />
<Module Name="MS Active Directory connector" Id="B2D48023-56E8-44D5-AB77-BE1DCF4EA4EB" />
</Modules>
</License>
</C4IT-License-Info>

View File

@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel element will disable file and registry virtualization.
Remove this element if your application requires this virtualization for backwards
compatibility.
-->
<!--<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />-->
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of the Windows versions that this application has been tested on
and is designed to work with. Uncomment the appropriate elements
and Windows will automatically select the most compatible environment. -->
<!-- Windows Vista -->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
<!-- Windows 7 -->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
<!-- Windows 8 -->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
<!-- Windows 8.1 -->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
<!-- Windows 10 -->
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
</application>
</compatibility>
<!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need
to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should
also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config.
Makes the application long-path aware. See https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation -->
<!--
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
</application>
-->
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!--
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
-->
</assembly>

View File

@@ -0,0 +1,163 @@

namespace C4IT_DataHistoryProvider_Test
{
partial class ctrlActiveDirectory
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.buttonScanAD = new System.Windows.Forms.Button();
this.buttonRescan = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.textBoxScanLast = new System.Windows.Forms.TextBox();
this.textBoxScanNext = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.panelScanNext = new System.Windows.Forms.Panel();
this.buttonScanAzureAd = new System.Windows.Forms.Button();
this.ctrlProtocolBox1 = new C4IT_DataHistoryProvider_Test.ctrlProtocolBox();
this.SuspendLayout();
//
// buttonScanAD
//
this.buttonScanAD.Location = new System.Drawing.Point(24, 18);
this.buttonScanAD.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.buttonScanAD.Name = "buttonScanAD";
this.buttonScanAD.Size = new System.Drawing.Size(157, 51);
this.buttonScanAD.TabIndex = 0;
this.buttonScanAD.Text = "Scan Active Directory";
this.buttonScanAD.UseVisualStyleBackColor = true;
this.buttonScanAD.Click += new System.EventHandler(this.buttonScanAD_Click);
//
// buttonRescan
//
this.buttonRescan.Location = new System.Drawing.Point(189, 18);
this.buttonRescan.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.buttonRescan.Name = "buttonRescan";
this.buttonRescan.Size = new System.Drawing.Size(157, 51);
this.buttonRescan.TabIndex = 1;
this.buttonRescan.Text = "Full scan";
this.buttonRescan.UseVisualStyleBackColor = true;
this.buttonRescan.Click += new System.EventHandler(this.buttonRescan_Click);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(22, 110);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(67, 16);
this.label1.TabIndex = 4;
this.label1.Text = "Last scan:";
//
// textBoxScanLast
//
this.textBoxScanLast.Location = new System.Drawing.Point(110, 107);
this.textBoxScanLast.Name = "textBoxScanLast";
this.textBoxScanLast.ReadOnly = true;
this.textBoxScanLast.Size = new System.Drawing.Size(141, 22);
this.textBoxScanLast.TabIndex = 5;
//
// textBoxScanNext
//
this.textBoxScanNext.Location = new System.Drawing.Point(393, 107);
this.textBoxScanNext.Name = "textBoxScanNext";
this.textBoxScanNext.ReadOnly = true;
this.textBoxScanNext.Size = new System.Drawing.Size(141, 22);
this.textBoxScanNext.TabIndex = 7;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(294, 110);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(78, 16);
this.label2.TabIndex = 6;
this.label2.Text = "Target time:";
//
// panelScanNext
//
this.panelScanNext.Location = new System.Drawing.Point(540, 107);
this.panelScanNext.Name = "panelScanNext";
this.panelScanNext.Size = new System.Drawing.Size(26, 26);
this.panelScanNext.TabIndex = 8;
//
// buttonScanAzureAd
//
this.buttonScanAzureAd.Location = new System.Drawing.Point(393, 18);
this.buttonScanAzureAd.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.buttonScanAzureAd.Name = "buttonScanAzureAd";
this.buttonScanAzureAd.Size = new System.Drawing.Size(157, 51);
this.buttonScanAzureAd.TabIndex = 3;
this.buttonScanAzureAd.Text = "Scan Azure AD only";
this.buttonScanAzureAd.UseVisualStyleBackColor = true;
this.buttonScanAzureAd.Visible = false;
this.buttonScanAzureAd.Click += new System.EventHandler(this.buttonScanAzureAd_Click);
//
// ctrlProtocolBox1
//
this.ctrlProtocolBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.ctrlProtocolBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.ctrlProtocolBox1.Location = new System.Drawing.Point(14, 148);
this.ctrlProtocolBox1.Margin = new System.Windows.Forms.Padding(2);
this.ctrlProtocolBox1.Name = "ctrlProtocolBox1";
this.ctrlProtocolBox1.Size = new System.Drawing.Size(1103, 195);
this.ctrlProtocolBox1.TabIndex = 9;
//
// ctrlActiveDirectory
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.Controls.Add(this.buttonScanAzureAd);
this.Controls.Add(this.panelScanNext);
this.Controls.Add(this.textBoxScanNext);
this.Controls.Add(this.label2);
this.Controls.Add(this.textBoxScanLast);
this.Controls.Add(this.label1);
this.Controls.Add(this.buttonRescan);
this.Controls.Add(this.buttonScanAD);
this.Controls.Add(this.ctrlProtocolBox1);
this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.Name = "ctrlActiveDirectory";
this.Size = new System.Drawing.Size(962, 331);
this.Load += new System.EventHandler(this.ctrlActiveDirectory_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button buttonScanAD;
private System.Windows.Forms.Button buttonRescan;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox textBoxScanLast;
private System.Windows.Forms.TextBox textBoxScanNext;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Panel panelScanNext;
private ctrlProtocolBox ctrlProtocolBox1;
private System.Windows.Forms.Button buttonScanAzureAd;
}
}

View File

@@ -0,0 +1,265 @@
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 static C4IT.Logging.cLogManager;
using C4IT.MsGraph;
using Newtonsoft.Json.Linq;
using System.Collections.ObjectModel;
namespace C4IT_DataHistoryProvider_Test
{
public partial class ctrlActiveDirectory : UserControl
{
public ctrlActiveDirectory()
{
InitializeComponent();
}
private async void ctrlActiveDirectory_Load(object sender, EventArgs e)
{
panelScanNext.Height = textBoxScanNext.Height;
panelScanNext.Top = textBoxScanNext.Top;
if (Program.Collector?.InfrastructureConfig?.AzureTenants != null && Program.Collector?.InfrastructureConfig?.AzureTenants.Count > 0)
{
buttonScanAzureAd.Visible = true;
}
if (Program.Collector?.InfrastructureConfig?.AzureTenants != null && Program.Collector?.InfrastructureConfig?.AzureTenants.Count > 0)
{
buttonScanAzureAd.Visible = true;
}
var _requestInfo = new cF4sdWebRequestInfo("ctrlActiveDirectory_Load", null);
await checkScanTimesAsync(_requestInfo,1);
}
private async Task checkScanTimesAsync(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
{
var Col = Color.Transparent;
textBoxScanLast.Text = "";
textBoxScanNext.Text = "";
if (Program.Collector?.ActiveDirectory != null)
{
var scanInfo = await Program.Collector.ActiveDirectory.GetScanTimeInfoAsync(requestInfo, LogDeep+1, CancellationToken.None);
if (scanInfo?.NextScan is DateTime nextScan)
{
textBoxScanNext.Text = nextScan.ToLocalTime().ToString();
if (scanInfo?.LastScan is DateTime lastScan)
{
textBoxScanLast.Text = lastScan.ToLocalTime().ToString();
if (nextScan >= lastScan)
Col = Color.Red;
else
Col = Color.Green;
}
else
Col = Color.Red;
}
else
{
Col = Color.Red;
if (scanInfo?.LastScan is DateTime lastScan)
textBoxScanLast.Text = lastScan.ToLocalTime().ToString();
}
}
panelScanNext.BackColor = Col;
}
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);
}
}
private async Task DoScan(bool Rescan, cF4sdWebRequestInfo requestInfo, int LogDeep)
{
if (Program.Collector == null || Program.Collector.ActiveDirectory == null)
return;
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
{
Cursor = Cursors.WaitCursor;
ctrlProtocolBox1.ClearMessages();
buttonScanAD.Enabled = false;
Program.mainForm.DisableAllTabPages(this);
Program.Collector.CleanupUiMessageHandler();
Program.Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
var _requestInfo = new cF4sdWebRequestInfo("DoScanActiveDirectory", null);
await Program.Collector.ActiveDirectory.DoScanAsync(true, Rescan, _requestInfo, 1, CancellationToken.None);
await checkScanTimesAsync(requestInfo, LogDeep+1);
}
catch (Exception E)
{
LogException(E);
}
finally
{
ctrlProtocolBox1.ProcessMessage("");
Program.mainForm.EnableAllTabPages();
buttonScanAD.Enabled = true;
Cursor = Cursors.Default;
if (cPerformanceLogger.IsActive && requestInfo != null) { cPerformanceLogger.LogPerformanceEnd(LogDeep, CM, requestInfo.id, requestInfo.created, _startTime); }
if (CM != null) LogMethodEnd(CM);
}
}
private async void buttonRescan_Click(object sender, EventArgs e)
{
var _requestInfo = new cF4sdWebRequestInfo("buttonRescan_Click", null);
await DoScan(true, _requestInfo, 1);
DoDeviceScanAzure(sender, e);
}
private async void buttonScanAD_Click(object sender, EventArgs e)
{
var _requestInfo = new cF4sdWebRequestInfo("buttonScanAD_Click", null);
await DoScan(false, _requestInfo, 1);
DoDeviceScanAzure(sender,e);
}
private async void buttonScanAzureAd_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
if (Program.Collector == null || Program.Collector.ActiveDirectory == null)
return;
try
{
Cursor = Cursors.WaitCursor;
ctrlProtocolBox1.ClearMessages();
buttonScanAD.Enabled = false;
Program.mainForm.DisableAllTabPages(this);
Program.Collector.CleanupUiMessageHandler();
Program.Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
var _requestInfo = new cF4sdWebRequestInfo("buttonScanAzureAd_Click", null);
await Program.Collector.ActiveDirectory.DoAzureScanAsync(_requestInfo, 1, CancellationToken.None);
DoDeviceScanAzure(sender, e);
}
catch (Exception E)
{
LogException(E);
}
finally
{
ctrlProtocolBox1.ProcessMessage("");
Program.mainForm.EnableAllTabPages();
buttonScanAD.Enabled = true;
Cursor = Cursors.Default;
if (CM != null) LogMethodEnd(CM);
}
}
private async void DoDeviceScanAzure(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
if (Program.Collector == null || Program.Collector.ActiveDirectory == null)
return;
try
{
Cursor = Cursors.WaitCursor;
Program.mainForm.DisableAllTabPages(this);
Program.Collector.CleanupUiMessageHandler();
Program.Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
var _requestInfo = new cF4sdWebRequestInfo("DoDeviceScanAzure", null);
await Program.Collector.ActiveDirectory.DoDeviceScanAzureAsync(_requestInfo, 1, CancellationToken.None);
}
catch (Exception E)
{
LogException(E);
}
finally
{
ctrlProtocolBox1.ProcessMessage("");
Program.mainForm.EnableAllTabPages();
DoScanIntune(sender,e);
Cursor = Cursors.Default;
if (CM != null) LogMethodEnd(CM);
}
}
private async void DoScanIntune(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
if (Program.Collector == null || Program.Collector.ActiveDirectory == null)
return;
try
{
Cursor = Cursors.WaitCursor;
Program.mainForm.DisableAllTabPages(this);
Program.Collector.CleanupUiMessageHandler();
Program.Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
var _requestInfo = new cF4sdWebRequestInfo("DoScanIntune", null);
await Program.Collector.ActiveDirectory.DoScanIntuneAsync(null, 1, CancellationToken.None);
}
catch (Exception E)
{
LogException(E);
}
finally
{
Program.mainForm.EnableAllTabPages();
Cursor = Cursors.Default;
if (CM != null) LogMethodEnd(CM);
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,116 @@
namespace C4IT_DataHistoryProvider_Test
{
partial class ctrlCitrix
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.ctrlProtocolBox1 = new C4IT_DataHistoryProvider_Test.ctrlProtocolBox();
this.buttonCheckConnection = new System.Windows.Forms.Button();
this.btnGetUsers = new System.Windows.Forms.Button();
this.btnGetSessions = new System.Windows.Forms.Button();
this.btnScanUsers = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// ctrlProtocolBox1
//
this.ctrlProtocolBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.ctrlProtocolBox1.Location = new System.Drawing.Point(22, 119);
this.ctrlProtocolBox1.Margin = new System.Windows.Forms.Padding(2);
this.ctrlProtocolBox1.Name = "ctrlProtocolBox1";
this.ctrlProtocolBox1.Size = new System.Drawing.Size(1057, 418);
this.ctrlProtocolBox1.TabIndex = 13;
//
// buttonCheckConnection
//
this.buttonCheckConnection.Location = new System.Drawing.Point(22, 38);
this.buttonCheckConnection.Margin = new System.Windows.Forms.Padding(5, 6, 5, 6);
this.buttonCheckConnection.Name = "buttonCheckConnection";
this.buttonCheckConnection.Size = new System.Drawing.Size(210, 46);
this.buttonCheckConnection.TabIndex = 14;
this.buttonCheckConnection.Text = "Check Citrix connection";
this.buttonCheckConnection.UseVisualStyleBackColor = true;
this.buttonCheckConnection.Click += new System.EventHandler(this.buttonCheckConnection_Click);
//
// btnGetUsers
//
this.btnGetUsers.Location = new System.Drawing.Point(242, 38);
this.btnGetUsers.Margin = new System.Windows.Forms.Padding(5, 6, 5, 6);
this.btnGetUsers.Name = "btnGetUsers";
this.btnGetUsers.Size = new System.Drawing.Size(210, 46);
this.btnGetUsers.TabIndex = 15;
this.btnGetUsers.Text = "Get users";
this.btnGetUsers.UseVisualStyleBackColor = true;
this.btnGetUsers.Click += new System.EventHandler(this.btnGetUsers_Click);
//
// btnGetSessions
//
this.btnGetSessions.Location = new System.Drawing.Point(462, 38);
this.btnGetSessions.Margin = new System.Windows.Forms.Padding(5, 6, 5, 6);
this.btnGetSessions.Name = "btnGetSessions";
this.btnGetSessions.Size = new System.Drawing.Size(210, 46);
this.btnGetSessions.TabIndex = 16;
this.btnGetSessions.Text = "Get sessions";
this.btnGetSessions.UseVisualStyleBackColor = true;
this.btnGetSessions.Click += new System.EventHandler(this.btnGetSessions_Click);
//
// btnScanUsers
//
this.btnScanUsers.Location = new System.Drawing.Point(682, 38);
this.btnScanUsers.Margin = new System.Windows.Forms.Padding(5, 6, 5, 6);
this.btnScanUsers.Name = "btnScanUsers";
this.btnScanUsers.Size = new System.Drawing.Size(210, 46);
this.btnScanUsers.TabIndex = 17;
this.btnScanUsers.Text = "Scan Users";
this.btnScanUsers.UseVisualStyleBackColor = true;
this.btnScanUsers.Click += new System.EventHandler(this.btnScanUsers_Click);
//
// ctrlCitrix
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.btnScanUsers);
this.Controls.Add(this.btnGetSessions);
this.Controls.Add(this.btnGetUsers);
this.Controls.Add(this.buttonCheckConnection);
this.Controls.Add(this.ctrlProtocolBox1);
this.Name = "ctrlCitrix";
this.Size = new System.Drawing.Size(1137, 596);
this.ResumeLayout(false);
}
#endregion
private ctrlProtocolBox ctrlProtocolBox1;
private System.Windows.Forms.Button buttonCheckConnection;
private System.Windows.Forms.Button btnGetUsers;
private System.Windows.Forms.Button btnGetSessions;
private System.Windows.Forms.Button btnScanUsers;
}
}

View File

@@ -0,0 +1,212 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using C4IT.DataHistoryProvider;
using System.Reflection;
using C4IT.Logging;
using static C4IT.Logging.cLogManager;
using System.Threading;
namespace C4IT_DataHistoryProvider_Test
{
public partial class ctrlCitrix: UserControl
{
public ctrlCitrix()
{
InitializeComponent();
}
private async void buttonCheckConnection_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
Cursor = Cursors.WaitCursor;
if (Program.Collector == null)
return;
Program.Collector.CleanupUiMessageHandler();
Program.Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
var _requestInfo = new cF4sdWebRequestInfo("btnConnectCitrix_Click", null);
var tenants = Program.Collector.InfrastructureConfig.CitrixTenants?.Values;
foreach (var Tenant in tenants)
{
var result = await Program.Collector.CitrixCollector.GetCitrixCommunicationForTenantAsync(Tenant.TenantID, false);
if (result != null)
{
ctrlProtocolBox1.ProcessMessage($"Citrix connection for tenant {Tenant.TenantID} successful");
}
else
{
ctrlProtocolBox1.ProcessMessage($"Citrix connection for tenant {Tenant.TenantID} failed");
}
}
}
catch (Exception E)
{
LogException(E);
}
finally
{
if (CM != null) LogMethodEnd(CM);
Cursor = Cursors.Default;
}
}
public async void btnGetUsers_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
Cursor = Cursors.WaitCursor;
if (Program.Collector == null)
return;
Program.Collector.CleanupUiMessageHandler();
Program.Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
var _requestInfo = new cF4sdWebRequestInfo("btnConnectCitrix_Click", null);
var tenants = Program.Collector.InfrastructureConfig.CitrixTenants?.Values;
foreach (var Tenant in tenants)
{
var result = await Program.Collector.CitrixCollector.GetCitrixUsersAsync();
if (result != null)
{
ctrlProtocolBox1.ProcessMessage($"Citrix connection for tenant {Tenant.TenantID} successful");
}
else
{
ctrlProtocolBox1.ProcessMessage($"Citrix connection for tenant {Tenant.TenantID} failed");
}
}
}
catch (Exception E)
{
LogException(E);
}
finally
{
if (CM != null) LogMethodEnd(CM);
Cursor = Cursors.Default;
}
}
public async void btnGetSessions_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
Cursor = Cursors.WaitCursor;
if (Program.Collector == null)
return;
Program.Collector.CleanupUiMessageHandler();
Program.Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
var _requestInfo = new cF4sdWebRequestInfo("btnGetSessions_Click", null);
var tenants = Program.Collector.InfrastructureConfig.CitrixTenants?.Values;
foreach (var Tenant in tenants)
{
var result = await Program.Collector.CitrixCollector.GetCitrixSessionsAsync();
if (result != null)
{
ctrlProtocolBox1.ProcessMessage($"Citrix connection for tenant {Tenant.TenantID} successful");
}
else
{
ctrlProtocolBox1.ProcessMessage($"Citrix connection for tenant {Tenant.TenantID} failed");
}
}
}
catch (Exception E)
{
LogException(E);
}
finally
{
if (CM != null) LogMethodEnd(CM);
Cursor = Cursors.Default;
}
}
private async void btnScanUsers_Click(object sender, EventArgs e)
{
if (Program.Collector == null || Program.Collector.ActiveDirectory == null)
return;
var requestInfo = new cF4sdWebRequestInfo("buttonUserCitrix_Click", null);
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(1, CM, requestInfo.id, requestInfo.created); }
var _startTime = DateTime.UtcNow;
try
{
Cursor = Cursors.WaitCursor;
if (Program.Collector == null)
return;
Program.Collector.CleanupUiMessageHandler();
Program.Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
var _requestInfo = new cF4sdWebRequestInfo("btnScanUsers_Click", null);
var tenants = Program.Collector.InfrastructureConfig.CitrixTenants?.Values;
foreach (var Tenant in tenants)
{
var result = await Program.Collector.CitrixCollector.DoScanAsync(true, true, _requestInfo, 1, CancellationToken.None);
if (result)
{
ctrlProtocolBox1.ProcessMessage($"Citrix connection for tenant {Tenant.TenantID} successful");
}
else
{
ctrlProtocolBox1.ProcessMessage($"Citrix connection for tenant {Tenant.TenantID} failed");
}
}
}
catch (Exception E)
{
LogException(E);
}
finally
{
if (CM != null) LogMethodEnd(CM);
Cursor = Cursors.Default;
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,142 @@

namespace C4IT_DataHistoryProvider_Test
{
partial class ctrlCleanup
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.textBoxCleanupsCount = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.buttonDoCleanups = new System.Windows.Forms.Button();
this.buttonScanCleanups = new System.Windows.Forms.Button();
this.panelValidTime = new System.Windows.Forms.Panel();
this.label2 = new System.Windows.Forms.Label();
this.ctrlProtocolBox1 = new C4IT_DataHistoryProvider_Test.ctrlProtocolBox();
this.SuspendLayout();
//
// textBoxCleanupsCount
//
this.textBoxCleanupsCount.Location = new System.Drawing.Point(186, 160);
this.textBoxCleanupsCount.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.textBoxCleanupsCount.Name = "textBoxCleanupsCount";
this.textBoxCleanupsCount.ReadOnly = true;
this.textBoxCleanupsCount.Size = new System.Drawing.Size(85, 26);
this.textBoxCleanupsCount.TabIndex = 10;
this.textBoxCleanupsCount.Text = "-";
this.textBoxCleanupsCount.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(35, 165);
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(140, 20);
this.label1.TabIndex = 9;
this.label1.Text = "Possible cleanups:";
//
// buttonDoCleanups
//
this.buttonDoCleanups.Enabled = false;
this.buttonDoCleanups.Location = new System.Drawing.Point(285, 39);
this.buttonDoCleanups.Margin = new System.Windows.Forms.Padding(6, 8, 6, 8);
this.buttonDoCleanups.Name = "buttonDoCleanups";
this.buttonDoCleanups.Size = new System.Drawing.Size(235, 79);
this.buttonDoCleanups.TabIndex = 8;
this.buttonDoCleanups.Text = "Do cleanups";
this.buttonDoCleanups.UseVisualStyleBackColor = true;
this.buttonDoCleanups.Click += new System.EventHandler(this.buttonDoCleanups_Click);
//
// buttonScanCleanups
//
this.buttonScanCleanups.Location = new System.Drawing.Point(37, 39);
this.buttonScanCleanups.Margin = new System.Windows.Forms.Padding(6, 8, 6, 8);
this.buttonScanCleanups.Name = "buttonScanCleanups";
this.buttonScanCleanups.Size = new System.Drawing.Size(235, 79);
this.buttonScanCleanups.TabIndex = 6;
this.buttonScanCleanups.Text = "Scan for cleanups";
this.buttonScanCleanups.UseVisualStyleBackColor = true;
this.buttonScanCleanups.Click += new System.EventHandler(this.buttonScanCleanups_Click);
//
// panelValidTime
//
this.panelValidTime.Location = new System.Drawing.Point(403, 158);
this.panelValidTime.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
this.panelValidTime.Name = "panelValidTime";
this.panelValidTime.Size = new System.Drawing.Size(29, 32);
this.panelValidTime.TabIndex = 12;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(317, 165);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(82, 20);
this.label2.TabIndex = 11;
this.label2.Text = "Valid time:";
//
// ctrlProtocolBox1
//
this.ctrlProtocolBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.ctrlProtocolBox1.Location = new System.Drawing.Point(37, 239);
this.ctrlProtocolBox1.Name = "ctrlProtocolBox1";
this.ctrlProtocolBox1.Size = new System.Drawing.Size(895, 392);
this.ctrlProtocolBox1.TabIndex = 13;
//
// ctrlCleanup
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.panelValidTime);
this.Controls.Add(this.label2);
this.Controls.Add(this.textBoxCleanupsCount);
this.Controls.Add(this.label1);
this.Controls.Add(this.buttonDoCleanups);
this.Controls.Add(this.buttonScanCleanups);
this.Controls.Add(this.ctrlProtocolBox1);
this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.Name = "ctrlCleanup";
this.Size = new System.Drawing.Size(969, 672);
this.Load += new System.EventHandler(this.ctrlCleanup_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TextBox textBoxCleanupsCount;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button buttonDoCleanups;
private System.Windows.Forms.Button buttonScanCleanups;
private System.Windows.Forms.Panel panelValidTime;
private System.Windows.Forms.Label label2;
private ctrlProtocolBox ctrlProtocolBox1;
}
}

View File

@@ -0,0 +1,109 @@
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 static C4IT.Logging.cLogManager;
namespace C4IT_DataHistoryProvider_Test
{
public partial class ctrlCleanup : UserControl
{
public ctrlCleanup()
{
InitializeComponent();
}
private void CheckInTime()
{
if (Program.Collector != null)
{
var InTime = Program.Collector.CheckCleanupTimeframes();
if (InTime)
panelValidTime.BackColor = Color.Green;
else
panelValidTime.BackColor = Color.Red;
}
}
private void ctrlCleanup_Load(object sender, EventArgs e)
{
CheckInTime();
}
private async void buttonScanCleanups_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
if (Program.Collector == null)
return;
Cursor = Cursors.WaitCursor;
this.Enabled = false;
textBoxCleanupsCount.Text = "-";
var _requestInfo = new cF4sdWebRequestInfo("buttonScanCleanups_Click", null);
var res = await Program.Collector.CheckCleanup(_requestInfo, 1, CancellationToken.None);
textBoxCleanupsCount.Text = res.ToString();
buttonDoCleanups.Enabled = res > 0;
}
catch (Exception E)
{
LogException(E);
}
finally
{
this.Enabled = true;
Cursor = Cursors.Default;
if (CM != null) LogMethodEnd(CM);
}
}
private async void buttonDoCleanups_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
if (Program.Collector == null)
return;
Cursor = Cursors.WaitCursor;
this.Enabled = false;
var _requestInfo = new cF4sdWebRequestInfo("buttonDoCleanups_Click", null);
var res = await Program.Collector.DoCleanup(true, _requestInfo, 1, CancellationToken.None);
if (res < 0)
ctrlProtocolBox1.ProcessMessage($"error while removing history scan data.");
else
ctrlProtocolBox1.ProcessMessage($"{res} history scans removed successful");
var res2 = await Program.Collector.CheckCleanup(_requestInfo, 1, CancellationToken.None);
textBoxCleanupsCount.Text = res2.ToString();
buttonDoCleanups.Enabled = res2 > 0;
}
catch (Exception E)
{
LogException(E);
}
finally
{
this.Enabled = true;
Cursor = Cursors.Default;
if (CM != null) LogMethodEnd(CM);
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,131 @@

namespace C4IT_DataHistoryProvider_Test
{
partial class ctrlClientAgent
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.buttonScanClientAgent = new System.Windows.Forms.Button();
this.textBoxScanNext = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.textBoxScanLast = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.panelScanNext = new System.Windows.Forms.Panel();
this.ctrlProtocolBox1 = new C4IT_DataHistoryProvider_Test.ctrlProtocolBox();
this.SuspendLayout();
//
// buttonScanClientAgent
//
this.buttonScanClientAgent.Location = new System.Drawing.Point(24, 22);
this.buttonScanClientAgent.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.buttonScanClientAgent.Name = "buttonScanClientAgent";
this.buttonScanClientAgent.Size = new System.Drawing.Size(212, 51);
this.buttonScanClientAgent.TabIndex = 3;
this.buttonScanClientAgent.Text = "Scan client agent data";
this.buttonScanClientAgent.UseVisualStyleBackColor = true;
this.buttonScanClientAgent.Click += new System.EventHandler(this.buttonScanClientAgent_Click);
//
// textBoxScanNext
//
this.textBoxScanNext.Location = new System.Drawing.Point(391, 95);
this.textBoxScanNext.Name = "textBoxScanNext";
this.textBoxScanNext.ReadOnly = true;
this.textBoxScanNext.Size = new System.Drawing.Size(141, 26);
this.textBoxScanNext.TabIndex = 11;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(292, 98);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(93, 20);
this.label2.TabIndex = 10;
this.label2.Text = "Target time:";
//
// textBoxScanLast
//
this.textBoxScanLast.Location = new System.Drawing.Point(108, 95);
this.textBoxScanLast.Name = "textBoxScanLast";
this.textBoxScanLast.ReadOnly = true;
this.textBoxScanLast.Size = new System.Drawing.Size(141, 26);
this.textBoxScanLast.TabIndex = 9;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(20, 98);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(82, 20);
this.label1.TabIndex = 8;
this.label1.Text = "Last scan:";
//
// panelScanNext
//
this.panelScanNext.Location = new System.Drawing.Point(542, 95);
this.panelScanNext.Name = "panelScanNext";
this.panelScanNext.Size = new System.Drawing.Size(26, 26);
this.panelScanNext.TabIndex = 12;
//
// ctrlProtocolBox1
//
this.ctrlProtocolBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.ctrlProtocolBox1.Location = new System.Drawing.Point(24, 144);
this.ctrlProtocolBox1.Name = "ctrlProtocolBox1";
this.ctrlProtocolBox1.Size = new System.Drawing.Size(893, 349);
this.ctrlProtocolBox1.TabIndex = 13;
//
// ctrlClientAgent
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.Controls.Add(this.panelScanNext);
this.Controls.Add(this.textBoxScanNext);
this.Controls.Add(this.label2);
this.Controls.Add(this.textBoxScanLast);
this.Controls.Add(this.label1);
this.Controls.Add(this.buttonScanClientAgent);
this.Controls.Add(this.ctrlProtocolBox1);
this.Name = "ctrlClientAgent";
this.Size = new System.Drawing.Size(938, 519);
this.Load += new System.EventHandler(this.ctrlClientAgent_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button buttonScanClientAgent;
private System.Windows.Forms.TextBox textBoxScanNext;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox textBoxScanLast;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Panel panelScanNext;
private ctrlProtocolBox ctrlProtocolBox1;
}
}

View File

@@ -0,0 +1,129 @@
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 static C4IT.Logging.cLogManager;
namespace C4IT_DataHistoryProvider_Test
{
public partial class ctrlClientAgent : UserControl
{
public ctrlClientAgent()
{
InitializeComponent();
}
private async void ctrlClientAgent_Load(object sender, EventArgs e)
{
panelScanNext.Height = textBoxScanNext.Height;
panelScanNext.Top = textBoxScanNext.Top;
var _requestInfo = new cF4sdWebRequestInfo("ctrlClientAgent_Load", null);
await checkScanTimesAsync(_requestInfo, 1);
}
private async Task checkScanTimesAsync(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
{
var Col = Color.Transparent;
textBoxScanLast.Text = "";
textBoxScanNext.Text = "";
if (Program.Collector?.F4sdAgent != null)
{
var scanInfo = await Program.Collector.F4sdAgent.GetScanTimeInfoAsync(requestInfo, LogDeep+1, CancellationToken.None);
if (scanInfo?.NextScan is DateTime nextScan)
{
textBoxScanNext.Text = nextScan.ToLocalTime().ToString();
if (scanInfo?.LastScan is DateTime lastScan)
{
textBoxScanLast.Text = lastScan.ToLocalTime().ToString();
if (nextScan >= lastScan)
Col = Color.Red;
else
Col = Color.Green;
}
else
Col = Color.Red;
}
else
{
Col = Color.Red;
if (scanInfo?.LastScan is DateTime lastScan)
textBoxScanLast.Text = lastScan.ToLocalTime().ToString();
}
}
panelScanNext.BackColor = Col;
}
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);
}
}
private async void buttonScanClientAgent_Click(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();
buttonScanClientAgent.Enabled = false;
Program.mainForm.DisableAllTabPages(this);
Program.Collector.CleanupUiMessageHandler();
Program.Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
var _requestInfo = new cF4sdWebRequestInfo("buttonScanClientAgent_Click", null);
await Program.Collector.F4sdAgent.DoScanAsync(true, true, _requestInfo, 1, CancellationToken.None);
await checkScanTimesAsync(_requestInfo, 1);
}
catch (Exception E)
{
LogException(E);
}
finally
{
ctrlProtocolBox1.ProcessMessage("");
Program.mainForm.EnableAllTabPages();
buttonScanClientAgent.Enabled = true;
Cursor = Cursors.Default;
if (CM != null) LogMethodEnd(CM);
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,222 @@
namespace C4IT_DataHistoryProvider_Test
{
partial class ctrlF4SDAnalytics
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.btnCreateSession = new System.Windows.Forms.Button();
this.btnCloseSession = new System.Windows.Forms.Button();
this.TimerLabel = new System.Windows.Forms.Label();
this.grpBoxCase = new System.Windows.Forms.GroupBox();
this.label1 = new System.Windows.Forms.Label();
this.btnStartCase = new System.Windows.Forms.Button();
this.comboBoxUserSelect = new System.Windows.Forms.ComboBox();
this.btnCloseCase = new System.Windows.Forms.Button();
this.btnCancelCase = new System.Windows.Forms.Button();
this.btnHoldCase = new System.Windows.Forms.Button();
this.btnQAExecutions = new System.Windows.Forms.Button();
this.grpBoxQA = new System.Windows.Forms.GroupBox();
this.ctrlProtocolBox1 = new C4IT_DataHistoryProvider_Test.ctrlProtocolBox();
this.grpBoxCase.SuspendLayout();
this.grpBoxQA.SuspendLayout();
this.SuspendLayout();
//
// btnCreateSession
//
this.btnCreateSession.Location = new System.Drawing.Point(26, 95);
this.btnCreateSession.Margin = new System.Windows.Forms.Padding(2);
this.btnCreateSession.Name = "btnCreateSession";
this.btnCreateSession.Size = new System.Drawing.Size(162, 33);
this.btnCreateSession.TabIndex = 0;
this.btnCreateSession.Text = "Create Session";
this.btnCreateSession.UseVisualStyleBackColor = true;
this.btnCreateSession.Click += new System.EventHandler(this.buttonCreateSession_Click);
//
// btnCloseSession
//
this.btnCloseSession.Location = new System.Drawing.Point(26, 133);
this.btnCloseSession.Name = "btnCloseSession";
this.btnCloseSession.Size = new System.Drawing.Size(162, 33);
this.btnCloseSession.TabIndex = 5;
this.btnCloseSession.Text = "Close Session";
this.btnCloseSession.UseVisualStyleBackColor = true;
this.btnCloseSession.Click += new System.EventHandler(this.buttonCloseSession_Click);
//
// TimerLabel
//
this.TimerLabel.Location = new System.Drawing.Point(0, 0);
this.TimerLabel.Name = "TimerLabel";
this.TimerLabel.Size = new System.Drawing.Size(100, 23);
this.TimerLabel.TabIndex = 14;
//
// grpBoxCase
//
this.grpBoxCase.Controls.Add(this.label1);
this.grpBoxCase.Controls.Add(this.btnStartCase);
this.grpBoxCase.Controls.Add(this.comboBoxUserSelect);
this.grpBoxCase.Controls.Add(this.btnCloseCase);
this.grpBoxCase.Controls.Add(this.btnCancelCase);
this.grpBoxCase.Controls.Add(this.btnHoldCase);
this.grpBoxCase.Controls.Add(this.TimerLabel);
this.grpBoxCase.Location = new System.Drawing.Point(218, 26);
this.grpBoxCase.Name = "grpBoxCase";
this.grpBoxCase.Size = new System.Drawing.Size(307, 183);
this.grpBoxCase.TabIndex = 9;
this.grpBoxCase.TabStop = false;
this.grpBoxCase.Text = "Case";
this.grpBoxCase.Visible = false;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(37, 23);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(39, 16);
this.label1.TabIndex = 15;
this.label1.Text = "User:";
//
// btnStartCase
//
this.btnStartCase.Location = new System.Drawing.Point(82, 48);
this.btnStartCase.Margin = new System.Windows.Forms.Padding(2);
this.btnStartCase.Name = "btnStartCase";
this.btnStartCase.Size = new System.Drawing.Size(107, 25);
this.btnStartCase.TabIndex = 13;
this.btnStartCase.Text = "Start";
this.btnStartCase.UseVisualStyleBackColor = true;
this.btnStartCase.Click += new System.EventHandler(this.btnStartCase_Click);
//
// comboBoxUserSelect
//
this.comboBoxUserSelect.FormattingEnabled = true;
this.comboBoxUserSelect.Location = new System.Drawing.Point(82, 19);
this.comboBoxUserSelect.Name = "comboBoxUserSelect";
this.comboBoxUserSelect.Size = new System.Drawing.Size(191, 24);
this.comboBoxUserSelect.TabIndex = 10;
//
// btnCloseCase
//
this.btnCloseCase.Location = new System.Drawing.Point(82, 135);
this.btnCloseCase.Margin = new System.Windows.Forms.Padding(2);
this.btnCloseCase.Name = "btnCloseCase";
this.btnCloseCase.Size = new System.Drawing.Size(107, 25);
this.btnCloseCase.TabIndex = 12;
this.btnCloseCase.Text = "Finish";
this.btnCloseCase.UseVisualStyleBackColor = true;
this.btnCloseCase.Click += new System.EventHandler(this.btnCloseCase_Click);
//
// btnCancelCase
//
this.btnCancelCase.Location = new System.Drawing.Point(82, 106);
this.btnCancelCase.Margin = new System.Windows.Forms.Padding(2);
this.btnCancelCase.Name = "btnCancelCase";
this.btnCancelCase.Size = new System.Drawing.Size(107, 25);
this.btnCancelCase.TabIndex = 11;
this.btnCancelCase.Text = "Cancel";
this.btnCancelCase.UseVisualStyleBackColor = true;
this.btnCancelCase.Click += new System.EventHandler(this.btnCancelCase_Click);
//
// btnHoldCase
//
this.btnHoldCase.Location = new System.Drawing.Point(82, 77);
this.btnHoldCase.Margin = new System.Windows.Forms.Padding(2);
this.btnHoldCase.Name = "btnHoldCase";
this.btnHoldCase.Size = new System.Drawing.Size(107, 25);
this.btnHoldCase.TabIndex = 10;
this.btnHoldCase.Text = "Hold";
this.btnHoldCase.UseVisualStyleBackColor = true;
this.btnHoldCase.Click += new System.EventHandler(this.btnHoldCase_Click);
//
// btnQAExecutions
//
this.btnQAExecutions.Location = new System.Drawing.Point(5, 28);
this.btnQAExecutions.Margin = new System.Windows.Forms.Padding(2);
this.btnQAExecutions.Name = "btnQAExecutions";
this.btnQAExecutions.Size = new System.Drawing.Size(162, 33);
this.btnQAExecutions.TabIndex = 11;
this.btnQAExecutions.Text = "Execution";
this.btnQAExecutions.UseVisualStyleBackColor = true;
this.btnQAExecutions.Click += new System.EventHandler(this.btnQAExecutions_Click);
//
// grpBoxQA
//
this.grpBoxQA.Controls.Add(this.btnQAExecutions);
this.grpBoxQA.Location = new System.Drawing.Point(557, 26);
this.grpBoxQA.Name = "grpBoxQA";
this.grpBoxQA.Size = new System.Drawing.Size(171, 183);
this.grpBoxQA.TabIndex = 12;
this.grpBoxQA.TabStop = false;
this.grpBoxQA.Text = "Quick Actions";
//
// ctrlProtocolBox1
//
this.ctrlProtocolBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.ctrlProtocolBox1.Location = new System.Drawing.Point(16, 225);
this.ctrlProtocolBox1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.ctrlProtocolBox1.Name = "ctrlProtocolBox1";
this.ctrlProtocolBox1.Size = new System.Drawing.Size(1103, 381);
this.ctrlProtocolBox1.TabIndex = 4;
//
// ctrlF4SDAnalytics
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.Controls.Add(this.grpBoxQA);
this.Controls.Add(this.grpBoxCase);
this.Controls.Add(this.btnCloseSession);
this.Controls.Add(this.btnCreateSession);
this.Controls.Add(this.ctrlProtocolBox1);
this.Margin = new System.Windows.Forms.Padding(2);
this.Name = "ctrlF4SDAnalytics";
this.Size = new System.Drawing.Size(1177, 645);
this.Load += new System.EventHandler(this.ctrlMainFunction_Load);
this.grpBoxCase.ResumeLayout(false);
this.grpBoxCase.PerformLayout();
this.grpBoxQA.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button btnCreateSession;
private ctrlProtocolBox ctrlProtocolBox1;
private System.Windows.Forms.Button btnCloseSession;
private System.Windows.Forms.Label TimerLabel;
private System.Windows.Forms.GroupBox grpBoxCase;
private System.Windows.Forms.Button btnStartCase;
private System.Windows.Forms.Button btnCloseCase;
private System.Windows.Forms.Button btnCancelCase;
private System.Windows.Forms.Button btnHoldCase;
private System.Windows.Forms.ComboBox comboBoxUserSelect;
private System.Windows.Forms.Button btnQAExecutions;
private System.Windows.Forms.GroupBox grpBoxQA;
private System.Windows.Forms.Label label1;
}
}

View File

@@ -0,0 +1,415 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
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.DataHistoryProvider;
using C4IT.FASD.Base;
using C4IT.FASD.Licensing;
using C4IT.Logging;
using static C4IT.Logging.cLogManager;
namespace C4IT_DataHistoryProvider_Test
{
public partial class ctrlF4SDAnalytics : UserControl
{
Guid SessionId;
Guid Userid = new Guid("7003cfbf-2841-454e-a4c7-2cff2eb45b23");
Guid CaseId;
private System.Timers.Timer SessionCheck;
private System.Timers.Timer CaseCheck;
public ctrlF4SDAnalytics()
{
InitializeComponent();
}
private async void buttonCreateSession_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
Cursor = Cursors.WaitCursor;
ctrlProtocolBox1.ClearMessages();
btnCreateSession.Enabled = false;
if (Program.Collector == null)
return;
if (Program.Collector.F4SDAnalyticsValid)
{
SessionId = Guid.NewGuid();
var userSessions = new cF4SDUserSessionParameters();
userSessions.SessionId = SessionId;
userSessions.UserId = Userid;
userSessions.SessionDate = DateTime.UtcNow;
Program.Collector.CleanupUiMessageHandler();
Program.Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
var _requestInfo = new cF4sdWebRequestInfo("buttonCreateSession_Click", null);
bool IsCreatet = await Program.Collector.CreateUserSessionAsync(userSessions, _requestInfo, 1, CancellationToken.None);
btnStartCase.Enabled = true;
btnCloseSession.Enabled = true;
grpBoxCase.Visible = true;
btnCloseCase.Enabled = false;
btnHoldCase.Enabled = false;
btnCancelCase.Enabled = false;
}
}
catch (Exception E)
{
LogException(E);
}
finally
{
if (CM != null) LogMethodEnd(CM);
Cursor = Cursors.Default;
}
}
private async void buttonCloseSession_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
Cursor = Cursors.WaitCursor;
//btnInsertSession.Enabled = false;
if (Program.Collector == null)
return;
var _requestInfo = new cF4sdWebRequestInfo("buttonCloseSession_Click", null);
if (Program.Collector.F4SDAnalyticsValid && SessionId != null)
{
var userSessions = new cF4SDUserSessionParameters();
userSessions.SessionId = SessionId;
userSessions.SessionDate = DateTime.UtcNow;
bool IsLoaded = await Program.Collector.CloseUserSessionAsync(userSessions, _requestInfo, 1, CancellationToken.None);
btnCloseSession.Enabled = false;
btnCreateSession.Enabled = true;
grpBoxCase.Visible = false;
grpBoxQA.Visible = false;
btnStartCase.Enabled = true;
btnCloseCase.Enabled = false;
btnHoldCase.Enabled = false;
btnCancelCase.Enabled = false;
comboBoxUserSelect.SelectedItem = null;
}
}
catch (Exception E)
{
LogException(E);
}
finally
{
if (CM != null) LogMethodEnd(CM);
Cursor = Cursors.Default;
}
}
private async void btnStartCase_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
Cursor = Cursors.WaitCursor;
if (Program.Collector == null)
return;
var _requestInfo = new cF4sdWebRequestInfo("btnStartCase_Click", null);
if (Program.Collector.F4SDAnalyticsValid && SessionId != null)
{
CaseId = Guid.NewGuid();
var caseData = new cF4SDCaseParameters();
caseData.SessionId = SessionId;
caseData.CaseId = CaseId;
caseData.UserId = Userid;
if (comboBoxUserSelect.SelectedItem != null)
{
var RetVal = new List<cDataHistoryInfoClassListEntry>();
var user = comboBoxUserSelect.SelectedItem;
RetVal.Add((cDataHistoryInfoClassListEntry)user);
caseData.UserId = RetVal[0].id;
}
bool IsLoaded = await Program.Collector.CreateCaseAsync(caseData, _requestInfo, 1, CancellationToken.None);
btnStartCase.Enabled = false;
grpBoxQA.Visible = true;
btnCloseCase.Enabled = true;
btnCancelCase.Enabled = true;
btnHoldCase.Enabled = true;
}
}
catch (Exception E)
{
LogException(E);
}
finally
{
if (CM != null) LogMethodEnd(CM);
Cursor = Cursors.Default;
}
}
private async void btnCloseCase_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
Cursor = Cursors.WaitCursor;
//btnInsertSession.Enabled = false;
if (Program.Collector == null)
return;
var _requestInfo = new cF4sdWebRequestInfo("btnCloseCase_Click", null);
if (Program.Collector.F4SDAnalyticsValid && SessionId != null && CaseId != null)
{
var caseStatus = new cF4SDCaseTimeParameters();
caseStatus.CaseId = CaseId;
caseStatus.StatusId = CaseStatus.Canceled;
bool IsLoaded = await Program.Collector.UpdateCaseStateAsync(caseStatus, _requestInfo, 1, CancellationToken.None);
btnStartCase.Enabled = true;
grpBoxQA.Visible = false;
btnCloseCase.Enabled = false;
btnCancelCase.Enabled = false;
btnHoldCase.Enabled = false;
comboBoxUserSelect.SelectedItem = null;
}
}
catch (Exception E)
{
LogException(E);
}
finally
{
if (CM != null) LogMethodEnd(CM);
Cursor = Cursors.Default;
}
}
private async void btnCancelCase_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
Cursor = Cursors.WaitCursor;
//btnInsertSession.Enabled = false;
if (Program.Collector == null)
return;
var _requestInfo = new cF4sdWebRequestInfo("btnCancelCase_Click", null);
if (Program.Collector.F4SDAnalyticsValid && SessionId != null && CaseId != null)
{
var caseStatus = new cF4SDCaseTimeParameters();
caseStatus.CaseId = CaseId;
caseStatus.StatusId = CaseStatus.InProgress;
bool IsLoaded = await Program.Collector.UpdateCaseStateAsync(caseStatus, _requestInfo, 1, CancellationToken.None);
btnStartCase.Enabled = true;
grpBoxQA.Visible = false;
btnCloseCase.Enabled = false;
btnCancelCase.Enabled = false;
btnHoldCase.Enabled = false;
comboBoxUserSelect.SelectedItem = null;
}
}
catch (Exception E)
{
LogException(E);
}
finally
{
if (CM != null) LogMethodEnd(CM);
Cursor = Cursors.Default;
}
}
private async void btnHoldCase_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
Cursor = Cursors.WaitCursor;
//btnInsertSession.Enabled = false;
if (Program.Collector == null)
return;
var _requestInfo = new cF4sdWebRequestInfo("btnHoldCase_Click", null);
if (Program.Collector.F4SDAnalyticsValid && SessionId != null && CaseId != null)
{
var caseStatus = new cF4SDCaseTimeParameters();
caseStatus.CaseId = CaseId;
if (btnHoldCase.Text == "Hold")
{
btnHoldCase.Text = "Continue";
caseStatus.StatusId = CaseStatus.Finished;
grpBoxQA.Visible = false;
btnCancelCase.Enabled = false;
btnCloseCase.Enabled = false;
}
else if (btnHoldCase.Text == "Continue")
{
btnHoldCase.Text = "Hold";
caseStatus.StatusId = CaseStatus.OnHold;
grpBoxQA.Visible = true;
btnCancelCase.Enabled = true;
btnCloseCase.Enabled = true;
}
bool IsLoaded = await Program.Collector.UpdateCaseStateAsync(caseStatus, _requestInfo, 1, CancellationToken.None);
}
}
catch (Exception E)
{
LogException(E);
}
finally
{
if (CM != null) LogMethodEnd(CM);
Cursor = Cursors.Default;
}
}
private async void btnUpdateCaseState_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
Cursor = Cursors.WaitCursor;
//btnInsertSession.Enabled = false;
if (Program.Collector == null)
return;
var _requestInfo = new cF4sdWebRequestInfo("btnUpdateCaseState_Click", null);
if (Program.Collector.F4SDAnalyticsValid && SessionId != null && CaseId != null)
{
var caseStatus = new cF4SDCaseTimeParameters();
caseStatus.CaseId = CaseId;
caseStatus.StatusId = CaseStatus.Canceled;
bool IsLoaded = await Program.Collector.UpdateCaseStateAsync(caseStatus, _requestInfo, 1, CancellationToken.None);
btnStartCase.Enabled = true;
btnCreateSession.Enabled = false;
}
}
catch (Exception E)
{
LogException(E);
}
finally
{
if (CM != null) LogMethodEnd(CM);
Cursor = Cursors.Default;
}
}
private async void btnQAExecutions_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
Cursor = Cursors.WaitCursor;
//btnInsertSession.Enabled = false;
if (Program.Collector == null)
return;
var _requestInfo = new cF4sdWebRequestInfo("btnQAExecutions_Click", null);
if (Program.Collector.F4SDAnalyticsValid && SessionId != null && CaseId != null)
{
var quickAction = new cF4SDQuickActionParameters();
quickAction.CaseId = CaseId;
quickAction.QuickActionId = Guid.NewGuid();
quickAction.Paramaters = null;
quickAction.Result = null;
quickAction.ErrorCode = 0;
quickAction.ErrorDescription = null;
quickAction.Start = DateTime.Now;
quickAction.Finish = DateTime.Now;
await Program.Collector.ReportQuickActionExecutionAsync(quickAction, Program.Collector.F4SDAnalyticsDb.Connection, _requestInfo, 1, CancellationToken.None);
await Program.Collector.ReportQuickActionExecutionAsync(quickAction, Program.Collector.InfrastructureConfig.HistoryDB.Connection, _requestInfo, 1, CancellationToken.None);
}
}
catch (Exception E)
{
LogException(E);
}
finally
{
if (CM != null) LogMethodEnd(CM);
Cursor = Cursors.Default;
}
}
private async void ctrlMainFunction_Load(object sender, EventArgs e)
{
btnCloseSession.Enabled = false;
grpBoxCase.Visible = false;
grpBoxQA.Visible = false;
if (Program.mainForm == null)
return;
var _requestInfo = new cF4sdWebRequestInfo("ctrlMainFunction_Load", null);
if (Program.UserList == null)
Program.UserList = await Program.Collector.GetInfoClassListTest(C4IT.FASD.Base.enumFasdInformationClass.User, true, _requestInfo, 1, CancellationToken.None);
comboBoxUserSelect.Items.AddRange(Program.UserList.ToArray());
SessionCheck = new System.Timers.Timer(60.0 * 1000 * Program.Collector.InfrastructureConfig.F4SDAnalyticsDB.SessionCheckInterval);
SessionCheck.Elapsed += Program.Collector.CheckSessionsAsync;
SessionCheck.Start();
CaseCheck = new System.Timers.Timer(60.0 * 1000 * Program.Collector.InfrastructureConfig.F4SDAnalyticsDB.CaseCheckInterval);
CaseCheck.Elapsed += Program.Collector.CheckCasesAsync;
CaseCheck.Start();
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,231 @@

namespace C4IT_DataHistoryProvider_Test
{
partial class ctrlM42Wpm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.buttonCheckConnection = new System.Windows.Forms.Button();
this.comboBoxUserSelect = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
this.buttonGetUserTickes = new System.Windows.Forms.Button();
this.comboBoxTicket = new System.Windows.Forms.ComboBox();
this.label2 = new System.Windows.Forms.Label();
this.buttonUpdateSolution = new System.Windows.Forms.Button();
this.ctrlProtocolBox1 = new C4IT_DataHistoryProvider_Test.ctrlProtocolBox();
this.panelScanNext = new System.Windows.Forms.Panel();
this.textBoxScanNext = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.textBoxScanLast = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.buttonScanM42 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// buttonCheckConnection
//
this.buttonCheckConnection.Location = new System.Drawing.Point(36, 23);
this.buttonCheckConnection.Margin = new System.Windows.Forms.Padding(6, 8, 6, 8);
this.buttonCheckConnection.Name = "buttonCheckConnection";
this.buttonCheckConnection.Size = new System.Drawing.Size(236, 58);
this.buttonCheckConnection.TabIndex = 2;
this.buttonCheckConnection.Text = "Check M42 WPM connection";
this.buttonCheckConnection.UseVisualStyleBackColor = true;
this.buttonCheckConnection.Click += new System.EventHandler(this.buttonCheckConnection_Click);
//
// comboBoxUserSelect
//
this.comboBoxUserSelect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxUserSelect.FormattingEnabled = true;
this.comboBoxUserSelect.Location = new System.Drawing.Point(388, 38);
this.comboBoxUserSelect.Name = "comboBoxUserSelect";
this.comboBoxUserSelect.Size = new System.Drawing.Size(430, 28);
this.comboBoxUserSelect.TabIndex = 8;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(318, 40);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(47, 20);
this.label1.TabIndex = 7;
this.label1.Text = "User:";
//
// buttonGetUserTickes
//
this.buttonGetUserTickes.Enabled = false;
this.buttonGetUserTickes.Location = new System.Drawing.Point(836, 35);
this.buttonGetUserTickes.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.buttonGetUserTickes.Name = "buttonGetUserTickes";
this.buttonGetUserTickes.Size = new System.Drawing.Size(132, 32);
this.buttonGetUserTickes.TabIndex = 6;
this.buttonGetUserTickes.Text = "get tickets";
this.buttonGetUserTickes.UseVisualStyleBackColor = true;
this.buttonGetUserTickes.Click += new System.EventHandler(this.buttonGetUserTickes_Click);
//
// comboBoxTicket
//
this.comboBoxTicket.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxTicket.FormattingEnabled = true;
this.comboBoxTicket.Location = new System.Drawing.Point(388, 85);
this.comboBoxTicket.Name = "comboBoxTicket";
this.comboBoxTicket.Size = new System.Drawing.Size(430, 28);
this.comboBoxTicket.TabIndex = 11;
this.comboBoxTicket.SelectedValueChanged += new System.EventHandler(this.comboBoxTicket_SelectedValueChanged);
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(318, 85);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(55, 20);
this.label2.TabIndex = 10;
this.label2.Text = "Ticket:";
//
// buttonUpdateSolution
//
this.buttonUpdateSolution.Enabled = false;
this.buttonUpdateSolution.Location = new System.Drawing.Point(836, 82);
this.buttonUpdateSolution.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.buttonUpdateSolution.Name = "buttonUpdateSolution";
this.buttonUpdateSolution.Size = new System.Drawing.Size(132, 32);
this.buttonUpdateSolution.TabIndex = 9;
this.buttonUpdateSolution.Text = "update solution";
this.buttonUpdateSolution.UseVisualStyleBackColor = true;
this.buttonUpdateSolution.Click += new System.EventHandler(this.buttonUpdateSolution_Click);
//
// ctrlProtocolBox1
//
this.ctrlProtocolBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.ctrlProtocolBox1.Location = new System.Drawing.Point(36, 135);
this.ctrlProtocolBox1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.ctrlProtocolBox1.Name = "ctrlProtocolBox1";
this.ctrlProtocolBox1.Size = new System.Drawing.Size(1716, 522);
this.ctrlProtocolBox1.TabIndex = 12;
//
// panelScanNext
//
this.panelScanNext.Location = new System.Drawing.Point(1660, 31);
this.panelScanNext.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.panelScanNext.Name = "panelScanNext";
this.panelScanNext.Size = new System.Drawing.Size(39, 40);
this.panelScanNext.TabIndex = 18;
//
// textBoxScanNext
//
this.textBoxScanNext.Location = new System.Drawing.Point(1416, 80);
this.textBoxScanNext.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.textBoxScanNext.Name = "textBoxScanNext";
this.textBoxScanNext.ReadOnly = true;
this.textBoxScanNext.Size = new System.Drawing.Size(210, 26);
this.textBoxScanNext.TabIndex = 17;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(1312, 85);
this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(93, 20);
this.label3.TabIndex = 16;
this.label3.Text = "Target time:";
//
// textBoxScanLast
//
this.textBoxScanLast.Location = new System.Drawing.Point(1416, 35);
this.textBoxScanLast.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.textBoxScanLast.Name = "textBoxScanLast";
this.textBoxScanLast.ReadOnly = true;
this.textBoxScanLast.Size = new System.Drawing.Size(210, 26);
this.textBoxScanLast.TabIndex = 15;
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(1323, 40);
this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(82, 20);
this.label4.TabIndex = 14;
this.label4.Text = "Last scan:";
//
// buttonScanM42
//
this.buttonScanM42.Location = new System.Drawing.Point(1071, 23);
this.buttonScanM42.Margin = new System.Windows.Forms.Padding(6, 8, 6, 8);
this.buttonScanM42.Name = "buttonScanM42";
this.buttonScanM42.Size = new System.Drawing.Size(236, 58);
this.buttonScanM42.TabIndex = 13;
this.buttonScanM42.Text = "Cleanup API tokens";
this.buttonScanM42.UseVisualStyleBackColor = true;
this.buttonScanM42.Click += new System.EventHandler(this.buttonScanM42_Click);
//
// ctrlM42Wpm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.panelScanNext);
this.Controls.Add(this.textBoxScanNext);
this.Controls.Add(this.label3);
this.Controls.Add(this.textBoxScanLast);
this.Controls.Add(this.label4);
this.Controls.Add(this.buttonScanM42);
this.Controls.Add(this.comboBoxTicket);
this.Controls.Add(this.label2);
this.Controls.Add(this.buttonUpdateSolution);
this.Controls.Add(this.comboBoxUserSelect);
this.Controls.Add(this.label1);
this.Controls.Add(this.buttonGetUserTickes);
this.Controls.Add(this.buttonCheckConnection);
this.Controls.Add(this.ctrlProtocolBox1);
this.Name = "ctrlM42Wpm";
this.Size = new System.Drawing.Size(1772, 672);
this.Load += new System.EventHandler(this.ctrlM42Wpm_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button buttonCheckConnection;
private System.Windows.Forms.ComboBox comboBoxUserSelect;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button buttonGetUserTickes;
private System.Windows.Forms.ComboBox comboBoxTicket;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Button buttonUpdateSolution;
private ctrlProtocolBox ctrlProtocolBox1;
private System.Windows.Forms.Panel panelScanNext;
private System.Windows.Forms.TextBox textBoxScanNext;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox textBoxScanLast;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Button buttonScanM42;
}
}

View File

@@ -0,0 +1,312 @@
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.FASD.Base;
using C4IT.DataHistoryProvider;
using static C4IT.Logging.cLogManager;
namespace C4IT_DataHistoryProvider_Test
{
public partial class ctrlM42Wpm : UserControl
{
public ctrlM42Wpm()
{
InitializeComponent();
}
private async void ctrlM42Wpm_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 += ctrlProtocolBox1.ProcessMessage;
var _requestInfo = new cF4sdWebRequestInfo("ctrlM42Wpm_Load", null);
if (Program.UserList == null)
Program.UserList = await Program.Collector.GetInfoClassListTest(C4IT.FASD.Base.enumFasdInformationClass.User, true, _requestInfo, 1, CancellationToken.None);
comboBoxUserSelect.Items.AddRange(Program.UserList.ToArray());
ctrlProtocolBox1.ProcessMessage("");
await checkScanTimesAsync(_requestInfo, 1);
}
catch (Exception E)
{
LogException(E);
}
finally
{
ctrlProtocolBox1.ProcessMessage("");
Program.mainForm.EnableAllTabPages();
Cursor = Cursors.Default;
if (CM != null) LogMethodEnd(CM);
}
}
private async void buttonCheckConnection_Click(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();
buttonCheckConnection.Enabled = false;
Program.mainForm.DisableAllTabPages(this);
Program.Collector.CleanupUiMessageHandler();
Program.Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
var res = await Program.Collector.M42WpmCollector.ValidateConnectionAsync(true, CancellationToken.None);
buttonGetUserTickes.Enabled = res;
}
catch (Exception E)
{
LogException(E);
}
finally
{
ctrlProtocolBox1.ProcessMessage("");
Program.mainForm.EnableAllTabPages();
buttonCheckConnection.Enabled = true;
Cursor = Cursors.Default;
if (CM != null) LogMethodEnd(CM);
}
}
private class TicketEntry
{
public string Name;
public Guid Id;
public override string ToString()
{
return Name;
}
}
private async void buttonGetUserTickes_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
comboBoxTicket.Enabled = false;
comboBoxTicket.Items.Clear();
comboBoxTicket.SelectedItem = null;
if (comboBoxUserSelect.SelectedItem == null || !(comboBoxUserSelect.SelectedItem is cDataHistoryInfoClassListEntry info))
return;
var search = new List<cF4sdIdentityEntry>()
{
new cF4sdIdentityEntry()
{
Class = enumFasdInformationClass.User,
Id = info.id,
}
};
ctrlProtocolBox1.ProcessMessage("");
var found = false;
var userinfo = await Program.Collector.getConntectorIds(search, CancellationToken.None, null, 0);
if (userinfo != null && userinfo.TryGetValue(enumFasdInformationClass.User, out var userids))
{
if (userids.sid != null)
{
var TicketList = await Program.Collector.M42WpmCollector.getTicketUsage(new List<cF4sdConnectorIds> { userids }, CancellationToken.None, null, 0);
var Tickets = new List<TicketEntry>();
if (TicketList != null && TicketList.Count > 0)
{
found = true;
ctrlProtocolBox1.ProcessMessage($"{TicketList.Count} tickets found for user '{info.Name}':");
foreach (var Entry in TicketList)
{
Tickets.Add(new TicketEntry() { Name = Entry.Name, Id = Entry.id });
ctrlProtocolBox1.ProcessMessage("");
ctrlProtocolBox1.ProcessMessage($" {Entry.Name}:");
foreach (var Entry2 in Entry.Infos)
{
ctrlProtocolBox1.ProcessMessage($" {Entry2.Key}: {Entry2.Value}");
}
}
}
if (Tickets.Count > 0)
{
comboBoxTicket.Items.AddRange(Tickets.ToArray());
comboBoxTicket.Enabled = true;
}
}
}
if (!found)
ctrlProtocolBox1.ProcessMessage($"no tickets found for user '{info.Name}'");
}
catch (Exception E)
{
LogException(E);
}
finally
{
if (CM != null) LogMethodEnd(CM);
}
}
private void comboBoxTicket_SelectedValueChanged(object sender, EventArgs e)
{
buttonUpdateSolution.Enabled = comboBoxTicket.SelectedItem != null;
}
private async void buttonUpdateSolution_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
if (!(comboBoxTicket.SelectedItem is TicketEntry _ticket))
return;
var _update = new cF4SDWriteParameters()
{
TableName = cDataHistoryCollectorM42Wpm.constTableNameTicketDetails,
id = _ticket.Id,
Values = new Dictionary<string, object>(1) { { "SolutionHtml", "Closed for F4SD testing purposes." } }
};
var _res = await Program.Collector.WritePropertyAsync(_update, null, CancellationToken.None);
}
catch (Exception E)
{
LogException(E);
}
finally
{
if (CM != null) LogMethodEnd(CM);
}
}
private async Task checkScanTimesAsync(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
{
var Col = Color.Transparent;
textBoxScanLast.Text = "";
textBoxScanNext.Text = "";
if (Program.Collector.M42WpmCollector != null)
{
var scanInfo = await Program.Collector.M42WpmCollector.GetScanTimeInfoAsync(requestInfo, LogDeep + 1, CancellationToken.None);
if (scanInfo?.NextScan is DateTime nextScan)
{
textBoxScanNext.Text = nextScan.ToLocalTime().ToString();
if (scanInfo?.LastScan is DateTime lastScan)
{
textBoxScanLast.Text = lastScan.ToLocalTime().ToString();
if (nextScan >= lastScan)
Col = Color.Red;
else
Col = Color.Green;
}
else
Col = Color.Red;
}
else
{
Col = Color.Red;
if (scanInfo?.LastScan is DateTime lastScan)
textBoxScanLast.Text = lastScan.ToLocalTime().ToString();
}
}
panelScanNext.BackColor = Col;
}
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);
}
}
private async void buttonScanM42_Click(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();
buttonScanM42.Enabled = false;
Program.mainForm.DisableAllTabPages(this);
Program.Collector.CleanupUiMessageHandler();
Program.Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
var _requestInfo = new cF4sdWebRequestInfo("DoScanM42Wpm", null);
await Program.Collector.M42WpmCollector.DoScanAsync(true, true, _requestInfo, 1, CancellationToken.None);
await checkScanTimesAsync(_requestInfo, 1);
}
catch (Exception E)
{
LogException(E);
}
finally
{
ctrlProtocolBox1.ProcessMessage("");
Program.mainForm.EnableAllTabPages();
buttonScanM42.Enabled = true;
Cursor = Cursors.Default;
if (CM != null) LogMethodEnd(CM);
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,106 @@

namespace C4IT_DataHistoryProvider_Test
{
partial class ctrlMainFunction
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.buttonLoad = new System.Windows.Forms.Button();
this.buttonCheckDatabase = new System.Windows.Forms.Button();
this.buttonValidateAgentDb = new System.Windows.Forms.Button();
this.ctrlProtocolBox1 = new C4IT_DataHistoryProvider_Test.ctrlProtocolBox();
this.SuspendLayout();
//
// buttonLoad
//
this.buttonLoad.Location = new System.Drawing.Point(16, 12);
this.buttonLoad.Margin = new System.Windows.Forms.Padding(2);
this.buttonLoad.Name = "buttonLoad";
this.buttonLoad.Size = new System.Drawing.Size(162, 33);
this.buttonLoad.TabIndex = 0;
this.buttonLoad.Text = "Load configuration";
this.buttonLoad.UseVisualStyleBackColor = true;
this.buttonLoad.Click += new System.EventHandler(this.buttonLoad_Click);
//
// buttonCheckDatabase
//
this.buttonCheckDatabase.Enabled = false;
this.buttonCheckDatabase.Location = new System.Drawing.Point(182, 12);
this.buttonCheckDatabase.Margin = new System.Windows.Forms.Padding(2);
this.buttonCheckDatabase.Name = "buttonCheckDatabase";
this.buttonCheckDatabase.Size = new System.Drawing.Size(162, 33);
this.buttonCheckDatabase.TabIndex = 2;
this.buttonCheckDatabase.Text = "Check database";
this.buttonCheckDatabase.UseVisualStyleBackColor = true;
this.buttonCheckDatabase.Click += new System.EventHandler(this.buttonCheckDatabase_Click);
//
// buttonValidateAgentDb
//
this.buttonValidateAgentDb.Enabled = false;
this.buttonValidateAgentDb.Location = new System.Drawing.Point(348, 12);
this.buttonValidateAgentDb.Margin = new System.Windows.Forms.Padding(2);
this.buttonValidateAgentDb.Name = "buttonValidateAgentDb";
this.buttonValidateAgentDb.Size = new System.Drawing.Size(162, 33);
this.buttonValidateAgentDb.TabIndex = 3;
this.buttonValidateAgentDb.Text = "Validate Agent DB";
this.buttonValidateAgentDb.UseVisualStyleBackColor = true;
this.buttonValidateAgentDb.Click += new System.EventHandler(this.buttonValidateAgentDb_Click);
//
// ctrlProtocolBox1
//
this.ctrlProtocolBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.ctrlProtocolBox1.Location = new System.Drawing.Point(16, 58);
this.ctrlProtocolBox1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.ctrlProtocolBox1.Name = "ctrlProtocolBox1";
this.ctrlProtocolBox1.Size = new System.Drawing.Size(728, 274);
this.ctrlProtocolBox1.TabIndex = 4;
//
// ctrlMainFunction
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.Controls.Add(this.buttonValidateAgentDb);
this.Controls.Add(this.buttonCheckDatabase);
this.Controls.Add(this.buttonLoad);
this.Controls.Add(this.ctrlProtocolBox1);
this.Margin = new System.Windows.Forms.Padding(2);
this.Name = "ctrlMainFunction";
this.Size = new System.Drawing.Size(761, 349);
this.Load += new System.EventHandler(this.ctrlMainFunction_Load);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button buttonLoad;
private System.Windows.Forms.Button buttonCheckDatabase;
private System.Windows.Forms.Button buttonValidateAgentDb;
private ctrlProtocolBox ctrlProtocolBox1;
}
}

View File

@@ -0,0 +1,297 @@
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.Licensing;
using static C4IT.Logging.cLogManager;
using System.Collections.ObjectModel;
namespace C4IT_DataHistoryProvider_Test
{
public partial class ctrlMainFunction : UserControl
{
public ctrlMainFunction()
{
InitializeComponent();
}
private async void ctrlMainFunction_Load(object sender, EventArgs e)
{
if (Program.mainForm == null)
return;
Program.mainForm.RemoveAllTabPages(Program.mainForm.tabPageMain);
if (!Program.mainForm.CollectMode)
return;
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
Cursor = Cursors.WaitCursor;
Program.Collector = null;
var _requestInfo = new cF4sdWebRequestInfo("ctrlMainFunction_Load", null);
buttonLoad.Visible = false;
buttonCheckDatabase.Visible = false;
buttonValidateAgentDb.Visible = false;
var diff = ctrlProtocolBox1.Top - buttonLoad.Top;
ctrlProtocolBox1.Top = buttonLoad.Top;
ctrlProtocolBox1.Height += diff;
ctrlProtocolBox1.ClearMessages();
cF4SDLicense.CheckLicense(null, null);
var lstLicenseLog = cF4SDLicense.LogLicenseState();
foreach (var _s in lstLicenseLog)
ctrlProtocolBox1.ProcessMessage(_s);
ctrlProtocolBox1.ProcessMessage("");
if (!cF4SDLicense.Instance.IsValid)
return;
var Collector = new cDataHistoryCollector(autoConnectionCheck: false, _requestInfo, 1);
Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
var IsLoaded = await Collector.LoadConfigurationAsync(true, false, CancellationToken.None, _requestInfo, 1);
if (!IsLoaded)
return;
Collector.ValidateClientConfiguration();
var tabs = Program.mainForm.tabControlMain.TabPages.Cast<TabPage>().ToList();
tabs.Remove(Program.mainForm.tabPageMain);
foreach (var _entry in tabs)
Program.mainForm.tabControlMain.TabPages.Remove(_entry);
var IsOk = await Collector.ValidateHistoryDatabasesAsync(false, CancellationToken.None, _requestInfo, 1);
if (!IsOk)
return;
await Task.Delay(1000);
await Collector.ValidateF4SDAnalyticsDBAsync(_requestInfo, 1, CancellationToken.None);
await Collector.UpdateF4SDAnalyticsConfigInfosAsync(_requestInfo, 1, CancellationToken.None);
if (DateTime.Now.TimeOfDay >= TimeSpan.FromHours(22) || DateTime.Now.TimeOfDay < TimeSpan.FromHours(3))
{
await Collector.ValidateAgentDbUpdates(_requestInfo, 1, CancellationToken.None);
}
if (Collector.F4sdAgent != null)
{
await Collector.F4sdAgent.DoScanAsync(false, false, _requestInfo, 1, CancellationToken.None);
await Task.Delay(1000);
}
if (Collector.ActiveDirectory != null && await Collector.ActiveDirectory.DoScanAsync(false, false, _requestInfo, 1, CancellationToken.None))
{
await Task.Delay(1000);
await Collector.F4sdAgent.DoScanAsync(true, false, _requestInfo, 1, CancellationToken.None);
}
await Task.Delay(1000);
if (Collector.NxqlCollector != null)
{
await Collector.NxqlCollector.DoScanAsync(false, false, _requestInfo, 1, CancellationToken.None);
await Task.Delay(1000);
}
if (Collector.M42WpmCollector != null)
{
await Collector.M42WpmCollector.DoScanAsync(false, false, _requestInfo, 1, CancellationToken.None);
await Task.Delay(1000);
}
if (Collector.CitrixCollector != null)
{
await Collector.CitrixCollector.DoScanAsync(false, false, _requestInfo, 1, CancellationToken.None);
await Task.Delay(1000);
}
await Collector.DoCleanup(false, _requestInfo, 1, CancellationToken.None);
}
catch (Exception E)
{
LogException(E);
}
finally
{
ctrlProtocolBox1.ProcessMessage("");
await Task.Delay(10000);
Cursor = Cursors.Default;
if (CM != null) LogMethodEnd(CM);
Program.mainForm.Close();
}
}
private async void buttonLoad_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
Cursor = Cursors.WaitCursor;
Program.Collector = null;
ctrlProtocolBox1.ClearMessages();
buttonLoad.Enabled = false;
buttonCheckDatabase.Enabled = false;
Program.mainForm.DisableAllTabPages(this);
cF4SDLicense.CheckLicense(null, null);
var lstLicenseLog = cF4SDLicense.LogLicenseState();
foreach (var _s in lstLicenseLog)
ctrlProtocolBox1.ProcessMessage(_s);
ctrlProtocolBox1.ProcessMessage("");
if (cF4SDLicense.Instance?.IsValid != true)
return;
var Collector = new cDataHistoryCollector(autoConnectionCheck: false, null, 0);
Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
var _requestInfo = new cF4sdWebRequestInfo("buttonLoad_Click", null);
var IsLoaded = await Collector.LoadConfigurationAsync(true, true, CancellationToken.None, null, 0);
if (IsLoaded)
{
ctrlProtocolBox1.ProcessMessage("");
Collector.ValidateClientConfiguration();
buttonCheckDatabase.Enabled = true;
Program.Collector = Collector;
}
}
catch (Exception E)
{
LogException(E);
}
finally
{
ctrlProtocolBox1.ProcessMessage("");
buttonLoad.Enabled = true;
Cursor = Cursors.Default;
if (CM != null) LogMethodEnd(CM);
}
}
private async void buttonCheckDatabase_Click(object sender, EventArgs e)
{
if (Program.Collector == null)
return;
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
Cursor = Cursors.WaitCursor;
this.Enabled = false;
Program.Collector.CleanupUiMessageHandler();
Program.Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
var _requestInfo = new cF4sdWebRequestInfo("buttonCheckDatabase_Click", null);
var IsOk = await Program.Collector.ValidateHistoryDatabasesAsync(false, CancellationToken.None, _requestInfo, 0);
if (IsOk)
{
await Program.Collector.ValidateF4SDAnalyticsDBAsync(_requestInfo, 1, CancellationToken.None,true);
await Program.Collector.UpdateF4SDAnalyticsConfigInfosAsync(_requestInfo, 1, CancellationToken.None);
buttonValidateAgentDb.Enabled = true;
Program.mainForm.RemoveAllTabPages(Program.mainForm.tabPageMain);
Program.mainForm.tabControlMain.TabPages.Add(Program.mainForm.tabPageAgent);
Program.mainForm.tabControlMain.TabPages.Add(Program.mainForm.tabPageActiveDirectory);
Program.mainForm.tabControlMain.TabPages.Add(Program.mainForm.tabPageCleanup);
Program.mainForm.tabControlMain.TabPages.Add(Program.mainForm.tabPageTest);
if (Program.Collector.InfrastructureConfig.F4SDAnalyticsDB != null)
Program.mainForm.tabControlMain.TabPages.Add(Program.mainForm.tabPageF4SDAnalytics);
if (Program.Collector.CitrixCollector != null && Program.Collector.InfrastructureConfig.CitrixTenants?.Values != null)
Program.mainForm.tabControlMain.TabPages.Add(Program.mainForm.tabPageCitrix);
if (Program.Collector.NxqlCollector != null && !Program.mainForm.tabControlMain.TabPages.Contains(Program.mainForm.tabPageNexthink))
Program.mainForm.tabControlMain.TabPages.Insert(3, Program.mainForm.tabPageNexthink);
if (Program.Collector.M42WpmCollector != null && !Program.mainForm.tabControlMain.TabPages.Contains(Program.mainForm.tabPageM42WPM))
Program.mainForm.tabControlMain.TabPages.Insert(3, Program.mainForm.tabPageM42WPM);
Program.mainForm.EnableAllTabPages();
}
}
catch (Exception E)
{
LogException(E);
}
finally
{
ctrlProtocolBox1.ProcessMessage("");
this.Enabled = true;
Cursor = Cursors.Default;
if (CM != null) LogMethodEnd(CM);
}
}
private async void buttonValidateAgentDb_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
if (Program.Collector == null)
return;
Cursor = Cursors.WaitCursor;
this.Enabled = false;
Program.mainForm.DisableAllTabPages(this);
Program.Collector.CleanupUiMessageHandler();
Program.Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
var _requestInfo = new cF4sdWebRequestInfo("buttonValidateAgentDb_Click", null);
await Program.Collector.ValidateAgentDbUpdates(_requestInfo, 1, CancellationToken.None);
}
catch (Exception E)
{
LogException(E);
}
finally
{
ctrlProtocolBox1.ProcessMessage("");
this.Enabled = true;
Program.mainForm.EnableAllTabPages();
Cursor = Cursors.Default;
if (CM != null) LogMethodEnd(CM);
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,383 @@

namespace C4IT_DataHistoryProvider_Test
{
partial class ctrlNexthink
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ctrlNexthink));
this.buttonScanTableColumns = new System.Windows.Forms.Button();
this.imageListStatus = new System.Windows.Forms.ImageList(this.components);
this.buttonQueryData = new System.Windows.Forms.Button();
this.panelScanNext = new System.Windows.Forms.Panel();
this.textBoxScanNext = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.textBoxScanLast = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.tabControlResult = new System.Windows.Forms.TabControl();
this.tabPageProtocol = new System.Windows.Forms.TabPage();
this.tabPageQueryResult = new System.Windows.Forms.TabPage();
this.splitContainerTableResult = new System.Windows.Forms.SplitContainer();
this.treeViewValidationResult = new System.Windows.Forms.TreeView();
this.splitContainerTableResultDetails = new System.Windows.Forms.SplitContainer();
this.panelTableDetailsTop = new System.Windows.Forms.Panel();
this.richTextBoxTableResult = new System.Windows.Forms.RichTextBox();
this.panelTableDetailsBottom = new System.Windows.Forms.Panel();
this.webBrowserTableResult = new System.Windows.Forms.WebBrowser();
this.buttonRemoveScan = new System.Windows.Forms.Button();
this.buttonTest = new System.Windows.Forms.Button();
this.ctrlProtocolBox1 = new C4IT_DataHistoryProvider_Test.ctrlProtocolBox();
this.tabControlResult.SuspendLayout();
this.tabPageProtocol.SuspendLayout();
this.tabPageQueryResult.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainerTableResult)).BeginInit();
this.splitContainerTableResult.Panel1.SuspendLayout();
this.splitContainerTableResult.Panel2.SuspendLayout();
this.splitContainerTableResult.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainerTableResultDetails)).BeginInit();
this.splitContainerTableResultDetails.Panel1.SuspendLayout();
this.splitContainerTableResultDetails.Panel2.SuspendLayout();
this.splitContainerTableResultDetails.SuspendLayout();
this.panelTableDetailsTop.SuspendLayout();
this.panelTableDetailsBottom.SuspendLayout();
this.SuspendLayout();
//
// buttonScanTableColumns
//
this.buttonScanTableColumns.Location = new System.Drawing.Point(36, 28);
this.buttonScanTableColumns.Margin = new System.Windows.Forms.Padding(6, 8, 6, 8);
this.buttonScanTableColumns.Name = "buttonScanTableColumns";
this.buttonScanTableColumns.Size = new System.Drawing.Size(236, 78);
this.buttonScanTableColumns.TabIndex = 1;
this.buttonScanTableColumns.Text = "Scan NXQL columns";
this.buttonScanTableColumns.UseVisualStyleBackColor = true;
this.buttonScanTableColumns.Click += new System.EventHandler(this.buttonScanTableColumns_Click);
//
// imageListStatus
//
this.imageListStatus.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListStatus.ImageStream")));
this.imageListStatus.TransparentColor = System.Drawing.Color.Transparent;
this.imageListStatus.Images.SetKeyName(0, "OK_24.png");
this.imageListStatus.Images.SetKeyName(1, "Warning_24.png");
this.imageListStatus.Images.SetKeyName(2, "Error_24.png");
//
// buttonQueryData
//
this.buttonQueryData.Enabled = false;
this.buttonQueryData.Location = new System.Drawing.Point(284, 28);
this.buttonQueryData.Margin = new System.Windows.Forms.Padding(6, 8, 6, 8);
this.buttonQueryData.Name = "buttonQueryData";
this.buttonQueryData.Size = new System.Drawing.Size(236, 78);
this.buttonQueryData.TabIndex = 3;
this.buttonQueryData.Text = "Query NXQL data";
this.buttonQueryData.UseVisualStyleBackColor = true;
this.buttonQueryData.Click += new System.EventHandler(this.buttonQueryData_Click);
//
// panelScanNext
//
this.panelScanNext.Location = new System.Drawing.Point(750, 125);
this.panelScanNext.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.panelScanNext.Name = "panelScanNext";
this.panelScanNext.Size = new System.Drawing.Size(39, 40);
this.panelScanNext.TabIndex = 13;
//
// textBoxScanNext
//
this.textBoxScanNext.Location = new System.Drawing.Point(514, 137);
this.textBoxScanNext.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.textBoxScanNext.Name = "textBoxScanNext";
this.textBoxScanNext.ReadOnly = true;
this.textBoxScanNext.Size = new System.Drawing.Size(210, 26);
this.textBoxScanNext.TabIndex = 12;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(413, 140);
this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(93, 20);
this.label2.TabIndex = 11;
this.label2.Text = "Target time:";
//
// textBoxScanLast
//
this.textBoxScanLast.Location = new System.Drawing.Point(123, 137);
this.textBoxScanLast.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.textBoxScanLast.Name = "textBoxScanLast";
this.textBoxScanLast.ReadOnly = true;
this.textBoxScanLast.Size = new System.Drawing.Size(210, 26);
this.textBoxScanLast.TabIndex = 10;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(33, 140);
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(82, 20);
this.label1.TabIndex = 9;
this.label1.Text = "Last scan:";
//
// tabControlResult
//
this.tabControlResult.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tabControlResult.Controls.Add(this.tabPageProtocol);
this.tabControlResult.Controls.Add(this.tabPageQueryResult);
this.tabControlResult.Location = new System.Drawing.Point(36, 189);
this.tabControlResult.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.tabControlResult.Name = "tabControlResult";
this.tabControlResult.SelectedIndex = 0;
this.tabControlResult.Size = new System.Drawing.Size(981, 458);
this.tabControlResult.TabIndex = 15;
//
// tabPageProtocol
//
this.tabPageProtocol.Controls.Add(this.ctrlProtocolBox1);
this.tabPageProtocol.Location = new System.Drawing.Point(4, 29);
this.tabPageProtocol.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.tabPageProtocol.Name = "tabPageProtocol";
this.tabPageProtocol.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.tabPageProtocol.Size = new System.Drawing.Size(973, 425);
this.tabPageProtocol.TabIndex = 1;
this.tabPageProtocol.Text = "Protocol";
this.tabPageProtocol.UseVisualStyleBackColor = true;
//
// tabPageQueryResult
//
this.tabPageQueryResult.Controls.Add(this.splitContainerTableResult);
this.tabPageQueryResult.Location = new System.Drawing.Point(4, 29);
this.tabPageQueryResult.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.tabPageQueryResult.Name = "tabPageQueryResult";
this.tabPageQueryResult.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.tabPageQueryResult.Size = new System.Drawing.Size(973, 425);
this.tabPageQueryResult.TabIndex = 0;
this.tabPageQueryResult.Text = "Query result";
this.tabPageQueryResult.UseVisualStyleBackColor = true;
//
// splitContainerTableResult
//
this.splitContainerTableResult.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainerTableResult.Location = new System.Drawing.Point(4, 5);
this.splitContainerTableResult.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.splitContainerTableResult.Name = "splitContainerTableResult";
//
// splitContainerTableResult.Panel1
//
this.splitContainerTableResult.Panel1.Controls.Add(this.treeViewValidationResult);
//
// splitContainerTableResult.Panel2
//
this.splitContainerTableResult.Panel2.Controls.Add(this.splitContainerTableResultDetails);
this.splitContainerTableResult.Size = new System.Drawing.Size(965, 415);
this.splitContainerTableResult.SplitterDistance = 479;
this.splitContainerTableResult.SplitterWidth = 9;
this.splitContainerTableResult.TabIndex = 3;
//
// treeViewValidationResult
//
this.treeViewValidationResult.Dock = System.Windows.Forms.DockStyle.Fill;
this.treeViewValidationResult.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.treeViewValidationResult.ImageIndex = 0;
this.treeViewValidationResult.ImageList = this.imageListStatus;
this.treeViewValidationResult.Indent = 28;
this.treeViewValidationResult.ItemHeight = 28;
this.treeViewValidationResult.Location = new System.Drawing.Point(0, 0);
this.treeViewValidationResult.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.treeViewValidationResult.Name = "treeViewValidationResult";
this.treeViewValidationResult.SelectedImageIndex = 0;
this.treeViewValidationResult.Size = new System.Drawing.Size(479, 415);
this.treeViewValidationResult.TabIndex = 0;
this.treeViewValidationResult.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViewValidationResult_AfterSelect);
//
// splitContainerTableResultDetails
//
this.splitContainerTableResultDetails.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainerTableResultDetails.Location = new System.Drawing.Point(0, 0);
this.splitContainerTableResultDetails.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.splitContainerTableResultDetails.Name = "splitContainerTableResultDetails";
this.splitContainerTableResultDetails.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainerTableResultDetails.Panel1
//
this.splitContainerTableResultDetails.Panel1.Controls.Add(this.panelTableDetailsTop);
//
// splitContainerTableResultDetails.Panel2
//
this.splitContainerTableResultDetails.Panel2.BackColor = System.Drawing.SystemColors.Window;
this.splitContainerTableResultDetails.Panel2.Controls.Add(this.panelTableDetailsBottom);
this.splitContainerTableResultDetails.Size = new System.Drawing.Size(477, 415);
this.splitContainerTableResultDetails.SplitterDistance = 43;
this.splitContainerTableResultDetails.SplitterWidth = 6;
this.splitContainerTableResultDetails.TabIndex = 0;
//
// panelTableDetailsTop
//
this.panelTableDetailsTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panelTableDetailsTop.Controls.Add(this.richTextBoxTableResult);
this.panelTableDetailsTop.Dock = System.Windows.Forms.DockStyle.Fill;
this.panelTableDetailsTop.Location = new System.Drawing.Point(0, 0);
this.panelTableDetailsTop.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.panelTableDetailsTop.Name = "panelTableDetailsTop";
this.panelTableDetailsTop.Size = new System.Drawing.Size(477, 43);
this.panelTableDetailsTop.TabIndex = 1;
//
// richTextBoxTableResult
//
this.richTextBoxTableResult.BackColor = System.Drawing.SystemColors.Window;
this.richTextBoxTableResult.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.richTextBoxTableResult.Dock = System.Windows.Forms.DockStyle.Fill;
this.richTextBoxTableResult.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.richTextBoxTableResult.HideSelection = false;
this.richTextBoxTableResult.Location = new System.Drawing.Point(0, 0);
this.richTextBoxTableResult.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.richTextBoxTableResult.Name = "richTextBoxTableResult";
this.richTextBoxTableResult.ReadOnly = true;
this.richTextBoxTableResult.Size = new System.Drawing.Size(475, 41);
this.richTextBoxTableResult.TabIndex = 0;
this.richTextBoxTableResult.Text = "";
//
// panelTableDetailsBottom
//
this.panelTableDetailsBottom.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panelTableDetailsBottom.Controls.Add(this.webBrowserTableResult);
this.panelTableDetailsBottom.Dock = System.Windows.Forms.DockStyle.Fill;
this.panelTableDetailsBottom.Location = new System.Drawing.Point(0, 0);
this.panelTableDetailsBottom.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.panelTableDetailsBottom.Name = "panelTableDetailsBottom";
this.panelTableDetailsBottom.Size = new System.Drawing.Size(477, 366);
this.panelTableDetailsBottom.TabIndex = 1;
//
// webBrowserTableResult
//
this.webBrowserTableResult.AllowNavigation = false;
this.webBrowserTableResult.AllowWebBrowserDrop = false;
this.webBrowserTableResult.Dock = System.Windows.Forms.DockStyle.Fill;
this.webBrowserTableResult.IsWebBrowserContextMenuEnabled = false;
this.webBrowserTableResult.Location = new System.Drawing.Point(0, 0);
this.webBrowserTableResult.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.webBrowserTableResult.MinimumSize = new System.Drawing.Size(30, 31);
this.webBrowserTableResult.Name = "webBrowserTableResult";
this.webBrowserTableResult.Size = new System.Drawing.Size(475, 364);
this.webBrowserTableResult.TabIndex = 0;
this.webBrowserTableResult.WebBrowserShortcutsEnabled = false;
//
// buttonRemoveScan
//
this.buttonRemoveScan.Enabled = false;
this.buttonRemoveScan.Location = new System.Drawing.Point(532, 28);
this.buttonRemoveScan.Margin = new System.Windows.Forms.Padding(6, 8, 6, 8);
this.buttonRemoveScan.Name = "buttonRemoveScan";
this.buttonRemoveScan.Size = new System.Drawing.Size(236, 78);
this.buttonRemoveScan.TabIndex = 16;
this.buttonRemoveScan.Text = "Remove last scan";
this.buttonRemoveScan.UseVisualStyleBackColor = true;
this.buttonRemoveScan.Click += new System.EventHandler(this.buttonRemoveScan_Click);
//
// buttonTest
//
this.buttonTest.Location = new System.Drawing.Point(780, 28);
this.buttonTest.Margin = new System.Windows.Forms.Padding(6, 8, 6, 8);
this.buttonTest.Name = "buttonTest";
this.buttonTest.Size = new System.Drawing.Size(236, 78);
this.buttonTest.TabIndex = 17;
this.buttonTest.Text = "Test";
this.buttonTest.UseVisualStyleBackColor = true;
this.buttonTest.Click += new System.EventHandler(this.buttonTest_Click);
//
// ctrlProtocolBox1
//
this.ctrlProtocolBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.ctrlProtocolBox1.Location = new System.Drawing.Point(4, 5);
this.ctrlProtocolBox1.Name = "ctrlProtocolBox1";
this.ctrlProtocolBox1.Size = new System.Drawing.Size(965, 415);
this.ctrlProtocolBox1.TabIndex = 16;
//
// ctrlNexthink
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.buttonTest);
this.Controls.Add(this.buttonRemoveScan);
this.Controls.Add(this.tabControlResult);
this.Controls.Add(this.panelScanNext);
this.Controls.Add(this.textBoxScanNext);
this.Controls.Add(this.label2);
this.Controls.Add(this.textBoxScanLast);
this.Controls.Add(this.label1);
this.Controls.Add(this.buttonQueryData);
this.Controls.Add(this.buttonScanTableColumns);
this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.Name = "ctrlNexthink";
this.Size = new System.Drawing.Size(1040, 672);
this.Load += new System.EventHandler(this.ctrlNexthink_Load);
this.tabControlResult.ResumeLayout(false);
this.tabPageProtocol.ResumeLayout(false);
this.tabPageQueryResult.ResumeLayout(false);
this.splitContainerTableResult.Panel1.ResumeLayout(false);
this.splitContainerTableResult.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainerTableResult)).EndInit();
this.splitContainerTableResult.ResumeLayout(false);
this.splitContainerTableResultDetails.Panel1.ResumeLayout(false);
this.splitContainerTableResultDetails.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainerTableResultDetails)).EndInit();
this.splitContainerTableResultDetails.ResumeLayout(false);
this.panelTableDetailsTop.ResumeLayout(false);
this.panelTableDetailsBottom.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button buttonScanTableColumns;
private System.Windows.Forms.ImageList imageListStatus;
private System.Windows.Forms.Button buttonQueryData;
private System.Windows.Forms.Panel panelScanNext;
private System.Windows.Forms.TextBox textBoxScanNext;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox textBoxScanLast;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TabControl tabControlResult;
private System.Windows.Forms.TabPage tabPageQueryResult;
private System.Windows.Forms.SplitContainer splitContainerTableResult;
private System.Windows.Forms.TreeView treeViewValidationResult;
private System.Windows.Forms.SplitContainer splitContainerTableResultDetails;
private System.Windows.Forms.Panel panelTableDetailsTop;
private System.Windows.Forms.RichTextBox richTextBoxTableResult;
private System.Windows.Forms.Panel panelTableDetailsBottom;
private System.Windows.Forms.WebBrowser webBrowserTableResult;
private System.Windows.Forms.TabPage tabPageProtocol;
private System.Windows.Forms.Button buttonRemoveScan;
private System.Windows.Forms.Button buttonTest;
private ctrlProtocolBox ctrlProtocolBox1;
}
}

View File

@@ -0,0 +1,418 @@
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 System.IO;
using System.Diagnostics;
using C4IT.Logging;
using C4IT.DataHistoryProvider;
using static C4IT.Logging.cLogManager;
namespace C4IT_DataHistoryProvider_Test
{
public partial class ctrlNexthink : UserControl
{
private cNxqlColumnsValidationResult ValidationResults = null;
private bool isScanEnabled = false;
private bool isColumnCheck = false;
public ctrlNexthink()
{
InitializeComponent();
webBrowserTableResult.DocumentText = "<HTML></HTML>";
}
private async void ctrlNexthink_Load(object sender, EventArgs e)
{
panelScanNext.Height = textBoxScanNext.Height;
panelScanNext.Top = textBoxScanNext.Top;
var _requestInfo = new cF4sdWebRequestInfo("ctrlNexthink_Load", null);
await checkScanTimesAsync(_requestInfo, 1);
}
private void SetBrowserContent(string Content)
{
webBrowserTableResult.Navigate("about:blank");
var doc = webBrowserTableResult.Document.OpenNew(true);
if (string.IsNullOrWhiteSpace(Content))
doc.Write("<HTML></HTML>");
else
doc.Write(Content);
webBrowserTableResult.Refresh();
}
private async void buttonScanTableColumns_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
Cursor = Cursors.WaitCursor;
Program.mainForm.DisableAllTabPages(this);
buttonScanTableColumns.Enabled = false;
tabControlResult.SelectedIndex = 0;
tabPageProtocol.Refresh();
ctrlProtocolBox1.ClearMessages();
treeViewValidationResult.Nodes.Clear();
richTextBoxTableResult.Text = "";
SetBrowserContent(null);
var _requestInfo = new cF4sdWebRequestInfo("buttonScanTableColumns_Click", null);
Program.Collector.CleanupUiMessageHandler();
Program.Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
var Validator = new cNxqlColumnValidator(Program.Collector);
await Task.Run(async () =>
{
try
{
await Validator.DoValidationAsync(_requestInfo, 1, CancellationToken.None).ConfigureAwait(false);
}
catch (Exception E)
{
LogException(E);
}
});
TreeNode firstNode = null;
TreeNode firstErrorNode = null;
treeViewValidationResult.Nodes.Clear();
foreach (var Portal in Validator.ValidationResults.Values)
{
var tn = new TreeNode($"{Portal.Portal.Name} ({Portal.Portal.Address})");
treeViewValidationResult.Nodes.Add(tn);
foreach (var Table in Portal.TableResults.Values)
{
var tn2 = new TreeNode($"{Table.Table.Name}")
{
Tag = Table
};
tn.Nodes.Add(tn2);
var isAllValid = true;
foreach (var Column in Table.ColumnResults.Values)
{
isAllValid &= Column.IsValid;
var sn = "";
if (!string.IsNullOrEmpty(Column.Column.SourceTable))
sn = $" ({Column.Column.SourceTable} {Column.Column.SourceName})";
if (Column.Column.SourceName != Column.Column.Name)
sn = $" ({Column.Column.SourceName})";
var tn3 = new TreeNode($"{Column.Column.Name}{sn}")
{
Tag = Column
};
tn2.Nodes.Add(tn3);
if (Column.IsValid)
tn3.ImageIndex = 0;
else
{
tn3.ImageIndex = 2;
if (firstErrorNode == null)
firstErrorNode = tn2;
}
tn3.SelectedImageIndex = tn3.ImageIndex;
}
if (Table.IsValid)
{
if (isAllValid)
tn2.ImageIndex = 0;
else
{
tn2.ImageIndex = 1;
if (firstErrorNode == null)
firstErrorNode = tn2;
}
}
else
{
tn2.ImageIndex = 2;
if (firstErrorNode == null)
firstErrorNode = tn2;
}
tn2.SelectedImageIndex = tn2.ImageIndex;
if (!isAllValid)
tn2.Expand();
else
tn2.Collapse();
}
tn.ImageIndex = -1;
tn.SelectedImageIndex = -1;
tn.Expand();
if (firstNode == null)
firstNode = tn;
}
if (firstNode != null)
firstNode.EnsureVisible();
if (firstErrorNode != null)
firstErrorNode.EnsureVisible();
ValidationResults = Validator.ValidationResults;
isColumnCheck = true;
tabControlResult.SelectedIndex = 1;
tabPageQueryResult.Refresh();
await checkScanTimesAsync(_requestInfo, 1);
}
catch (Exception E)
{
LogException(E);
}
finally
{
ctrlProtocolBox1.ProcessMessage("");
this.Enabled = true;
Program.mainForm.EnableAllTabPages();
buttonScanTableColumns.Enabled = true;
Cursor = Cursors.Default;
if (CM != null) LogMethodEnd(CM);
}
}
private void treeViewValidationResult_AfterSelect(object sender, TreeViewEventArgs e)
{
if (treeViewValidationResult.SelectedNode?.Tag is cNxqlTableValidationResult TableResult)
{
richTextBoxTableResult.Text = TableResult.NXQL;
SetBrowserContent(TableResult.ErrorMessage);
return;
}
if (treeViewValidationResult.SelectedNode?.Tag is cNxqlColumnValidationResult ColumnResult)
{
richTextBoxTableResult.Text = ColumnResult.NXQL;
SetBrowserContent(ColumnResult.ErrorMessage);
return;
}
richTextBoxTableResult.Text = "";
SetBrowserContent(null);
}
private async void buttonQueryData_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
if (ValidationResults == null)
return;
if (Program.Collector == null)
return;
var _requestInfo = new cF4sdWebRequestInfo("buttonQueryData_Click", null);
Cursor = Cursors.WaitCursor;
ctrlProtocolBox1.ClearMessages();
this.Enabled = false;
SetBrowserContent(null);
tabControlResult.SelectedIndex = 0;
buttonQueryData.Enabled = false;
buttonScanTableColumns.Enabled = false;
buttonRemoveScan.Enabled = false;
Program.mainForm.DisableAllTabPages(this);
Program.Collector.CleanupUiMessageHandler();
Program.Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
if (Program.Collector.NxqlCollector != null)
{
Program.Collector.NxqlCollector.LastValidationResults = ValidationResults;
Application.DoEvents();
await Program.Collector.NxqlCollector.DoScanAsync(true, false, _requestInfo, 1, CancellationToken.None, true);
}
await checkScanTimesAsync(_requestInfo, 1);
}
catch (Exception E)
{
LogException(E);
}
finally
{
this.Enabled = true;
Program.mainForm.EnableAllTabPages();
Cursor = Cursors.Default;
if (CM != null) LogMethodEnd(CM);
}
}
private async Task checkScanTimesAsync(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
{
var Col = Color.Transparent;
textBoxScanLast.Text = "";
textBoxScanNext.Text = "";
isScanEnabled = false;
if (Program.Collector != null)
{
var scanInfo = await Program.Collector.NxqlCollector.GetScanTimeInfoAsync(requestInfo, LogDeep+1, CancellationToken.None);
if (scanInfo?.NextScan is DateTime nextScan)
{
textBoxScanNext.Text = nextScan.ToLocalTime().ToString();
if (scanInfo?.LastScan is DateTime lastScan)
{
textBoxScanLast.Text = lastScan.ToLocalTime().ToString();
if (nextScan >= lastScan)
{
Col = Color.Red;
isScanEnabled = true;
}
else
Col = Color.Green;
}
else
{
Col = Color.Red;
isScanEnabled = true;
}
}
else
{
Col = Color.Red;
isScanEnabled = true;
if (scanInfo?.LastScan is DateTime lastScan)
textBoxScanLast.Text = lastScan.ToLocalTime().ToString();
}
}
panelScanNext.BackColor = Col;
buttonQueryData.Enabled = isScanEnabled && isColumnCheck;
buttonRemoveScan.Enabled = isColumnCheck;
}
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);
}
}
private async Task DoScanAsync(bool Rescan)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
if (Program.Collector == null)
return;
try
{
Cursor = Cursors.WaitCursor;
ctrlProtocolBox1.ClearMessages();
buttonQueryData.Enabled = false;
buttonScanTableColumns.Enabled = false;
buttonRemoveScan.Enabled = false;
Program.mainForm.DisableAllTabPages(this);
Program.Collector.CleanupUiMessageHandler();
Program.Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
var _requestInfo = new cF4sdWebRequestInfo("DoScanNexthink", null);
await Program.Collector.NxqlCollector.DoScanAsync(true, Rescan, _requestInfo, 1, CancellationToken.None);
await checkScanTimesAsync(_requestInfo, 1);
}
catch (Exception E)
{
LogException(E);
}
finally
{
ctrlProtocolBox1.ProcessMessage("");
Program.mainForm.EnableAllTabPages();
buttonQueryData.Enabled = isScanEnabled && isColumnCheck; ;
buttonScanTableColumns.Enabled = true;
Cursor = Cursors.Default;
if (CM != null) LogMethodEnd(CM);
}
}
private async void buttonRemoveScan_Click(object sender, EventArgs e)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
Cursor = Cursors.WaitCursor;
ctrlProtocolBox1.ClearMessages();
buttonQueryData.Enabled = false;
buttonScanTableColumns.Enabled = false;
buttonRemoveScan.Enabled = false;
Program.mainForm.DisableAllTabPages(this);
Program.Collector.CleanupUiMessageHandler();
Program.Collector.ProcessUiMessage += ctrlProtocolBox1.ProcessMessage;
var _requestInfo = new cF4sdWebRequestInfo("buttonRemoveScan_Click", null);
await Program.Collector.RemoveLastScanHistoryEntry("NxqlScan-all", _requestInfo, 1, CancellationToken.None);
await checkScanTimesAsync(_requestInfo, 1);
}
catch (Exception E)
{
LogException(E);
}
finally
{
ctrlProtocolBox1.ProcessMessage("");
Program.mainForm.EnableAllTabPages();
buttonScanTableColumns.Enabled = true;
Cursor = Cursors.Default;
if (CM != null) LogMethodEnd(CM);
}
}
private async void buttonTest_Click(object sender, EventArgs e)
{
var ColVaidation = new cNxqlColumnsValidationResult();
await ColVaidation.LoadFromSqlAsync(Program.Collector, CancellationToken.None, null,0);
var NxqlCollector = new cNxqlDailyCollector(Program.Collector, ColVaidation);
if (!Program.Collector.ClusterConfig.Tables.TryGetValue("nxt-device-apps-outlook", out var _tbl))
return;
NxqlCollector.CreateJobs(new List<cDataHistoryConfigTable>(1) { _tbl }, DateTime.UtcNow.AddDays(-7), DateTime.UtcNow, "NEXThink", 11261, C4IT.FASD.Base.enumFasdInformationClass.Computer);
await NxqlCollector.Orchestrator.ProcessAsync(CancellationToken.None);
}
}
}

View File

@@ -0,0 +1,272 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="imageListStatus.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="imageListStatus.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAS
IQAAAk1TRnQBSQFMAgEBAwEAAWABAAFgAQABGAEAARgBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFg
AwABGAMAAQEBAAEgBgABJDYAAwMBBAMdASgDKQE+AykBPgMdASgDAwEEoAAEAgMFAQYDCgENAw8BFAMT
ARkDEwEaAxEBFgMLAQ4DBgEHBAKUAAQCAzMBUgFVAVcBVQG0AT4BewFaAfUBDAGmAUkB/wEMAaYBSQH/
AQwBpgFJAf8BDAGmAUkB/wE/AXsBWgH1AVUBVwFVAbQDMwFSBAKMAAQBAwcBCQMUARsDJQE3AkEBQgFz
A1EBngJVAVcBtANYAbcCUgFUAagDSAGEAy4BRwMXAR8DCQELBAKIAAMlATYBWwFfAVsB0AEMAaYBSQH/
AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGm
AUkB/wEMAaYBSQH/AVsBXwFbAdADJQE2GAADOgFgAU4CTwGXAU4CTwGXAU4CTwGXAU4CTwGXAU4CTwGX
AU4CTwGXAU4CTwGXAU4CTwGXAU4CTwGXAU4CTwGXAU4CTwGXAU4CTwGXAU4CTwGXAU4CTwGXAU4CTwGX
AU4CTwGXAU4CTwGXAU4CTwGXAU4CTwGXAU4CTwGXAzoBYBQAAwIBAwMPARQDLAFDA1UBrQI8AYMB9AIA
AcAB/wIAAbgB/wIAAbQB/wIAAbMB/wIAAbYB/wIAAb0B/wIOAbcB/QJbAV0BzAM7AWMDEwEZAwQBBYAA
AzsBZAEmAYkBTQH6AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/
AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/ASYBiQFNAfoDOwFl
FAABXAFgAWEB2QERAckB8wH/AREByQHzAf8BEQHJAfMB/wERAckB8wH/AREByQHzAf8BEQHJAfMB/wER
AckB8wH/AREByQHzAf8BEQHJAfMB/wERAckB8wH/AREByQHzAf8BEQHJAfMB/wERAckB8wH/AREByQHz
Af8BEQHJAfMB/wERAckB8wH/AREByQHzAf8BEQHJAfMB/wERAckB8wH/AREByQHzAf8BXAFgAWEB2RAA
AwMBBAMTARoDRAF7AkUBgAHyAgABwQH/AgABtAH/AgABqgH/AgABpAH/AgABogH/AgABogH/AgABowH/
AgABqAH/AgABsAH/AgABvAH/AgAByAH/AlUBVwGxAxwBJwMFAQZ4AAM6AWIBGwGYAV8B/gEMAaYBSQH/
AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGm
AUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BGAGOAVUB/gM7AWUQAAM6
AWEBEgHJAfQB/wESAckB9AH/ARIByQH0Af8BEgHJAfQB/wESAckB9AH/ARIByQH0Af8BEgHJAfQB/wES
AckB9AH/ARIByQH0Af8BGgGfAeQB/wEcAZYB4QH/ARMByAHzAf8BEgHJAfQB/wESAckB9AH/ARIByQH0
Af8BEgHJAfQB/wESAckB9AH/ARIByQH0Af8BEgHJAfQB/wESAckB9AH/AzoBYQwABAIDEgEYA00BkwIC
AasB/gIAAbcB/wIAAaoB/wIAAaQB/wEAAQQBpQH/AQABEgGpAf8BAAEdAa4B/wEAASMBsQH/AQABIwGx
Af8BAAEYAa4B/wEAAQQBpwH/AgABpwH/AgABsgH/AgABvwH/AlsBXwHQAx0BKQMDAQRwAAMjATMBLwGR
AWgB+QESAboBXgH/AQ8BsAFUAf8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BKwGwAV8B/wEMAaYBSQH/
AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGm
AUkB/wEMAaYBSQH/ASYBiQFNAfoDJQE3DAAEAgFbAlwBywEUAcoB9AH/ARQBygH0Af8BFAHKAfQB/wEU
AcoB9AH/ARQBygH0Af8BFAHKAfQB/wEUAcoB9AH/ARgBtAHuAf8CMgHZAf8CMgHZAf8BHQGeAekB/wEU
AcoB9AH/ARQBygH0Af8BFAHKAfQB/wEUAcoB9AH/ARQBygH0Af8BFAHKAfQB/wEUAcoB9AH/AVsCXAHL
BAIIAAQBAwwBDwNFAXwCAAG9Af8CAAGzAf8CAAGpAf8BAAECAagB/wEAARUBrgH/AQABJQG1Af8BAAEx
AboB/wEAATsBvwH/AQABQgHCAf8BAAFHAcUB/wEAAUgBxQH/AQABQgHCAf8BAAEmAbcB/wIAAaoB/wIA
Aa8B/wIAAboB/wJaAVsBxQMSARcEAmgABAIBWwJcAc0BEgG6AV4B/wESAboBXgH/ARIBugFeAf8BDwGw
AVQB/wEMAaYBSQH/AYUBywGhAf8B6AHrAeYB/wFIAboBcwH/AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/
AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BWwFf
AVsB0AQCDAADKAE7ASEBswHdAf4BFQHLAfUB/wEVAcsB9QH/ARUBywH1Af8BFQHLAfUB/wEVAcsB9QH/
ARUBywH1Af8BFwG/AfMB/wExAT8B3gH/ATMBOAHcAf8BGwGwAfAB/wEVAcsB9QH/ARUBywH1Af8BFQHL
AfUB/wEVAcsB9QH/ARUBywH1Af8BFQHLAfUB/wEhAbMB3QH+AycBOgwAAwQBBQMpAT4CNAGBAfUCAAGz
Af8CAAGsAf8BAAEGAa0B/wEAAR0BrgH/AS0BVAHCAf8BAAE4AbwB/wEAAUgByAH/AQABUwHOAf8BAAFa
AdEB/wEAAV0B0gH/AQABWgHOAf8BDQFgAcsB/wEZAWABygH/AQABNQG+Af8BAAEBAa4B/wIAAbAB/wIA
AbcB/wNIAYQDBgEIaAADMgFPARIBugFeAf8BEgG6AV4B/wESAboBXgH/ARIBugFeAf8BEgG6AV4B/wGJ
AdMBqgH/Ae8B7QHrAf8B7wHtAesB/wHoAesB5gH/AUgBugFzAf8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJ
Af8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGmAUkB/wMz
AVIQAAFTAlQBpgEWAcsB9gH/ARYBywH2Af8BFgHLAfYB/wEWAcsB9gH/ARYBywH2Af8BFgHLAfYB/wEW
AcsB9gH/ARcBxAH1Af8BGAHBAfQB/wEWAcsB9gH/ARYBywH2Af8BFgHLAfYB/wEWAcsB9gH/ARYBywH2
Af8BFgHLAfYB/wEWAcsB9gH/AVICUwGlDAAEAQMMAQ8CVQFXAbECAAGyAf8CAAGwAf8BAAEEAbAB/wEA
ARoBqQH/AaQBswHfAf8B+gH7Af0B/wFIAYIBywH/AQABUgHGAf8BAAFoAdkB/wEAAXAB3QH/AQABawHW
Af8BDQFnAccB/wHVAeQB9AH/AeIB6wH3Af8BGQFYAcAB/wEAASwBuwH/AgABsAH/AgABsgH/AkcBeAHx
AxkBIwQBZAABVQJWAbABEgG6AV4B/wESAboBXgH/ARIBugFeAf8BEgG6AV4B/wGNAdwBswX/AfcB9gH1
Af8B7wHtAesB/wHvAe0B6wH/AegB6wHmAf8BSQG6AXQB/wEMAaYBSQH/AQwBpgFJAf8BDAGmAUkB/wEM
AaYBSQH/AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGmAUkB/wFVAlcBtBAAAxUBHQFC
AYcBlwH1ARcBzAH2Af8BFwHMAfYB/wEXAcwB9gH/ARcBzAH2Af8BFwHMAfYB/wEXAcwB9gH/ARwBswHt
Af8BHQGvAesB/wEXAcwB9gH/ARcBzAH2Af8BFwHMAfYB/wEXAcwB9gH/ARcBzAH2Af8BFwHMAfYB/wFD
AYcBkgH0AxUBHQwABAIDIAEuAh4BjwH6AgABsAH/AgABswH/AQABGAGzAf8BUQFoAb4J/wH5AfsB/QH/
AUgBiQHHAf8BAAFnAcsB/wEAAYEB2gH/AQ0BaAHAAf8B1QHkAfIJ/wG7AcoB5gH/AQABNgG0Af8BAAET
AbsB/wIAAbEB/wIAAa8B/wNFAXwDAwEEYAADAwEEAUgBgAFgAfMBEgG6AV4B/wESAboBXgH/ARIBugFe
Af8BjQHcAbMN/wH3AfYB9QH/Ae8B7QHrAf8B7wHtAesB/wHoAesB5gH/AUkBugF0Af8BDAGmAUkB/wEM
AaYBSQH/AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/AT4BewFa
AfUDAwEEEAADRgF+ARgBzQH3Af8BGAHNAfcB/wEYAc0B9wH/ARgBzQH3Af8BGAHNAfcB/wEYAc0B9wH/
ATEBWwHkAf8BNAFPAeIB/wEYAc0B9wH/ARgBzQH3Af8BGAHNAfcB/wEYAc0B9wH/ARgBzQH3Af8BGAHN
AfcB/wNGAX4QAAMEAQUCQQFCAXMCAAGsAf8CAAGzAf8BAAELAb0B/wEAASsBxQH/AQABKwGqAf8BkAGj
Ac0J/wH6AfsB/QH/AUcBiAG+Af8BDQFbAawB/wHVAeMB7wn/AdcB3wHtAf8BDgFFAawB/wEAAUABxwH/
AQABKgHIAf8CAAG2Af8CAAGuAf8CWQFcAcYDBgEIYAADGwEmARIBugFeAf8BEgG6AV4B/wESAboBXgH/
AY4B3AG0Ef8B/gH/Af4B/wH3AfYB9QH/Ae8B7QHrAf8B7wHtAesB/wHoAesB5gH/AUkBugF0Af8BDAGm
AUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/
Ax0BKRAAAwgBCgFdAWcBaQHhARkBzgH4Af8BGQHOAfgB/wEZAc4B+AH/ARkBzgH4Af8BGQHOAfgB/wE3
AUoB5AH/AToBPwHjAf8BGQHNAfcB/wEZAc4B+AH/ARkBzgH4Af8BGQHOAfgB/wEZAc4B+AH/AV8BZgFo
AeADBwEJEAADBgEHAlEBUgGkAgABrAH/AgABuAH/AQABGwHHAf8BAAE3AdEB/wEAAUcB0QH/AQABOQGp
Af8BkAGhAccJ/wH6AfsB/QH/Ad4B5gHwCf8B1wHdAeoB/wEPAUIBogH/AQABSgHKAf8BAAFCAdQB/wEA
AS0BzQH/AgABvQH/AgABsQH/Aj8BeAHzAwsBDmAAAygBPAESAboBXgH/ARIBugFeAf8BjQHcAbMR/wHH
Ae4B2gH/AUIByQGIAf8B6gH5AfEB/wH3AfYB9QH/Ae8B7QHrAf8B7wHtAesB/wHoAesB5gH/AUkBugF0
Af8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGmAUkB/wMp
AT4UAAM2AVcBGgHOAfgB/wEaAc4B+AH/ARoBzgH4Af8BGgHOAfgB/wEaAc0B+AH/ATwBQgHlAf8CPQHl
Af8BHAHGAfYB/wEaAc4B+AH/ARoBzgH4Af8BGgHOAfgB/wEaAc4B+AH/AzUBVhQAAwcBCQJZAVoBvwIA
AasB/wIAAbkB/wEAASYBzAH/AQABPwHUAf8BAAFSAdoB/wEAAV4B2AH/AQABPQGiAf8BkAGbAb4R/wHX
AdoB5gH/AQ8BOQGTAf8BAAFPAckB/wEAAUwB2AH/AQABOQHSAf8BAAElAcwB/wEAAQIBvwH/AgABsQH/
AgABpQH/AxUBHWAAAygBPAESAboBXgH/ARIBugFeAf8BjQHcAbMN/wHHAe4B2gH/ARwBvQFlAf8BEgG6
AV4B/wE3AcUBgQH/AeoB+QHxAf8B9wH2AfUB/wHvAe0B6wH/Ae8B7QHrAf8B6AHrAeYB/wFJAboBdAH/
AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/AykBPhQABAEBVwJa
AcIBGwHPAfkB/wEbAc8B+QH/ARsBzwH5Af8BHAHLAfgB/wE/AUAB5gH/Aj8B5gH/ASEBugH1Af8BGwHP
AfkB/wEbAc8B+QH/ARsBzwH5Af8DWQHBGAADBgEIAloBWwHFAgABqAH/AgABuQH/AQABKgHNAf8BAAFB
AdUB/wEAAVQB2gH/AQABZAHfAf8BAAFaAcYB/wEOAScBcAH/Ae8B8AH1Df8BXQFlAZ4B/wEAATIBngH/
AQABTwHWAf8BAAE/AdQB/wEAAS0BzgH/AQABGQHIAf8CAAG+Af8CAAGuAf8CAAGhAf8DGgEkYAADGwEm
ARIBugFeAf8BEgG6AV4B/wESAboBXgH/AY0B3AGzBf8BxwHuAdoB/wEcAb0BZQH/ARIBugFeAf8BEgG6
AV4B/wESAboBXgH/ATcBxQGBAf8B6gH5AfEB/wH3AfYB9QH/Ae8B7QHrAf8B7wHtAesB/wHoAesB5gH/
AUkBugF0Af8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BDAGmAUkB/wEMAaYBSQH/Ax0BKRgAAyMBMgE0
AboB1QH9AR0B0AH5Af8BHQHQAfkB/wEgAcQB9wH/AkEB6AH/AkEB6AH/ASUBrwH0Af8BHQHQAfkB/wEd
AdAB+QH/ASsBsgHIAfwDIgExGAADBAEFAlUBVwG0AgABowH/AgABtwH/AQABKAHMAf8BAAFAAdQB/wEA
AVAB2QH/AQABVAHMAf8BEAE+AZoB/wHVAdkB5xH/AvoB/AH/AUkBXAGkAf8BAAEuAa8B/wEAATABzQH/
AQABHQHKAf8BAAEKAcMB/wIAAbsB/wIAAasB/wIOAZwB/QMOARJgAAMDAQQBSAGAAWAB8wESAboBXgH/
ARIBugFeAf8BEgG6AV4B/wFnAdQBoQH/ARwBvQFlAf8BEgG6AV4B/wESAboBXgH/ARIBugFeAf8BEgG6
AV4B/wESAboBXgH/ATcBxQGBAf8B6gH5AfEB/wH3AfYB9QH/Ae8B7QHrAf8B7wHtAesB/wHoAesB5gH/
AUkBugF0Af8BDAGmAUkB/wEMAaYBSQH/AQwBpgFJAf8BPgF7AVoB9QMDAQQcAAFPAlABmwEeAdAB+gH/
AR4B0AH6Af8BIwG8AfcB/wJDAeoB/wJDAeoB/wEqAaUB9AH/AR4B0AH6Af8BHgHQAfoB/wFPAlABmxwA
AwIBAwNLAY0CAAGeAf8CAAGzAf8BAAEcAcgB/wEGAUYB1QH/AREBUgHNAf8BHgFHAacB/wHXAdwB6gn/
AdkB3wHsAf8BngGsAc8J/wL6AfwB/wFRAV8BrgH/AQ4BKQGyAf8BDAEgAcgB/wIAAcAB/wIAAbgB/wIA
AaUB/wJZAWYB5QMEAQVkAAFVAlYBsAESAboBXgH/ARIBugFeAf8BEgG6AV4B/wESAboBXgH/ARIBugFe
Af8BEgG6AV4B/wESAboBXgH/ARIBugFeAf8BEgG6AV4B/wESAboBXgH/ARIBugFeAf8BNwHFAYEB/wHq
AfkB8QH/AfcB9gH1Af8B7wHtAesB/wHvAe0B6wH/AegB6wHmAf8BSQG6AXQB/wEMAaYBSQH/AQwBpgFJ
Af8BVQJXAbQgAAMSARcBUgGBAYsB8QEfAdEB+wH/ASYBtgH3Af8CRQHsAf8CRQHsAf8BLQGgAfUB/wEf
AdEB+wH/AU8BeQGCAfADEQEWHAAEAQMxAU0CAAGVAf8CAAGsAf8BFQElAcgB/wErAVYB0gH/AS8BUAG0
Af8B2QHfAe4J/wHcAeIB8AH/AS8BVQGxAf8BHQFIAa8B/wGfAawB1Qn/AvoB/QH/AVwBYgG4Af8BJQEp
AboB/wIpAcsB/wIAAbQB/wIAAZ0B/wNTAacEAmQAAzIBTwESAboBXgH/ARIBugFeAf8BEgG6AV4B/wES
AboBXgH/ARIBugFeAf8BEgG6AV4B/wESAboBXgH/ARIBugFeAf8BEgG6AV4B/wESAboBXgH/ARIBugFe
Af8BEgG6AV4B/wE3AcUBgQH/AeoB+QHxAf8B9wH2AfUB/wHvAe0B6wH/Ae8B7QHrAf8B6AHrAeYB/wE9
AbYBbAH/AQwBpgFJAf8DMwFSJAADQgF0ASAB0gH7Af8BJgG+AfkB/wFGAUcB7gH/AkYB7gH/ASsBrAH3
Af8BIAHSAfsB/wFBAkIBcyQAAwkBCwJZAWcB5gIAAaEB/wEVARcBvwH/AUABVwHPAf8BaAGFAcoB/wH7
AfwB/gX/AeEB5QH0Af8BRQFkAcEB/wFAAWoB1QH/AUMBawHaAf8BNgFSAb8B/wGpAbEB3Qn/ArcB4AH/
AjcBuwH/AjIBygH/AgABqgH/AgABkgH/AzEBTWgABAIBWwJcAc0BEgG6AV4B/wESAboBXgH/ARIBugFe
Af8BEgG6AV4B/wESAboBXgH/ARIBugFeAf8BEgG6AV4B/wESAboBXgH/ARIBugFeAf8BEgG6AV4B/wES
AboBXgH/ARIBugFeAf8BNwHFAYEB/wHqAfkB8QH/AfcB9gH1Af8B7wHtAesB/wG4AdsBxQH/ARUBqQFP
Af8BWwFfAVsB0AQCJAADBQEGAVwBYAFhAdkBIQHTAfwB/wEwAaMB9wH/ATQBlAH2Af8BIgHQAfwB/wFc
AWABYQHZAwUBBiQABAEDQgF1AgABlAH/AgABrAH/AVIBVwHUAf8BVAFoAdIB/wGOAZwB2wH/AeMB5gH2
Af8BXwF0AdAB/wFYAXIB2QH/AV0BgAHgAf8BXQFyAd8B/wFbAWsB2gH/AVEBWQHKAf8BtwG4AeUB/wLG
AeoB/wJRAcYB/wJaAdQB/wIXAbwB/wIAAZwB/wJdAV8BzgMDAQRsAAMjATMBLwGRAWgB+QESAboBXgH/
ARIBugFeAf8BEgG6AV4B/wESAboBXgH/ARIBugFeAf8BEgG6AV4B/wESAboBXgH/ARIBugFeAf8BEgG6
AV4B/wESAboBXgH/ARIBugFeAf8BEgG6AV4B/wE3AcUBgQH/AeoB+QHxAf8BvgHkAc4B/wEVAakBTwH/
ASYBiQFNAfoDJQE2LAADMAFMASIB0wH8Af8BIgHTAfwB/wEiAdMB/AH/ASIB0wH8Af8DMAFMLAADBwEJ
AlsBXQHPAgABmwH/Ah4BuwH/AXMBgQHdAf8BcAGFAd0B/wFxAYYB3AH/AXIBiAHfAf8BdAGJAeIB/wF0
AYcB4QH/AXQBhAHgAf8BdAGAAeAB/wJzAd4B/wJvAdgB/wJvAdgB/wJyAdwB/wJNAc4B/wIAAaMB/wIa
AYIB+wMnATp0AAM6AWIBHgGjAWoB/gESAboBXgH/ARIBugFeAf8BEgG6AV4B/wESAboBXgH/ARIBugFe
Af8BEgG6AV4B/wESAboBXgH/ARIBugFeAf8BEgG6AV4B/wESAboBXgH/ARIBugFeAf8BEgG6AV4B/wEy
AcQBcwH/ARsBvQFkAf8BGwGYAV8B/gM7AWQ0AANYAbgBIwHUAf0B/wEjAdQB/QH/A1gBuDQAAxwBJwJT
AWUB6gIAAZwB/wI6AcIB/wKVAeIB/wGVAZcB5AH/AZUBlwHlAf8BlQGWAeUB/wKVAeUB/wKVAeUB/wKV
AeUB/wKVAeUB/wKVAeQB/wKVAeMB/wJpAdUB/wIAAaYB/wIAAZAB/wI/AUABbgQBeAADOgFiAS8BkQFo
AfkBEgG6AV4B/wESAboBXgH/ARIBugFeAf8BEgG6AV4B/wESAboBXgH/ARIBugFeAf8BEgG6AV4B/wES
AboBXgH/ARIBugFeAf8BEgG6AV4B/wESAboBXgH/ARIBugFeAf8BLwGRAWgB+QM6AWI4AAMeASoBLwGn
AcUB+wExAaUBvAH6Ax0BKTQABAEDIQEvAloBYgHiAgABmAH/AisBuAH/ApkB4AH/AqwB6QH/AqwB6QH/
AqwB6gH/AqwB6gH/AqwB6QH/AqwB6QH/AqkB5gH/AlUByQH/AgABoAH/Ag4BegH8A0ABcQQBgAADIwEz
AVsCXAHNARIBugFeAf8BEgG6AV4B/wESAboBXgH/ARIBugFeAf8BEgG6AV4B/wESAboBXgH/ARIBugFe
Af8BEgG6AV4B/wESAboBXgH/ARIBugFeAf8BWwJcAc0DIwEzQAADNgFZAzYBWUAAAxEBFgJSAVQBqAIC
AYAB/gIAAZ0B/wI6AbsB/wJyAdIB/wKZAd4B/wKeAeAB/wKKAdgB/wJSAcUB/wIOAaYB/wIAAZMB/wJb
AV4B2QMrAUEEAYgABAIDMgFPAVUCVgGwAUgBgAFgAfMBEgG6AV4B/wESAboBXgH/ARIBugFeAf8BEgG6
AV4B/wFIAYABYAHzAVUCVgGwAzIBTwQCkAAEAQMkATQCUAFRAZwCUwFlAekCAAGZAf8CAAGcAf8CAAGd
Af8CAAGbAf8CJAGGAfkCWAFZAbsDOAFcAwUBBpwAAwMBBAMbASYDKQE9AykBPQMbASYDAwEEqAAEAgMW
AR4DJwE6AykBPgMeASsDBgEIhAABQgFNAT4HAAE+AwABKAMAAWADAAEYAwABAQEAAQEFAAEgAQEWAAP/
AQAB/wGBBP8B/gEAAX8DAAH8AQABPwP/AfgBAAEfAwAB+AEAAR8BgAEAAQEB8AEAAQ8DAAHwAQABDwGA
AQABAQHgAQABBwMAAeABAAEHAYABAAEBAcABAAEDAwABwAEAAQMBgAEAAQEBgAEAAQEDAAGAAQABAQHA
AQABAwGAAQABAQMAAYABAAEBAeABAAEHBgABgAEAAQEB4AEAAQcJAAHwAQABDwkAAfABAAEPCQAB+AEA
AR8JAAH4AQABPwkAAfwBAAE/CQAB/gEAAX8GAAGAAQABAQH+AQABfwYAAYABAAEBAf8BAAH/AYABAAEB
AwABgAEAAQEB/wEAAf8BgAEAAQEDAAHAAQABAwH/AYEB/wHAAQABAwMAAeABAAEHAf8BwwH/AeABAAED
AwAB8AEAAQ8B/wHDAf8B4AEAAQcDAAH4AQABHwH/AecB/wH4AQABDwMAAfwBAAE/A/8B/AEAAT8DAAH/
AYEF/wGBAf8DAAs=
</value>
</data>
</root>

View File

@@ -0,0 +1,60 @@

namespace C4IT_DataHistoryProvider_Test
{
partial class ctrlProtocolBox
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.SuspendLayout();
//
// richTextBox1
//
this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.richTextBox1.Location = new System.Drawing.Point(0, 0);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.ReadOnly = true;
this.richTextBox1.Size = new System.Drawing.Size(150, 150);
this.richTextBox1.TabIndex = 0;
this.richTextBox1.Text = "";
//
// ctrlProtocolBox
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.richTextBox1);
this.Name = "ctrlProtocolBox";
this.Load += new System.EventHandler(this.ctrlProtocolBox_Load);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.RichTextBox richTextBox1;
}
}

View File

@@ -0,0 +1,76 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using C4IT.DataHistoryProvider;
namespace C4IT_DataHistoryProvider_Test
{
public partial class ctrlProtocolBox : UserControl
{
public ctrlProtocolBox()
{
InitializeComponent();
}
public void ProcessMessage(string Message)
{
Invoke(new ThreadStart(() =>
{
try
{
lock (richTextBox1)
{
if (richTextBox1.Lines.Length > 512)
{
richTextBox1.ReadOnly = false;
richTextBox1.Select(0, richTextBox1.GetFirstCharIndexFromLine(richTextBox1.Lines.Length - 512));
richTextBox1.SelectedText = "";
richTextBox1.ReadOnly = true;
}
richTextBox1.AppendText(Message);
richTextBox1.AppendText(Environment.NewLine);
Application.DoEvents();
}
}
catch { }
}));
}
public void ProcessMessage(cDataHistoryUiStatusMessage Message)
{
string line = new string(' ', Message.Indent * 3) + Message.Message;
ProcessMessage(line);
}
public void ClearMessages()
{
Invoke(new ThreadStart(() =>
{
try
{
lock (richTextBox1)
{
richTextBox1.Text = "";
Application.DoEvents();
}
}
catch { }
}));
}
private void ctrlProtocolBox_Load(object sender, EventArgs e)
{
richTextBox1.HideSelection = false;
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,236 @@

namespace C4IT_DataHistoryProvider_Test
{
partial class ctrlTestFunctions
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.buttonGetUserComputerActivities = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.comboBoxUserSelect = new System.Windows.Forms.ComboBox();
this.comboBoxComputerSelect = new System.Windows.Forms.ComboBox();
this.label2 = new System.Windows.Forms.Label();
this.buttonComputerUserActivities = new System.Windows.Forms.Button();
this.comboBoxTable = new System.Windows.Forms.ComboBox();
this.label3 = new System.Windows.Forms.Label();
this.buttonGetRawValues = new System.Windows.Forms.Button();
this.comboBoxTickets = new System.Windows.Forms.ComboBox();
this.label4 = new System.Windows.Forms.Label();
this.buttonClear = new System.Windows.Forms.Button();
this.checkBoxFiltered = new System.Windows.Forms.CheckBox();
this.ctrlProtocolBox1 = new C4IT_DataHistoryProvider_Test.ctrlProtocolBox();
this.SuspendLayout();
//
// buttonGetUserComputerActivities
//
this.buttonGetUserComputerActivities.Location = new System.Drawing.Point(554, 17);
this.buttonGetUserComputerActivities.Margin = new System.Windows.Forms.Padding(2);
this.buttonGetUserComputerActivities.Name = "buttonGetUserComputerActivities";
this.buttonGetUserComputerActivities.Size = new System.Drawing.Size(164, 32);
this.buttonGetUserComputerActivities.TabIndex = 1;
this.buttonGetUserComputerActivities.Text = "get related objects";
this.buttonGetUserComputerActivities.UseVisualStyleBackColor = true;
this.buttonGetUserComputerActivities.Click += new System.EventHandler(this.buttonGetUserComputerActivities_Click);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(34, 22);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(47, 20);
this.label1.TabIndex = 3;
this.label1.Text = "User:";
//
// comboBoxUserSelect
//
this.comboBoxUserSelect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxUserSelect.FormattingEnabled = true;
this.comboBoxUserSelect.Location = new System.Drawing.Point(106, 20);
this.comboBoxUserSelect.Name = "comboBoxUserSelect";
this.comboBoxUserSelect.Size = new System.Drawing.Size(430, 28);
this.comboBoxUserSelect.TabIndex = 4;
this.comboBoxUserSelect.SelectedValueChanged += new System.EventHandler(this.comboBoxUserSelect_SelectedValueChanged);
//
// comboBoxComputerSelect
//
this.comboBoxComputerSelect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxComputerSelect.FormattingEnabled = true;
this.comboBoxComputerSelect.Location = new System.Drawing.Point(106, 68);
this.comboBoxComputerSelect.Name = "comboBoxComputerSelect";
this.comboBoxComputerSelect.Size = new System.Drawing.Size(430, 28);
this.comboBoxComputerSelect.TabIndex = 7;
this.comboBoxComputerSelect.SelectedValueChanged += new System.EventHandler(this.comboBoxComputerSelect_SelectedValueChanged);
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(16, 71);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(83, 20);
this.label2.TabIndex = 6;
this.label2.Text = "Computer:";
//
// buttonComputerUserActivities
//
this.buttonComputerUserActivities.Location = new System.Drawing.Point(554, 65);
this.buttonComputerUserActivities.Margin = new System.Windows.Forms.Padding(2);
this.buttonComputerUserActivities.Name = "buttonComputerUserActivities";
this.buttonComputerUserActivities.Size = new System.Drawing.Size(164, 32);
this.buttonComputerUserActivities.TabIndex = 5;
this.buttonComputerUserActivities.Text = "get related users";
this.buttonComputerUserActivities.UseVisualStyleBackColor = true;
this.buttonComputerUserActivities.Click += new System.EventHandler(this.buttonComputerUserActivities_Click);
//
// comboBoxTable
//
this.comboBoxTable.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxTable.Enabled = false;
this.comboBoxTable.FormattingEnabled = true;
this.comboBoxTable.Location = new System.Drawing.Point(104, 120);
this.comboBoxTable.Name = "comboBoxTable";
this.comboBoxTable.Size = new System.Drawing.Size(430, 28);
this.comboBoxTable.TabIndex = 11;
this.comboBoxTable.SelectedValueChanged += new System.EventHandler(this.comboBoxTable_SelectedValueChanged);
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(44, 123);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(52, 20);
this.label3.TabIndex = 10;
this.label3.Text = "Table:";
//
// buttonGetRawValues
//
this.buttonGetRawValues.Enabled = false;
this.buttonGetRawValues.Location = new System.Drawing.Point(554, 118);
this.buttonGetRawValues.Margin = new System.Windows.Forms.Padding(2);
this.buttonGetRawValues.Name = "buttonGetRawValues";
this.buttonGetRawValues.Size = new System.Drawing.Size(164, 32);
this.buttonGetRawValues.TabIndex = 9;
this.buttonGetRawValues.Text = "get raw values";
this.buttonGetRawValues.UseVisualStyleBackColor = true;
this.buttonGetRawValues.Click += new System.EventHandler(this.buttonGetRawValues_Click);
//
// comboBoxTickets
//
this.comboBoxTickets.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxTickets.FormattingEnabled = true;
this.comboBoxTickets.Location = new System.Drawing.Point(834, 17);
this.comboBoxTickets.Name = "comboBoxTickets";
this.comboBoxTickets.Size = new System.Drawing.Size(236, 28);
this.comboBoxTickets.TabIndex = 13;
this.comboBoxTickets.SelectedValueChanged += new System.EventHandler(this.comboBoxTickets_SelectedValueChanged);
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(760, 22);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(63, 20);
this.label4.TabIndex = 12;
this.label4.Text = "Tickets:";
//
// buttonClear
//
this.buttonClear.Location = new System.Drawing.Point(834, 115);
this.buttonClear.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.buttonClear.Name = "buttonClear";
this.buttonClear.Size = new System.Drawing.Size(112, 35);
this.buttonClear.TabIndex = 14;
this.buttonClear.Text = "Clear";
this.buttonClear.UseVisualStyleBackColor = true;
this.buttonClear.Click += new System.EventHandler(this.buttonClear_Click);
//
// checkBoxFiltered
//
this.checkBoxFiltered.AutoSize = true;
this.checkBoxFiltered.Checked = true;
this.checkBoxFiltered.CheckState = System.Windows.Forms.CheckState.Checked;
this.checkBoxFiltered.Location = new System.Drawing.Point(840, 67);
this.checkBoxFiltered.Name = "checkBoxFiltered";
this.checkBoxFiltered.Size = new System.Drawing.Size(175, 24);
this.checkBoxFiltered.TabIndex = 15;
this.checkBoxFiltered.Text = "Only with current use";
this.checkBoxFiltered.UseVisualStyleBackColor = true;
this.checkBoxFiltered.CheckedChanged += new System.EventHandler(this.checkBoxFiltered_CheckedChanged);
//
// ctrlProtocolBox1
//
this.ctrlProtocolBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.ctrlProtocolBox1.Location = new System.Drawing.Point(9, 169);
this.ctrlProtocolBox1.Name = "ctrlProtocolBox1";
this.ctrlProtocolBox1.Size = new System.Drawing.Size(1068, 79);
this.ctrlProtocolBox1.TabIndex = 16;
//
// ctrlTestFunctions
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.checkBoxFiltered);
this.Controls.Add(this.buttonClear);
this.Controls.Add(this.comboBoxTickets);
this.Controls.Add(this.label4);
this.Controls.Add(this.comboBoxTable);
this.Controls.Add(this.label3);
this.Controls.Add(this.buttonGetRawValues);
this.Controls.Add(this.comboBoxComputerSelect);
this.Controls.Add(this.label2);
this.Controls.Add(this.buttonComputerUserActivities);
this.Controls.Add(this.comboBoxUserSelect);
this.Controls.Add(this.label1);
this.Controls.Add(this.buttonGetUserComputerActivities);
this.Controls.Add(this.ctrlProtocolBox1);
this.Name = "ctrlTestFunctions";
this.Size = new System.Drawing.Size(1088, 268);
this.Load += new System.EventHandler(this.ctrlTestFunctions_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button buttonGetUserComputerActivities;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.ComboBox comboBoxUserSelect;
private System.Windows.Forms.ComboBox comboBoxComputerSelect;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Button buttonComputerUserActivities;
private System.Windows.Forms.ComboBox comboBoxTable;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Button buttonGetRawValues;
private System.Windows.Forms.ComboBox comboBoxTickets;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Button buttonClear;
private System.Windows.Forms.CheckBox checkBoxFiltered;
private ctrlProtocolBox ctrlProtocolBox1;
}
}

View File

@@ -0,0 +1,471 @@
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);
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,304 @@

namespace C4IT_DataHistoryProvider_Test
{
partial class frmMain2
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmMain2));
this.tabControlMain = new System.Windows.Forms.TabControl();
this.tabPageMain = new System.Windows.Forms.TabPage();
this.ctrlMainFunction1 = new C4IT_DataHistoryProvider_Test.ctrlMainFunction();
this.tabPageAgent = new System.Windows.Forms.TabPage();
this.ctrlClientAgent1 = new C4IT_DataHistoryProvider_Test.ctrlClientAgent();
this.tabPageActiveDirectory = new System.Windows.Forms.TabPage();
this.ctrlActiveDirectory1 = new C4IT_DataHistoryProvider_Test.ctrlActiveDirectory();
this.tabPageM42WPM = new System.Windows.Forms.TabPage();
this.ctrlM42Wpm1 = new C4IT_DataHistoryProvider_Test.ctrlM42Wpm();
this.tabPageNexthink = new System.Windows.Forms.TabPage();
this.ctrlNexthink1 = new C4IT_DataHistoryProvider_Test.ctrlNexthink();
this.tabPageCleanup = new System.Windows.Forms.TabPage();
this.ctrlCleanup1 = new C4IT_DataHistoryProvider_Test.ctrlCleanup();
this.tabPageTest = new System.Windows.Forms.TabPage();
this.ctrlTestFunctions1 = new C4IT_DataHistoryProvider_Test.ctrlTestFunctions();
this.tabPageF4SDAnalytics = new System.Windows.Forms.TabPage();
this.ctrlF4SDAnalytics = new C4IT_DataHistoryProvider_Test.ctrlF4SDAnalytics();
this.tabPageCitrix = new System.Windows.Forms.TabPage();
this.ctrlCitrix = new C4IT_DataHistoryProvider_Test.ctrlCitrix();
this.tabControlMain.SuspendLayout();
this.tabPageMain.SuspendLayout();
this.tabPageAgent.SuspendLayout();
this.tabPageActiveDirectory.SuspendLayout();
this.tabPageM42WPM.SuspendLayout();
this.tabPageNexthink.SuspendLayout();
this.tabPageCleanup.SuspendLayout();
this.tabPageTest.SuspendLayout();
this.tabPageF4SDAnalytics.SuspendLayout();
this.tabPageCitrix.SuspendLayout();
this.SuspendLayout();
//
// tabControlMain
//
this.tabControlMain.Controls.Add(this.tabPageMain);
this.tabControlMain.Controls.Add(this.tabPageAgent);
this.tabControlMain.Controls.Add(this.tabPageActiveDirectory);
this.tabControlMain.Controls.Add(this.tabPageM42WPM);
this.tabControlMain.Controls.Add(this.tabPageNexthink);
this.tabControlMain.Controls.Add(this.tabPageCleanup);
this.tabControlMain.Controls.Add(this.tabPageTest);
this.tabControlMain.Controls.Add(this.tabPageF4SDAnalytics);
this.tabControlMain.Controls.Add(this.tabPageCitrix);
this.tabControlMain.Dock = System.Windows.Forms.DockStyle.Fill;
this.tabControlMain.Location = new System.Drawing.Point(0, 0);
this.tabControlMain.Name = "tabControlMain";
this.tabControlMain.SelectedIndex = 0;
this.tabControlMain.Size = new System.Drawing.Size(1487, 1055);
this.tabControlMain.TabIndex = 0;
//
// tabPageMain
//
this.tabPageMain.Controls.Add(this.ctrlMainFunction1);
this.tabPageMain.Location = new System.Drawing.Point(4, 25);
this.tabPageMain.Name = "tabPageMain";
this.tabPageMain.Padding = new System.Windows.Forms.Padding(3);
this.tabPageMain.Size = new System.Drawing.Size(1479, 1026);
this.tabPageMain.TabIndex = 1;
this.tabPageMain.Text = "Main";
this.tabPageMain.UseVisualStyleBackColor = true;
//
// ctrlMainFunction1
//
this.ctrlMainFunction1.Dock = System.Windows.Forms.DockStyle.Fill;
this.ctrlMainFunction1.Location = new System.Drawing.Point(3, 3);
this.ctrlMainFunction1.Margin = new System.Windows.Forms.Padding(2);
this.ctrlMainFunction1.Name = "ctrlMainFunction1";
this.ctrlMainFunction1.Size = new System.Drawing.Size(1473, 1020);
this.ctrlMainFunction1.TabIndex = 0;
//
// tabPageAgent
//
this.tabPageAgent.Controls.Add(this.ctrlClientAgent1);
this.tabPageAgent.Location = new System.Drawing.Point(4, 25);
this.tabPageAgent.Name = "tabPageAgent";
this.tabPageAgent.Size = new System.Drawing.Size(1479, 1026);
this.tabPageAgent.TabIndex = 2;
this.tabPageAgent.Text = "F4SD Agent";
this.tabPageAgent.UseVisualStyleBackColor = true;
//
// ctrlClientAgent1
//
this.ctrlClientAgent1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.ctrlClientAgent1.Dock = System.Windows.Forms.DockStyle.Fill;
this.ctrlClientAgent1.Enabled = false;
this.ctrlClientAgent1.Location = new System.Drawing.Point(0, 0);
this.ctrlClientAgent1.Name = "ctrlClientAgent1";
this.ctrlClientAgent1.Size = new System.Drawing.Size(1479, 1026);
this.ctrlClientAgent1.TabIndex = 0;
//
// tabPageActiveDirectory
//
this.tabPageActiveDirectory.Controls.Add(this.ctrlActiveDirectory1);
this.tabPageActiveDirectory.Location = new System.Drawing.Point(4, 25);
this.tabPageActiveDirectory.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.tabPageActiveDirectory.Name = "tabPageActiveDirectory";
this.tabPageActiveDirectory.Size = new System.Drawing.Size(1479, 1026);
this.tabPageActiveDirectory.TabIndex = 5;
this.tabPageActiveDirectory.Text = "Active Directory";
this.tabPageActiveDirectory.UseVisualStyleBackColor = true;
//
// ctrlActiveDirectory1
//
this.ctrlActiveDirectory1.Dock = System.Windows.Forms.DockStyle.Fill;
this.ctrlActiveDirectory1.Enabled = false;
this.ctrlActiveDirectory1.Location = new System.Drawing.Point(0, 0);
this.ctrlActiveDirectory1.Margin = new System.Windows.Forms.Padding(6, 8, 6, 8);
this.ctrlActiveDirectory1.Name = "ctrlActiveDirectory1";
this.ctrlActiveDirectory1.Size = new System.Drawing.Size(1479, 1026);
this.ctrlActiveDirectory1.TabIndex = 0;
//
// tabPageM42WPM
//
this.tabPageM42WPM.Controls.Add(this.ctrlM42Wpm1);
this.tabPageM42WPM.Location = new System.Drawing.Point(4, 25);
this.tabPageM42WPM.Name = "tabPageM42WPM";
this.tabPageM42WPM.Size = new System.Drawing.Size(1479, 1026);
this.tabPageM42WPM.TabIndex = 7;
this.tabPageM42WPM.Text = "Matrix WPM";
this.tabPageM42WPM.UseVisualStyleBackColor = true;
//
// ctrlM42Wpm1
//
this.ctrlM42Wpm1.Dock = System.Windows.Forms.DockStyle.Fill;
this.ctrlM42Wpm1.Location = new System.Drawing.Point(0, 0);
this.ctrlM42Wpm1.Margin = new System.Windows.Forms.Padding(2);
this.ctrlM42Wpm1.Name = "ctrlM42Wpm1";
this.ctrlM42Wpm1.Size = new System.Drawing.Size(1479, 1026);
this.ctrlM42Wpm1.TabIndex = 0;
//
// tabPageNexthink
//
this.tabPageNexthink.Controls.Add(this.ctrlNexthink1);
this.tabPageNexthink.Location = new System.Drawing.Point(4, 25);
this.tabPageNexthink.Name = "tabPageNexthink";
this.tabPageNexthink.Size = new System.Drawing.Size(1479, 1026);
this.tabPageNexthink.TabIndex = 3;
this.tabPageNexthink.Text = "Nexthink";
this.tabPageNexthink.UseVisualStyleBackColor = true;
//
// ctrlNexthink1
//
this.ctrlNexthink1.Dock = System.Windows.Forms.DockStyle.Fill;
this.ctrlNexthink1.Enabled = false;
this.ctrlNexthink1.Location = new System.Drawing.Point(0, 0);
this.ctrlNexthink1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.ctrlNexthink1.Name = "ctrlNexthink1";
this.ctrlNexthink1.Size = new System.Drawing.Size(1479, 1026);
this.ctrlNexthink1.TabIndex = 0;
//
// tabPageCleanup
//
this.tabPageCleanup.Controls.Add(this.ctrlCleanup1);
this.tabPageCleanup.Location = new System.Drawing.Point(4, 25);
this.tabPageCleanup.Name = "tabPageCleanup";
this.tabPageCleanup.Size = new System.Drawing.Size(1479, 1026);
this.tabPageCleanup.TabIndex = 4;
this.tabPageCleanup.Text = "DB Cleanup";
this.tabPageCleanup.UseVisualStyleBackColor = true;
//
// ctrlCleanup1
//
this.ctrlCleanup1.Dock = System.Windows.Forms.DockStyle.Fill;
this.ctrlCleanup1.Enabled = false;
this.ctrlCleanup1.Location = new System.Drawing.Point(0, 0);
this.ctrlCleanup1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.ctrlCleanup1.Name = "ctrlCleanup1";
this.ctrlCleanup1.Size = new System.Drawing.Size(1479, 1026);
this.ctrlCleanup1.TabIndex = 0;
//
// tabPageTest
//
this.tabPageTest.Controls.Add(this.ctrlTestFunctions1);
this.tabPageTest.Location = new System.Drawing.Point(4, 25);
this.tabPageTest.Name = "tabPageTest";
this.tabPageTest.Padding = new System.Windows.Forms.Padding(3);
this.tabPageTest.Size = new System.Drawing.Size(1479, 1026);
this.tabPageTest.TabIndex = 7;
this.tabPageTest.Text = "Tests";
this.tabPageTest.UseVisualStyleBackColor = true;
//
// ctrlTestFunctions1
//
this.ctrlTestFunctions1.Dock = System.Windows.Forms.DockStyle.Fill;
this.ctrlTestFunctions1.Enabled = false;
this.ctrlTestFunctions1.Location = new System.Drawing.Point(3, 3);
this.ctrlTestFunctions1.Margin = new System.Windows.Forms.Padding(2);
this.ctrlTestFunctions1.Name = "ctrlTestFunctions1";
this.ctrlTestFunctions1.Size = new System.Drawing.Size(1473, 1020);
this.ctrlTestFunctions1.TabIndex = 0;
//
// tabPageF4SDAnalytics
//
this.tabPageF4SDAnalytics.Controls.Add(this.ctrlF4SDAnalytics);
this.tabPageF4SDAnalytics.Location = new System.Drawing.Point(4, 25);
this.tabPageF4SDAnalytics.Name = "tabPageF4SDAnalytics";
this.tabPageF4SDAnalytics.Padding = new System.Windows.Forms.Padding(3);
this.tabPageF4SDAnalytics.Size = new System.Drawing.Size(1479, 1026);
this.tabPageF4SDAnalytics.TabIndex = 6;
this.tabPageF4SDAnalytics.Text = "F4SDAnalytics";
this.tabPageF4SDAnalytics.UseVisualStyleBackColor = true;
//
// ctrlF4SDAnalytics
//
this.ctrlF4SDAnalytics.Location = new System.Drawing.Point(0, 0);
this.ctrlF4SDAnalytics.Margin = new System.Windows.Forms.Padding(2);
this.ctrlF4SDAnalytics.Name = "ctrlF4SDAnalytics";
this.ctrlF4SDAnalytics.Size = new System.Drawing.Size(1177, 645);
this.ctrlF4SDAnalytics.TabIndex = 0;
//
// tabPageCitrix
//
this.tabPageCitrix.Controls.Add(this.ctrlCitrix);
this.tabPageCitrix.Location = new System.Drawing.Point(4, 25);
this.tabPageCitrix.Name = "tabPageCitrix";
this.tabPageCitrix.Padding = new System.Windows.Forms.Padding(3);
this.tabPageCitrix.Size = new System.Drawing.Size(1479, 1026);
this.tabPageCitrix.TabIndex = 8;
this.tabPageCitrix.Text = "Citrix";
this.tabPageCitrix.UseVisualStyleBackColor = true;
//
// ctrlF4SDAnalytics
//
this.ctrlCitrix.Location = new System.Drawing.Point(0, 0);
this.ctrlCitrix.Margin = new System.Windows.Forms.Padding(2);
this.ctrlCitrix.Name = "ctrlCitrix";
this.ctrlCitrix.Size = new System.Drawing.Size(1177, 645);
this.ctrlCitrix.TabIndex = 0;
//
// frmMain2
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(1487, 1055);
this.Controls.Add(this.tabControlMain);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "frmMain2";
this.Text = "F4SD collector";
this.tabControlMain.ResumeLayout(false);
this.tabPageMain.ResumeLayout(false);
this.tabPageAgent.ResumeLayout(false);
this.tabPageActiveDirectory.ResumeLayout(false);
this.tabPageM42WPM.ResumeLayout(false);
this.tabPageNexthink.ResumeLayout(false);
this.tabPageCleanup.ResumeLayout(false);
this.tabPageTest.ResumeLayout(false);
this.tabPageF4SDAnalytics.ResumeLayout(false);
this.tabPageCitrix.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private ctrlMainFunction ctrlMainFunction1;
public ctrlActiveDirectory ctrlActiveDirectory1;
private ctrlClientAgent ctrlClientAgent1;
public ctrlTestFunctions ctrlTestFunctions1;
public ctrlF4SDAnalytics ctrlF4SDAnalytics;
public ctrlCitrix ctrlCitrix;
public System.Windows.Forms.TabPage tabPageMain;
private ctrlNexthink ctrlNexthink1;
public System.Windows.Forms.TabControl tabControlMain;
public System.Windows.Forms.TabPage tabPageNexthink;
private ctrlCleanup ctrlCleanup1;
private ctrlM42Wpm ctrlM42Wpm1;
public System.Windows.Forms.TabPage tabPageM42WPM;
public System.Windows.Forms.TabPage tabPageAgent;
public System.Windows.Forms.TabPage tabPageCleanup;
public System.Windows.Forms.TabPage tabPageActiveDirectory;
public System.Windows.Forms.TabPage tabPageTest;
public System.Windows.Forms.TabPage tabPageF4SDAnalytics;
public System.Windows.Forms.TabPage tabPageCitrix;
}
}

View File

@@ -0,0 +1,69 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace C4IT_DataHistoryProvider_Test
{
public partial class frmMain2 : Form
{
public readonly bool CollectMode = false;
public frmMain2(bool CollectMode)
{
this.CollectMode = CollectMode;
InitializeComponent();
tabControlMain.TabPages.Remove(tabPageNexthink);
tabControlMain.TabPages.Remove(tabPageM42WPM);
}
public void DisableAllTabPages(UserControl self)
{
foreach (var Entry in this.tabControlMain.TabPages)
{
if (!(Entry is TabPage TP))
continue;
foreach (var Entry2 in TP.Controls)
{
if (!(Entry2 is UserControl UC))
continue;
if (UC != self)
UC.Enabled = false;
}
}
}
public void RemoveAllTabPages(TabPage self)
{
this.tabControlMain.TabPages.Clear();
this.tabControlMain.TabPages.Add(self);
}
public void EnableAllTabPages()
{
foreach (var Entry in this.tabControlMain.TabPages)
{
if (!(Entry is TabPage TP))
continue;
foreach (var Entry2 in TP.Controls)
{
if (!(Entry2 is UserControl UC))
continue;
UC.Enabled = true;
}
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,138 @@
namespace C4IT.Security
{
partial class frmPassword
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmPassword));
this.label1 = new System.Windows.Forms.Label();
this.txtPassword = new System.Windows.Forms.TextBox();
this.butCopy = new System.Windows.Forms.Button();
this.butCancel = new System.Windows.Forms.Button();
this.chkShow = new System.Windows.Forms.CheckBox();
this.butClean = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(20, 20);
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(201, 20);
this.label1.TabIndex = 0;
this.label1.Text = "Please enter the password:";
//
// txtPassword
//
this.txtPassword.Location = new System.Drawing.Point(24, 54);
this.txtPassword.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.txtPassword.Name = "txtPassword";
this.txtPassword.Size = new System.Drawing.Size(553, 26);
this.txtPassword.TabIndex = 1;
this.txtPassword.UseSystemPasswordChar = true;
//
// butCopy
//
this.butCopy.Location = new System.Drawing.Point(52, 165);
this.butCopy.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.butCopy.Name = "butCopy";
this.butCopy.Size = new System.Drawing.Size(172, 37);
this.butCopy.TabIndex = 2;
this.butCopy.Text = "Copy to clipboard";
this.butCopy.UseVisualStyleBackColor = true;
this.butCopy.Click += new System.EventHandler(this.butCopy_Click);
//
// butCancel
//
this.butCancel.Location = new System.Drawing.Point(428, 165);
this.butCancel.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.butCancel.Name = "butCancel";
this.butCancel.Size = new System.Drawing.Size(112, 37);
this.butCancel.TabIndex = 3;
this.butCancel.Text = "Close";
this.butCancel.UseVisualStyleBackColor = true;
this.butCancel.Click += new System.EventHandler(this.butCancel_Click);
//
// chkShow
//
this.chkShow.AutoSize = true;
this.chkShow.Location = new System.Drawing.Point(46, 100);
this.chkShow.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.chkShow.Name = "chkShow";
this.chkShow.Size = new System.Drawing.Size(147, 24);
this.chkShow.TabIndex = 4;
this.chkShow.Text = "Show password";
this.chkShow.UseVisualStyleBackColor = true;
this.chkShow.CheckStateChanged += new System.EventHandler(this.chkShow_CheckStateChanged);
//
// butClean
//
this.butClean.Location = new System.Drawing.Point(240, 165);
this.butClean.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.butClean.Name = "butClean";
this.butClean.Size = new System.Drawing.Size(172, 37);
this.butClean.TabIndex = 5;
this.butClean.Text = "Cleanup clipboard";
this.butClean.UseVisualStyleBackColor = true;
this.butClean.Click += new System.EventHandler(this.butClean_Click);
//
// frmPassword
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(597, 223);
this.Controls.Add(this.butClean);
this.Controls.Add(this.chkShow);
this.Controls.Add(this.butCancel);
this.Controls.Add(this.butCopy);
this.Controls.Add(this.txtPassword);
this.Controls.Add(this.label1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "frmPassword";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Secure Password ";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmPassword_FormClosed);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox txtPassword;
private System.Windows.Forms.Button butCopy;
private System.Windows.Forms.Button butCancel;
private System.Windows.Forms.CheckBox chkShow;
private System.Windows.Forms.Button butClean;
}
}

View File

@@ -0,0 +1,51 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using C4IT.Security;
namespace C4IT.Security
{
public partial class frmPassword : Form
{
public frmPassword()
{
InitializeComponent();
}
private void chkShow_CheckStateChanged(object sender, EventArgs e)
{
if (chkShow.Checked)
txtPassword.UseSystemPasswordChar = false;
else
txtPassword.UseSystemPasswordChar = true;
}
private void butCancel_Click(object sender, EventArgs e)
{
this.Close();
}
private void butCopy_Click(object sender, EventArgs e)
{
string PW = cSecurePassword.Instance.Encode(txtPassword.Text);
Clipboard.SetText(PW);
}
private void butClean_Click(object sender, EventArgs e)
{
Clipboard.Clear();
}
private void frmPassword_FormClosed(object sender, FormClosedEventArgs e)
{
Clipboard.Clear();
}
}
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB