/// <summary>
        /// Records the BGP results in the database.
        /// </summary>
        /// <param name="databaseContext">The database context to work with.</param>
        /// <param name="host">The host data of the query.</param>
        /// <param name="bgpPeers">The BGP peers to record.</param>
        /// <param name="queryTime">The time of the data aquisition (recorded with the data).</param>
        private void DoRecordBgpDetailsInDatabase(QueryResultDatabaseContext databaseContext, IHamnetDbHost host, IBgpPeers bgpPeers, DateTime queryTime)
        {
            var localAdressToSearch = host.Address.ToString();

            foreach (var item in bgpPeers.Details)
            {
                var remoteAdressToSearch = item.RemoteAddress.ToString();
                var peerEntry            = databaseContext.BgpPeers.SingleOrDefault(p => (p.LocalAddress == localAdressToSearch) && (p.RemoteAddress == remoteAdressToSearch));
                if (peerEntry == null)
                {
                    peerEntry = new BgpPeerData
                    {
                        LocalAddress  = localAdressToSearch,
                        LocalCallsign = host.Callsign.ToUpperInvariant(),
                        RemoteAddress = remoteAdressToSearch
                    };

                    databaseContext.BgpPeers.Add(peerEntry);
                }

                peerEntry.LocalCallsign = host.Callsign.ToUpperInvariant();
                peerEntry.PeeringName   = item.Name;
                peerEntry.PeeringState  = item.State;
                peerEntry.PrefixCount   = item.PrefixCount;
                peerEntry.Uptime        = item.Uptime.ToString();

                peerEntry.TimeStampString = queryTime.ToUniversalTime().ToString("yyyy-MM-ddTHH\\:mm\\:sszzz");
                peerEntry.UnixTimeStamp   = (ulong)queryTime.ToUniversalTime().Subtract(Program.UnixTimeStampBase).TotalSeconds;
            }
        }
예제 #2
0
        /// <summary>
        /// Construct from a database peer data object.
        /// </summary>
        /// <param name="peerData">The database peer data object to construct from.</param>
        public BgpPeerResponseData(BgpPeerData peerData)
        {
            this.underlyingDatabaseData = peerData;

            if (TimeSpan.TryParse(peerData.Uptime, out TimeSpan parsedUptime))
            {
                this.UptimeSeconds = parsedUptime;
            }
        }