gns3-web-ui/src/app/services/node.service.ts

204 lines
7.0 KiB
TypeScript
Raw Normal View History

2017-11-29 16:07:53 +01:00
import { Injectable } from '@angular/core';
import { Project } from '../models/project';
2018-06-27 10:29:12 +02:00
import { Node } from '../cartography/models/node';
2018-07-06 11:31:44 +02:00
import { Observable } from 'rxjs';
2017-11-29 16:07:53 +01:00
import 'rxjs/add/operator/map';
2019-01-15 11:15:54 +01:00
import { Server } from '../models/server';
import { HttpServer } from './http-server.service';
import { Template } from '../models/template';
import { Label } from '../cartography/models/label';
2017-11-29 16:07:53 +01:00
@Injectable()
export class NodeService {
2019-01-15 11:15:54 +01:00
constructor(private httpServer: HttpServer) {}
2017-11-29 16:07:53 +01:00
2020-04-27 18:02:33 +02:00
getNodeById(server: Server, projectId: string, nodeId: string) {
return this.httpServer.get(server, `/projects/${projectId}/nodes/${nodeId}`);
}
2018-03-20 16:02:41 +01:00
start(server: Server, node: Node) {
2019-01-15 11:15:54 +01:00
return this.httpServer.post<Node>(server, `/projects/${node.project_id}/nodes/${node.node_id}/start`, {});
2017-11-29 16:07:53 +01:00
}
2019-03-11 04:35:27 -07:00
startAll(server: Server, project: Project) {
return this.httpServer.post(server, `/projects/${project.project_id}/nodes/start`, {});
}
2018-03-20 16:02:41 +01:00
stop(server: Server, node: Node) {
2019-01-15 11:15:54 +01:00
return this.httpServer.post<Node>(server, `/projects/${node.project_id}/nodes/${node.node_id}/stop`, {});
2017-11-29 16:07:53 +01:00
}
2019-03-11 04:35:27 -07:00
stopAll(server: Server, project: Project) {
return this.httpServer.post(server, `/projects/${project.project_id}/nodes/stop`, {});
}
suspend(server: Server, node: Node) {
return this.httpServer.post<Node>(server, `/projects/${node.project_id}/nodes/${node.node_id}/suspend`, {});
}
2019-03-11 04:35:27 -07:00
suspendAll(server: Server, project: Project) {
return this.httpServer.post(server, `/projects/${project.project_id}/nodes/suspend`, {});
}
reload(server: Server, node: Node) {
return this.httpServer.post<Node>(server, `/projects/${node.project_id}/nodes/${node.node_id}/reload`, {});
}
2019-03-11 04:35:27 -07:00
reloadAll(server: Server, project: Project) {
return this.httpServer.post(server, `/projects/${project.project_id}/nodes/reload`, {});
}
2019-11-14 00:42:22 -08:00
createFromTemplate(server: Server, project: Project, template: Template, x: number, y: number, compute_id: string): Observable<Node> {
2020-02-24 15:19:28 +01:00
if (!compute_id) {
return this.httpServer.post(server, `/projects/${project.project_id}/templates/${template.template_id}`, {
x: Math.round(x),
y: Math.round(y),
compute_id: 'local'
});
}
2019-01-15 11:15:54 +01:00
return this.httpServer.post(server, `/projects/${project.project_id}/templates/${template.template_id}`, {
x: Math.round(x),
y: Math.round(y),
compute_id: compute_id
});
2017-11-30 10:27:41 +01:00
}
2019-10-24 07:34:01 -07:00
updatePosition(server: Server, project: Project, node: Node, x: number, y: number): Observable<Node> {
let xPosition: number = Math.round(x);
let yPosition: number = Math.round(y);
if (project.snap_to_grid) {
2019-10-24 08:05:50 -07:00
xPosition = Math.round((xPosition + node.width/2) / project.grid_size) * project.grid_size;
yPosition = Math.round((yPosition + node.width/2) / project.grid_size) * project.grid_size;
2019-10-24 07:34:01 -07:00
xPosition = Math.round(xPosition - node.width/2);
yPosition = Math.round(yPosition - node.height/2);
}
2019-01-15 11:15:54 +01:00
return this.httpServer.put<Node>(server, `/projects/${node.project_id}/nodes/${node.node_id}`, {
2019-10-24 07:34:01 -07:00
x: xPosition,
y: yPosition
2019-01-15 11:15:54 +01:00
});
2017-12-01 11:42:40 +01:00
}
2018-03-29 12:36:35 +02:00
updateLabel(server: Server, node: Node, label: Label): Observable<Node> {
2019-01-15 11:15:54 +01:00
return this.httpServer.put<Node>(server, `/projects/${node.project_id}/nodes/${node.node_id}`, {
label: {
rotation: label.rotation,
style: label.style,
text: label.text,
x: Math.round(label.x),
y: Math.round(label.y)
}
});
}
updateSymbol(server: Server, node: Node, changedSymbol: string): Observable<Node> {
return this.httpServer.put<Node>(server, `/projects/${node.project_id}/nodes/${node.node_id}`, {
symbol: changedSymbol
});
}
2018-03-29 12:36:35 +02:00
update(server: Server, node: Node): Observable<Node> {
2019-01-15 11:15:54 +01:00
return this.httpServer.put<Node>(server, `/projects/${node.project_id}/nodes/${node.node_id}`, {
x: Math.round(node.x),
y: Math.round(node.y),
z: node.z
});
2018-03-29 12:36:35 +02:00
}
2019-09-09 06:57:42 -07:00
updateNode(server: Server, node: Node): Observable<Node> {
return this.httpServer.put<Node>(server, `/projects/${node.project_id}/nodes/${node.node_id}`, {
console_type: node.console_type,
2019-09-17 06:27:34 -07:00
console_auto_start: node.console_auto_start,
2019-09-30 04:48:01 -07:00
locked: node.locked,
2019-09-09 09:33:10 -07:00
name: node.name,
properties: node.properties
2019-09-09 06:57:42 -07:00
});
}
2019-09-11 04:58:45 -07:00
updateNodeWithCustomAdapters(server: Server, node: Node): Observable<Node> {
return this.httpServer.put<Node>(server, `/projects/${node.project_id}/nodes/${node.node_id}`, {
console_type: node.console_type,
console_auto_start: node.console_auto_start,
custom_adapters: node.custom_adapters,
name: node.name,
properties: node.properties
});
}
delete(server: Server, node: Node) {
return this.httpServer.delete<Node>(server, `/projects/${node.project_id}/nodes/${node.node_id}`);
}
2019-06-17 06:50:26 -07:00
duplicate(server: Server, node: Node) {
return this.httpServer.post(server, `/projects/${node.project_id}/nodes/${node.node_id}/duplicate`,
{
"x": node.x + 10,
"y": node.y + 10,
"z": node.z
});
}
2019-07-30 07:21:55 -07:00
2019-09-09 06:57:42 -07:00
getNode(server: Server, node: Node) {
2020-04-27 18:02:33 +02:00
return this.httpServer.get(server, `/projects/${node.project_id}/nodes/${node.node_id}`);
2019-09-09 06:57:42 -07:00
}
2019-09-25 04:37:25 -07:00
getDefaultCommand(): string {
return `putty.exe -telnet \%h \%p -wt \"\%d\" -gns3 5 -skin 4`;
}
getStartupConfiguration(server: Server, node: Node) {
let urlPath: string = `/projects/${node.project_id}/nodes/${node.node_id}`;
2019-07-30 07:21:55 -07:00
if (node.node_type === 'vpcs') {
urlPath += '/files/startup.vpc';
} else if (node.node_type === 'iou') {
urlPath += '/files/startup-config.cfg';
} else if (node.node_type === 'dynamips') {
urlPath += `/files/configs/i${node.node_id}_startup-config.cfg`;
2019-07-30 07:21:55 -07:00
}
return this.httpServer.get(server, urlPath, { responseType: 'text' as 'json'});
}
getPrivateConfiguration(server: Server, node: Node) {
let urlPath: string = `/projects/${node.project_id}/nodes/${node.node_id}`;
if (node.node_type === 'iou') {
urlPath += '/files/private-config.cfg';
} else if (node.node_type === 'dynamips') {
urlPath += `/files/configs/i${node.node_id}_private-config.cfg`;
}
return this.httpServer.get(server, urlPath, { responseType: 'text' as 'json'});
2019-07-30 07:21:55 -07:00
}
saveConfiguration(server: Server, node: Node, configuration: string) {
let urlPath: string = `/projects/${node.project_id}/nodes/${node.node_id}`
if (node.node_type === 'vpcs') {
urlPath += '/files/startup.vpc';
} else if (node.node_type === 'iou') {
urlPath += '/files/startup-config.cfg';
} else if (node.node_type === 'dynamips') {
urlPath += `/files/configs/i${node.node_id}_startup-config.cfg`;
2019-07-30 07:21:55 -07:00
}
return this.httpServer.post(server, urlPath, configuration);
}
savePrivateConfiguration(server: Server, node: Node, configuration: string) {
let urlPath: string = `/projects/${node.project_id}/nodes/${node.node_id}`
if (node.node_type === 'iou') {
urlPath += '/files/private-config.cfg';
} else if (node.node_type === 'dynamips') {
urlPath += `/files/configs/i${node.node_id}_private-config.cfg`;
}
return this.httpServer.post(server, urlPath, configuration);
2019-07-30 07:21:55 -07:00
}
2017-11-29 16:07:53 +01:00
}