199 lines
13 KiB
XML
199 lines
13 KiB
XML
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
Background="{StaticResource BgDarkBrush}">
|
|
<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>
|