110 lines
2.6 KiB
TypeScript
110 lines
2.6 KiB
TypeScript
// GPU Edge Node Service
|
|
// GPU edge node management (MGN, QGN, ZKN, SAN types)
|
|
|
|
import prisma from '@/shared/database/prisma';
|
|
import { v4 as uuidv4 } from 'uuid';
|
|
import { logger } from '@/infrastructure/monitoring/logger';
|
|
|
|
|
|
export interface GpuEdgeNodeRequest {
|
|
nodeType: 'MGN' | 'QGN' | 'ZKN' | 'SAN'; // Metaverse GPU Node, Quantum Gateway Node, ZK Validation Node, Sovereign AI Node
|
|
regionId: string;
|
|
nodeName: string;
|
|
gpuCapacity: number; // GPU units
|
|
networkAddress: string;
|
|
quantumSafeTunnelingEnabled: boolean;
|
|
}
|
|
|
|
export interface GpuEdgeNodeResult {
|
|
nodeId: string;
|
|
nodeType: string;
|
|
regionId: string;
|
|
status: string;
|
|
}
|
|
|
|
export class GpuEdgeNodeService {
|
|
/**
|
|
* Create GPU edge node
|
|
* Node types:
|
|
* - MGN: Metaverse GPU Node (metaverse rendering)
|
|
* - QGN: Quantum Gateway Node (quantum proxy operations)
|
|
* - ZKN: ZK Validation Node (ZK ledger validation)
|
|
* - SAN: Sovereign AI Node (AI behavioral engines)
|
|
*/
|
|
async createGpuEdgeNode(
|
|
request: GpuEdgeNodeRequest
|
|
): Promise<GpuEdgeNodeResult> {
|
|
logger.info('GPU Edge: Creating edge node', { request });
|
|
|
|
const nodeId = `GPU-EDGE-${uuidv4()}`;
|
|
|
|
const node = await prisma.gpu_edge_nodes.create({
|
|
data: {
|
|
nodeId,
|
|
nodeType: request.nodeType,
|
|
regionId: request.regionId,
|
|
nodeName: request.nodeName,
|
|
gpuCapacity: request.gpuCapacity,
|
|
networkAddress: request.networkAddress,
|
|
quantumSafeTunnelingEnabled: request.quantumSafeTunnelingEnabled,
|
|
status: 'active',
|
|
},
|
|
});
|
|
|
|
logger.info('GPU Edge: Node created', { nodeId });
|
|
|
|
return {
|
|
nodeId,
|
|
nodeType: node.nodeType,
|
|
regionId: node.regionId,
|
|
status: node.status,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Get node by ID
|
|
*/
|
|
async getNode(nodeId: string) {
|
|
return await prisma.gpu_edge_nodes.findUnique({
|
|
where: { nodeId },
|
|
include: {
|
|
region: true,
|
|
tasks: true,
|
|
},
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Get nodes by type
|
|
*/
|
|
async getNodesByType(nodeType: string) {
|
|
return await prisma.gpu_edge_nodes.findMany({
|
|
where: { nodeType, status: 'active' },
|
|
orderBy: { createdAt: 'desc' },
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Get nodes for region
|
|
*/
|
|
async getNodesForRegion(regionId: string) {
|
|
return await prisma.gpu_edge_nodes.findMany({
|
|
where: { regionId, status: 'active' },
|
|
orderBy: { createdAt: 'desc' },
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Update node status
|
|
*/
|
|
async updateNodeStatus(nodeId: string, status: string) {
|
|
return await prisma.gpu_edge_nodes.update({
|
|
where: { nodeId },
|
|
data: { status },
|
|
});
|
|
}
|
|
}
|
|
|
|
export const gpuEdgeNodeService = new GpuEdgeNodeService();
|
|
|