private async Task <Boolean> RemoveDHCPv4LeaseEntry(DHCPv4ScopeRelatedEvent e) { DHCPv4LeaseEntryDataModel entry = await GetLatestDHCPv4LeaseEntry(e); if (entry != null) { return(false); } DHCPv4LeaseEntries.Remove(entry); return(true); }
private async Task <DHCPv4LeaseEntryDataModel> GetLatestDHCPv4LeaseEntry(DHCPv4ScopeRelatedEvent e) => await DHCPv4LeaseEntries.AsQueryable().Where(x => x.LeaseId == e.EntityId).OrderByDescending(x => x.Timestamp).FirstOrDefaultAsync();
private async Task <Boolean?> ProjectDHCPv4PacketAndLeaseRelatedEvents(DomainEvent @event) { Boolean?hasChanges = new Boolean?(); switch (@event) { case DHCPv4PacketHandledEvent e: DHCPv4PacketHandledEntryDataModel entry = new DHCPv4PacketHandledEntryDataModel { HandledSuccessfully = e.WasSuccessfullHandled, ErrorCode = e.ErrorCode, Id = Guid.NewGuid(), RequestSize = e.Request.GetSize(), RequestDestination = e.Request.Header.Destionation.ToString(), RequestSource = e.Request.Header.Source.ToString(), RequestStream = e.Request.GetAsStream(), ScopeId = e.ScopeId, RequestType = e.Request.MessageType, Timestamp = e.Timestamp, }; if (e.Response != null) { entry.ResponseSize = e.Response.GetSize(); entry.ResponseType = e.Response.MessageType; entry.ResponseDestination = e.Response.Header.Destionation.ToString(); entry.ResponseSource = e.Response.Header.Source.ToString(); entry.ResponseStream = e.Response.GetAsStream(); } entry.SetTimestampDates(); DHCPv4PacketEntries.Add(entry); hasChanges = true; break; case DHCPv4LeaseCreatedEvent e: { DHCPv4LeaseEntryDataModel leaseEntry = new DHCPv4LeaseEntryDataModel { Id = Guid.NewGuid(), Address = e.Address.ToString(), Start = e.StartedAt, End = e.ValidUntil, LeaseId = e.EntityId, ScopeId = e.ScopeId, Timestamp = e.Timestamp, IsActive = false, EndOfRenewalTime = e.StartedAt + e.RenewalTime, EndOfPreferredLifetime = e.StartedAt + e.PreferredLifetime, }; DHCPv4LeaseEntries.Add(leaseEntry); hasChanges = true; } break; case DHCPv4LeaseExpiredEvent e: hasChanges = await UpdateEndToDHCPv4LeaseEntry(e, ReasonToEndLease.Expired); break; case DHCPv4LeaseActivatedEvent e: hasChanges = await UpdateLastestDHCPv4LeaseEntry(e, e => e.IsActive = true); break; case DHCPv4LeaseCanceledEvent e: hasChanges = await UpdateEndToDHCPv4LeaseEntry(e, ReasonToEndLease.Canceled); break; case DHCPv4LeaseReleasedEvent e: hasChanges = await UpdateEndToDHCPv4LeaseEntry(e, ReasonToEndLease.Released); break; case DHCPv4LeaseRenewedEvent e: hasChanges = await UpdateLastestDHCPv4LeaseEntry(e, (leaseEntry) => { leaseEntry.End = e.End; if (e.Reset == true) { leaseEntry.IsActive = false; } leaseEntry.EndOfRenewalTime = e.Timestamp + e.RenewSpan; leaseEntry.EndOfPreferredLifetime = e.Timestamp + e.ReboundSpan; }); break; case DHCPv4LeaseRevokedEvent e: hasChanges = await UpdateEndToDHCPv4LeaseEntry(e, ReasonToEndLease.Revoked); break; case DHCPv4LeaseRemovedEvent e: hasChanges = await RemoveDHCPv4LeaseEntry(e); break; default: hasChanges = null; break; } return(hasChanges); }