mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* move Panel JSON to inspector * move Panel JSON to inspector * update test * use stats display options * move query inspector to inspector * open inspector from the queries section * subscribe to results * subscribe to results * open the right tab * apply review feedback * update menus (inspect tabs) * Dashboard: extend dashnav to add custom content (#23433) * Dashlist: Fixed dashlist broken in edit mode (#23426) * Chore: Fix bunch of strict null error to fix master CI (#23443) * Fix bunch of null error * Fix failing test * Another test fix * Docs: Add SQL region annotation examples (#23268) Add region annotation examples for SQL data sources in docs. Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com> * Docs: Update contributing doc to install node@12. (#23450) * NewPanelEdit: Minor style and description tweaks, AND PanelQueryRunner & autoMinMax (#23445) * NewPanelEdit: Minor style and description tweaks * Removed the worst snapshot of all time * ReactTable: adds color text to field options (#23427) * Feature: adds text color field config * Refactor: created an extension point * Refactor: uses HOC for extension instead * Fix: fixes background styling from affecting cells without display.color * Chore: export OptionsUIRegistryBuilder on grafana/data (#23444) * export the ui registry * add to utils index also * DataLinks: Do not full page reload data links links (#23429) * Templating: Fix global variable "__org.id" (#23362) * Fixed global variable __org.id value * correct orgId value * reverted the change as variables moved to new file * Chore: reduce null check errors to 788 (currently over 798) (#23449) * Fixed ts errors so build will succeed * Update packages/grafana-data/src/types/graph.ts Co-Authored-By: Ryan McKinley <ryantxu@gmail.com> * Feedback from code review * Leaving out trivial typing's * Fix error with color being undefined now. * fix test with timezone issue * Fixed test Co-authored-by: Ryan McKinley <ryantxu@gmail.com> Co-authored-by: Torkel Ödegaard <torkel@grafana.com> * Cloudwatch: prefer webIdentity over EC2 role (#23452) * Plugins: add a signature status flag (#23420) * Progress * fixed button * Final touches * now works from edit mode * fix layout * show raw objects * move query inspector buttons to the bottom * update snapshot * Updated design * Made full page reload work * Fixed minor style issue * Updated * More fixes * Removed unused imports * Updated * Moved to data tab out to seperate component * fixed ts issue Co-authored-by: Torkel Ödegaard <torkel@grafana.com> Co-authored-by: Agnès Toulet <35176601+AgnesToulet@users.noreply.github.com> Co-authored-by: Andrej Ocenas <mr.ocenas@gmail.com> Co-authored-by: Alexandre de Verteuil <alexandre@grafana.com> Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com> Co-authored-by: Cyril Tovena <cyril.tovena@gmail.com> Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com> Co-authored-by: Vikky Omkar <vikkyomkar@gmail.com> Co-authored-by: Stephanie Closson <srclosson@gmail.com> Co-authored-by: Dário Nascimento <dfrnascimento@gmail.com>
98 lines
2.7 KiB
TypeScript
98 lines
2.7 KiB
TypeScript
import React, { FC } from 'react';
|
|
import { css } from 'emotion';
|
|
import { stylesFactory, Tab, TabsBar, useTheme, IconButton } from '@grafana/ui';
|
|
import { GrafanaTheme, SelectableValue, PanelData, getValueFormat, formattedValueToString } from '@grafana/data';
|
|
import { InspectTab } from './PanelInspector';
|
|
import { PanelModel } from '../../state';
|
|
|
|
interface Props {
|
|
tab: InspectTab;
|
|
tabs: Array<{ label: string; value: InspectTab }>;
|
|
panelData: PanelData;
|
|
panel: PanelModel;
|
|
isExpanded: boolean;
|
|
onSelectTab: (tab: SelectableValue<InspectTab>) => void;
|
|
onClose: () => void;
|
|
onToggleExpand: () => void;
|
|
}
|
|
|
|
export const InspectHeader: FC<Props> = ({
|
|
tab,
|
|
tabs,
|
|
onSelectTab,
|
|
onClose,
|
|
onToggleExpand,
|
|
panel,
|
|
panelData,
|
|
isExpanded,
|
|
}) => {
|
|
const theme = useTheme();
|
|
const styles = getStyles(theme);
|
|
|
|
return (
|
|
<div className={styles.header}>
|
|
<div className={styles.actions}>
|
|
{!isExpanded && <IconButton name="angle-left" size="xl" onClick={onToggleExpand} surface="header" />}
|
|
{isExpanded && <IconButton name="angle-right" size="xl" onClick={onToggleExpand} surface="header" />}
|
|
<IconButton name="times" size="xl" onClick={onClose} surface="header" />
|
|
</div>
|
|
<div className={styles.titleWrapper}>
|
|
<h3>{panel.title || 'Panel inspect'}</h3>
|
|
<div className="muted">{formatStats(panelData)}</div>
|
|
</div>
|
|
<TabsBar className={styles.tabsBar}>
|
|
{tabs.map((t, index) => {
|
|
return (
|
|
<Tab
|
|
key={`${t.value}-${index}`}
|
|
label={t.label}
|
|
active={t.value === tab}
|
|
onChangeTab={() => onSelectTab(t)}
|
|
/>
|
|
);
|
|
})}
|
|
</TabsBar>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
const getStyles = stylesFactory((theme: GrafanaTheme) => {
|
|
const headerBackground = theme.colors.bg2;
|
|
|
|
return {
|
|
header: css`
|
|
background-color: ${headerBackground};
|
|
z-index: 1;
|
|
flex-grow: 0;
|
|
padding-top: ${theme.spacing.sm};
|
|
`,
|
|
actions: css`
|
|
position: absolute;
|
|
display: flex;
|
|
align-items: baseline;
|
|
justify-content: space-between;
|
|
right: ${theme.spacing.sm};
|
|
`,
|
|
tabsBar: css`
|
|
padding-left: ${theme.spacing.md};
|
|
`,
|
|
titleWrapper: css`
|
|
margin-bottom: ${theme.spacing.lg};
|
|
padding: ${theme.spacing.sm} ${theme.spacing.sm} 0 ${theme.spacing.lg};
|
|
`,
|
|
};
|
|
});
|
|
|
|
function formatStats(panelData: PanelData) {
|
|
const { request } = panelData;
|
|
if (!request) {
|
|
return '';
|
|
}
|
|
|
|
const queryCount = request.targets.length;
|
|
const requestTime = request.endTime ? request.endTime - request.startTime : 0;
|
|
const formatted = formattedValueToString(getValueFormat('ms')(requestTime));
|
|
|
|
return `${queryCount} queries with total query time of ${formatted}`;
|
|
}
|