Skip to content

Bảng điều khiển Devtools ​

Bảng điều khiển nhà phát triển dựa trên web cho các ứng dụng Orbit.

Tổng quan ​

Bảng điều khiển devtools cung cấp khả năng hiển thị thời gian thực vào ứng dụng của bạn:

  • Route: Xem tất cả endpoint HTTP đã đăng ký
  • Đồ thị DI: Hiển thị trực quan mối quan hệ tiêm phụ thuộc
  • Module: Kiểm tra cấu trúc module và xuất khẩu
  • Metric: Theo dõi hiệu suất theo thời gian thực

Thiết lập ​

typescript
import { createDevtools } from '@galaxy-stack/orbit-devtools';

const devtools = createDevtools({
  title: 'Devtools Ứng dụng của tôi',
  path: '/__devtools',
  theme: 'auto',
});

// Gắn bảng điều khiển
app.get('/__devtools*', devtools.createHandler());

Truy cập tại: http://localhost:3000/__devtools

Cung cấp dữ liệu ​

Route ​

typescript
devtools.setRoutes([
  {
    method: 'GET',
    path: '/users',
    controller: 'UserController',
    handler: 'findAll',
    guards: ['AuthGuard'],
    pipes: ['ValidationPipe'],
  },
  {
    method: 'POST',
    path: '/users',
    controller: 'UserController',
    handler: 'create',
    guards: ['AuthGuard'],
    pipes: ['ValidationPipe'],
    interceptors: ['LoggingInterceptor'],
  },
]);

Provider ​

typescript
devtools.setProviders([
  {
    name: 'UserService',
    scope: 'singleton',
    dependencies: ['UserRepository', 'CacheService'],
    module: 'UserModule',
  },
  {
    name: 'UserRepository',
    scope: 'singleton',
    dependencies: ['DatabaseService'],
    module: 'UserModule',
  },
]);

Module ​

typescript
devtools.setModules([
  {
    name: 'AppModule',
    controllers: ['AppController'],
    providers: ['AppService'],
    imports: ['UserModule', 'AuthModule'],
    exports: [],
  },
  {
    name: 'UserModule',
    controllers: ['UserController'],
    providers: ['UserService', 'UserRepository'],
    imports: [],
    exports: ['UserService'],
  },
]);

Metric thời gian thực ​

typescript
setInterval(() => {
  devtools.pushMetrics({
    requestsPerSecond: calculateRPS(),
    avgLatency: calculateLatency(),
    errorRate: calculateErrorRate(),
    activeConnections: getActiveConnections(),
    memoryUsage: process.memoryUsage().heapUsed,
    cpuUsage: getCpuUsage(),
  });
}, 1000);

Tab bảng điều khiển ​

Tổng quan ​

Thống kê nhanh hiển thị:

  • Tổng số route
  • Tổng số provider
  • Tổng số module
  • Yêu cầu mỗi giây
  • Độ trễ trung bình
  • Tỷ lệ lỗi

Route ​

Hiển thị bảng của tất cả route đã đăng ký:

Phương thứcĐường dẫnBộ xử lýGuardPipe
GET/usersUserController.findAllAuthGuard-
POST/usersUserController.createAuthGuardValidationPipe

Đồ thị DI ​

Biểu diễn trực quan của phụ thuộc provider:

┌─────────────┐     ┌─────────────┐
│ UserService │────▶│ UserRepo    │
│ (singleton) │     │ (singleton) │
└─────────────┘     └─────────────┘
       │
       ▼
┌─────────────┐
│ CacheService│
│ (singleton) │
└─────────────┘

Mã màu:

  • Xanh dương: Phạm vi singleton
  • Cam: Phạm vi yêu cầu
  • Xanh lá: Phạm vi tạm thời

Module ​

Hiển thị thẻ của mỗi module hiển thị:

  • Controller
  • Provider
  • Import
  • Export

Metric ​

Biểu đồ thời gian thực và bảng lịch sử:

  • Yêu cầu mỗi giây theo thời gian
  • Phân phối độ trễ
  • Xu hướng tỷ lệ lỗi
  • Sử dụng bộ nhớ
  • Kết nối đang hoạt động

Tùy chọn cấu hình ​

typescript
createDevtools({
  title: 'Devtools của tôi',   // Tiêu đề bảng điều khiển
  port: 9229,                  // Cổng máy chủ độc lập
  path: '/__devtools',         // Đường dẫn gắn
  theme: 'auto',               // 'light' | 'dark' | 'auto'
  refreshInterval: 1000,       // Tỷ lệ làm mới metric (ms)
  auth: {
    enabled: true,
    username: 'admin',
    password: 'secret',
  },
});

Bảo mật ​

Trong môi trường sản xuất, hãy cân nhắc:

  1. Vô hiệu hóa hoàn toàn devtools
  2. Sử dụng xác thực
  3. Hạn chế cho mạng nội bộ
typescript
if (process.env.NODE_ENV !== 'production') {
  app.get('/__devtools*', devtools.createHandler());
}

Released under the MIT License.