Add database adapter system, production deployment configs, and new dashboard components
- Add PostgreSQL and SQLite database adapters with factory pattern - Add migration script for SQLite to PostgreSQL - Add production Dockerfiles and docker-compose configs - Add deployment documentation and scripts - Add BIA sync dashboard and matching service - Add data completeness configuration and components - Add new dashboard components (BusinessImportanceComparison, ComplexityDynamics, etc.) - Update various services and routes - Remove deprecated management-parameters.json and taxonomy files
This commit is contained in:
@@ -60,7 +60,7 @@ class CMDBService {
|
||||
}
|
||||
|
||||
// Try cache first
|
||||
const cached = cacheStore.getObject<T>(typeName, id);
|
||||
const cached = await cacheStore.getObject<T>(typeName, id);
|
||||
if (cached) {
|
||||
return cached;
|
||||
}
|
||||
@@ -89,14 +89,14 @@ class CMDBService {
|
||||
|
||||
const parsed = jiraAssetsClient.parseObject<T>(result.objects[0]);
|
||||
if (parsed) {
|
||||
cacheStore.upsertObject(typeName, parsed);
|
||||
cacheStore.extractAndStoreRelations(typeName, parsed);
|
||||
await cacheStore.upsertObject(typeName, parsed);
|
||||
await cacheStore.extractAndStoreRelations(typeName, parsed);
|
||||
}
|
||||
return parsed;
|
||||
}
|
||||
|
||||
// Try cache first
|
||||
const cached = cacheStore.getObjectByKey<T>(typeName, objectKey);
|
||||
const cached = await cacheStore.getObjectByKey<T>(typeName, objectKey);
|
||||
if (cached) {
|
||||
return cached;
|
||||
}
|
||||
@@ -119,14 +119,14 @@ class CMDBService {
|
||||
|
||||
const parsed = jiraAssetsClient.parseObject<T>(jiraObj);
|
||||
if (parsed) {
|
||||
cacheStore.upsertObject(typeName, parsed);
|
||||
cacheStore.extractAndStoreRelations(typeName, parsed);
|
||||
await cacheStore.upsertObject(typeName, parsed);
|
||||
await cacheStore.extractAndStoreRelations(typeName, parsed);
|
||||
}
|
||||
return parsed;
|
||||
} catch (error) {
|
||||
// If object was deleted from Jira, remove it from our cache
|
||||
if (error instanceof JiraObjectNotFoundError) {
|
||||
const deleted = cacheStore.deleteObject(typeName, id);
|
||||
const deleted = await cacheStore.deleteObject(typeName, id);
|
||||
if (deleted) {
|
||||
logger.info(`CMDBService: Removed deleted object ${typeName}/${id} from cache`);
|
||||
}
|
||||
@@ -145,13 +145,13 @@ class CMDBService {
|
||||
options?: SearchOptions
|
||||
): Promise<T[]> {
|
||||
if (options?.searchTerm) {
|
||||
return cacheStore.searchByLabel<T>(typeName, options.searchTerm, {
|
||||
return await cacheStore.searchByLabel<T>(typeName, options.searchTerm, {
|
||||
limit: options.limit,
|
||||
offset: options.offset,
|
||||
});
|
||||
}
|
||||
|
||||
return cacheStore.getObjects<T>(typeName, {
|
||||
return await cacheStore.getObjects<T>(typeName, {
|
||||
limit: options?.limit,
|
||||
offset: options?.offset,
|
||||
});
|
||||
@@ -160,15 +160,15 @@ class CMDBService {
|
||||
/**
|
||||
* Count objects of a type in cache
|
||||
*/
|
||||
countObjects(typeName: CMDBObjectTypeName): number {
|
||||
return cacheStore.countObjects(typeName);
|
||||
async countObjects(typeName: CMDBObjectTypeName): Promise<number> {
|
||||
return await cacheStore.countObjects(typeName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search across all object types
|
||||
*/
|
||||
async searchAllTypes(searchTerm: string, options?: { limit?: number }): Promise<CMDBObject[]> {
|
||||
return cacheStore.searchAllTypes(searchTerm, { limit: options?.limit });
|
||||
return await cacheStore.searchAllTypes(searchTerm, { limit: options?.limit });
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -179,7 +179,7 @@ class CMDBService {
|
||||
attributeName: string,
|
||||
targetTypeName: CMDBObjectTypeName
|
||||
): Promise<T[]> {
|
||||
return cacheStore.getRelatedObjects<T>(sourceId, targetTypeName, attributeName);
|
||||
return await cacheStore.getRelatedObjects<T>(sourceId, targetTypeName, attributeName);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -190,7 +190,7 @@ class CMDBService {
|
||||
sourceTypeName: CMDBObjectTypeName,
|
||||
attributeName?: string
|
||||
): Promise<T[]> {
|
||||
return cacheStore.getReferencingObjects<T>(targetId, sourceTypeName, attributeName);
|
||||
return await cacheStore.getReferencingObjects<T>(targetId, sourceTypeName, attributeName);
|
||||
}
|
||||
|
||||
// ==========================================================================
|
||||
@@ -396,29 +396,29 @@ class CMDBService {
|
||||
/**
|
||||
* Get cache statistics
|
||||
*/
|
||||
getCacheStats(): CacheStats {
|
||||
return cacheStore.getStats();
|
||||
async getCacheStats(): Promise<CacheStats> {
|
||||
return await cacheStore.getStats();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if cache has data
|
||||
*/
|
||||
isCacheWarm(): boolean {
|
||||
return cacheStore.isWarm();
|
||||
async isCacheWarm(): Promise<boolean> {
|
||||
return await cacheStore.isWarm();
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear cache for a specific type
|
||||
*/
|
||||
clearCacheForType(typeName: CMDBObjectTypeName): void {
|
||||
cacheStore.clearObjectType(typeName);
|
||||
async clearCacheForType(typeName: CMDBObjectTypeName): Promise<void> {
|
||||
await cacheStore.clearObjectType(typeName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear entire cache
|
||||
*/
|
||||
clearCache(): void {
|
||||
cacheStore.clearAll();
|
||||
async clearCache(): Promise<void> {
|
||||
await cacheStore.clearAll();
|
||||
}
|
||||
|
||||
// ==========================================================================
|
||||
@@ -429,7 +429,11 @@ class CMDBService {
|
||||
* Set user token for current request
|
||||
*/
|
||||
setUserToken(token: string | null): void {
|
||||
jiraAssetsClient.setRequestToken(token);
|
||||
if (token) {
|
||||
jiraAssetsClient.setRequestToken(token);
|
||||
} else {
|
||||
jiraAssetsClient.clearRequestToken();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user