/// <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; } }
/// <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; } }