|
|
|
@ -41,10 +41,16 @@ import { AttributeScope, DataKeyType } from '@shared/models/telemetry/telemetry. |
|
|
|
import { defaultHttpOptionsFromConfig, RequestConfig } from '@core/http/http-utils'; |
|
|
|
import { RuleChainService } from '@core/http/rule-chain.service'; |
|
|
|
import { AliasInfo, StateParams, SubscriptionInfo } from '@core/api/widget-api.models'; |
|
|
|
import { Datasource, DatasourceType, KeyInfo } from '@app/shared/models/widget.models'; |
|
|
|
import { DataKey, Datasource, DatasourceType, KeyInfo } from '@app/shared/models/widget.models'; |
|
|
|
import { UtilsService } from '@core/services/utils.service'; |
|
|
|
import { AliasFilterType, EntityAlias, EntityAliasFilter, EntityAliasFilterResult } from '@shared/models/alias.models'; |
|
|
|
import { entityFields, EntityInfo, ImportEntitiesResultInfo, ImportEntityData } from '@shared/models/entity.models'; |
|
|
|
import { |
|
|
|
EntitiesKeysByQuery, |
|
|
|
entityFields, |
|
|
|
EntityInfo, |
|
|
|
ImportEntitiesResultInfo, |
|
|
|
ImportEntityData |
|
|
|
} from '@shared/models/entity.models'; |
|
|
|
import { EntityRelationService } from '@core/http/entity-relation.service'; |
|
|
|
import { deepClone, isDefined, isDefinedAndNotNull } from '@core/utils'; |
|
|
|
import { Asset } from '@shared/models/asset.models'; |
|
|
|
@ -376,6 +382,13 @@ export class EntityService { |
|
|
|
return this.http.post<PageData<EntityData>>('/api/entitiesQuery/find', query, defaultHttpOptionsFromConfig(config)); |
|
|
|
} |
|
|
|
|
|
|
|
public findEntityKeysByQuery(query: EntityDataQuery, attributes = true, timeseries = true, |
|
|
|
config?: RequestConfig): Observable<EntitiesKeysByQuery> { |
|
|
|
return this.http.post<EntitiesKeysByQuery>( |
|
|
|
`/api/entitiesQuery/find/keys?attributes=${attributes}×eries=${timeseries}`, |
|
|
|
query, defaultHttpOptionsFromConfig(config)); |
|
|
|
} |
|
|
|
|
|
|
|
public findAlarmDataByQuery(query: AlarmDataQuery, config?: RequestConfig): Observable<PageData<AlarmData>> { |
|
|
|
return this.http.post<PageData<AlarmData>>('/api/alarmsQuery/find', query, defaultHttpOptionsFromConfig(config)); |
|
|
|
} |
|
|
|
@ -595,7 +608,7 @@ export class EntityService { |
|
|
|
return entityTypes; |
|
|
|
} |
|
|
|
|
|
|
|
private getEntityFieldKeys(entityType: EntityType, searchText: string): Array<string> { |
|
|
|
private getEntityFieldKeys(entityType: EntityType, searchText: string = ''): Array<string> { |
|
|
|
const entityFieldKeys: string[] = [entityFields.createdTime.keyName]; |
|
|
|
const query = searchText.toLowerCase(); |
|
|
|
switch (entityType) { |
|
|
|
@ -637,7 +650,7 @@ export class EntityService { |
|
|
|
return query ? entityFieldKeys.filter((entityField) => entityField.toLowerCase().indexOf(query) === 0) : entityFieldKeys; |
|
|
|
} |
|
|
|
|
|
|
|
private getAlarmKeys(searchText: string): Array<string> { |
|
|
|
private getAlarmKeys(searchText: string = ''): Array<string> { |
|
|
|
const alarmKeys: string[] = Object.keys(alarmFields); |
|
|
|
const query = searchText.toLowerCase(); |
|
|
|
return query ? alarmKeys.filter((alarmField) => alarmField.toLowerCase().indexOf(query) === 0) : alarmKeys; |
|
|
|
@ -672,6 +685,59 @@ export class EntityService { |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
public getEntityKeysByEntityFilter(filter: EntityFilter, types: DataKeyType[], config?: RequestConfig): Observable<Array<DataKey>> { |
|
|
|
if (!types.length) { |
|
|
|
return of([]); |
|
|
|
} |
|
|
|
let entitiesKeysByQuery$: Observable<EntitiesKeysByQuery>; |
|
|
|
if (filter !== null && types.some(type => [DataKeyType.timeseries, DataKeyType.attribute].includes(type))) { |
|
|
|
const dataQuery = { |
|
|
|
entityFilter: filter, |
|
|
|
pageLink: createDefaultEntityDataPageLink(100), |
|
|
|
}; |
|
|
|
entitiesKeysByQuery$ = this.findEntityKeysByQuery(dataQuery, types.includes(DataKeyType.attribute), |
|
|
|
types.includes(DataKeyType.timeseries), config); |
|
|
|
} else { |
|
|
|
entitiesKeysByQuery$ = of({ |
|
|
|
attribute: [], |
|
|
|
timeseries: [], |
|
|
|
entityTypes: [], |
|
|
|
}); |
|
|
|
} |
|
|
|
return entitiesKeysByQuery$.pipe( |
|
|
|
map((entitiesKeys) => { |
|
|
|
const dataKeys: Array<DataKey> = []; |
|
|
|
types.forEach(type => { |
|
|
|
let keys: Array<string>; |
|
|
|
switch (type) { |
|
|
|
case DataKeyType.entityField: |
|
|
|
if (entitiesKeys.entityTypes.length) { |
|
|
|
const entitiesFields = []; |
|
|
|
entitiesKeys.entityTypes.forEach(entityType => entitiesFields.push(...this.getEntityFieldKeys(entityType))); |
|
|
|
keys = Array.from(new Set(entitiesFields)); |
|
|
|
} |
|
|
|
break; |
|
|
|
case DataKeyType.alarm: |
|
|
|
keys = this.getAlarmKeys(); |
|
|
|
break; |
|
|
|
case DataKeyType.attribute: |
|
|
|
case DataKeyType.timeseries: |
|
|
|
if (entitiesKeys[type].length) { |
|
|
|
keys = entitiesKeys[type]; |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
if (keys) { |
|
|
|
dataKeys.push(...keys.map(key => { |
|
|
|
return {name: key, type}; |
|
|
|
})); |
|
|
|
} |
|
|
|
}); |
|
|
|
return dataKeys; |
|
|
|
}) |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
public createDatasourcesFromSubscriptionsInfo(subscriptionsInfo: Array<SubscriptionInfo>): Array<Datasource> { |
|
|
|
const datasources = subscriptionsInfo.map(subscriptionInfo => this.createDatasourceFromSubscriptionInfo(subscriptionInfo)); |
|
|
|
this.utils.generateColors(datasources); |
|
|
|
|