Merge branch 'feature/send_telemetry' into develop

This commit is contained in:
Daniel Schick 2024-03-22 13:20:48 +01:00
commit 7950d16f2b
20 changed files with 143 additions and 41 deletions

View File

@ -12,20 +12,23 @@ from collections import deque
abspath = os.path.abspath(__file__) abspath = os.path.abspath(__file__)
dname = os.path.dirname(abspath) dname = os.path.dirname(abspath)
outputFileName = dname + "\\" + 'output.csv' outputFileNameDBH = dname + "\\" + 'output_dbh.csv'
outputFileNameHISNORD = dname + "\\" + 'output_hisnord.csv'
# open the output file # open the output files
outputFile = open(outputFileName, 'w') outputFileDBH = open(outputFileNameDBH, 'w')
outputFileHISNORD = open(outputFileNameHISNORD, 'w')
# write the header # write the header
outputFile.write('Receive time, Duration\n') outputFileDBH.write('Receive time, Duration, Message class, Attempts\n')
outputFileHISNORD.write('Receive time, Duration, message class, Attemps\n')
# open the log files # open the log files
q = deque() q = deque()
for i in range(0, 10): for i in range(1, -1, -1):
logFileName = dname + "\\" + 'log-NSWMessageService.txt.' + str(i) logFileName = dname + "\\" + 'log-NSWMessageService.txt.' + str(i)
logFile = open(logFileName, 'r') logFile = open(logFileName, 'r')
@ -38,6 +41,8 @@ for i in range(0, 10):
# get substring of the date # get substring of the date
dateString = line[0:19] dateString = line[0:19]
# kept old code for reference, but it does nothing
if "Upload of" in line: if "Upload of" in line:
# add the dateString to the queue # add the dateString to the queue
q.appendleft(dateString) q.appendleft(dateString)
@ -54,9 +59,21 @@ for i in range(0, 10):
# calculate the duration # calculate the duration
duration = currentdate - lastdate duration = currentdate - lastdate
outputFile.write(dateString + "," + str(duration.seconds) + "\n")
# outputFile.write(dateString + "," + str(duration.seconds) + "\n")
if "MessageTelemetry" in line:
his = line[72:81].strip()
msg_class = line[83:91].strip()
duration = line[93:98]
tries = line[100:102]
if his == 'DUDR':
outputFileHISNORD.write(dateString + "," + duration + "," + msg_class + "," + tries + "\n")
elif his == 'DBH':
outputFileDBH.write(dateString + "," + duration + "," + msg_class + "," + tries + "\n")
# close the log file # close the log file
logFile.close() logFile.close()
outputFile.close() outputFileDBH.close()
outputFileHISNORD.close()

View File

@ -40,8 +40,8 @@
<AssemblyOriginatorKeyFile>..\bsmdKey.snk</AssemblyOriginatorKeyFile> <AssemblyOriginatorKeyFile>..\bsmdKey.snk</AssemblyOriginatorKeyFile>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="log4net, Version=2.0.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL"> <Reference Include="log4net, Version=2.0.16.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.15\lib\net45\log4net.dll</HintPath> <HintPath>..\packages\log4net.2.0.16\lib\net45\log4net.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Configuration" /> <Reference Include="System.Configuration" />

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="log4net" version="2.0.15" targetFramework="net48" /> <package id="log4net" version="2.0.16" targetFramework="net48" />
</packages> </packages>

View File

@ -40,8 +40,8 @@
<AssemblyOriginatorKeyFile>..\bsmdKey.snk</AssemblyOriginatorKeyFile> <AssemblyOriginatorKeyFile>..\bsmdKey.snk</AssemblyOriginatorKeyFile>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="log4net, Version=2.0.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL"> <Reference Include="log4net, Version=2.0.16.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.15\lib\net45\log4net.dll</HintPath> <HintPath>..\packages\log4net.2.0.16\lib\net45\log4net.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Configuration" /> <Reference Include="System.Configuration" />
@ -52,8 +52,8 @@
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="WinSCPnet, Version=1.14.0.13797, Culture=neutral, PublicKeyToken=2271ec4a3c56d0bf, processorArchitecture=MSIL"> <Reference Include="WinSCPnet, Version=1.15.0.14890, Culture=neutral, PublicKeyToken=2271ec4a3c56d0bf, processorArchitecture=MSIL">
<HintPath>..\packages\WinSCP.6.1.2\lib\net40\WinSCPnet.dll</HintPath> <HintPath>..\packages\WinSCP.6.3.2\lib\net40\WinSCPnet.dll</HintPath>
</Reference> </Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -93,12 +93,12 @@
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\WinSCP.6.1.2\build\WinSCP.targets" Condition="Exists('..\packages\WinSCP.6.1.2\build\WinSCP.targets')" /> <Import Project="..\packages\WinSCP.6.3.2\build\WinSCP.targets" Condition="Exists('..\packages\WinSCP.6.3.2\build\WinSCP.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup> <PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup> </PropertyGroup>
<Error Condition="!Exists('..\packages\WinSCP.6.1.2\build\WinSCP.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\WinSCP.6.1.2\build\WinSCP.targets'))" /> <Error Condition="!Exists('..\packages\WinSCP.6.3.2\build\WinSCP.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\WinSCP.6.3.2\build\WinSCP.targets'))" />
</Target> </Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="log4net" version="2.0.15" targetFramework="net48" /> <package id="log4net" version="2.0.16" targetFramework="net48" />
<package id="WinSCP" version="6.1.2" targetFramework="net48" /> <package id="WinSCP" version="6.3.2" targetFramework="net48" />
</packages> </packages>

View File

@ -0,0 +1,75 @@
// Copyright (c) 2024-present schick Informatik
// Description: The purpose of telemetry is to record message transmission times (and failures)
using System;
using System.Collections.Generic;
using log4net;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace bsmd.database
{
public class MessageTelemetry
{
#region Fields
private static readonly Dictionary<Message.NSWProvider, Dictionary<Guid, MessageTelemetry>> _telemetry = new Dictionary<Message.NSWProvider, Dictionary<Guid, MessageTelemetry>>();
private static readonly ILog _log = LogManager.GetLogger(typeof(MessageTelemetry));
#endregion
#region Properties
public DateTime SendDate { get; private set; }
public int NumTries { get; set; }
#endregion
#region public static methods
public static void Enqueue(Message.NSWProvider provider, Message message)
{
if (!_telemetry.ContainsKey(provider))
_telemetry.Add(provider, new Dictionary<Guid, MessageTelemetry>());
if (_telemetry[provider].ContainsKey(message.Id.Value))
{
_telemetry[provider][message.Id.Value].NumTries++;
}
else
{
MessageTelemetry mt = new MessageTelemetry();
mt.SendDate = DateTime.Now;
mt.NumTries = 1;
_telemetry[provider][message.Id.Value] = mt;
}
}
public static void Dequeue(Message.NSWProvider provider, Message message)
{
if (_telemetry.ContainsKey(provider))
{
if (_telemetry[provider].ContainsKey(message.Id.Value))
{
MessageTelemetry mt = _telemetry[provider][message.Id.Value];
_log.InfoFormat("[{0,10}][{1,8}][{2:00000}][{3:00}] ",provider, message.MessageNotificationClassDisplay, (DateTime.Now - mt.SendDate).TotalSeconds, mt.NumTries);
_telemetry[provider].Remove(message.Id.Value);
}
else
{
_log.ErrorFormat("trying to deque a message from telemetry that we don't know about. Provider: {0} MessageId: {1}",
provider.ToString(), message.Id.Value);
}
}
}
#endregion
}
}

View File

@ -83,8 +83,8 @@
<CodeAnalysisRuleSet>..\code.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>..\code.ruleset</CodeAnalysisRuleSet>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="log4net, Version=2.0.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL"> <Reference Include="log4net, Version=2.0.16.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\ENI2\packages\log4net.2.0.15\lib\net45\log4net.dll</HintPath> <HintPath>..\packages\log4net.2.0.16\lib\net45\log4net.dll</HintPath>
</Reference> </Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\ENI2\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath> <HintPath>..\ENI2\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
@ -131,6 +131,7 @@
<Compile Include="MaerskData.cs" /> <Compile Include="MaerskData.cs" />
<Compile Include="MARPOL_Annex_I_Position.cs" /> <Compile Include="MARPOL_Annex_I_Position.cs" />
<Compile Include="MessageHistory.cs" /> <Compile Include="MessageHistory.cs" />
<Compile Include="MessageTelemetry.cs" />
<Compile Include="NoTypeConverterJsonConverter.cs" /> <Compile Include="NoTypeConverterJsonConverter.cs" />
<Compile Include="PortArea.cs" /> <Compile Include="PortArea.cs" />
<Compile Include="Properties\AssemblyProductInfo.cs" /> <Compile Include="Properties\AssemblyProductInfo.cs" />

View File

@ -1,11 +1,11 @@
extensions: designer.cs generated.cs extensions: designer.cs generated.cs
extensions: .cs .cpp .h extensions: .cs .cpp .h
// Copyright (c) 2023-present schick Informatik // Copyright (c) 2024-present schick Informatik
// Description: // Description:
extensions: .aspx .ascx extensions: .aspx .ascx
<%-- <%--
Copyright (c) 2023-present schick Informatik Copyright (c) 2024-present schick Informatik
--%> --%>
extensions: .vb extensions: .vb
'Sample license text. 'Sample license text.

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="log4net" version="2.0.15" targetFramework="net48" /> <package id="log4net" version="2.0.16" targetFramework="net48" />
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net48" /> <package id="Newtonsoft.Json" version="13.0.3" targetFramework="net48" />
</packages> </packages>

View File

@ -114,6 +114,9 @@ namespace bsmd.dbh
#region send and receive files (SFTP) #region send and receive files (SFTP)
/// <summary>
/// this method handles the transmission of files by SFTP
/// </summary>
public static void SendAndReceive() public static void SendAndReceive()
{ {
// sent unsent messages in output folder // sent unsent messages in output folder

View File

@ -1832,6 +1832,8 @@ namespace bsmd.dbh
serializer.Serialize(tw, root); serializer.Serialize(tw, root);
} }
MessageTelemetry.Enqueue(Message.NSWProvider.DBH, message);
return filePath; return filePath;
} }
catch(Exception ex) catch(Exception ex)

View File

@ -1,16 +1,12 @@
// Copyright (c) 2020-present schick Informatik // Copyright (c) 2020-present schick Informatik
// Description: Verarbeitung von empfangenen Rückmeldungen // Description: Verarbeitung von empfangenen Rückmeldungen
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Xml.Serialization;
using log4net;
using bsmd.database; using bsmd.database;
using log4net;
using System;
using System.IO;
using System.Text.RegularExpressions;
using System.Xml.Serialization;
namespace bsmd.dbh namespace bsmd.dbh
{ {
@ -80,6 +76,8 @@ namespace bsmd.dbh
return result; return result;
} }
MessageTelemetry.Dequeue(Message.NSWProvider.DBH, sentMessage);
switch(root.Type) switch(root.Type)
{ {
case Response.RootType.VISIT: case Response.RootType.VISIT:

View File

@ -38,8 +38,8 @@
<AssemblyOriginatorKeyFile>..\bsmdKey.snk</AssemblyOriginatorKeyFile> <AssemblyOriginatorKeyFile>..\bsmdKey.snk</AssemblyOriginatorKeyFile>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="log4net, Version=2.0.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL"> <Reference Include="log4net, Version=2.0.16.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.15\lib\net45\log4net.dll</HintPath> <HintPath>..\packages\log4net.2.0.16\lib\net45\log4net.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Configuration" /> <Reference Include="System.Configuration" />

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="log4net" version="2.0.15" targetFramework="net48" /> <package id="log4net" version="2.0.16" targetFramework="net48" />
</packages> </packages>

View File

@ -1822,6 +1822,8 @@ namespace bsmd.hisnord
retval = true; retval = true;
MessageTelemetry.Enqueue(Message.NSWProvider.DUDR, message);
#endregion #endregion
} }

View File

@ -88,6 +88,7 @@ namespace bsmd.hisnord
refMessage.InternalStatus = Message.BSMDStatus.SEND_FAILED; refMessage.InternalStatus = Message.BSMDStatus.SEND_FAILED;
systemError.MessageHeaderId = refMessage.Id; systemError.MessageHeaderId = refMessage.Id;
DBManager.Instance.Save(refMessage); DBManager.Instance.Save(refMessage);
MessageTelemetry.Dequeue(Message.NSWProvider.DUDR, refMessage);
} }
} }
else else
@ -101,6 +102,7 @@ namespace bsmd.hisnord
refMessage.InternalStatus = Message.BSMDStatus.SEND_FAILED; refMessage.InternalStatus = Message.BSMDStatus.SEND_FAILED;
systemError.MessageHeaderId = refMessage.Id; systemError.MessageHeaderId = refMessage.Id;
DBManager.Instance.Save(refMessage); DBManager.Instance.Save(refMessage);
MessageTelemetry.Dequeue(Message.NSWProvider.DUDR, refMessage);
} }
} }
} }
@ -253,6 +255,8 @@ namespace bsmd.hisnord
DBManager.Instance.Save(aMessage); DBManager.Instance.Save(aMessage);
MessageTelemetry.Dequeue(Message.NSWProvider.DUDR, aMessage);
#endregion #endregion
} }

View File

@ -38,8 +38,8 @@
<AssemblyOriginatorKeyFile>..\bsmdKey.snk</AssemblyOriginatorKeyFile> <AssemblyOriginatorKeyFile>..\bsmdKey.snk</AssemblyOriginatorKeyFile>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="log4net, Version=2.0.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL"> <Reference Include="log4net, Version=2.0.16.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.15\lib\net45\log4net.dll</HintPath> <HintPath>..\packages\log4net.2.0.16\lib\net45\log4net.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Configuration" /> <Reference Include="System.Configuration" />

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="log4net" version="2.0.15" targetFramework="net48" /> <package id="log4net" version="2.0.16" targetFramework="net48" />
</packages> </packages>

View File

@ -38,8 +38,8 @@
<AssemblyOriginatorKeyFile>..\bsmdKey.snk</AssemblyOriginatorKeyFile> <AssemblyOriginatorKeyFile>..\bsmdKey.snk</AssemblyOriginatorKeyFile>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="log4net, Version=2.0.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL"> <Reference Include="log4net, Version=2.0.16.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.15\lib\net45\log4net.dll</HintPath> <HintPath>..\packages\log4net.2.0.16\lib\net45\log4net.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Configuration" /> <Reference Include="System.Configuration" />

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="log4net" version="2.0.15" targetFramework="net48" /> <package id="log4net" version="2.0.16" targetFramework="net48" />
</packages> </packages>