Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import {
} from '../../metric/metric-category';
import { VisibilityUpdater } from '../../visibility-updater';

@Injectable({ providedIn: 'root' })
@Injectable()
export class EntityEdgeCurveRendererService implements TopologyEdgeRenderDelegate<EntityEdge> {
private readonly edgeClass: string = 'entity-edge';
private readonly edgeLineClass: string = 'entity-edge-line';
Expand All @@ -51,6 +51,11 @@ export class EntityEdgeCurveRendererService implements TopologyEdgeRenderDelegat
return typeof edge.specification === 'object' && typeof edge.data === 'object';
}

public setPrimaryMetric(): void {}
public setSecondaryMetric(): void {}
public setOtherMetrics(): void {}


public draw(
element: SVGGElement,
edge: EntityEdge,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { entityTypeKey, ObservabilityEntityType } from '../../../../../../graphq
import { EntityNode } from '../../../../../../graphql/request/handlers/entities/query/topology/entity-topology-graphql-query-handler.service';
import { EntityNodeBoxRendererService } from '../entity-node-box-renderer.service';

@Injectable({ providedIn: 'root' })
@Injectable()
export class ApiNodeBoxRendererService extends EntityNodeBoxRendererService {
public matches(node: TopologyNode & Partial<EntityNode>): node is EntityNode {
return this.isEntityNode(node) && node.data[entityTypeKey] === ObservabilityEntityType.Api;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { entityTypeKey, ObservabilityEntityType } from '../../../../../../graphq
import { EntityNode } from '../../../../../../graphql/request/handlers/entities/query/topology/entity-topology-graphql-query-handler.service';
import { EntityNodeBoxRendererService } from '../entity-node-box-renderer.service';

@Injectable({ providedIn: 'root' })
@Injectable()
export class BackendNodeBoxRendererService extends EntityNodeBoxRendererService {
public matches(node: TopologyNode & Partial<EntityNode>): node is EntityNode {
return this.isEntityNode(node) && node.data[entityTypeKey] === ObservabilityEntityType.Backend;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ export abstract class EntityNodeBoxRendererService implements TopologyNodeRender

public abstract matches(node: TopologyNode & Partial<EntityNode>): node is EntityNode;

public setPrimaryMetric(): void {}
public setSecondaryMetric(): void {}
public setOtherMetrics(): void {}


public draw(
nodeElement: SVGGElement,
node: EntityNode,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { entityTypeKey, ObservabilityEntityType } from '../../../../../../graphq
import { EntityNode } from '../../../../../../graphql/request/handlers/entities/query/topology/entity-topology-graphql-query-handler.service';
import { EntityNodeBoxRendererService } from '../entity-node-box-renderer.service';

@Injectable({ providedIn: 'root' })
@Injectable()
export class ServiceNodeBoxRendererService extends EntityNodeBoxRendererService {
public matches(node: TopologyNode & Partial<EntityNode>): node is EntityNode {
return this.isEntityNode(node) && node.data[entityTypeKey] === ObservabilityEntityType.Service;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,43 +30,49 @@ import { TopologyWidgetModel } from './topology-widget.model';
'./edge/curved/entity-edge-curve-renderer.scss',
'./topology-widget-renderer.component.scss'
],
providers: [TopologyNodeRendererService, TopologyEdgeRendererService, TopologyTooltipRendererService],
providers: [
TopologyNodeRendererService,
TopologyEdgeRendererService,
TopologyTooltipRendererService,
EntityEdgeCurveRendererService,
ApiNodeBoxRendererService,
BackendNodeBoxRendererService,
ServiceNodeBoxRendererService
],
changeDetection: ChangeDetectionStrategy.OnPush,
template: `
<div class="topology-container" [ngClass]="{ 'box-style': this.model.enableBoxStyle }">
<ht-titled-content [title]="this.model.title | htDisplayTitle">
<div class="visualization" *htLoadAsync="this.data$ as data">
<div *ngIf="this.model.showLegend" class="legend">
<div class="latency">
<div class="label">P99 Latency:</div>
<div class="entry" *ngFor="let entry of this.getLatencyLegendConfig()">
<div [ngClass]="entry.categoryClass" class="symbol"></div>
<span class="label">{{ entry.label }}</span>
</div>
<ht-titled-content [title]="this.model.title | htDisplayTitle">
<div class="visualization" *htLoadAsync="this.data$ as data">
<div *ngIf="this.model.showLegend" class="legend">
<div class="latency">
<div class="label">P99 Latency:</div>
<div class="entry" *ngFor="let entry of this.getLatencyLegendConfig()">
<div [ngClass]="entry.categoryClass" class="symbol"></div>
<span class="label">{{ entry.label }}</span>
</div>
<div class="error-percentage">
<div class="label">Errors:</div>
<div class="entry" *ngFor="let entry of this.getErrorPercentageLegendConfig()">
<div [ngClass]="entry.categoryClass" class="symbol"></div>
<span class="label">{{ entry.label }}</span>
</div>
</div>
<div class="error-percentage">
<div class="label">Errors:</div>
<div class="entry" *ngFor="let entry of this.getErrorPercentageLegendConfig()">
<div [ngClass]="entry.categoryClass" class="symbol"></div>
<span class="label">{{ entry.label }}</span>
</div>
</div>
<ht-topology
class="topology"
[nodes]="data.nodes"
[nodeRenderer]="this.nodeRenderer"
[edgeRenderer]="this.edgeRenderer"
[tooltipRenderer]="this.tooltipRenderer"
[nodeDataSpecifiers]="data.nodeSpecs"
[edgeDataSpecifiers]="data.edgeSpecs"
[showBrush]="this.model.showBrush"
[shouldAutoZoomToFit]="this.model.shouldAutoZoomToFit"
>
</ht-topology>
</div>
</ht-titled-content>
</div>
<ht-topology
class="topology"
[nodes]="data.nodes"
[nodeRenderer]="this.nodeRenderer"
[edgeRenderer]="this.edgeRenderer"
[tooltipRenderer]="this.tooltipRenderer"
[nodeDataSpecifiers]="data.nodeSpecs"
[edgeDataSpecifiers]="data.edgeSpecs"
[showBrush]="this.model.showBrush"
[shouldAutoZoomToFit]="this.model.shouldAutoZoomToFit"
>
</ht-topology>
</div>
</ht-titled-content>
`
})
export class TopologyWidgetRendererComponent extends WidgetRenderer<TopologyWidgetModel, TopologyTemplateData> {
Expand All @@ -80,7 +86,8 @@ export class TopologyWidgetRendererComponent extends WidgetRenderer<TopologyWidg
entityEdgeRenderer: EntityEdgeCurveRendererService,
serviceNodeRenderer: ServiceNodeBoxRendererService,
apiNodeRenderer: ApiNodeBoxRendererService,
backendNodeRenderer: BackendNodeBoxRendererService
backendNodeRenderer: BackendNodeBoxRendererService,

) {
super(api, changeDetector);

Expand All @@ -89,6 +96,8 @@ export class TopologyWidgetRendererComponent extends WidgetRenderer<TopologyWidg
tooltipRenderer.useTooltip({
class: TopologyEntityTooltipComponent
});


}

protected fetchData(): Observable<TopologyTemplateData> {
Expand Down