dbMango/Rms.Risk.Mango/Components/Commands/CmdListDatabases.razor
Alexander Shabarshov 2a7a24c9e7 Initial contribution
2025-11-03 14:43:26 +00:00

107 lines
3.1 KiB
Plaintext

@using Newtonsoft.Json.Linq
@using Rms.Risk.Mango.Components.JForms
@inherits CmdBase
@attribute [MongoCommand(CmdType.Read, "List databases", "Informational")]
@if (Parameters != null)
@*
* dbMango
*
* Copyright 2025 Deutsche Bank AG
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*@
{
<div class="@Class">
<div class="form-row">
<JFormCommand CommandTemplate="@CommandTemplate" Template="@_template" CommandChanged="@OnCommandChanged"/>
</div>
<div class="form-row">
<FormJson Value="@(Parameters?.CommandJson)" Class="cmd-json" />
</div>
<div class="form-row">
<TableControl Items="@GetParsedResult()" PageSize="35">
<TableColumnControl Field="Name" Name="Database Name" />
<TableColumnControl Field="Size" Name="Size on disk" Format="N0" />
<TableColumnControl Field="IsEmpty" Name="Empty" />
</TableControl>
<FormJson Value="@Result" Class="res-json"/>
</div>
</div>
}
@code {
private readonly TemplateRec _template = new()
{
Parameters =
[
]
};
protected override string CommandTemplate => @"{
""listDatabases"" : 1
}";
private class ResultItem
{
public string Name { get; set; } = string.Empty;
public long Size { get; set; }
public bool IsEmpty { get; set; }
}
protected override void OnAfterRender(bool firstRender)
{
if (!firstRender)
return;
if (Parameters != null)
{
Parameters.RequiredConnectionType = CommandParams.DatabaseConnectionType.Admin;
Parameters.NeedConfirmation = false;
}
}
private IReadOnlyCollection<dynamic> GetParsedResult()
{
var list = new List<ResultItem>();
if (Result == null)
return list;
var res = JsonUtils.FromJson<JToken>(Result);
if (res == null)
return list;
var databases = res["databases"]?.Value<JArray>();
if (databases == null)
return list;
foreach (var doc in databases)
{
var name = doc["name"]?.Value<string>() ?? "???";
var size = doc["sizeOnDisk"]?.Value<long>() ?? 0L;
var isEmpty = doc["empty"]?.Value<bool>() ?? true;
list.Add(new()
{
Name = name,
Size = size,
IsEmpty = isEmpty
});
}
return list;
}
}