MDK Logo

Alerts and monitoring

Components for displaying alerts, incidents, and system monitoring status

Alerts and monitoring

Components for displaying active alerts, incidents, and system monitoring status in Bitcoin mining operations dashboards.

Prerequisites

Before using these components, complete the @mdk/foundation installation and add the dependency.

ActiveIncidentsCard

Dashboard card showing current alerts and incidents with severity indicators.

Import

import { ActiveIncidentsCard } from '@mdk/foundation'

Props

PropTypeDefaultDescription
labelstring'Active Alerts'Card header label
itemsTIncidentRowProps[][]Array of incident items to display
isLoadingbooleanfalseShow skeleton loading state
skeletonRowsnumber4Number of skeleton rows when loading
emptyMessagestringnoneMessage when no incidents
onItemClick(id: string) => voidnoneCallback when incident row is clicked
classNamestringnoneAdditional CSS class

TIncidentRowProps

Each incident item requires these properties:

PropTypeDescription
idstringUnique incident identifier
titlestringIncident title
subtitlestringSecondary text (e.g., timestamp)
bodystringIncident description
severity'critical' | 'high' | 'medium'Severity level

Basic usage

<ActiveIncidentsCard
  items={[
    {
      id: '1',
      title: 'High Temperature Alert',
      subtitle: '2 minutes ago',
      body: 'Container A3 exceeds 85°C threshold',
      severity: 'critical',
    },
    {
      id: '2',
      title: 'Hashrate Drop',
      subtitle: '15 minutes ago',
      body: 'Miner M-042 hashrate below 90 TH/s',
      severity: 'high',
    },
  ]}
  onItemClick={(id) => console.log('Clicked:', id)}
/>

Loading state

<ActiveIncidentsCard isLoading skeletonRows={3} />

Empty state

<ActiveIncidentsCard
  items={[]}
  emptyMessage="No active incidents"
/>

Styling

  • .mdk-active-incidents-card: Root element
  • .mdk-active-incidents-card__header: Header container
  • .mdk-active-incidents-card__label: Header label text
  • .mdk-active-incidents-card__list: Incidents list container
  • .mdk-active-incidents-card__row: Individual incident row
  • .mdk-active-incidents-card__row--clickable: Clickable row modifier
  • .mdk-active-incidents-card__row-title: Incident title
  • .mdk-active-incidents-card__row-subtitle: Incident subtitle
  • .mdk-active-incidents-card__row-body: Incident body text
  • .mdk-active-incidents-card__empty: Empty state container
  • .mdk-active-incidents-card__skeleton-container: Loading skeleton container

AlarmRow

Individual alarm display with color-coded severity indicator and status icon.

Import

import { AlarmRow } from '@mdk/foundation'

Props

PropTypeDefaultDescription
dataTimelineItemDatarequiredAlarm data object
onNavigate(path: string) => voidrequiredNavigation handler when row is clicked

TimelineItemData type

type AlarmItemData = {
  title: string
  subtitle: string
  body: string
  uuid?: string
  status: string  // Determines color and icon
}

type TimelineItemData = {
  item: AlarmItemData
  dot: ReactNode
  children: ReactNode
}

Basic usage

<AlarmRow
  data={{
    item: {
      title: 'Temperature Warning',
      subtitle: 'Container A1',
      body: 'Board temp exceeds 80°C',
      uuid: 'alert-001',
      status: 'warning',
    },
    dot: null,
    children: null,
  }}
  onNavigate={(path) => router.push(path)}
/>

Styling

  • .mdk-alarm-row: Root element (uses --mdk-alarm-color CSS variable)
  • .mdk-alarm-row__container: Clickable container
  • .mdk-alarm-row__title-row: Title and icon row
  • .mdk-alarm-row__title: Alarm title
  • .mdk-alarm-row__subtitle: Alarm subtitle
  • .mdk-alarm-row__body: Alarm body text (supports | delimiter for line breaks)

AlarmContents

Container component that renders a list of alarms with empty state handling.

Import

import { AlarmContents } from '@mdk/foundation'

Props

PropTypeDefaultDescription
alarmsDataTimelineItemData[]requiredArray of alarm data objects
onNavigate(path: string) => voidrequiredNavigation handler passed to each AlarmRow

Basic usage

<AlarmContents
  alarmsData={[
    {
      item: {
        title: 'Critical Alert',
        subtitle: 'Miner M-042',
        body: 'Hashboard failure detected',
        uuid: 'alert-001',
        status: 'critical',
      },
      dot: null,
      children: null,
    },
    {
      item: {
        title: 'Warning',
        subtitle: 'Container B2',
        body: 'Fan speed below threshold',
        uuid: 'alert-002',
        status: 'warning',
      },
      dot: null,
      children: null,
    },
  ]}
  onNavigate={(path) => router.push(path)}
/>

Empty state

When alarmsData is empty or undefined, displays "No active alarm or event":

<AlarmContents alarmsData={[]} onNavigate={handleNavigate} />

Styling

  • .mdk-alarm-contents: Root element
  • .mdk-alarm-contents__list: List container for AlarmRow components
  • .mdk-alarm-contents__fallback: Fallback content container

On this page