Browse Source

Fix recording when timeouted

master
amki 4 years ago
parent
commit
4a12f1361e
  1. 12
      ISPChk/.config/dotnet-tools.json
  2. 1
      ISPChk/ISPChk.csproj
  3. 36
      ISPChk/NetworkTest.cs
  4. BIN
      ISPChk/ispchk.db
  5. BIN
      ISPChk/ispchk.db-shm
  6. BIN
      ISPChk/ispchk.db-wal

12
ISPChk/.config/dotnet-tools.json

@ -0,0 +1,12 @@
{
"version": 1,
"isRoot": true,
"tools": {
"dotnet-ef": {
"version": "5.0.2",
"commands": [
"dotnet-ef"
]
}
}
}

1
ISPChk/ISPChk.csproj

@ -2,6 +2,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>net5.0</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<UserSecretsId>0f3cc2c5-5728-4cf6-b618-bda6124ebd51</UserSecretsId>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

36
ISPChk/NetworkTest.cs

@ -15,11 +15,7 @@ namespace ISPChk
private ISPChkContext _context; private ISPChkContext _context;
public NetworkTest() { public NetworkTest() {
var optionsBuilder = new DbContextOptionsBuilder<ISPChkContext>(); _context = CreateDbContext();
optionsBuilder.UseSqlite("Data Source=ispchk.db");
_context = new ISPChkContext(optionsBuilder.Options);
System.Diagnostics.Debug.WriteLine("NetworkTest instantiated.");
_context.Database.EnsureCreated();
} }
public async void LoadHostsFromDatabase() public async void LoadHostsFromDatabase()
@ -31,10 +27,25 @@ namespace ISPChk
} }
} }
private ISPChkContext CreateDbContext()
{
var optionsBuilder = new DbContextOptionsBuilder<ISPChkContext>();
optionsBuilder.UseSqlite("Data Source=ispchk.db");
var ctx = new ISPChkContext(optionsBuilder.Options);
System.Diagnostics.Debug.WriteLine("NetworkTest instantiated.");
ctx.Database.EnsureCreated();
return ctx;
}
private void StartPing(Host host) private void StartPing(Host host)
{ {
var t = Task.Run(async () => { var t = Task.Run(async () => {
// Do not use the outer context, not threadsafe?
var ctx = CreateDbContext();
var h = await ctx.Hosts.FindAsync(host.HostId);
ctx.Entry(h).Collection(hst => hst.PingItems).Load();
Ping pingSender = new Ping(); Ping pingSender = new Ping();
// Create a buffer of 32 bytes of data to be transmitted. // Create a buffer of 32 bytes of data to be transmitted.
@ -42,7 +53,7 @@ namespace ISPChk
byte[] buffer = Encoding.ASCII.GetBytes(data); byte[] buffer = Encoding.ASCII.GetBytes(data);
// Wait 10 seconds for a reply. // Wait 10 seconds for a reply.
int timeout = 5000; int timeout = 3000;
// Set options for transmission: // Set options for transmission:
// The data can go through 64 gateways or routers // The data can go through 64 gateways or routers
@ -54,12 +65,13 @@ namespace ISPChk
while (true) while (true)
{ {
int numPings = 5;
long min = timeout + 1; long min = timeout + 1;
long max = 0; long max = 0;
long avg = 0; long avg = 0;
int successes = 0; int successes = 0;
int failures = 0; int failures = 0;
for (var i = 0; i < 5; ++i) for (var i = 0; i < numPings; ++i)
{ {
// Send the request. // Send the request.
PingReply reply = pingSender.Send(host.HostName, timeout, buffer, options); PingReply reply = pingSender.Send(host.HostName, timeout, buffer, options);
@ -89,11 +101,17 @@ namespace ISPChk
} }
Thread.Sleep(500); Thread.Sleep(500);
} }
if(successes > 0)
avg = avg / successes; avg = avg / successes;
// FIXME: This is dirty but I don't want the graph to explode
if (min > timeout)
min = 0;
System.Diagnostics.Debug.WriteLine("min:" + min + " max:" + max + " avg:" + avg); System.Diagnostics.Debug.WriteLine("min:" + min + " max:" + max + " avg:" + avg);
PingItem pi = new PingItem { Date = DateTimeOffset.UtcNow, Min = min, Max = max, Avg = avg, Failures = failures }; PingItem pi = new PingItem { Date = DateTimeOffset.UtcNow, Min = min, Max = max, Avg = avg, Failures = failures };
host.PingItems.Add(pi); h.PingItems.Add(pi);
_context.SaveChanges(); ctx.SaveChanges();
// Throttle if everything is ok
if(successes == numPings)
Thread.Sleep(5000); Thread.Sleep(5000);
} }
}); });

BIN
ISPChk/ispchk.db

Binary file not shown.

BIN
ISPChk/ispchk.db-shm

Binary file not shown.

BIN
ISPChk/ispchk.db-wal

Binary file not shown.
Loading…
Cancel
Save