Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

733: render suspended and dirty states in DR monpage #735

Merged
merged 3 commits into from
Mar 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,9 @@ void TDiskAgentActor::RenderDevices(IOutputStream& out) const
DumpDeviceState(
out,
config.GetState(),
false,
State->IsDeviceDisabled(uuid));
State->IsDeviceDisabled(uuid)
? EDeviceStateFlags::DISABLED
: EDeviceStateFlags::NONE);
}
TABLED() {
if (config.GetStateTs()) {
Expand Down
17 changes: 11 additions & 6 deletions cloud/blockstore/libs/storage/disk_common/monitoring_utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,7 @@ IOutputStream& DumpDiskState(
IOutputStream& DumpDeviceState(
IOutputStream& out,
NProto::EDeviceState state,
bool isFresh,
bool isDisabled,
EDeviceStateFlags flags,
TString suffix)
{
switch (state) {
Expand All @@ -67,11 +66,17 @@ IOutputStream& DumpDeviceState(
<< static_cast<int>(state)
<< ")" << suffix;
}
if (isFresh) {
out << " [<font color=blue>Fresh</font>]";
if (flags & EDeviceStateFlags::FRESH) {
out << " [<font color=blue>fresh</font>]";
}
if (isDisabled) {
out << " [<font color=red>Disabled</font>]";
if (flags & EDeviceStateFlags::DISABLED) {
out << " [<font color=red>disabled</font>]";
}
if (flags & EDeviceStateFlags::DIRTY) {
out << " [<font color=DimGrey>dirty</font>]";
}
if (flags & EDeviceStateFlags::SUSPENDED) {
out << " [<font color=DarkCyan>suspended</font>]";
}
return out;
}
Expand Down
25 changes: 23 additions & 2 deletions cloud/blockstore/libs/storage/disk_common/monitoring_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,28 @@ namespace NCloud::NBlockStore::NStorage {

////////////////////////////////////////////////////////////////////////////////

enum EDeviceStateFlags : uint16_t
{
NONE = 0,
FRESH = 1 << 0,
DISABLED = 1 << 1,
DIRTY = 1 << 2,
SUSPENDED = 1 << 3,
};

inline EDeviceStateFlags operator|(EDeviceStateFlags a, EDeviceStateFlags b)
{
return static_cast<EDeviceStateFlags>(
static_cast<uint16_t>(a) | static_cast<uint16_t>(b));
}

inline EDeviceStateFlags& operator|=(EDeviceStateFlags& a, EDeviceStateFlags b)
{
return a = a | b;
}

////////////////////////////////////////////////////////////////////////////////

IOutputStream& DumpAgentState(
IOutputStream& out,
NProto::EAgentState state);
Expand All @@ -19,8 +41,7 @@ IOutputStream& DumpDiskState(
IOutputStream& DumpDeviceState(
IOutputStream& out,
NProto::EDeviceState state,
bool isFresh = false,
bool isDisabled = false,
EDeviceStateFlags flags = EDeviceStateFlags::NONE,
TString suffix = "");

} // namespace NCloud::NBlockStore::NStorage
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,20 @@ namespace {

////////////////////////////////////////////////////////////////////////////////

EDeviceStateFlags GetDeviceStateFlags(
const TDiskRegistryState& state,
const TString& deviceUUID)
{
EDeviceStateFlags deviceStateFlags = EDeviceStateFlags::NONE;
if (state.IsDirtyDevice(deviceUUID)) {
deviceStateFlags |= EDeviceStateFlags::DIRTY;
}
if (state.IsSuspendedDevice(deviceUUID)) {
deviceStateFlags |= EDeviceStateFlags::SUSPENDED;
}
return deviceStateFlags;
}

void BuildVolumeReallocateButton(
IOutputStream& out,
ui64 tabletId,
Expand Down Expand Up @@ -243,7 +257,14 @@ void TDiskRegistryActor::RenderDevicesWithDetails(
}
TABLED() { out << device.GetDeviceName(); }
TABLED() { out << device.GetSerialNumber(); }
TABLED() { DumpDeviceState(out, device.GetState()); }
TABLED() {
DumpDeviceState(
out,
device.GetState(),
GetDeviceStateFlags(
*State,
device.GetDeviceUUID()));
}
TABLED() {
out << TInstant::MicroSeconds(device.GetStateTs());
}
Expand Down Expand Up @@ -396,7 +417,13 @@ void TDiskRegistryActor::RenderDeviceHtmlInfo(
out << device.GetRack();
}

DIV() { out << "State: "; DumpDeviceState(out, device.GetState()); }
DIV() {
out << "State: ";
DumpDeviceState(
out,
device.GetState(),
GetDeviceStateFlags(*State, id));
}
DIV() {
out << "State Timestamp: "
<< TInstant::MicroSeconds(device.GetStateTs());
Expand Down Expand Up @@ -641,12 +668,16 @@ void TDiskRegistryActor::RenderDiskHtmlInfo(
}
}
TABLED() {
const bool isFresh =
FindPtr(
EDeviceStateFlags flags =
GetDeviceStateFlags(*State, device.GetDeviceUUID());
if (FindPtr(
info.MasterDiskId ? masterDiskInfo.DeviceReplacementIds
: info.DeviceReplacementIds,
device.GetDeviceUUID()) != nullptr;
DumpDeviceState(out, device.GetState(), isFresh);
device.GetDeviceUUID()) != nullptr)
{
flags |= EDeviceStateFlags::FRESH;
}
DumpDeviceState(out, device.GetState(), flags);
}
TABLED() {
out << TInstant::MicroSeconds(device.GetStateTs());
Expand Down Expand Up @@ -1731,25 +1762,22 @@ void TDiskRegistryActor::RenderAgentList(
DumpDeviceState(
out,
NProto::DEVICE_STATE_ONLINE,
false,
false,
EDeviceStateFlags::NONE,
TStringBuilder() << " " << onlineDevs);
if (warningDevs) {
out << " / ";
DumpDeviceState(
out,
NProto::DEVICE_STATE_WARNING,
false,
false,
EDeviceStateFlags::NONE,
TStringBuilder() << " " << warningDevs);
}
if (errorDevs) {
out << " / ";
DumpDeviceState(
out,
NProto::DEVICE_STATE_ERROR,
false,
false,
EDeviceStateFlags::NONE,
TStringBuilder() << " " << errorDevs);
}
}
Expand Down