catalog-backend: Remove obervables

Signed-off-by: Johan Haals <johan.haals@gmail.com>
This commit is contained in:
Johan Haals
2021-04-26 10:14:45 +02:00
committed by blam
parent 3f6c50a529
commit 11ef45c097
5 changed files with 5 additions and 106 deletions
+1 -3
View File
@@ -33,7 +33,6 @@
"@backstage/backend-common": "^0.6.3",
"@backstage/catalog-model": "^0.7.7",
"@backstage/config": "^0.1.4",
"@backstage/core": "^0.7.6",
"@backstage/errors": "^0.1.1",
"@backstage/integration": "^0.5.1",
"@backstage/plugin-search-backend-node": "^0.1.3",
@@ -61,8 +60,7 @@
"winston": "^3.2.1",
"yaml": "^1.9.2",
"yn": "^4.0.0",
"yup": "^0.29.3",
"zen-observable": "^0.8.15"
"yup": "^0.29.3"
},
"devDependencies": {
"@backstage/cli": "^0.6.9",
@@ -1,71 +0,0 @@
/*
* Copyright 2021 Spotify AB
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Observable } from '@backstage/core';
import { ENTITY_DEFAULT_NAMESPACE } from '@backstage/catalog-model';
import { EntityProvider, LocationStore, EntityMessage } from './types';
import ObservableImpl from 'zen-observable';
import {
locationSpecToLocationEntity,
locationSpecToMetadataName,
} from './util';
export class DatabaseLocationProvider implements EntityProvider {
private subscribers = new Set<
ZenObservable.SubscriptionObserver<EntityMessage>
>();
constructor(private readonly store: LocationStore) {
store.location$().subscribe({
next: locations => {
if ('all' in locations) {
this.notify({
all: locations.all.map(l => locationSpecToLocationEntity(l)),
});
} else {
this.notify({
added: locations.added.map(l => locationSpecToLocationEntity(l)),
removed: locations.removed.map(l => ({
kind: 'Location',
namespace: ENTITY_DEFAULT_NAMESPACE,
name: locationSpecToMetadataName(l),
})),
});
}
},
});
}
private notify(message: EntityMessage) {
for (const subscriber of this.subscribers) {
subscriber.next(message);
}
}
entityChange$(): Observable<EntityMessage> {
return new ObservableImpl(subscriber => {
this.store.listLocations().then(locations => {
subscriber.next({
all: locations.map(l => locationSpecToLocationEntity(l)),
});
this.subscribers.add(subscriber);
});
return () => {
this.subscribers.delete(subscriber);
};
});
}
}
@@ -14,11 +14,9 @@
* limitations under the License.
*/
import { Subscription } from '@backstage/core';
import {
CatalogProcessingEngine,
EntityProvider,
EntityMessage,
EntityProviderConnection,
EntityProviderMutation,
ProcessingStateManager,
@@ -40,7 +38,7 @@ class Connection implements EntityProviderConnection {
async applyMutation(mutation: EntityProviderMutation): Promise<void> {
if (mutation.type === 'full') {
await this.config.stateManager.replaceProcessingItems({
id: this.config.id,
sourceKey: this.config.id,
type: 'full',
items: mutation.entities,
});
@@ -49,7 +47,7 @@ class Connection implements EntityProviderConnection {
}
await this.config.stateManager.replaceProcessingItems({
id: this.config.id,
sourceKey: this.config.id,
type: 'delta',
added: mutation.added,
removed: mutation.removed,
@@ -120,25 +118,4 @@ export class DefaultCatalogProcessingEngine implements CatalogProcessingEngine {
async stop() {
this.running = false;
}
private async onNext(id: string, message: EntityMessage) {
if ('all' in message) {
// TODO unhandled rejection
await this.stateManager.addProcessingItems({
id,
type: 'provider',
entities: message.all,
});
}
if ('added' in message) {
await this.stateManager.addProcessingItems({
id,
type: 'provider',
entities: message.added,
});
// TODO deletions of message.removed
}
}
}
@@ -25,10 +25,6 @@ import { v4 as uuidv4 } from 'uuid';
import { locationSpecToLocationEntity } from './util';
import { ConflictError } from '@backstage/errors';
export type LocationMessage =
| { all: Location[] }
| { added: Location[]; removed: Location[] };
export class DefaultLocationStore implements LocationStore, EntityProvider {
private _connection: EntityProviderConnection | undefined;
+2 -3
View File
@@ -16,7 +16,6 @@
import {
Entity,
EntityName,
LocationSpec,
Location,
EntityRelationSpec,
@@ -116,12 +115,12 @@ export type ProcessingItem = {
export type ReplaceProcessingItemsRequest =
| {
id: string;
sourceKey: string;
items: Entity[];
type: 'full';
}
| {
id: string;
sourceKey: string;
added: Entity[];
removed: Entity[];
type: 'delta';