Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
eecad2c
PMM-14911 Create a POC for alerts page
matejkubinec Apr 16, 2026
43ffad8
PMM-14995 Update existing PMM branding assets and styles
freenandes Apr 24, 2026
cde77fd
PMM-14995 Bump percona-ui library
matejkubinec Apr 27, 2026
218fe32
PMM-14995 Update favicon
matejkubinec Apr 27, 2026
1364cf1
Merge branch 'v3' into PMM-14995-Update_existing_PMM_assets_and_styles
matejkubinec Apr 27, 2026
a0b86a0
Remove stray node_modules symlink
freenandes Apr 27, 2026
2dd1db0
Merge branch 'v3' into PMM-14995-Update_existing_PMM_assets_and_styles
fabio-silva Apr 28, 2026
9e4deb1
feat: improve presentation
matejkubinec Apr 30, 2026
cfa11fb
feat: add details pane & rework
matejkubinec Apr 30, 2026
5c3b8d7
feat: small ui changes & bump package
matejkubinec Apr 30, 2026
bd60ea4
fix: remove unused import
matejkubinec Apr 30, 2026
dffba61
Merge branch 'v3' into PMM-14911-alerts-page
matejkubinec Apr 30, 2026
6e595f4
Merge branch 'v3' into PMM-14995-Update_existing_PMM_assets_and_styles
matejkubinec Apr 30, 2026
714c3a9
Merge branch 'PMM-14995-Update_existing_PMM_assets_and_styles' of git…
matejkubinec Apr 30, 2026
7641389
Merge branch 'PMM-14911-alerts-page' of github.com:percona/pmm into P…
matejkubinec Apr 30, 2026
ee7fa0a
Merge branch 'v3' into PMM-14911-alerts-page
matejkubinec May 5, 2026
9d718df
Merge branch 'v3' into PMM-14911-alerts-page
matejkubinec May 6, 2026
59fc289
Merge branch 'v3' into PMM-14911-alerts-page
matejkubinec May 7, 2026
c4c29cc
Merge branch 'v3'
matejkubinec May 19, 2026
26b96aa
feat: add value to details view, improve styling
matejkubinec May 19, 2026
a326132
Merge branch 'v3' into PMM-14911-alerts-page
matejkubinec May 20, 2026
f5b368a
Merge branch 'v3' into PMM-14911-alerts-page
matejkubinec May 27, 2026
036dcdb
Fix linkspector GitHub Actions failure by provisioning Chrome for Lin…
catalinaadam May 27, 2026
742b31f
PMM-14894 Valkey cluster messages panel use message rate (#5318)
theTibi May 27, 2026
52d26cc
PMM-15046 Move NavItem component to percona-ui and fix PMM sidebar in…
pmcf-percona May 28, 2026
deb3b22
deps: bump ui library
matejkubinec May 28, 2026
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
7 changes: 7 additions & 0 deletions .github/workflows/linkspector.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,13 @@ jobs:
with:
ref: ${{ github.event.inputs.ref || github.ref }}

- name: Install Chrome for linkspector
id: setup-chrome
uses: browser-actions/setup-chrome@c785b87e244131f27c9f19c1a33e2ead956ab7ce # v1.7.3

- name: Configure Chrome path for puppeteer
run: echo "PUPPETEER_EXECUTABLE_PATH=${{ steps.setup-chrome.outputs.chrome-path }}" >> "$GITHUB_ENV"

- name: Run linkspector
uses: umbrelladocs/action-linkspector@963b6264d7de32c904942a70b488d3407453049e # v1.5.1
with:
Expand Down
11 changes: 6 additions & 5 deletions dashboards/dashboards/Valkey/Valkey_ClusterDetails.json
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@
},
{
"datasource": "Metrics",
"description": "Shows how many cluster communication messages are being sent and received over time. High message rates can indicate cluster instability or frequent topology changes.",
"description": "Cluster control-bus traffic as a rate (messages per second). High sustained rates can indicate instability or frequent topology changes. Raw counters are not shown.",
"fieldConfig": {
"defaults": {
"color": {
Expand All @@ -262,7 +262,7 @@
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisLabel": "messages / s",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
Expand Down Expand Up @@ -303,7 +303,8 @@
"value": 80
}
]
}
},
"unit": "ops"
},
"overrides": []
},
Expand Down Expand Up @@ -338,15 +339,15 @@
{
"datasource": "Metrics",
"editorMode": "code",
"expr": "redis_cluster_messages_sent_total{service_name=~\"$service_name\"}",
"expr": "rate(redis_cluster_messages_sent_total{service_name=~\"$service_name\"}[$__rate_interval])",
"legendFormat": "Sent - {{service_name}}",
"range": true,
"refId": "A"
},
{
"datasource": "Metrics",
"editorMode": "code",
"expr": "redis_cluster_messages_received_total{service_name=~\"$service_name\"}",
"expr": "rate(redis_cluster_messages_received_total{service_name=~\"$service_name\"}[$__rate_interval])",
"hide": false,
"legendFormat": "Received - {{service_name}}",
"range": true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ The following table lists all the PMM client/server components and their version
|-----------------------------|----------|---------------|------------------|
| Grafana | 11.6.13* | [Grafana documentation](https://grafana.com/docs/grafana/latest/)|[Github Grafana](https://github.com/percona-platform/grafana)|
| VictoriaMetrics| v1.140.0 | [VictoriaMetrics documentation](https://docs.victoriametrics.com/)|[Github VictoriaMetrics](https://github.com/VictoriaMetrics/VictoriaMetrics) |
| Nginx | 1.20.1 | [Nginx documentation](http://nginx.org/en/docs/)|[Github Nginx](https://github.com/nginx/nginx) |
| Nginx | 1.26.3 | [Nginx documentation](http://nginx.org/en/docs/)|[Github Nginx](https://github.com/nginx/nginx) |
| Percona Distribution for PostgreSQL | 14.5 | [Percona Distribution for PostgreSQL 14 documentation](https://www.percona.com/doc/postgresql/LATEST/index.html)| |
| ClickHouse| 25.3.6.56 |[ClickHouse documentation](https://clickhouse.com/docs/en/)|[Github ClickHouse](https://github.com/ClickHouse/ClickHouse)|
| PerconaToolkit | 3.5.2 | [Percona Toolkit documentation](https://www.percona.com/doc/percona-toolkit/3.0/index.html)|[Github Percona Toolkit](https://github.com/percona/percona-toolkit)|
Expand Down
2 changes: 1 addition & 1 deletion ui/apps/pmm/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"@mui/icons-material": "^7.3.7",
"@mui/material": "^7.3.7",
"@mui/x-date-pickers": "^7.5.0",
"@percona/percona-ui": "1.0.16",
"@percona/percona-ui": "1.0.18",
"@pmm/shared": "*",
"@reactour/tour": "^3.8.0",
"@tanstack/react-query": "^5.45.1",
Expand Down
9 changes: 9 additions & 0 deletions ui/apps/pmm/src/api/alerting.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { PrometheusAlertRulesResponse } from 'types/alerting.types';
import { grafanaApi } from './api';

export const getPrometheusAlertRules = async () => {
const response = await grafanaApi.get<PrometheusAlertRulesResponse>(
'/prometheus/grafana/api/v1/rules'
);
return response.data;
};
4 changes: 2 additions & 2 deletions ui/apps/pmm/src/components/sidebar/Sidebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { FC, useCallback, useEffect, useState } from 'react';
import { useNavigation } from 'contexts/navigation';
import { NavigationHeading } from './nav-heading';
import { Drawer } from './drawer';
import { NavItem } from './nav-item';
import { SidebarNavItem } from './nav-item';
import List from '@mui/material/List';
import useMediaQuery from '@mui/material/useMediaQuery';
import { useTheme } from '@mui/material/styles';
Expand Down Expand Up @@ -69,7 +69,7 @@ export const Sidebar: FC = () => {
]}
>
{navTree.map((item) => (
<NavItem
<SidebarNavItem
key={item.id}
item={item}
activeItem={activeItem}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
import { listItemIconClasses } from '@mui/material/ListItemIcon';
import { listItemTextClasses } from '@mui/material/ListItemText';
import { typographyClasses } from '@mui/material/Typography';
import { Theme } from '@mui/material';

export const getStyles = (
theme: Theme,
active: boolean,
drawerOpen: boolean,
level: number
) => ({
Expand All @@ -16,71 +13,33 @@ export const getStyles = (
? {
mr: level > 0 ? 1 : 0,
}
: {
py: 1.5,
},
: {},
navItemRootCollapsible: {
borderTopLeftRadius: 0,
borderBottomLeftRadius: 0,
},
listItemButton: {
px: 2,
height: 48,
borderRadius: 50,
justifyContent: drawerOpen ? undefined : 'center',

[`.${typographyClasses.root}`]: {
fontWeight: 600,
},

[`&, .${listItemIconClasses.root}`]: {
color: active ? theme.palette.primary.main : theme.palette.text.primary,
},
},
listItemButtonCollapsible: {
backgroundColor: active
? theme.components?.MuiListItemButton?.styleOverrides?.selected
: 'initial',
},
listCollapsible:
level === 0
? {
pl: 4,
pl: 4.75,
pb: 2,
}
: level === 1
? {
ml: 2.5,
pl: '11px',
pb: 2,
ml: 3.5,
pl: 1,
borderLeft: 1,
borderColor: theme.palette.divider,
}
: {},
listItemIcon: {
minWidth: 'auto',
},
listItemDivider: {
px: drawerOpen ? 2 : 1,
},
divider: {
flex: 1,
},
text: {
pl: 2,

[`&:hover .${listItemTextClasses.secondary}`]: {
color: 'inherit',
},

[`.${listItemTextClasses.secondary}`]: {
...theme.typography.helperText,
textOverflow: 'ellipsis',
whiteSpace: 'nowrap',
overflow: 'hidden',

color: active ? 'inherit' : theme.palette.text.disabled,
},
listItemButton: {
px: 2,
},
textOnly: {
m: 0,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { fireEvent, render, screen } from '@testing-library/react';
import { wrapWithRouter } from 'utils/testUtils';
import NavItem from './NavItem';
import { NavItemProps } from './NavItem.types';
import SidebarNavItem from './SidebarNavItem';
import { NavItemProps } from './SidebarNavItem.types';
import { NavItem as NavTreeItem } from 'types/navigation.types';
import { collapseClasses } from '@mui/material/Collapse';
import { MemoryRouterProps } from 'react-router-dom';
import { ThemeContextProvider, pmmThemeOptions } from '@percona/percona-ui';

const TEST_NAV_TREE: NavTreeItem = {
id: 'level-0',
Expand Down Expand Up @@ -44,19 +45,21 @@ const renderNavItem = ({
activeItem?: NavTreeItem;
} = {}) =>
render(
wrapWithRouter(
<NavItem
activeItem={activeItem}
item={TEST_NAV_TREE}
drawerOpen={true}
level={0}
{...props}
/>,
routerProps
)
<ThemeContextProvider themeOptions={pmmThemeOptions}>
{wrapWithRouter(
<SidebarNavItem
activeItem={activeItem}
item={TEST_NAV_TREE}
drawerOpen={true}
level={0}
{...props}
/>,
routerProps
)}
</ThemeContextProvider>
);

describe('NavItem', () => {
describe('SidebarNavItem', () => {
it('inner levels are closed by default', () => {
renderNavItem();

Expand Down Expand Up @@ -157,14 +160,14 @@ describe('NavItem', () => {
},
],
};
renderNavItem({
const { container } = renderNavItem({
activeItem: item,
props: { item },
});

fireEvent.click(screen.getByTestId('navitem-with-badge-toggle'));

expect(screen.getByTestId('navitem-dot')).toBeInTheDocument();
expect(container.querySelector('.MuiBadge-dot')).toBeInTheDocument();
});

it('renders divider if item has type "menu-divider"', () => {
Expand Down
Loading