Browse Source

Fixes

pull/65/head
Sebastian Stehle 9 years ago
parent
commit
ed0d938d66
  1. 13
      src/Squidex.Infrastructure.MongoDb/EventStore/MongoEventStore.cs
  2. 4
      src/Squidex/Controllers/Api/EventConsumers/Models/EventConsumerDto.cs
  3. 8
      src/Squidex/app/features/administration/pages/event-consumers/event-consumers-page.component.html
  4. 4
      src/Squidex/app/features/administration/pages/event-consumers/event-consumers-page.component.scss
  5. 6
      src/Squidex/app/features/administration/pages/event-consumers/event-consumers-page.component.ts
  6. 8
      src/Squidex/app/shared/services/event-consumers.service.spec.ts
  7. 8
      src/Squidex/app/shared/services/event-consumers.service.ts

13
src/Squidex.Infrastructure.MongoDb/EventStore/MongoEventStore.cs

@ -110,20 +110,25 @@ namespace Squidex.Infrastructure.MongoDb.EventStore
await Collection.Find(filter).SortBy(x => x.Timestamp).ForEachAsync(async commit =>
{
var isGreaterTimestamp = commit.Timestamp > tokenTimestamp;
var eventStreamNumber = (int)commit.EventStreamOffset;
foreach (var e in commit.Events)
{
eventStreamNumber++;
if (eventStreamNumber > tokenEventStreamNumber)
if (isGreaterTimestamp || eventStreamNumber > tokenEventStreamNumber)
{
var eventData = new EventData { EventId = e.EventId, Metadata = e.Metadata, Payload = e.Payload, Type = e.Type };
var eventToken = CreateToken(commit.Timestamp, eventStreamNumber);
await callback(new StoredEvent(eventToken, eventStreamNumber, eventData));
}
else
{
break;
}
}
}, cancellationToken);
}
@ -200,12 +205,12 @@ namespace Squidex.Infrastructure.MongoDb.EventStore
{
var parts = new object[] { timestamp.Timestamp, timestamp.Increment, eventStreamNumber };
return string.Join("$", parts);
return string.Join("-", parts);
}
private static (BsonTimestamp Timestamp, int EventStreamNumber) ParsePosition(string position)
{
var parts = position.Split('$');
var parts = position.Split('-');
return (new BsonTimestamp(int.Parse(parts[0]), int.Parse(parts[1])), int.Parse(parts[2]));
}

4
src/Squidex/Controllers/Api/EventConsumers/Models/EventConsumerDto.cs

@ -10,8 +10,6 @@ namespace Squidex.Controllers.Api.EventConsumers.Models
{
public sealed class EventConsumerDto
{
public long LastHandledEventNumber { get; set; }
public bool IsStopped { get; set; }
public bool IsResetting { get; set; }
@ -19,5 +17,7 @@ namespace Squidex.Controllers.Api.EventConsumers.Models
public string Name { get; set; }
public string Error { get; set; }
public string Position { get; set; }
}
}

8
src/Squidex/app/features/administration/pages/event-consumers/event-consumers-page.component.html

@ -15,8 +15,8 @@
<div class="panel-content panel-content-scroll">
<table class="table table-items table-fixed">
<colgroup>
<col style="width: 100%" />
<col style="width: 160px" />
<col style="width: 50%" />
<col style="width: 50%" />
<col style="width: 160px" />
</colgroup>
@ -26,7 +26,7 @@
Name
</th>
<th class="text-right">
Event Number
Position
</th>
<th class="text-right">
Actions
@ -45,7 +45,7 @@
</span>
</td>
<td class="text-right">
<span>{{eventConsumer.lastHandledEventNumber}}</span>
<span>{{eventConsumer.position}}</span>
</td>
<td class="text-right">
<button class="btn btn-link" (click)="reset(eventConsumer.name)" *ngIf="!eventConsumer.isResetting" title="Reset Event Consumer">

4
src/Squidex/app/features/administration/pages/event-consumers/event-consumers-page.component.scss

@ -1,6 +1,10 @@
@import '_vars';
@import '_mixins';
.truncate {
@include truncate;
}
.faulted {
& {
color: $color-theme-error;

6
src/Squidex/app/features/administration/pages/event-consumers/event-consumers-page.component.ts

@ -58,7 +58,7 @@ export class EventConsumersPageComponent extends ComponentBase implements OnInit
this.eventConsumers =
this.eventConsumers.replaceAll(
e => e.name === name,
e => new EventConsumerDto(name, e.lastHandledEventNumber, false, e.isResetting, e.error));
e => new EventConsumerDto(name, false, e.isResetting, e.error, e.position));
}, error => {
this.notifyError(error);
});
@ -70,7 +70,7 @@ export class EventConsumersPageComponent extends ComponentBase implements OnInit
this.eventConsumers =
this.eventConsumers.replaceAll(
e => e.name === name,
e => new EventConsumerDto(name, e.lastHandledEventNumber, true, e.isResetting, e.error));
e => new EventConsumerDto(name, true, e.isResetting, e.error, e.position));
}, error => {
this.notifyError(error);
});
@ -82,7 +82,7 @@ export class EventConsumersPageComponent extends ComponentBase implements OnInit
this.eventConsumers =
this.eventConsumers.replaceAll(
e => e.name === name,
e => new EventConsumerDto(name, e.lastHandledEventNumber, e.isStopped, true, e.error));
e => new EventConsumerDto(name, e.isStopped, true, e.error, e.position));
}, error => {
this.notifyError(error);
});

8
src/Squidex/app/shared/services/event-consumers.service.spec.ts

@ -33,14 +33,14 @@ describe('EventConsumersService', () => {
body: [
{
name: 'event-consumer1',
lastHandledEventNumber: 13,
position: '13',
isStopped: true,
isResetting: true,
error: 'an error 1'
},
{
name: 'event-consumer2',
lastHandledEventNumber: 29,
position: '29',
isStopped: true,
isResetting: true,
error: 'an error 2'
@ -58,8 +58,8 @@ describe('EventConsumersService', () => {
}).unsubscribe();
expect(eventConsumers).toEqual([
new EventConsumerDto('event-consumer1', 13, true, true, 'an error 1'),
new EventConsumerDto('event-consumer2', 29, true, true, 'an error 2')
new EventConsumerDto('event-consumer1', true, true, 'an error 1', '13'),
new EventConsumerDto('event-consumer2', true, true, 'an error 2', '29')
]);
authService.verifyAll();

8
src/Squidex/app/shared/services/event-consumers.service.ts

@ -16,10 +16,10 @@ import { AuthService } from './auth.service';
export class EventConsumerDto {
constructor(
public readonly name: string,
public readonly lastHandledEventNumber: number,
public readonly isStopped: boolean,
public readonly isResetting: boolean,
public readonly error: string
public readonly error: string,
public readonly position: string
) {
}
}
@ -43,10 +43,10 @@ export class EventConsumersService {
return items.map(item => {
return new EventConsumerDto(
item.name,
item.lastHandledEventNumber,
item.isStopped,
item.isResetting,
item.error);
item.error,
item.position);
});
})
.catchError('Failed to load event consumers. Please reload.');

Loading…
Cancel
Save