예제 #1
0
        public async Task ExecuteMacScan()
        {
            var snmpTargets = await SnmpTargets.Query().ToListAsync();

            foreach (var snmpTarget in snmpTargets)
            {
                var avaliable = false;
                try
                {
                    var results = MapMacAddresses(snmpTarget);
                    await SnmpResultService.ProcessMacScanResults(results);

                    avaliable = true;
                }
                catch (Exception)
                {
                    // TODO: Logging
                }

                if (snmpTarget.Reachable != avaliable)
                {
                    await SetReachability(avaliable, snmpTarget.IpAddress);
                }
            }
        }
예제 #2
0
        public async Task ExecuteTrafficScan()
        {
            var snmpTargets = await SnmpTargets.Query().ToListAsync();

            foreach (var snmpTarget in snmpTargets)
            {
                var avaliable = false;
                try
                {
                    var results = ProcessTargetsTraffic(snmpTarget, SnmpOids.IfHcInOctets,
                                                        string.IsNullOrEmpty(snmpTarget.Community) ? "public" : snmpTarget.Community);
                    avaliable = true;
                    await SnmpResultService.ProcessTrafficResults(results);

                    results = ProcessTargetsTraffic(snmpTarget, SnmpOids.IfHcOutOctets,
                                                    string.IsNullOrEmpty(snmpTarget.Community) ? "public" : snmpTarget.Community);
                    await SnmpResultService.ProcessTrafficResults(results);
                }
                catch (Exception)
                {
                    // TODO: Logging
                }


                if (snmpTarget.Reachable != avaliable)
                {
                    await SetReachability(avaliable, snmpTarget.IpAddress);
                }
            }
        }
예제 #3
0
        public async Task <List <PortStatistics> > GetPortStatisticsForSwitch(string ipAddress)
        {
            var snmpTarget = await SnmpTargets.Query()
                             .FirstOrDefaultAsync(target => target.IpAddress == ipAddress);

            if (snmpTarget == null)
            {
                throw new ArgumentException("ipAddress");
            }

            var monitoredPorts = await MonitoredPorts.Query()
                                 .Where(port => port.SnmpIpAddress == ipAddress)
                                 .Where(port => !port.ExcludeFromStatistics)
                                 .ToListAsync();

            var results = new List <PortStatistics>();

            foreach (var monitoredPort in monitoredPorts)
            {
                var result = new PortStatistics
                {
                    InboundTraffic  = monitoredPort.AllInOctets,
                    MonitoredPort   = monitoredPort,
                    OutboundTraffic = monitoredPort.AllOutOctets,
                    SnmpTarget      = snmpTarget
                };

                results.Add(result);
            }

            return(results);
        }
예제 #4
0
        private async Task SetReachability(bool reachable, string snmpTargetIp)
        {
            var target = await SnmpTargets.Query()
                         .FirstOrDefaultAsync(snmp => snmp.IpAddress == snmpTargetIp);

            if (target != null)
            {
                target.Reachable = reachable;
                SnmpTargets.Update(target);
                await Context.SaveAsync();
            }
        }
예제 #5
0
        public async Task <SnmpTarget> GetSnmpTarget(string ipAddress)
        {
            var snmpTarget = await SnmpTargets.Query()
                             .FirstOrDefaultAsync(target => target.IpAddress == ipAddress);

            if (snmpTarget == null)
            {
                throw new ArgumentException("ipAddress");
            }

            return(snmpTarget);
        }
예제 #6
0
        public async Task <List <SwitchStatistics> > GetSwitchStatistics()
        {
            var snmpTargets = await SnmpTargets.Query()
                              .Include(_ => _.Group)
                              .ToListAsync();

            var results = new List <SwitchStatistics>();

            foreach (var snmpTarget in snmpTargets)
            {
                var target = snmpTarget;

                try
                {
                    var inboundTraffic = await MonitoredPorts.Query()
                                         .Where(port => port.SnmpIpAddress == target.IpAddress)
                                         .Where(port => !port.ExcludeFromStatistics)
                                         .SumAsync(port => port.AllInOctets);

                    var outboundTraffic = await MonitoredPorts.Query()
                                          .Where(port => port.SnmpIpAddress == target.IpAddress)
                                          .Where(port => !port.ExcludeFromStatistics)
                                          .SumAsync(port => port.AllOutOctets);

                    results.Add(new SwitchStatistics
                    {
                        InboundTraffic  = inboundTraffic,
                        OutboundTraffic = outboundTraffic,
                        SnmpTarget      = target,
                        Reachable       = target.Reachable,
                        GroupName       = target.Group.Name
                    });
                }
                catch (Exception)
                {
                    // TODO: Logging
                }
            }

            return(results);
        }