private async Task WriteTrafficData(MonitoredPort port, long octets, TrafficType trafficType) { var entity = new CollectedTrafficData { TimeScanned = DateTime.Now, Octets = octets, TrafficType = trafficType, PortNumber = port.PortNumber, SnmpIpAddress = port.SnmpIpAddress }; var existing = await CollectedTrafficDatas.Query() .Where(data => data.TrafficType == trafficType) .Include(data => data.MonitoredPort) .Where(data => data.MonitoredPort.SnmpIpAddress == port.SnmpIpAddress) .Where(data => data.MonitoredPort.PortNumber == port.PortNumber) .OrderByDescending(data => data.TimeScanned) .FirstOrDefaultAsync(); if (existing == null) { entity.DiffedTimeSpan = null; entity.Octets = octets; entity.AbsoluteOctets = octets; } else { entity.DiffedTimeSpan = (entity.TimeScanned - existing.TimeScanned); entity.Octets = (octets - existing.AbsoluteOctets); entity.AbsoluteOctets = octets; } CollectedTrafficDatas.Insert(entity); }
private async Task <MonitoredPort> EnsureMonitoredPort(SnmpTarget target, int portNumber) { var existingPort = await MonitoredPorts.Query() .FirstOrDefaultAsync(port => port.PortNumber == portNumber && port.SnmpIpAddress == target.IpAddress); if (existingPort == null) { var newPort = new MonitoredPort { AllInOctets = 0, AllOutOctets = 0, SnmpIpAddress = target.IpAddress, PortNumber = portNumber, FirstTimeScanned = DateTime.Now, LastInOctets = 0, LastOutOctets = 0, ExcludeFromStatistics = false, Comment = null }; newPort = MonitoredPorts.Insert(newPort); await Context.SaveAsync(); return(newPort); } return(existingPort); }
private async Task ProcessTrafficResult(MonitoredPort port, long octets, TrafficType trafficType) { if (port.FirstTimeScanned == null) { port.FirstTimeScanned = DateTime.Now; port.LastInOctets = 0; port.LastOutOctets = 0; port.AllInOctets = 0; port.AllOutOctets = 0; switch (trafficType) { case TrafficType.Inbound: { port.LastInOctets = octets; port.AllInOctets = octets; break; } case TrafficType.Outbound: { port.LastOutOctets = octets; port.LastInOctets = octets; break; } } } long lastOctets = 0; long overallOctets = 0; switch (trafficType) { case TrafficType.Inbound: lastOctets = port.LastInOctets; overallOctets = port.AllInOctets; break; case TrafficType.Outbound: lastOctets = port.LastOutOctets; overallOctets = port.AllOutOctets; break; } if ((lastOctets - octets) > 10) { overallOctets += octets; lastOctets = octets; } else { overallOctets += (octets - lastOctets); lastOctets = octets; } switch (trafficType) { case TrafficType.Inbound: port.LastInOctets = lastOctets; port.AllInOctets = overallOctets; break; case TrafficType.Outbound: port.LastOutOctets = lastOctets; port.AllOutOctets = overallOctets; break; } port.LastTimeScanned = DateTime.Now; MonitoredPorts.Update(port); await WriteTrafficData(port, octets, trafficType); }