Skip to main content
The Overview components provide dashboard views, statistics displays, and module interfaces for visualizing Wazuh data.

Overview

Main overview dashboard component with module navigation. Location: plugins/main/public/components/overview/overview.tsx:31

Usage

import React from 'react';
import { Overview } from '../components/overview/overview';

function App() {
  return <Overview />;
}
The Overview component is a routed component that handles:
  • Welcome screen display
  • Module dashboards (Security Events, FIM, Vulnerabilities, etc.)
  • Agent selection and filtering
  • Query state management

Query Parameters

The component responds to URL query parameters:
tab
string
Active module tabPossible values:
  • "welcome" - Welcome dashboard
  • "general" - Security events
  • "fim" - File integrity monitoring
  • "vulnerability" - Vulnerability detection
  • "mitre" - MITRE ATT&CK
  • "virustotal" - VirusTotal integration
  • "osquery" - Osquery
  • "docker" - Docker monitoring
  • And more module-specific tabs
tabView
string
default:"dashboard"
View mode for the selected tabPossible values:
  • "dashboard" - Dashboard view
  • "events" - Events table view
  • "panels" - Custom panels view
agentId
string
Filter data by specific agent ID

Example URLs

# Welcome dashboard
/app/wazuh#/overview?tab=welcome

# Security events for specific agent
/app/wazuh#/overview?tab=general&agentId=001

# FIM events view
/app/wazuh#/overview?tab=fim&tabView=events

Stats

Statistics summary component for the overview dashboard. Location: plugins/main/public/controllers/overview/components/stats.tsx

Props

agentData
object
required
Agent summary data

Usage

import React, { useEffect, useState } from 'react';
import { Stats } from '../controllers/overview/components/stats';
import { WzRequest } from '../react-services';

function OverviewStats() {
  const [agentData, setAgentData] = useState(null);
  
  useEffect(() => {
    const fetchStats = async () => {
      const response = await WzRequest.apiReq(
        'GET',
        '/agents/summary/status',
        {}
      );
      setAgentData(response.data.data.connection);
    };
    fetchStats();
  }, []);
  
  return agentData ? <Stats agentData={agentData} /> : null;
}

OverviewWelcome

Welcome screen component with module cards and quick actions. Location: plugins/main/public/components/common/welcome/overview-welcome.tsx

Props

agentData
object
Agent summary statistics

Usage

import React from 'react';
import { OverviewWelcome } from '../components/common/welcome/overview-welcome';

function WelcomeDashboard({ agentStats }) {
  return <OverviewWelcome agentData={agentStats} />;
}
The component displays:
  • Agent status summary cards
  • Module navigation cards
  • Quick action buttons
  • Getting started information

MainModule

Module dashboard container with filters and visualizations. Location: plugins/main/public/components/common/modules/main.tsx

Props

section
string
required
Module identifier (e.g., “general”, “fim”, “vulnerability”)
agentId
string
Filter by specific agent
tabView
string
default:"dashboard"
Active view mode

Usage

import React from 'react';
import { MainModule } from '../components/common/modules/main';

function SecurityEventsModule({ agentId }) {
  return (
    <MainModule
      section="general"
      agentId={agentId}
      tabView="dashboard"
    />
  );
}

WzCurrentOverviewSectionWrapper

Wrapper component that manages the current overview section context. Location: plugins/main/public/components/common/modules/overview-current-section-wrapper.tsx

Props

section
string
required
Current module section
children
React.ReactNode
required
Child components

Usage

import React from 'react';
import { WzCurrentOverviewSectionWrapper } from '../components/common/modules/overview-current-section-wrapper';

function ModuleView({ section }) {
  return (
    <WzCurrentOverviewSectionWrapper section={section}>
      {/* Module content */}
    </WzCurrentOverviewSectionWrapper>
  );
}

Module-Specific Components

Security Events

EventsTable

Displays security events in a data table. Props:
filters
object
Search filters to apply
agentId
string
Filter by agent ID
timeRange
object
Time range for events
Usage:
import React from 'react';
import { EventsTable } from '../components/overview/events-table';

function SecurityEvents() {
  const timeRange = {
    from: 'now-24h',
    to: 'now'
  };
  
  return (
    <EventsTable
      filters={{}}
      timeRange={timeRange}
    />
  );
}

Vulnerability Detection

VulnerabilityDashboard

Displays vulnerability detection statistics and findings. Props:
agentId
string
Filter vulnerabilities by agent
Usage:
import React from 'react';
import { VulnerabilityDashboard } from '../components/overview/vulnerability';

function VulnModule({ agentId }) {
  return <VulnerabilityDashboard agentId={agentId} />;
}

File Integrity Monitoring

FIMDashboard

Displays FIM events and statistics. Props:
agentId
string
Filter FIM events by agent
Usage:
import React from 'react';
import { FIMDashboard } from '../components/overview/fim';

function FIMModule({ agentId }) {
  return <FIMDashboard agentId={agentId} />;
}

Chart Components

WzVisualize

Wrapper for rendering Wazuh visualizations. Location: plugins/main/public/components/common/charts/wz-visualize.tsx

Props

visualizationId
string
required
Saved object ID of the visualization
filters
object
Additional filters to apply
timeRange
object
Time range for the visualization

Usage

import React from 'react';
import { WzVisualize } from '../components/common/charts/wz-visualize';

function CustomChart() {
  return (
    <WzVisualize
      visualizationId="Wazuh-App-Overview-General-Alerts"
      filters={{}}
      timeRange={{ from: 'now-24h', to: 'now' }}
    />
  );
}

Dashboard Components

DashboardByRenderer

Renders OpenSearch Dashboards dashboards within Wazuh. Location: plugins/main/public/components/common/dashboards/dashboard-by-renderer.tsx

Props

dashboardId
string
required
Dashboard saved object ID
filters
object
Dashboard filters
query
object
Search query

Usage

import React from 'react';
import { DashboardByRenderer } from '../components/common/dashboards/dashboard-by-renderer';

function EmbeddedDashboard() {
  return (
    <DashboardByRenderer
      dashboardId="Wazuh-App-Overview-General"
      filters={[]}
    />
  );
}

Complete Example

Full overview module implementation:
import React, { useEffect, useState } from 'react';
import {
  EuiPage,
  EuiPageBody,
  EuiPageContent,
  EuiFlexGroup,
  EuiFlexItem,
  EuiPanel,
  EuiSpacer,
} from '@elastic/eui';
import { Stats } from '../controllers/overview/components/stats';
import { OverviewWelcome } from '../components/common/welcome/overview-welcome';
import { MainModule } from '../components/common/modules/main';
import { WzCurrentOverviewSectionWrapper } from '../components/common/modules/overview-current-section-wrapper';
import { WzRequest } from '../react-services';
import { useRouterSearch } from '../components/common/hooks';

function CustomOverview() {
  const [agentData, setAgentData] = useState(null);
  const { tab = 'welcome', tabView = 'dashboard', agentId } = useRouterSearch();
  
  useEffect(() => {
    const fetchAgentStats = async () => {
      try {
        const response = await WzRequest.apiReq(
          'GET',
          '/agents/summary/status',
          {}
        );
        setAgentData(response.data.data.connection);
      } catch (error) {
        console.error('Failed to fetch agent stats:', error);
      }
    };
    
    if (tab === 'welcome') {
      fetchAgentStats();
    }
  }, [tab]);
  
  const renderContent = () => {
    if (tab === 'welcome') {
      return (
        <>
          {agentData && (
            <>
              <Stats agentData={agentData} />
              <EuiSpacer size="l" />
            </>
          )}
          <OverviewWelcome agentData={agentData} />
        </>
      );
    }
    
    return (
      <WzCurrentOverviewSectionWrapper section={tab}>
        <MainModule
          section={tab}
          agentId={agentId}
          tabView={tabView}
        />
      </WzCurrentOverviewSectionWrapper>
    );
  };
  
  return (
    <EuiPage>
      <EuiPageBody>
        <EuiPageContent>
          {renderContent()}
        </EuiPageContent>
      </EuiPageBody>
    </EuiPage>
  );
}

export default CustomOverview;

Available Modules

The Overview component supports these modules:

Security Events

General security events and alerts

FIM

File Integrity Monitoring

Vulnerabilities

Vulnerability detection findings

MITRE ATT&CK

MITRE framework mapping

SCA

Security Configuration Assessment

PCI DSS

PCI DSS compliance

GDPR

GDPR compliance

TSC

TSC compliance

NIST

NIST framework

Hooks

useRouterSearch()

Hook to access URL query parameters. Returns: Object with query parameters
import { useRouterSearch } from '../components/common/hooks';

function MyComponent() {
  const { tab, agentId, tabView } = useRouterSearch();
  
  // Use query params
}

useAsyncAction()

Hook for managing async operations with loading and error states. Signature:
function useAsyncAction<T>(
  action: () => Promise<T>,
  dependencies: any[]
): {
  run: () => Promise<void>;
  loading: boolean;
  error: Error | null;
  data: T | null;
}
Usage:
import { useAsyncAction } from '../components/common/hooks';

function DataLoader() {
  const action = useAsyncAction(async () => {
    const response = await WzRequest.apiReq('GET', '/agents', {});
    return response.data.data.affected_items;
  }, []);
  
  useEffect(() => {
    action.run();
  }, []);
  
  if (action.loading) return <div>Loading...</div>;
  if (action.error) return <div>Error: {action.error.message}</div>;
  
  return <div>Data: {JSON.stringify(action.data)}</div>;
}

Best Practices

Store dashboard state in URL parameters for bookmarkability:
// Navigate to a module
NavigationService.getInstance().navigate(
  `/overview?tab=fim&agentId=001`
);
Keep search bar state synchronized with URL:
import { syncQueryStateWithUrl } from 'data/public';

useEffect(() => {
  const { stop } = syncQueryStateWithUrl(
    queryService.state$,
    osdUrlStateStorage
  );
  return stop;
}, []);
Update URL when agent selection changes:
const handleAgentChange = (agentId: string) => {
  NavigationService.getInstance().navigate(
    `/overview?tab=${tab}&agentId=${agentId}`
  );
};

Agents Components

Agent management components

Main Plugin

Core plugin API

Dashboards

Creating custom dashboards

Modules

Module development guide

Build docs developers (and LLMs) love