예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }