feat: implement modern admin studio with live AD, NetApp, MS SQL connectivity and comprehensive docs
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Grid Margin="24">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="*" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- Header -->
|
||||
<StackPanel Grid.Row="0" Margin="0,0,0,20">
|
||||
<TextBlock Text="Active Directory 관리" FontSize="24" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" />
|
||||
<TextBlock Text="도메인 사용자 계정, 보안 그룹, OU 및 계정 상태를 조회하고 제어합니다."
|
||||
FontSize="13" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,4,0,0" />
|
||||
</StackPanel>
|
||||
|
||||
<!-- Control / Filter Bar -->
|
||||
<Border Grid.Row="1" Style="{StaticResource ModernCardStyle}" Margin="0,0,0,16" Padding="14">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="260" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<!-- Search Input -->
|
||||
<TextBlock Grid.Column="0" Text="사용자 검색:" Foreground="{StaticResource TextSecondaryBrush}" VerticalAlignment="Center" Margin="0,0,10,0" />
|
||||
<TextBox Grid.Column="1" x:Name="TxtAdSearch" Style="{StaticResource ModernTextBoxStyle}" Margin="0,0,16,0" />
|
||||
|
||||
<!-- Filter Combo / Radio -->
|
||||
<StackPanel Grid.Column="2" Orientation="Horizontal" VerticalAlignment="Center">
|
||||
<Button x:Name="BtnAdSearch" Content=" 검색" Style="{StaticResource PrimaryButtonStyle}" Margin="0,0,8,0" />
|
||||
<Button x:Name="BtnAdRefresh" Content="새로고침" Style="{StaticResource SecondaryButtonStyle}" Margin="0,0,16,0" />
|
||||
</StackPanel>
|
||||
|
||||
<!-- Action Toolbar -->
|
||||
<StackPanel Grid.Column="3" Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
<Button x:Name="BtnAdNewUser" Content="+ 계정 추가" Style="{StaticResource PrimaryButtonStyle}" Margin="0,0,8,0" />
|
||||
<Button x:Name="BtnAdResetPwd" Content="암호 초기화" Style="{StaticResource SecondaryButtonStyle}" Margin="0,0,8,0" />
|
||||
<Button x:Name="BtnAdUnlock" Content="잠금 해제" Style="{StaticResource SecondaryButtonStyle}" Margin="0,0,8,0" />
|
||||
<Button x:Name="BtnAdToggleEnable" Content="활성화/비활성화" Style="{StaticResource SecondaryButtonStyle}" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<!-- Main Content Grid -->
|
||||
<Grid Grid.Row="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="7*" />
|
||||
<ColumnDefinition Width="3*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<!-- AD Users DataGrid -->
|
||||
<Border Grid.Column="0" Style="{StaticResource ModernCardStyle}" Margin="0,0,12,0" Padding="0">
|
||||
<DataGrid x:Name="AdUsersGrid" Style="{StaticResource ModernDataGridStyle}">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="아이디 (SamAccount)" Binding="{Binding SamAccountName}" Width="130" />
|
||||
<DataGridTextColumn Header="이름 (Display Name)" Binding="{Binding DisplayName}" Width="120" />
|
||||
<DataGridTextColumn Header="부서" Binding="{Binding Department}" Width="100" />
|
||||
<DataGridTextColumn Header="직급 / 직책" Binding="{Binding Title}" Width="90" />
|
||||
<DataGridTextColumn Header="이메일" Binding="{Binding UserPrincipalName}" Width="180" />
|
||||
<DataGridTextColumn Header="상태" Binding="{Binding StatusText}" Width="75" />
|
||||
<DataGridTextColumn Header="잠김 여부" Binding="{Binding LockedText}" Width="80" />
|
||||
<DataGridTextColumn Header="최종 로그인" Binding="{Binding LastLogonDate}" Width="*" />
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Border>
|
||||
|
||||
<!-- Selected User Properties Inspector Card -->
|
||||
<Border Grid.Column="1" Style="{StaticResource ModernCardStyle}">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel>
|
||||
<TextBlock Text="선택된 계정 상세 정보" FontSize="15" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,0,0,16" />
|
||||
|
||||
<!-- User Profile Header -->
|
||||
<Border Background="#121A27" CornerRadius="8" Padding="14" Margin="0,0,0,16">
|
||||
<StackPanel>
|
||||
<TextBlock x:Name="TxtDetailName" Text="홍길동 (gdhong)" FontSize="16" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" />
|
||||
<TextBlock x:Name="TxtDetailEmail" Text="gdhong@corp.local" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,2,0,0" />
|
||||
<TextBlock x:Name="TxtDetailOu" Text="OU=Users,OU=Seoul,DC=corp,DC=local" FontSize="11" Foreground="#60A5FA" Margin="0,6,0,0" TextWrapping="Wrap" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<TextBlock Text="계정 속성" FontSize="13" FontWeight="SemiBold" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,8" />
|
||||
|
||||
<Grid Margin="0,4">
|
||||
<TextBlock Text="계정 상태:" Foreground="{StaticResource TextSecondaryBrush}" FontSize="12" />
|
||||
<TextBlock x:Name="TxtPropStatus" Text="활성 (Active)" Foreground="#10B981" FontWeight="SemiBold" FontSize="12" HorizontalAlignment="Right" />
|
||||
</Grid>
|
||||
<Grid Margin="0,4">
|
||||
<TextBlock Text="계정 만료일:" Foreground="{StaticResource TextSecondaryBrush}" FontSize="12" />
|
||||
<TextBlock x:Name="TxtPropExpires" Text="제한 없음" Foreground="{StaticResource TextPrimaryBrush}" FontSize="12" HorizontalAlignment="Right" />
|
||||
</Grid>
|
||||
<Grid Margin="0,4">
|
||||
<TextBlock Text="암호 최종 변경:" Foreground="{StaticResource TextSecondaryBrush}" FontSize="12" />
|
||||
<TextBlock x:Name="TxtPropPwdChanged" Text="2026-09-15" Foreground="{StaticResource TextPrimaryBrush}" FontSize="12" HorizontalAlignment="Right" />
|
||||
</Grid>
|
||||
<Grid Margin="0,4">
|
||||
<TextBlock Text="암호 만료 필요 여부:" Foreground="{StaticResource TextSecondaryBrush}" FontSize="12" />
|
||||
<TextBlock x:Name="TxtPropMustChange" Text="아니오" Foreground="{StaticResource TextPrimaryBrush}" FontSize="12" HorizontalAlignment="Right" />
|
||||
</Grid>
|
||||
|
||||
<Separator Background="{StaticResource CardBorderBrush}" Margin="0,12" />
|
||||
|
||||
<TextBlock Text="소속 그룹 (Member Of)" FontSize="13" FontWeight="SemiBold" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,8" />
|
||||
<ListBox x:Name="ListMemberGroups" Height="120" Background="#0F172A" BorderBrush="{StaticResource CardBorderBrush}"
|
||||
Foreground="{StaticResource TextPrimaryBrush}" FontSize="12" />
|
||||
|
||||
<Button x:Name="BtnManageGroups" Content="그룹 멤버십 편집..." Style="{StaticResource SecondaryButtonStyle}" Margin="0,8,0,0" HorizontalAlignment="Right" />
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<!-- Status Footer -->
|
||||
<Border Grid.Row="3" Margin="0,12,0,0">
|
||||
<DockPanel>
|
||||
<TextBlock x:Name="TxtAdStatusMsg" Text="준비 완료 - 도메인 컨트롤러: dc01.corp.local (연결됨)" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" />
|
||||
<TextBlock x:Name="TxtAdTotalCount" Text="총 1,420 명의 사용자" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" HorizontalAlignment="Right" />
|
||||
</DockPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,166 @@
|
||||
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Grid Margin="24">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- View Header -->
|
||||
<StackPanel Grid.Row="0" Margin="0,0,0,24">
|
||||
<TextBlock Text="인프라 종합 대시보드" FontSize="24" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" />
|
||||
<TextBlock Text="Active Directory, NetApp 스토리지, MS SQL 데이터베이스 전반의 실시간 상태를 모니터링합니다."
|
||||
FontSize="13" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,4,0,0" />
|
||||
</StackPanel>
|
||||
|
||||
<!-- KPI Summary Cards Grid -->
|
||||
<Grid Grid.Row="1" Margin="0,0,0,20">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<!-- Card 1: Active Directory -->
|
||||
<Border Grid.Column="0" Style="{StaticResource ModernCardStyle}">
|
||||
<StackPanel>
|
||||
<Grid>
|
||||
<TextBlock Text="Active Directory" FontSize="13" FontWeight="SemiBold" Foreground="{StaticResource TextSecondaryBrush}" />
|
||||
<TextBlock Text="" FontFamily="{StaticResource IconFont}" FontSize="18" HorizontalAlignment="Right" Foreground="#60A5FA" />
|
||||
</Grid>
|
||||
<TextBlock Text="1,420" FontSize="28" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,8,0,2" />
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<Border Background="#10B981" CornerRadius="4" Padding="6,2" Margin="0,0,6,0">
|
||||
<TextBlock Text="정상" FontSize="11" FontWeight="Bold" Foreground="White" />
|
||||
</Border>
|
||||
<TextBlock Text="잠김 2건 / 비활성 18건" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" VerticalAlignment="Center" />
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<!-- Card 2: NetApp Qtree & Volume -->
|
||||
<Border Grid.Column="1" Style="{StaticResource ModernCardStyle}">
|
||||
<StackPanel>
|
||||
<Grid>
|
||||
<TextBlock Text="NetApp Qtree / 볼륨" FontSize="13" FontWeight="SemiBold" Foreground="{StaticResource TextSecondaryBrush}" />
|
||||
<TextBlock Text="" FontFamily="{StaticResource IconFont}" FontSize="18" HorizontalAlignment="Right" Foreground="#34D399" />
|
||||
</Grid>
|
||||
<TextBlock Text="84 / 12 개" FontSize="28" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,8,0,2" />
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="전체 스토리지 사용률: " FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" />
|
||||
<TextBlock Text="68.4%" FontSize="12" FontWeight="SemiBold" Foreground="#34D399" />
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<!-- Card 3: Quota & Shares -->
|
||||
<Border Grid.Column="2" Style="{StaticResource ModernCardStyle}">
|
||||
<StackPanel>
|
||||
<Grid>
|
||||
<TextBlock Text="Quota 및 공유 (CIFS/NFS)" FontSize="13" FontWeight="SemiBold" Foreground="{StaticResource TextSecondaryBrush}" />
|
||||
<TextBlock Text="" FontFamily="{StaticResource IconFont}" FontSize="18" HorizontalAlignment="Right" Foreground="#FBBF24" />
|
||||
</Grid>
|
||||
<TextBlock Text="48 개 Share" FontSize="28" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,8,0,2" />
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<Border Background="#F59E0B" CornerRadius="4" Padding="6,2" Margin="0,0,6,0">
|
||||
<TextBlock Text="경고" FontSize="11" FontWeight="Bold" Foreground="Black" />
|
||||
</Border>
|
||||
<TextBlock Text="Quota 90% 초과 3건" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" VerticalAlignment="Center" />
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<!-- Card 4: MS SQL DB -->
|
||||
<Border Grid.Column="3" Style="{StaticResource ModernCardStyle}">
|
||||
<StackPanel>
|
||||
<Grid>
|
||||
<TextBlock Text="MS SQL 데이터베이스" FontSize="13" FontWeight="SemiBold" Foreground="{StaticResource TextSecondaryBrush}" />
|
||||
<TextBlock Text="" FontFamily="{StaticResource IconFont}" FontSize="18" HorizontalAlignment="Right" Foreground="#A78BFA" />
|
||||
</Grid>
|
||||
<TextBlock Text="16 DBs" FontSize="28" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,8,0,2" />
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<Border Background="#10B981" CornerRadius="4" Padding="6,2" Margin="0,0,6,0">
|
||||
<TextBlock Text="온라인" FontSize="11" FontWeight="Bold" Foreground="White" />
|
||||
</Border>
|
||||
<TextBlock Text="최근 백업 정상 완료" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" VerticalAlignment="Center" />
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<!-- Bottom Layout: Recent Activities & Quick Launcher -->
|
||||
<Grid Grid.Row="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="2*" />
|
||||
<ColumnDefinition Width="1*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<!-- Activity Log Card -->
|
||||
<Border Grid.Column="0" Style="{StaticResource ModernCardStyle}">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<DockPanel Grid.Row="0" Margin="0,0,0,14">
|
||||
<TextBlock Text="최근 시스템 감사 및 관리 이력" FontSize="15" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" VerticalAlignment="Center" />
|
||||
<Button Content="새로고침" Style="{StaticResource SecondaryButtonStyle}" HorizontalAlignment="Right" Padding="10,4" />
|
||||
</DockPanel>
|
||||
|
||||
<DataGrid x:Name="ActivityGrid" Grid.Row="1" Style="{StaticResource ModernDataGridStyle}">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="발생 시각" Binding="{Binding Timestamp}" Width="140" />
|
||||
<DataGridTextColumn Header="대상 시스템" Binding="{Binding TargetSystem}" Width="120" />
|
||||
<DataGridTextColumn Header="작업 유형" Binding="{Binding ActionType}" Width="140" />
|
||||
<DataGridTextColumn Header="세부 내용" Binding="{Binding Description}" Width="*" />
|
||||
<DataGridTextColumn Header="결과" Binding="{Binding Status}" Width="80" />
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<!-- Quick Actions Card -->
|
||||
<Border Grid.Column="1" Style="{StaticResource ModernCardStyle}">
|
||||
<StackPanel>
|
||||
<TextBlock Text="빠른 작업 바로가기" FontSize="15" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,0,0,16" />
|
||||
|
||||
<Button Content=" AD 계정 신규 생성 / 잠금 해제" Style="{StaticResource SecondaryButtonStyle}"
|
||||
HorizontalContentAlignment="Left" Margin="0,0,0,10" Padding="12,10" x:Name="QuickBtnAD" />
|
||||
|
||||
<Button Content=" NetApp Quota 용량 증설 요청" Style="{StaticResource SecondaryButtonStyle}"
|
||||
HorizontalContentAlignment="Left" Margin="0,0,0,10" Padding="12,10" x:Name="QuickBtnQuota" />
|
||||
|
||||
<Button Content=" 신규 CIFS/SMB 공유 생성" Style="{StaticResource SecondaryButtonStyle}"
|
||||
HorizontalContentAlignment="Left" Margin="0,0,0,10" Padding="12,10" x:Name="QuickBtnShare" />
|
||||
|
||||
<Button Content=" SQL DB 즉시 백업 수행" Style="{StaticResource SecondaryButtonStyle}"
|
||||
HorizontalContentAlignment="Left" Margin="0,0,0,10" Padding="12,10" x:Name="QuickBtnSql" />
|
||||
|
||||
<Separator Background="{StaticResource CardBorderBrush}" Margin="0,10,0,16" />
|
||||
|
||||
<!-- Connection Quick Status Box -->
|
||||
<Border Background="#121A27" CornerRadius="6" Padding="12">
|
||||
<StackPanel>
|
||||
<TextBlock Text="시스템 연결 상태 요약" FontSize="12" FontWeight="SemiBold" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,8" />
|
||||
<Grid Margin="0,2">
|
||||
<TextBlock Text="Active Directory DC:" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" />
|
||||
<TextBlock Text="정상 연결" FontSize="12" Foreground="#10B981" HorizontalAlignment="Right" />
|
||||
</Grid>
|
||||
<Grid Margin="0,2">
|
||||
<TextBlock Text="NetApp ONTAP API:" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" />
|
||||
<TextBlock Text="정상 연결" FontSize="12" Foreground="#10B981" HorizontalAlignment="Right" />
|
||||
</Grid>
|
||||
<Grid Margin="0,2">
|
||||
<TextBlock Text="MS SQL Server:" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" />
|
||||
<TextBlock Text="정상 연결" FontSize="12" Foreground="#10B981" HorizontalAlignment="Right" />
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,197 @@
|
||||
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Grid Margin="24">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="*" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- Header -->
|
||||
<StackPanel Grid.Row="0" Margin="0,0,0,20">
|
||||
<TextBlock Text="NetApp 스토리지 관리" FontSize="24" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" />
|
||||
<TextBlock Text="NetApp ONTAP 스토리지의 Qtree, Quota 한도, CIFS/NFS 파일 공유를 통합 제어합니다."
|
||||
FontSize="13" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,4,0,0" />
|
||||
</StackPanel>
|
||||
|
||||
<!-- Top Cluster / SVM Selector Bar -->
|
||||
<Border Grid.Row="1" Style="{StaticResource ModernCardStyle}" Margin="0,0,0,16" Padding="14">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="200" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="200" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TextBlock Grid.Column="0" Text="스토리지 클러스터:" Foreground="{StaticResource TextSecondaryBrush}" VerticalAlignment="Center" Margin="0,0,10,0" />
|
||||
<ComboBox Grid.Column="1" x:Name="CmbCluster" SelectedIndex="0" Height="32" Background="#0F172A" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,0,20,0">
|
||||
<ComboBoxItem Content="cluster01-ontap.corp.local" />
|
||||
<ComboBoxItem Content="cluster02-backup.corp.local" />
|
||||
</ComboBox>
|
||||
|
||||
<TextBlock Grid.Column="2" Text="SVM (Vserver):" Foreground="{StaticResource TextSecondaryBrush}" VerticalAlignment="Center" Margin="0,0,10,0" />
|
||||
<ComboBox Grid.Column="3" x:Name="CmbSvm" SelectedIndex="0" Height="32" Background="#0F172A" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,0,20,0">
|
||||
<ComboBoxItem Content="svm_cifs_prod01" />
|
||||
<ComboBoxItem Content="svm_nfs_app01" />
|
||||
</ComboBox>
|
||||
|
||||
<Button Grid.Column="4" x:Name="BtnRefreshStorage" Content="새로고침" Style="{StaticResource SecondaryButtonStyle}" />
|
||||
|
||||
<StackPanel Grid.Column="5" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
|
||||
<Border Background="#10B981" Width="10" Height="10" CornerRadius="5" Margin="0,0,6,0" />
|
||||
<TextBlock Text="ONTAP 9.14 API 정상" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<!-- Tab Content Area: Qtree, Quota, Shares -->
|
||||
<TabControl Grid.Row="2" Background="Transparent" BorderThickness="0">
|
||||
<TabControl.Resources>
|
||||
<Style TargetType="TabItem">
|
||||
<Setter Property="FontSize" Value="14" />
|
||||
<Setter Property="FontWeight" Value="SemiBold" />
|
||||
<Setter Property="Foreground" Value="{StaticResource TextSecondaryBrush}" />
|
||||
<Setter Property="Padding" Value="18,10" />
|
||||
<Setter Property="Cursor" Value="Hand" />
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="TabItem">
|
||||
<Border x:Name="tabBorder" Background="Transparent" BorderThickness="0,0,0,2" BorderBrush="Transparent" Margin="0,0,10,6">
|
||||
<ContentPresenter ContentSource="Header" Margin="6,4" />
|
||||
</Border>
|
||||
<ControlTemplate.Triggers>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter TargetName="tabBorder" Property="BorderBrush" Value="{StaticResource PrimaryAccentBrush}" />
|
||||
<Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="True">
|
||||
<Setter Property="Foreground" Value="{StaticResource PrimaryAccentHoverBrush}" />
|
||||
</Trigger>
|
||||
</ControlTemplate.Triggers>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
</TabControl.Resources>
|
||||
|
||||
<!-- TAB 1: QTREE MANAGEMENT -->
|
||||
<TabItem Header=" Qtree 관리">
|
||||
<Grid Margin="0,12,0,0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<DockPanel Grid.Row="0" Margin="0,0,0,12">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBox x:Name="TxtQtreeSearch" Width="220" Style="{StaticResource ModernTextBoxStyle}" Margin="0,0,8,0" />
|
||||
<Button x:Name="BtnQtreeFilter" Content="검색" Style="{StaticResource SecondaryButtonStyle}" />
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
<Button x:Name="BtnNewQtree" Content="+ 새 Qtree 생성" Style="{StaticResource PrimaryButtonStyle}" Margin="0,0,8,0" />
|
||||
<Button x:Name="BtnEditQtree" Content="보안 스타일 변경" Style="{StaticResource SecondaryButtonStyle}" Margin="0,0,8,0" />
|
||||
<Button x:Name="BtnDeleteQtree" Content="삭제" Style="{StaticResource SecondaryButtonStyle}" />
|
||||
</StackPanel>
|
||||
</DockPanel>
|
||||
|
||||
<Border Grid.Row="1" Style="{StaticResource ModernCardStyle}" Margin="0" Padding="0">
|
||||
<DataGrid x:Name="QtreeGrid" Style="{StaticResource ModernDataGridStyle}">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="볼륨 (Volume)" Binding="{Binding Volume}" Width="160" />
|
||||
<DataGridTextColumn Header="Qtree 이름" Binding="{Binding QtreeName}" Width="160" />
|
||||
<DataGridTextColumn Header="보안 스타일 (Security)" Binding="{Binding SecurityStyle}" Width="130" />
|
||||
<DataGridTextColumn Header="Oplocks" Binding="{Binding Oplocks}" Width="100" />
|
||||
<DataGridTextColumn Header="상태" Binding="{Binding Status}" Width="100" />
|
||||
<DataGridTextColumn Header="전체 경로" Binding="{Binding FullPath}" Width="*" />
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Border>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
|
||||
<!-- TAB 2: QUOTA MANAGEMENT -->
|
||||
<TabItem Header=" Quota (용량 한도)">
|
||||
<Grid Margin="0,12,0,0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<DockPanel Grid.Row="0" Margin="0,0,0,12">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBox x:Name="TxtQuotaSearch" Width="220" Style="{StaticResource ModernTextBoxStyle}" Margin="0,0,8,0" />
|
||||
<Button x:Name="BtnQuotaFilter" Content="검색" Style="{StaticResource SecondaryButtonStyle}" />
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
<Button x:Name="BtnAddQuota" Content="+ Quota 규칙 추가" Style="{StaticResource PrimaryButtonStyle}" Margin="0,0,8,0" />
|
||||
<Button x:Name="BtnModifyQuota" Content="한도 조정 (Resize)" Style="{StaticResource SecondaryButtonStyle}" Margin="0,0,8,0" />
|
||||
<Button x:Name="BtnRecomputeQuota" Content="Quota 재계산" Style="{StaticResource SecondaryButtonStyle}" />
|
||||
</StackPanel>
|
||||
</DockPanel>
|
||||
|
||||
<Border Grid.Row="1" Style="{StaticResource ModernCardStyle}" Margin="0" Padding="0">
|
||||
<DataGrid x:Name="QuotaGrid" Style="{StaticResource ModernDataGridStyle}">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="대상 유형 (Type)" Binding="{Binding QuotaType}" Width="110" />
|
||||
<DataGridTextColumn Header="대상 (Target / User / Tree)" Binding="{Binding Target}" Width="180" />
|
||||
<DataGridTextColumn Header="볼륨 / Qtree" Binding="{Binding VolumeQtree}" Width="180" />
|
||||
<DataGridTextColumn Header="현재 사용량" Binding="{Binding UsedSpace}" Width="120" />
|
||||
<DataGridTextColumn Header="Soft Limit" Binding="{Binding SoftLimit}" Width="120" />
|
||||
<DataGridTextColumn Header="Hard Limit" Binding="{Binding HardLimit}" Width="120" />
|
||||
<DataGridTextColumn Header="사용률" Binding="{Binding UsagePercent}" Width="90" />
|
||||
<DataGridTextColumn Header="상태" Binding="{Binding QuotaStatus}" Width="*" />
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Border>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
|
||||
<!-- TAB 3: SHARE MANAGEMENT -->
|
||||
<TabItem Header=" 파일 공유 (CIFS / NFS)">
|
||||
<Grid Margin="0,12,0,0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<DockPanel Grid.Row="0" Margin="0,0,0,12">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBox x:Name="TxtShareSearch" Width="220" Style="{StaticResource ModernTextBoxStyle}" Margin="0,0,8,0" />
|
||||
<Button x:Name="BtnShareFilter" Content="검색" Style="{StaticResource SecondaryButtonStyle}" />
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
<Button x:Name="BtnNewShare" Content="+ 신규 공유 생성" Style="{StaticResource PrimaryButtonStyle}" Margin="0,0,8,0" />
|
||||
<Button x:Name="BtnShareAcl" Content="ACL / 접근 권한 관리" Style="{StaticResource SecondaryButtonStyle}" Margin="0,0,8,0" />
|
||||
<Button x:Name="BtnDeleteShare" Content="공유 해제" Style="{StaticResource SecondaryButtonStyle}" />
|
||||
</StackPanel>
|
||||
</DockPanel>
|
||||
|
||||
<Border Grid.Row="1" Style="{StaticResource ModernCardStyle}" Margin="0" Padding="0">
|
||||
<DataGrid x:Name="ShareGrid" Style="{StaticResource ModernDataGridStyle}">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="프로토콜" Binding="{Binding Protocol}" Width="90" />
|
||||
<DataGridTextColumn Header="공유 이름 (Share Name)" Binding="{Binding ShareName}" Width="160" />
|
||||
<DataGridTextColumn Header="마운트 / Qtree 경로" Binding="{Binding Path}" Width="260" />
|
||||
<DataGridTextColumn Header="설명 (Comment)" Binding="{Binding Comment}" Width="200" />
|
||||
<DataGridTextColumn Header="권한 요약" Binding="{Binding AclSummary}" Width="160" />
|
||||
<DataGridTextColumn Header="활성 세션 수" Binding="{Binding ActiveSessions}" Width="*" />
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Border>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
</TabControl>
|
||||
|
||||
<!-- Status Footer -->
|
||||
<Border Grid.Row="3" Margin="0,12,0,0">
|
||||
<DockPanel>
|
||||
<TextBlock x:Name="TxtNetAppStatusMsg" Text="스토리지 응답 정상 (REST API v2) - Active SVM: svm_cifs_prod01" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" />
|
||||
<TextBlock x:Name="TxtNetAppSummary" Text="총 84개 Qtree, 48개 공유 활성화됨" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" HorizontalAlignment="Right" />
|
||||
</DockPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,159 @@
|
||||
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Grid Margin="24">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="*" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- Header -->
|
||||
<StackPanel Grid.Row="0" Margin="0,0,0,20">
|
||||
<TextBlock Text="환경설정 및 실제 인프라 연결 구성" FontSize="24" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" />
|
||||
<TextBlock Text="Active Directory, NetApp ONTAP 스토리지 및 MS SQL 데이터베이스 접속 엔드포인트를 구성하고 실시간 테스트합니다."
|
||||
FontSize="13" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,4,0,0" />
|
||||
</StackPanel>
|
||||
|
||||
<!-- Settings Cards Scroll Area -->
|
||||
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel>
|
||||
<!-- Group 1: Global Operating Mode -->
|
||||
<Border Style="{StaticResource ModernCardStyle}" Margin="0,0,0,16">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<StackPanel Grid.Column="0">
|
||||
<TextBlock Text="전역 동작 모드 (Global Operation Mode)" FontSize="16" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" />
|
||||
<TextBlock Text="실제 인프라 장비 및 서버와 통신할지, 또는 데모/시뮬레이션 모드로 작동할지 선택합니다."
|
||||
FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,4,0,0" />
|
||||
</StackPanel>
|
||||
<CheckBox x:Name="ChkGlobalLiveMode" Grid.Column="1" Content="실제 연결 모드 활성화 (Live Production Mode)"
|
||||
Foreground="{StaticResource PrimaryAccentHoverBrush}" FontWeight="Bold" VerticalAlignment="Center" FontSize="13" />
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<!-- Group 2: Active Directory Configuration -->
|
||||
<Border Style="{StaticResource ModernCardStyle}" Margin="0,0,0,16">
|
||||
<StackPanel>
|
||||
<DockPanel Margin="0,0,0,12">
|
||||
<TextBlock Text="Active Directory (AD DS) 연결" FontSize="16" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" />
|
||||
<CheckBox x:Name="ChkAdLive" Content="AD 실제 연결 사용" Foreground="{StaticResource TextPrimaryBrush}" HorizontalAlignment="Right" VerticalAlignment="Center" />
|
||||
</DockPanel>
|
||||
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<StackPanel Grid.Column="0" Margin="0,0,12,0">
|
||||
<TextBlock Text="도메인 컨트롤러 (DC FQDN / IP):" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,4" FontSize="12" />
|
||||
<TextBox x:Name="TxtAdDc" Text="dc01.corp.local" Style="{StaticResource ModernTextBoxStyle}" Margin="0,0,0,12" />
|
||||
|
||||
<TextBlock Text="검색 기본 루트 OU (DN):" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,4" FontSize="12" />
|
||||
<TextBox x:Name="TxtAdBaseOu" Text="DC=corp,DC=local" Style="{StaticResource ModernTextBoxStyle}" Margin="0,0,0,12" />
|
||||
|
||||
<CheckBox x:Name="ChkAdLdaps" Content="보안 LDAPS 암호화 연결 (Port 636) 사용" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,4,0,0" />
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="1" Margin="12,0,0,0">
|
||||
<TextBlock Text="관리자 계정 (비워둘 시 현재 Windows 로그인 토큰 사용):" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,4" FontSize="12" />
|
||||
<TextBox x:Name="TxtAdUser" Style="{StaticResource ModernTextBoxStyle}" Margin="0,0,0,12" />
|
||||
|
||||
<TextBlock Text="관리자 암호:" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,4" FontSize="12" />
|
||||
<PasswordBox x:Name="TxtAdPassword" Background="#0F172A" Foreground="{StaticResource TextPrimaryBrush}" BorderBrush="{StaticResource CardBorderBrush}" Height="34" Margin="0,0,0,12" />
|
||||
|
||||
<Button x:Name="BtnTestAd" Content="AD 연결 테스트" Style="{StaticResource SecondaryButtonStyle}" HorizontalAlignment="Right" Padding="14,6" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<!-- Group 3: NetApp ONTAP Storage Configuration -->
|
||||
<Border Style="{StaticResource ModernCardStyle}" Margin="0,0,0,16">
|
||||
<StackPanel>
|
||||
<DockPanel Margin="0,0,0,12">
|
||||
<TextBlock Text="NetApp ONTAP 스토리지 (REST API) 연결" FontSize="16" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" />
|
||||
<CheckBox x:Name="ChkNetAppLive" Content="NetApp 실제 연결 사용" Foreground="{StaticResource TextPrimaryBrush}" HorizontalAlignment="Right" VerticalAlignment="Center" />
|
||||
</DockPanel>
|
||||
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<StackPanel Grid.Column="0" Margin="0,0,12,0">
|
||||
<TextBlock Text="클러스터 관리 LIF (HTTPS 엔드포인트 URL):" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,4" FontSize="12" />
|
||||
<TextBox x:Name="TxtNetAppEndpoint" Text="https://10.200.10.50" Style="{StaticResource ModernTextBoxStyle}" Margin="0,0,0,12" />
|
||||
|
||||
<TextBlock Text="기본 대상 SVM (Vserver):" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,4" FontSize="12" />
|
||||
<TextBox x:Name="TxtNetAppDefaultSvm" Text="svm_cifs_prod01" Style="{StaticResource ModernTextBoxStyle}" Margin="0,0,0,12" />
|
||||
|
||||
<CheckBox x:Name="ChkNetAppIgnoreSsl" Content="자체 서명(Self-signed) SSL 인증서 신뢰" IsChecked="True" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,4,0,0" />
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="1" Margin="12,0,0,0">
|
||||
<TextBlock Text="스토리지 관리자 ID (vsadmin / admin):" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,4" FontSize="12" />
|
||||
<TextBox x:Name="TxtNetAppUser" Text="admin" Style="{StaticResource ModernTextBoxStyle}" Margin="0,0,0,12" />
|
||||
|
||||
<TextBlock Text="스토리지 관리자 암호:" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,4" FontSize="12" />
|
||||
<PasswordBox x:Name="TxtNetAppPassword" Background="#0F172A" Foreground="{StaticResource TextPrimaryBrush}" BorderBrush="{StaticResource CardBorderBrush}" Height="34" Margin="0,0,0,12" />
|
||||
|
||||
<Button x:Name="BtnTestNetApp" Content="NetApp ONTAP 연결 테스트" Style="{StaticResource SecondaryButtonStyle}" HorizontalAlignment="Right" Padding="14,6" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<!-- Group 4: MS SQL Server Configuration -->
|
||||
<Border Style="{StaticResource ModernCardStyle}" Margin="0,0,0,16">
|
||||
<StackPanel>
|
||||
<DockPanel Margin="0,0,0,12">
|
||||
<TextBlock Text="MS SQL Server 연결 기본값" FontSize="16" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" />
|
||||
<CheckBox x:Name="ChkSqlLive" Content="MS SQL 실제 연결 사용" Foreground="{StaticResource TextPrimaryBrush}" HorizontalAlignment="Right" VerticalAlignment="Center" />
|
||||
</DockPanel>
|
||||
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<StackPanel Grid.Column="0" Margin="0,0,12,0">
|
||||
<TextBlock Text="SQL 인스턴스 주소 (예: localhost 또는 SRV\INSTANCE):" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,4" FontSize="12" />
|
||||
<TextBox x:Name="TxtSqlServer" Text="localhost" Style="{StaticResource ModernTextBoxStyle}" Margin="0,0,0,12" />
|
||||
|
||||
<TextBlock Text="인증 방식:" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,4" FontSize="12" />
|
||||
<ComboBox x:Name="CmbSqlAuthType" SelectedIndex="0" Height="32" Background="#0F172A" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,0,0,12">
|
||||
<ComboBoxItem Content="Windows 통합 인증 (Integrated Security)" />
|
||||
<ComboBoxItem Content="SQL Server 인증 (User ID / Password)" />
|
||||
</ComboBox>
|
||||
|
||||
<TextBlock Text="백업 파일 기본 저장 디렉토리:" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,4" FontSize="12" />
|
||||
<TextBox x:Name="TxtSqlBackupDir" Text="C:\Backups" Style="{StaticResource ModernTextBoxStyle}" />
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="1" Margin="12,0,0,0">
|
||||
<TextBlock Text="SQL 계정 (SQL 인증 시):" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,4" FontSize="12" />
|
||||
<TextBox x:Name="TxtSqlUser" Text="sa" Style="{StaticResource ModernTextBoxStyle}" Margin="0,0,0,12" />
|
||||
|
||||
<TextBlock Text="SQL 암호 (SQL 인증 시):" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,4" FontSize="12" />
|
||||
<PasswordBox x:Name="TxtSqlPassword" Background="#0F172A" Foreground="{StaticResource TextPrimaryBrush}" BorderBrush="{StaticResource CardBorderBrush}" Height="34" Margin="0,0,0,12" />
|
||||
|
||||
<Button x:Name="BtnTestSql" Content="SQL Server 연결 테스트" Style="{StaticResource SecondaryButtonStyle}" HorizontalAlignment="Right" Padding="14,6" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
|
||||
<!-- Bottom Action Bar -->
|
||||
<Border Grid.Row="2" Margin="0,16,0,0">
|
||||
<DockPanel>
|
||||
<Button x:Name="BtnTestAllConnections" Content=" 전체 인프라 연결 상태 일괄 진단" Style="{StaticResource SecondaryButtonStyle}" HorizontalAlignment="Left" />
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
<Button x:Name="BtnReloadConfig" Content="설정 다시 로드" Style="{StaticResource SecondaryButtonStyle}" Margin="0,0,8,0" />
|
||||
<Button x:Name="BtnSaveSettings" Content="설정 저장 및 적용" Style="{StaticResource PrimaryButtonStyle}" />
|
||||
</StackPanel>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,154 @@
|
||||
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Grid Margin="24">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="*" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- Header -->
|
||||
<StackPanel Grid.Row="0" Margin="0,0,0,20">
|
||||
<TextBlock Text="MS SQL 데이터베이스 관리" FontSize="24" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" />
|
||||
<TextBlock Text="SQL Server 인스턴스 연결, 데이터베이스 상태 제어, 백업/복원 및 사용자 권한을 관리합니다."
|
||||
FontSize="13" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,4,0,0" />
|
||||
</StackPanel>
|
||||
|
||||
<!-- Instance Connection Bar -->
|
||||
<Border Grid.Row="1" Style="{StaticResource ModernCardStyle}" Margin="0,0,0,16" Padding="14">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="220" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="160" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TextBlock Grid.Column="0" Text="SQL 인스턴스:" Foreground="{StaticResource TextSecondaryBrush}" VerticalAlignment="Center" Margin="0,0,10,0" />
|
||||
<ComboBox Grid.Column="1" x:Name="CmbSqlInstance" SelectedIndex="0" Height="32" Background="#0F172A" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,0,16,0">
|
||||
<ComboBoxItem Content="SQL-PROD-01.corp.local\MSSQLSERVER" />
|
||||
<ComboBoxItem Content="SQL-DEV-01.corp.local\DEVSQL" />
|
||||
</ComboBox>
|
||||
|
||||
<TextBlock Grid.Column="2" Text="인증 방식:" Foreground="{StaticResource TextSecondaryBrush}" VerticalAlignment="Center" Margin="0,0,10,0" />
|
||||
<ComboBox Grid.Column="3" x:Name="CmbSqlAuth" SelectedIndex="0" Height="32" Background="#0F172A" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,0,16,0">
|
||||
<ComboBoxItem Content="Windows 통합 인증" />
|
||||
<ComboBoxItem Content="SQL Server 인증" />
|
||||
</ComboBox>
|
||||
|
||||
<StackPanel Grid.Column="4" Orientation="Horizontal">
|
||||
<Button x:Name="BtnTestSqlConnection" Content="연결 테스트" Style="{StaticResource SecondaryButtonStyle}" Margin="0,0,8,0" />
|
||||
<Button x:Name="BtnSqlRefresh" Content="새로고침" Style="{StaticResource SecondaryButtonStyle}" />
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Column="5" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
|
||||
<Border Background="#10B981" Width="10" Height="10" CornerRadius="5" Margin="0,0,6,0" />
|
||||
<TextBlock Text="Microsoft SQL Server 2022 (v16.0) Enterprise" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<!-- Main Databases & Tools Split Layout -->
|
||||
<Grid Grid.Row="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="7*" />
|
||||
<ColumnDefinition Width="3*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<!-- Databases DataGrid -->
|
||||
<Grid Grid.Column="0" Margin="0,0,12,0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- Action Toolbar -->
|
||||
<DockPanel Grid.Row="0" Margin="0,0,0,10">
|
||||
<TextBox x:Name="TxtDbSearch" Width="200" Style="{StaticResource ModernTextBoxStyle}" Margin="0,0,8,0" />
|
||||
<Button x:Name="BtnDbSearch" Content="DB 검색" Style="{StaticResource SecondaryButtonStyle}" />
|
||||
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
<Button x:Name="BtnNewDb" Content="+ 새 데이터베이스" Style="{StaticResource PrimaryButtonStyle}" Margin="0,0,8,0" />
|
||||
<Button x:Name="BtnBackupDb" Content="즉시 백업 (Full)" Style="{StaticResource SecondaryButtonStyle}" Margin="0,0,8,0" />
|
||||
<Button x:Name="BtnRestoreDb" Content="백업 복원..." Style="{StaticResource SecondaryButtonStyle}" Margin="0,0,8,0" />
|
||||
<Button x:Name="BtnShrinkDb" Content="DB 축소" Style="{StaticResource SecondaryButtonStyle}" />
|
||||
</StackPanel>
|
||||
</DockPanel>
|
||||
|
||||
<Border Grid.Row="1" Style="{StaticResource ModernCardStyle}" Margin="0" Padding="0">
|
||||
<DataGrid x:Name="SqlDbGrid" Style="{StaticResource ModernDataGridStyle}">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="데이터베이스명" Binding="{Binding DatabaseName}" Width="160" />
|
||||
<DataGridTextColumn Header="상태" Binding="{Binding StateDesc}" Width="90" />
|
||||
<DataGridTextColumn Header="전체 크기" Binding="{Binding TotalSizeMB}" Width="100" />
|
||||
<DataGridTextColumn Header="여유 공간" Binding="{Binding FreeSpaceMB}" Width="100" />
|
||||
<DataGridTextColumn Header="복구 모델" Binding="{Binding RecoveryModel}" Width="100" />
|
||||
<DataGridTextColumn Header="데이터 정렬 (Collation)" Binding="{Binding CollationName}" Width="170" />
|
||||
<DataGridTextColumn Header="최근 Full 백업 일시" Binding="{Binding LastBackupDate}" Width="*" />
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<!-- Database Properties & Quick Query Panel -->
|
||||
<Border Grid.Column="1" Style="{StaticResource ModernCardStyle}">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel>
|
||||
<TextBlock Text="선택 DB 상세 및 빠른 쿼리" FontSize="15" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,0,0,14" />
|
||||
|
||||
<!-- Selected DB Box -->
|
||||
<Border Background="#121A27" CornerRadius="8" Padding="12" Margin="0,0,0,14">
|
||||
<StackPanel>
|
||||
<TextBlock x:Name="TxtSelectedDbName" Text="ERP_PRODUCTION" FontSize="16" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" />
|
||||
<TextBlock Text="호환성 수준: 160 (SQL 2022) | 다중 사용자 모드" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,3,0,0" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<TextBlock Text="스토리지 파일 정보" FontSize="13" FontWeight="SemiBold" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,6" />
|
||||
<Grid Margin="0,3">
|
||||
<TextBlock Text="MDF (데이터):" Foreground="{StaticResource TextSecondaryBrush}" FontSize="12" />
|
||||
<TextBlock Text="48,250 MB" Foreground="{StaticResource TextPrimaryBrush}" FontSize="12" HorizontalAlignment="Right" />
|
||||
</Grid>
|
||||
<Grid Margin="0,3">
|
||||
<TextBlock Text="LDF (로그):" Foreground="{StaticResource TextSecondaryBrush}" FontSize="12" />
|
||||
<TextBlock Text="8,120 MB" Foreground="{StaticResource TextPrimaryBrush}" FontSize="12" HorizontalAlignment="Right" />
|
||||
</Grid>
|
||||
|
||||
<Separator Background="{StaticResource CardBorderBrush}" Margin="0,12" />
|
||||
|
||||
<!-- Quick T-SQL Executor Console -->
|
||||
<TextBlock Text="T-SQL 간이 쿼리 실행" FontSize="13" FontWeight="SemiBold" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,6" />
|
||||
<TextBox x:Name="TxtSqlScript" Height="100" TextWrapping="Wrap" AcceptsReturn="True"
|
||||
Style="{StaticResource ModernTextBoxStyle}"
|
||||
FontFamily="Consolas" FontSize="12"
|
||||
Text="SELECT TOP 10 name, create_date FROM sys.tables ORDER BY create_date DESC;" />
|
||||
|
||||
<DockPanel Margin="0,8,0,0">
|
||||
<Button x:Name="BtnExecuteQuery" Content="▶ 쿼리 실행" Style="{StaticResource PrimaryButtonStyle}" HorizontalAlignment="Left" />
|
||||
<Button x:Name="BtnViewTables" Content="테이블 목록 조회" Style="{StaticResource SecondaryButtonStyle}" HorizontalAlignment="Right" />
|
||||
</DockPanel>
|
||||
|
||||
<!-- Mini Output Window -->
|
||||
<TextBlock Text="실행 결과:" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,10,0,4" />
|
||||
<Border Background="#090D16" CornerRadius="4" Padding="8" Height="90">
|
||||
<ScrollViewer>
|
||||
<TextBlock x:Name="TxtSqlOutput" Text="(10개 행 반환됨 - 0.012초 소요)" FontSize="11" Foreground="#A78BFA" FontFamily="Consolas" />
|
||||
</ScrollViewer>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<!-- Status Footer -->
|
||||
<Border Grid.Row="3" Margin="0,12,0,0">
|
||||
<DockPanel>
|
||||
<TextBlock x:Name="TxtSqlStatusMsg" Text="SQL 인스턴스 온라인 - 총 활성 세션: 34개" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" />
|
||||
<TextBlock x:Name="TxtSqlTotalCount" Text="총 16개 데이터베이스 감지됨" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" HorizontalAlignment="Right" />
|
||||
</DockPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
Reference in New Issue
Block a user