Beispiel #1
0
        private async Task <Boolean> RemoveDHCPv4LeaseEntry(DHCPv4ScopeRelatedEvent e)
        {
            DHCPv4LeaseEntryDataModel entry = await GetLatestDHCPv4LeaseEntry(e);

            if (entry != null)
            {
                return(false);
            }

            DHCPv4LeaseEntries.Remove(entry);
            return(true);
        }
Beispiel #2
0
 private async Task <DHCPv4LeaseEntryDataModel> GetLatestDHCPv4LeaseEntry(DHCPv4ScopeRelatedEvent e) =>
 await DHCPv4LeaseEntries.AsQueryable().Where(x => x.LeaseId == e.EntityId).OrderByDescending(x => x.Timestamp).FirstOrDefaultAsync();
Beispiel #3
0
        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);
        }