765 lines
26 KiB
TypeScript
765 lines
26 KiB
TypeScript
import {
|
|
Bell,
|
|
Boxes,
|
|
ChartNoAxesColumnIncreasing,
|
|
FileKey,
|
|
KeyRound,
|
|
LayoutDashboard,
|
|
Megaphone,
|
|
Network,
|
|
Rocket,
|
|
ServerCog,
|
|
ShieldCheck,
|
|
Users
|
|
} from 'lucide-react';
|
|
|
|
export const navGroups = [
|
|
{
|
|
label: '플랫폼',
|
|
items: [
|
|
{ label: '대시보드', icon: LayoutDashboard, active: true },
|
|
{
|
|
label: '공통앱',
|
|
icon: ServerCog,
|
|
children: [
|
|
{ label: '소스 관리', view: 'commonSources' },
|
|
{ label: '빌드 관리', view: 'commonBuilds' },
|
|
{ label: '구성요소', view: 'commonComponents' }
|
|
]
|
|
},
|
|
{
|
|
label: '런처',
|
|
icon: Rocket,
|
|
children: [
|
|
{ label: '소스 관리', view: 'launcherSources' },
|
|
{ label: '빌드 관리', view: 'launcherBuilds' },
|
|
{ label: '버전 관리' },
|
|
{ label: '구성요소', view: 'launcherComponents' },
|
|
{ label: '앱 연결' }
|
|
]
|
|
},
|
|
{
|
|
label: '어플리케이션',
|
|
icon: Boxes,
|
|
children: [
|
|
{ label: '앱 관리' },
|
|
{ label: '저장소 관리' },
|
|
{ label: '소스 관리' },
|
|
{ label: '빌드 관리' },
|
|
{ label: '릴리즈 관리' },
|
|
{ label: '실행 설정' },
|
|
{ label: '배포 관리' },
|
|
{ label: '마이그레이션' },
|
|
{ label: '로그/이벤트' }
|
|
]
|
|
},
|
|
{
|
|
label: '테일스케일',
|
|
icon: Network,
|
|
children: [
|
|
{ label: '노드 현황' },
|
|
{ label: '라우트' },
|
|
{ label: 'ACL' }
|
|
]
|
|
},
|
|
{
|
|
label: 'Agent',
|
|
icon: ShieldCheck,
|
|
children: [
|
|
{ label: '장비 등록' },
|
|
{ label: '장비 제어' },
|
|
{ label: '설치 상태' },
|
|
{ label: 'SSH 키 배포' },
|
|
{ label: 'Workspace 설정' },
|
|
{ label: '원격 명령' }
|
|
]
|
|
},
|
|
{
|
|
label: '플랫폼 게이트웨이',
|
|
icon: ServerCog,
|
|
children: [
|
|
{ label: '연결 상태' },
|
|
{ label: 'Agent 관리' },
|
|
{ label: '장비 동기화' }
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
label: '운영',
|
|
items: [
|
|
{ label: '관리자 관리', icon: ShieldCheck },
|
|
{ label: '조직 관리', icon: Boxes },
|
|
{ label: '사용자/세션', icon: Users },
|
|
{ label: '라이센스', icon: FileKey },
|
|
{ label: '공지사항', icon: Megaphone }
|
|
]
|
|
},
|
|
{
|
|
label: '시스템',
|
|
items: [
|
|
{ label: '모니터링', icon: ChartNoAxesColumnIncreasing },
|
|
{ label: '정책', icon: ShieldCheck },
|
|
{ label: '인프라', icon: ServerCog }
|
|
]
|
|
}
|
|
];
|
|
|
|
export const metrics = [
|
|
{ label: '활성 앱', value: '10', delta: '+0', hint: '런처 등록 앱 10개', tone: 'emerald' },
|
|
{ label: '접속 사용자', value: '1,284', delta: '+9.8%', hint: '활성 세션 176개', tone: 'sky' },
|
|
{ label: '라이센스 사용률', value: '72%', delta: '+4%', hint: '468 / 650 시트', tone: 'amber' },
|
|
{ label: '런타임 정상률', value: '96.4%', delta: '-1.2%', hint: '주의 워크로드 3개', tone: 'rose' }
|
|
];
|
|
|
|
export const launcherVersions = [
|
|
{
|
|
name: 'Autonomy Studio Launcher',
|
|
appKey: 'launcher',
|
|
latestVersion: '1.0.1',
|
|
minimumSupportedVersion: '1.0.0',
|
|
status: '활성',
|
|
artifact: 'autonomy-studio-launcher-1.0.1.deb',
|
|
downloadUrl: 'https://testfile.autonomystudio.net/media/platform/autonomy-studio-launcher-1.0.1.deb',
|
|
releaseNotes: '런처 업데이트 확인 및 앱별 설치 상태 판단 기능이 추가되었습니다.'
|
|
}
|
|
];
|
|
|
|
export const authApiEndpoints = [
|
|
{ group: '상태', method: 'GET', path: '/health', purpose: '서비스 및 Redis 상태 확인', auth: '없음' },
|
|
{ group: '인증', method: 'POST', path: '/auth/login', purpose: 'access token 발급 및 refresh cookie 설정', auth: '없음' },
|
|
{ group: '인증', method: 'POST', path: '/auth/refresh', purpose: 'refresh token 회전 및 access token 재발급', auth: '쿠키/토큰' },
|
|
{ group: '인증', method: 'POST', path: '/auth/logout', purpose: 'refresh token 폐기 및 쿠키 제거', auth: '쿠키/토큰' },
|
|
{ group: '사용자', method: 'GET', path: '/auth/me', purpose: '현재 사용자, 앱 권한, 라이센스, 소속 조회', auth: 'Bearer' },
|
|
{ group: '앱 연결', method: 'POST', path: '/auth/handoff', purpose: '런처에서 앱으로 넘길 handoff token 생성', auth: 'Bearer' },
|
|
{ group: '앱 연결', method: 'POST', path: '/auth/handoff/exchange', purpose: 'handoff token을 앱용 token pair로 교환', auth: '없음' },
|
|
{ group: '관리자', method: 'POST', path: '/auth/admin/users', purpose: '관리자 사용자 생성, 소속, 라이센스 할당', auth: 'ADMIN' },
|
|
{ group: '관리자', method: 'GET', path: '/auth/admin/organizations', purpose: '조직 목록 조회', auth: 'ADMIN' }
|
|
];
|
|
|
|
export const apps = [
|
|
{
|
|
name: 'ADS IDE',
|
|
key: 'ADS IDE',
|
|
status: '활성',
|
|
version: '1.1.0',
|
|
containers: 2,
|
|
cpu: 52,
|
|
memory: 68,
|
|
gitea: './apps/ads-ide/ads-ide-fe',
|
|
release: 'ADS-IDE-1.1.0.AppImage',
|
|
secrets: 8,
|
|
launcherLinked: true,
|
|
launcherOrder: 1,
|
|
launchUrl: 'Ingress 예정 / localhost:5175'
|
|
},
|
|
{
|
|
name: 'LMS',
|
|
key: 'LMS',
|
|
status: '활성',
|
|
version: '1.0.0',
|
|
containers: 3,
|
|
cpu: 74,
|
|
memory: 81,
|
|
gitea: './apps/lms/lms-fe',
|
|
release: 'LMS-1.0.0.AppImage',
|
|
secrets: 11,
|
|
launcherLinked: true,
|
|
launcherOrder: 2,
|
|
launchUrl: 'Ingress 예정 / localhost:5176'
|
|
},
|
|
{
|
|
name: 'Data Management',
|
|
key: 'Data Management',
|
|
status: '준비중',
|
|
version: '1.0.0',
|
|
containers: 0,
|
|
cpu: 31,
|
|
memory: 48,
|
|
gitea: '미연결',
|
|
release: 'data-management',
|
|
secrets: 0,
|
|
launcherLinked: false,
|
|
launcherOrder: null,
|
|
launchUrl: '미설정'
|
|
},
|
|
{
|
|
name: 'FMS',
|
|
key: 'FMS',
|
|
status: '활성',
|
|
version: '2.3.1',
|
|
containers: 0,
|
|
cpu: 63,
|
|
memory: 57,
|
|
gitea: '미연결',
|
|
release: 'fms',
|
|
secrets: 0,
|
|
launcherLinked: true,
|
|
launcherOrder: 3,
|
|
launchUrl: '미설정'
|
|
},
|
|
{
|
|
name: 'ADS Education',
|
|
key: 'ADS Education',
|
|
status: '활성',
|
|
version: '1.0.0',
|
|
containers: 0,
|
|
cpu: 18,
|
|
memory: 22,
|
|
gitea: '미연결',
|
|
release: 'ads-education',
|
|
secrets: 0,
|
|
launcherLinked: true,
|
|
launcherOrder: 4,
|
|
launchUrl: '미설정'
|
|
},
|
|
{
|
|
name: 'Calibration',
|
|
key: 'Calibration',
|
|
status: '활성',
|
|
version: '1.0.4',
|
|
containers: 0,
|
|
cpu: 21,
|
|
memory: 26,
|
|
gitea: '미연결',
|
|
release: 'calibration',
|
|
secrets: 0,
|
|
launcherLinked: false,
|
|
launcherOrder: null,
|
|
launchUrl: '미설정'
|
|
},
|
|
{
|
|
name: 'HDMAP Builder',
|
|
key: 'HDMAP Builder',
|
|
status: '활성',
|
|
version: '1.0.0',
|
|
containers: 0,
|
|
cpu: 15,
|
|
memory: 19,
|
|
gitea: '미연결',
|
|
release: 'hdmap-builder',
|
|
secrets: 0,
|
|
launcherLinked: false,
|
|
launcherOrder: null,
|
|
launchUrl: '미설정'
|
|
}
|
|
];
|
|
|
|
export const sessions = [
|
|
{ user: 'kim.admin', role: '소유자', location: '서울', device: 'Chrome macOS', state: '활성', lastSeen: '2분 전' },
|
|
{ user: 'park.ops', role: '운영자', location: '판교', device: 'Edge Windows', state: '활성', lastSeen: '7분 전' },
|
|
{ user: 'lee.viewer', role: '조회자', location: '부산', device: 'Safari iOS', state: '대기', lastSeen: '31분 전' },
|
|
{ user: 'choi.dev', role: '개발자', location: '서울', device: 'Firefox Linux', state: '잠김', lastSeen: '1시간 전' },
|
|
{ user: 'han.pm', role: '관리자', location: '대전', device: 'Chrome Windows', state: '활성', lastSeen: '12분 전' },
|
|
{ user: 'jung.viewer', role: '조회자', location: '광주', device: 'Safari macOS', state: '대기', lastSeen: '46분 전' },
|
|
{ user: 'yoon.ops', role: '운영자', location: '서울', device: 'Edge Windows', state: '활성', lastSeen: '5분 전' },
|
|
{ user: 'seo.admin', role: '관리자', location: '판교', device: 'Chrome Linux', state: '활성', lastSeen: '1분 전' },
|
|
{ user: 'moon.dev', role: '개발자', location: '부산', device: 'Firefox Linux', state: '잠김', lastSeen: '2시간 전' },
|
|
{ user: 'lim.user', role: '사용자', location: '인천', device: 'Chrome Android', state: '대기', lastSeen: '28분 전' },
|
|
{ user: 'oh.instructor', role: '강사', location: '서울', device: 'Safari iPadOS', state: '활성', lastSeen: '9분 전' }
|
|
];
|
|
|
|
export const licensePlans = [
|
|
{
|
|
code: 'FREE',
|
|
name: 'Free',
|
|
description: '기본 무료 라이선스',
|
|
defaultDurationDays: 365,
|
|
assigned: 182,
|
|
activeUsers: 164,
|
|
expiringSoon: 18,
|
|
status: '활성'
|
|
},
|
|
{
|
|
code: 'EDU',
|
|
name: 'Education',
|
|
description: '교육기관용 라이선스',
|
|
defaultDurationDays: 365,
|
|
assigned: 296,
|
|
activeUsers: 271,
|
|
expiringSoon: 21,
|
|
status: '활성'
|
|
},
|
|
{
|
|
code: 'PRO',
|
|
name: 'Professional',
|
|
description: '전문가용 라이선스',
|
|
defaultDurationDays: 365,
|
|
assigned: 172,
|
|
activeUsers: 158,
|
|
expiringSoon: 3,
|
|
status: '활성'
|
|
}
|
|
];
|
|
|
|
export const userLicenseAssignments = [
|
|
{ user: 'admin@futuredrive.net', name: 'ATNMY Studio Admin', code: 'PRO', licenseName: 'Professional', startsAt: '06.01.', expiresAt: '무기한', assignedBy: 'system', status: '활성' },
|
|
{ user: 'teacher@futuredrive.net', name: 'Future Drive Teacher', code: 'EDU', licenseName: 'Education', startsAt: '06.02.', expiresAt: '06.02.', assignedBy: 'admin@futuredrive.net', status: '활성' },
|
|
{ user: 'teacher@yu.ac.kr', name: 'YU Instructor', code: 'EDU', licenseName: 'Education', startsAt: '06.02.', expiresAt: '06.02.', assignedBy: 'admin@futuredrive.net', status: '활성' },
|
|
{ user: 'student01@example.com', name: 'student01', code: 'FREE', licenseName: 'Free', startsAt: '06.05.', expiresAt: '06.05.', assignedBy: 'system', status: '활성' },
|
|
{ user: 'student03@example.com', name: 'student03', code: 'FREE', licenseName: 'Free', startsAt: '06.05.', expiresAt: '06.05.', assignedBy: 'system', status: '활성' },
|
|
{ user: 'ops@autonomystudio.local', name: 'ops', code: 'PRO', licenseName: 'Professional', startsAt: '06.10.', expiresAt: '06.10.', assignedBy: 'admin@futuredrive.net', status: '활성' },
|
|
{ user: 'viewer@example.com', name: 'viewer', code: 'FREE', licenseName: 'Free', startsAt: '07.01.', expiresAt: '07.01.', assignedBy: 'system', status: '주의' }
|
|
];
|
|
|
|
export const appBundles = [
|
|
{
|
|
name: 'LMS',
|
|
key: 'LMS',
|
|
status: '활성',
|
|
namespace: 'stdo-lms',
|
|
launcherTarget: 'lms-fe',
|
|
launcherArtifact: 'LMS-1.0.0.AppImage',
|
|
ingress: 'https://lms.apps.autonomystudio.local',
|
|
release: 'lms-1.0.0',
|
|
components: [
|
|
{
|
|
name: 'lms-fe',
|
|
role: '런처 다운로드 앱',
|
|
type: 'electron',
|
|
workload: 'artifact',
|
|
image: 'LMS-1.0.0.AppImage',
|
|
replicas: '-',
|
|
status: '배포됨',
|
|
repository: './apps/lms/lms-fe'
|
|
},
|
|
{
|
|
name: 'lms-be',
|
|
role: 'API 서버',
|
|
type: 'deployment',
|
|
workload: 'Deployment/lms-api',
|
|
image: 'registry.local/lms-be:1.0.0',
|
|
replicas: '2/2',
|
|
status: '실행 중',
|
|
repository: './apps/lms/lms-be'
|
|
},
|
|
{
|
|
name: 'lms-adm-fe',
|
|
role: '강사용 웹 어드민',
|
|
type: 'deployment',
|
|
workload: 'Deployment/lms-adm-web',
|
|
image: 'registry.local/lms-adm-fe:0.1.0',
|
|
replicas: '1/1',
|
|
status: '실행 중',
|
|
repository: './apps/lms/lms-adm-fe'
|
|
},
|
|
{
|
|
name: 'lms-db',
|
|
role: 'PostgreSQL',
|
|
type: 'statefulset',
|
|
workload: 'StatefulSet/lms-postgres',
|
|
image: 'postgres:16',
|
|
replicas: '1/1',
|
|
status: '실행 중',
|
|
repository: 'PVC/lms-postgres-data'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
name: 'ADS IDE',
|
|
key: 'ADS IDE',
|
|
status: '활성',
|
|
namespace: 'stdo-ads-ide',
|
|
launcherTarget: 'ads-ide-fe',
|
|
launcherArtifact: 'ADS-IDE-1.1.0.AppImage',
|
|
ingress: 'https://ads-ide.apps.autonomystudio.local',
|
|
release: 'ads-ide-1.1.0',
|
|
components: [
|
|
{
|
|
name: 'ads-ide-fe',
|
|
role: '런처 다운로드 앱',
|
|
type: 'electron',
|
|
workload: 'artifact',
|
|
image: 'ADS-IDE-1.1.0.AppImage',
|
|
replicas: '-',
|
|
status: '배포됨',
|
|
repository: './apps/ads-ide/ads-ide-fe'
|
|
},
|
|
{
|
|
name: 'ads-ide-be',
|
|
role: 'API 서버',
|
|
type: 'deployment',
|
|
workload: 'Deployment/ads-ide-api',
|
|
image: 'registry.local/ads-ide-be:0.1.0',
|
|
replicas: '1/1',
|
|
status: '주의',
|
|
repository: './apps/ads-ide/ads-ide-be'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
name: 'Data Management',
|
|
key: 'Data Management',
|
|
status: '준비중',
|
|
namespace: 'stdo-data',
|
|
launcherTarget: 'data-management-fe',
|
|
launcherArtifact: '미등록',
|
|
ingress: '미설정',
|
|
release: 'data-management-1.0.0',
|
|
components: [
|
|
{
|
|
name: 'data-management-fe',
|
|
role: '런처 다운로드 앱',
|
|
type: 'electron',
|
|
workload: 'artifact',
|
|
image: '미등록',
|
|
replicas: '-',
|
|
status: '준비중',
|
|
repository: '미연결'
|
|
},
|
|
{
|
|
name: 'data-api',
|
|
role: 'API 서버',
|
|
type: 'deployment',
|
|
workload: 'Deployment/data-api',
|
|
image: 'registry.local/data-api:1.0.0',
|
|
replicas: '0/1',
|
|
status: '준비중',
|
|
repository: '미연결'
|
|
}
|
|
]
|
|
}
|
|
];
|
|
|
|
export const appSourceConfigs = [
|
|
{
|
|
app: 'LMS',
|
|
component: 'lms-fe',
|
|
repository: 'platform/lms-fe',
|
|
branch: 'release',
|
|
commit: '8d41c2a',
|
|
sourceType: 'electron',
|
|
target: 'LMS-1.0.0.AppImage',
|
|
status: '활성'
|
|
},
|
|
{
|
|
app: 'LMS',
|
|
component: 'lms-be',
|
|
repository: 'platform/lms-be',
|
|
branch: 'release',
|
|
commit: '3ac92ef',
|
|
sourceType: 'container',
|
|
target: 'registry.local/lms-be:1.0.0',
|
|
status: '활성'
|
|
},
|
|
{
|
|
app: 'LMS',
|
|
component: 'lms-adm-fe',
|
|
repository: 'platform/lms-adm-fe',
|
|
branch: 'release',
|
|
commit: 'f17ab31',
|
|
sourceType: 'static-web',
|
|
target: 'registry.local/lms-adm-fe:0.1.0',
|
|
status: '활성'
|
|
},
|
|
{
|
|
app: 'LMS',
|
|
component: 'lms-db',
|
|
repository: 'platform/lms-be',
|
|
branch: 'release',
|
|
commit: '3ac92ef',
|
|
sourceType: 'migration',
|
|
target: 'prisma/migrations',
|
|
status: '활성'
|
|
},
|
|
{
|
|
app: 'ADS IDE',
|
|
component: 'ads-ide-fe',
|
|
repository: 'platform/ads-ide-fe',
|
|
branch: 'develop',
|
|
commit: 'b902a11',
|
|
sourceType: 'electron',
|
|
target: 'ADS-IDE-1.1.0.AppImage',
|
|
status: '활성'
|
|
},
|
|
{
|
|
app: 'ADS IDE',
|
|
component: 'ads-ide-be',
|
|
repository: 'platform/ads-ide-be',
|
|
branch: 'develop',
|
|
commit: '10fd8b0',
|
|
sourceType: 'container',
|
|
target: 'registry.local/ads-ide-be:0.1.0',
|
|
status: '주의'
|
|
}
|
|
];
|
|
|
|
export const appBuildJobs = [
|
|
{ app: 'LMS', component: 'lms-fe', branch: 'release', job: 'electron build', artifact: 'LMS-1.0.0.AppImage', duration: '6분 12초', status: '완료', time: '12분 전' },
|
|
{ app: 'LMS', component: 'lms-be', branch: 'release', job: 'image build', artifact: 'registry.local/lms-be:1.0.0', duration: '4분 31초', status: '완료', time: '10분 전' },
|
|
{ app: 'LMS', component: 'lms-adm-fe', branch: 'release', job: 'web image build', artifact: 'registry.local/lms-adm-fe:0.1.0', duration: '3분 18초', status: '완료', time: '9분 전' },
|
|
{ app: 'ADS IDE', component: 'ads-ide-be', branch: 'develop', job: 'image build', artifact: 'registry.local/ads-ide-be:0.1.0', duration: '진행 중', status: '실행 중', time: '3분 전' },
|
|
{ app: 'FMS', component: 'fms-api', branch: 'develop', job: 'image build', artifact: '미생성', duration: '1분 44초', status: '주의', time: '24분 전' }
|
|
];
|
|
|
|
export const appReleasePipelines = [
|
|
{ app: 'LMS', version: '1.0.0', sourceBranch: 'release', releaseBranch: 'main', commit: '3ac92ef', artifacts: 'electron 1, images 2, migrations 4', status: '배포됨', createdAt: '06.18.' },
|
|
{ app: 'ADS IDE', version: '1.1.0', sourceBranch: 'develop', releaseBranch: 'release', commit: 'b902a11', artifacts: 'electron 1, images 1', status: '카나리', createdAt: '06.16.' },
|
|
{ app: 'FMS', version: '2.3.1', sourceBranch: 'develop', releaseBranch: 'release', commit: 'c82f09d', artifacts: 'images 1', status: '초안', createdAt: '06.14.' }
|
|
];
|
|
|
|
export const appDeploymentJobs = [
|
|
{ app: 'LMS', environment: '운영', release: '1.0.0', strategy: 'rolling update', target: 'stdo-lms', status: '완료', requestedBy: 'kim.admin', time: '8분 전' },
|
|
{ app: 'ADS IDE', environment: '개발', release: '1.1.0-canary', strategy: 'redeploy', target: 'stdo-ads-ide', status: '실행 중', requestedBy: 'park.ops', time: '2분 전' },
|
|
{ app: 'FMS', environment: '개발', release: '2.3.1-dev', strategy: 'deploy', target: 'stdo-fms', status: '주의', requestedBy: 'choi.dev', time: '27분 전' }
|
|
];
|
|
|
|
export const appMigrationJobs = [
|
|
{ app: 'LMS', component: 'lms-db', branch: 'release', path: 'prisma/migrations', version: '20260618091000_add_course_indexes', status: '완료', time: '7분 전' },
|
|
{ app: 'LMS', component: 'lms-db', branch: 'release', path: 'prisma/migrations', version: '20260617083000_add_assignment_status', status: '완료', time: '1일 전' },
|
|
{ app: 'ADS IDE', component: 'ads-ide-db', branch: 'develop', path: 'migrations', version: '20260616070000_workspace_schema', status: '대기', time: '대기 중' }
|
|
];
|
|
|
|
export const containers = [
|
|
{ name: 'launcher-api', app: 'Autonomy Studio Launcher', image: 'atnmy-stdo-v2-be:local', cpu: 43, memory: 62, status: '실행 중' },
|
|
{ name: 'launcher-postgres', app: 'Autonomy Studio Launcher', image: 'postgres:launcher', cpu: 24, memory: 39, status: '실행 중' },
|
|
{ name: 'lms-api', app: 'LMS', image: 'lms-be:local', cpu: 67, memory: 59, status: '실행 중' },
|
|
{ name: 'ads-ide-api', app: 'ADS IDE', image: 'ads-ide-be:local', cpu: 89, memory: 84, status: '주의' }
|
|
];
|
|
|
|
export const k3sWorkloads = [
|
|
{
|
|
namespace: 'stdo-launcher',
|
|
app: 'Autonomy Studio Launcher',
|
|
workload: 'Deployment/launcher-api',
|
|
pod: 'launcher-api-7c9d85f9b7-q2x4m',
|
|
image: 'registry.local/atnmy-stdo-v2-be:1.0.1',
|
|
replicas: '2/2',
|
|
node: 'cluster-master-01',
|
|
cpu: 43,
|
|
memory: 62,
|
|
restarts: 0,
|
|
age: '3d',
|
|
status: '실행 중'
|
|
},
|
|
{
|
|
namespace: 'stdo-launcher',
|
|
app: 'Autonomy Studio Launcher',
|
|
workload: 'StatefulSet/launcher-postgres',
|
|
pod: 'launcher-postgres-0',
|
|
image: 'postgres:16',
|
|
replicas: '1/1',
|
|
node: 'cluster-master-01',
|
|
cpu: 24,
|
|
memory: 39,
|
|
restarts: 0,
|
|
age: '3d',
|
|
status: '실행 중'
|
|
},
|
|
{
|
|
namespace: 'stdo-lms',
|
|
app: 'LMS',
|
|
workload: 'Deployment/lms-api',
|
|
pod: 'lms-api-5f6db8d675-jt2xk',
|
|
image: 'registry.local/lms-be:1.0.0',
|
|
replicas: '2/2',
|
|
node: 'cluster-worker-01',
|
|
cpu: 67,
|
|
memory: 59,
|
|
restarts: 1,
|
|
age: '18h',
|
|
status: '실행 중'
|
|
},
|
|
{
|
|
namespace: 'stdo-lms',
|
|
app: 'LMS',
|
|
workload: 'Deployment/lms-adm-web',
|
|
pod: 'lms-adm-web-778b4d4f9b-bxz92',
|
|
image: 'registry.local/lms-adm-fe:0.1.0',
|
|
replicas: '1/1',
|
|
node: 'cluster-worker-02',
|
|
cpu: 31,
|
|
memory: 44,
|
|
restarts: 0,
|
|
age: '18h',
|
|
status: '실행 중'
|
|
},
|
|
{
|
|
namespace: 'stdo-lms',
|
|
app: 'LMS',
|
|
workload: 'StatefulSet/lms-postgres',
|
|
pod: 'lms-postgres-0',
|
|
image: 'postgres:16',
|
|
replicas: '1/1',
|
|
node: 'cluster-worker-01',
|
|
cpu: 18,
|
|
memory: 71,
|
|
restarts: 0,
|
|
age: '18h',
|
|
status: '실행 중'
|
|
},
|
|
{
|
|
namespace: 'stdo-ads-ide',
|
|
app: 'ADS IDE',
|
|
workload: 'Deployment/ads-ide-api',
|
|
pod: 'ads-ide-api-84b8787d7d-r8qkp',
|
|
image: 'registry.local/ads-ide-be:0.1.0',
|
|
replicas: '1/1',
|
|
node: 'cluster-worker-02',
|
|
cpu: 89,
|
|
memory: 84,
|
|
restarts: 4,
|
|
age: '7h',
|
|
status: '주의'
|
|
}
|
|
];
|
|
|
|
export const containerBlueprints = [
|
|
{
|
|
app: 'LMS',
|
|
namespace: 'stdo-lms',
|
|
release: 'lms-1.0.0',
|
|
resources: [
|
|
{
|
|
name: 'lms-api',
|
|
kind: 'Deployment',
|
|
image: 'registry.local/lms-be:1.0.0',
|
|
replicas: 2,
|
|
ports: '4000/TCP',
|
|
env: 14,
|
|
secrets: 5,
|
|
storage: '-',
|
|
ingress: 'api.lms.apps.local',
|
|
status: '구성완료'
|
|
},
|
|
{
|
|
name: 'lms-adm-web',
|
|
kind: 'Deployment',
|
|
image: 'registry.local/lms-adm-fe:0.1.0',
|
|
replicas: 1,
|
|
ports: '80/TCP',
|
|
env: 6,
|
|
secrets: 2,
|
|
storage: '-',
|
|
ingress: 'admin.lms.apps.local',
|
|
status: '구성완료'
|
|
},
|
|
{
|
|
name: 'lms-postgres',
|
|
kind: 'StatefulSet',
|
|
image: 'postgres:16',
|
|
replicas: 1,
|
|
ports: '5432/TCP',
|
|
env: 8,
|
|
secrets: 3,
|
|
storage: '20Gi / RWO',
|
|
ingress: '-',
|
|
status: '구성완료'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
app: 'ADS IDE',
|
|
namespace: 'stdo-ads-ide',
|
|
release: 'ads-ide-1.1.0',
|
|
resources: [
|
|
{
|
|
name: 'ads-ide-api',
|
|
kind: 'Deployment',
|
|
image: 'registry.local/ads-ide-be:0.1.0',
|
|
replicas: 1,
|
|
ports: '4300/TCP',
|
|
env: 9,
|
|
secrets: 4,
|
|
storage: '-',
|
|
ingress: 'api.ads-ide.apps.local',
|
|
status: '검토필요'
|
|
}
|
|
]
|
|
}
|
|
];
|
|
|
|
export const tailscaleNodes = [
|
|
{
|
|
name: 'cluster-master-01',
|
|
ip: '100.64.0.10',
|
|
role: 'control-plane',
|
|
user: 'ops@autonomystudio.local',
|
|
routes: '10.42.0.0/16, 10.43.0.0/16',
|
|
lastSeen: '1분 전',
|
|
status: '활성'
|
|
},
|
|
{
|
|
name: 'cluster-worker-01',
|
|
ip: '100.64.0.11',
|
|
role: 'worker',
|
|
user: 'ops@autonomystudio.local',
|
|
routes: '-',
|
|
lastSeen: '3분 전',
|
|
status: '활성'
|
|
},
|
|
{
|
|
name: 'gpu-runner-02',
|
|
ip: '100.64.20.2',
|
|
role: 'gpu-runner',
|
|
user: 'mlops@autonomystudio.local',
|
|
routes: '-',
|
|
lastSeen: '오프라인',
|
|
status: '주의'
|
|
}
|
|
];
|
|
|
|
export const tailscaleSettings = [
|
|
{
|
|
name: 'Tailnet',
|
|
key: 'TAILSCALE_TAILNET',
|
|
value: 'autonomy-studio.ts.net',
|
|
status: '활성',
|
|
description: '런처와 클러스터 운영 노드가 연결되는 tailnet'
|
|
},
|
|
{
|
|
name: 'Subnet Routes',
|
|
key: 'TAILSCALE_ADVERTISE_ROUTES',
|
|
value: '10.42.0.0/16,10.43.0.0/16',
|
|
status: '활성',
|
|
description: 'Pod/Service CIDR 접근용 광고 라우트'
|
|
},
|
|
{
|
|
name: 'Platform Gateway 연동',
|
|
key: 'TAILSCALE_GATEWAY_PROVIDER',
|
|
value: 'platform-gateway',
|
|
status: '활성',
|
|
description: '런처에는 연결 상태만 제공하고 세부 조회는 플랫폼 게이트웨이가 담당'
|
|
}
|
|
];
|
|
|
|
export const gatewayConnections = [
|
|
{ name: 'Headscale Server', endpoint: 'https://headscale.autonomystudio.local', role: '노드/ACL 동기화', status: '활성', lastSync: '1분 전' },
|
|
{ name: 'Autonomy Agent', endpoint: 'agent heartbeat stream', role: 'Agent 등록/상태 집계', status: '활성', lastSync: '30초 전' },
|
|
{ name: 'Platform Gitea', endpoint: 'https://gitea.autonomystudio.local', role: '런처/앱 소스 버전 저장소', status: '활성', lastSync: '5분 전' },
|
|
{ name: 'Platform Runtime', endpoint: 'runtime command bus', role: '원격 명령/로그/이벤트', status: '주의', lastSync: '12분 전' }
|
|
];
|
|
|
|
export const agentDevices = [
|
|
{ name: 'lab-mkmini-01', account: 'student01@example.com', status: '활성', workspace: '~/autonomy-studio/workspaces', sshKey: '배포됨', lastSeen: '2분 전' },
|
|
{ name: 'lab-f1tenth-03', account: 'student03@example.com', status: '활성', workspace: '~/autonomy-studio/workspaces', sshKey: '배포됨', lastSeen: '4분 전' },
|
|
{ name: 'sim-runner-02', account: 'instructor@example.com', status: '주의', workspace: '/opt/studio/workspaces', sshKey: '대기', lastSeen: '35분 전' }
|
|
];
|
|
|
|
export const runtimeCommands = [
|
|
{ target: 'lab-mkmini-01', command: 'workspace sync', status: '완료', requestedBy: 'park.ops', time: '8분 전' },
|
|
{ target: 'lab-f1tenth-03', command: 'build module', status: '실행 중', requestedBy: 'kim.admin', time: '3분 전' },
|
|
{ target: 'sim-runner-02', command: 'collect logs', status: '주의', requestedBy: 'choi.dev', time: '22분 전' }
|
|
];
|
|
|
|
export const notices = [
|
|
{ scope: '런처', title: 'v1.0.1 업데이트 안내', audience: '전체 사용자', status: '게시됨', date: '04.23.' },
|
|
{ scope: 'ADS IDE', title: '정기 점검 안내', audience: 'ADS IDE 사용자', status: '게시됨', date: '04.10.' },
|
|
{ scope: 'LMS', title: '신규 과제 검토 요청', audience: '강사', status: '게시됨', date: '06.02.' },
|
|
{ scope: '런처', title: '로그인 화면 점검 배너', audience: '전체 사용자', status: '예약됨', date: '06.24.' },
|
|
{ scope: 'FMS', title: 'FMS 릴리즈 사전 안내', audience: 'FMS 사용자', status: '초안', date: '06.25.' },
|
|
{ scope: 'ADS Education', title: '교육 콘텐츠 업데이트', audience: 'ADS Education 사용자', status: '게시됨', date: '06.12.' },
|
|
{ scope: 'Data Management', title: '베타 신청 접수', audience: '운영자', status: '초안', date: '06.18.' },
|
|
{ scope: '런처', title: '구버전 런처 지원 종료 안내', audience: '전체 사용자', status: '예약됨', date: '07.01.' },
|
|
{ scope: 'Calibration', title: '캘리브레이션 템플릿 변경', audience: 'Calibration 사용자', status: '게시됨', date: '06.09.' },
|
|
{ scope: 'HDMAP Builder', title: 'HDMAP Builder 등록 예정', audience: '운영자', status: '초안', date: '06.28.' },
|
|
{ scope: '런처', title: '파일 서버 점검 공지', audience: '전체 사용자', status: '게시됨', date: '06.15.' },
|
|
{ scope: 'ADS IDE', title: 'IDE 확장 기능 업데이트', audience: 'ADS IDE 사용자', status: '예약됨', date: '06.30.' }
|
|
];
|
|
|
|
export const alerts = [
|
|
{ icon: Bell, label: '확인이 필요한 워크로드 3개' },
|
|
{ icon: FileKey, label: '14일 내 만료되는 라이센스 42개' },
|
|
{ icon: KeyRound, label: '이번 주 교체된 시크릿 5개' }
|
|
];
|