Files
studio-admin-fe/src/data/mock.ts
T
chyoo ab460c8ae1
ci/woodpecker/push/woodpecker Pipeline was successful
fix: use admin R2 avatars for operator activity..
2026-07-14 11:52:01 +09:00

772 lines
26 KiB
TypeScript

import {
MonitorPlay,
Bell,
BookOpen,
Boxes,
ChartNoAxesColumnIncreasing,
FileKey,
HardDrive,
KeyRound,
LayoutDashboard,
Megaphone,
MonitorUp,
Network,
ScrollText,
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: '로그/이벤트', view: 'commonLogs' }
]
},
{
label: '런처',
icon: MonitorPlay,
children: [
{ label: '소스 관리', view: 'launcherSources' },
{ label: '빌드 관리', view: 'launcherBuilds' },
{ label: '버전 관리' },
{ label: '구성요소', view: 'launcherComponents' },
{ label: '로그/이벤트', view: 'launcherLogs' },
{ label: '앱 연결' }
]
},
{
label: '어플리케이션',
icon: Boxes,
children: [
{ label: '앱 관리' },
{ label: '저장소 관리' },
{ label: '소스 관리' },
{ label: '빌드 관리' },
{ label: '릴리즈 관리' },
{ label: '실행 설정' },
{ label: '배포 관리' },
{ label: '마이그레이션' },
{ label: '로그/이벤트' }
]
},
{
label: '테일스케일',
icon: Network,
children: [
{ label: '노드 현황' },
{ label: '라우트' },
{ label: 'ACL' }
]
},
{
label: '에이전트',
icon: MonitorUp,
children: [
{ label: '장비 등록' },
{ label: '장비 제어' },
{ label: '설치 상태' },
{ label: 'SSH 키 배포' },
{ label: '원격 명령' }
]
},
{
label: '인프라',
icon: HardDrive,
children: [
{ label: '클러스터', view: 'infraCluster' },
{ label: '워크로드', view: 'infraWorkloads' },
{ label: '네트워크', view: 'infraNetwork' },
{ label: '스토리지', view: 'infraStorage' }
]
}
]
},
{
label: '운영',
items: [
{ label: '관리자 관리', icon: ShieldCheck },
{ label: '조직 관리', icon: Boxes },
{ label: '사용자 관리', icon: Users },
{ label: '라이센스', icon: FileKey },
{ label: '공지사항', icon: Megaphone },
{ label: '약관', icon: ScrollText },
{ label: '매뉴얼', icon: BookOpen }
]
},
{
label: '시스템',
items: [
{ label: '모니터링', icon: ChartNoAxesColumnIncreasing },
{ label: '정책', icon: ShieldCheck }
]
}
];
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개' }
];