mirror of
https://github.com/grafana/grafana.git
synced 2025-09-27 12:44:15 +08:00
changed how size is calcualted and propagated and added proper interval calc to DataPanel
This commit is contained in:
@ -26,6 +26,7 @@ export class Switch extends PureComponent<Props, State> {
|
||||
|
||||
render() {
|
||||
const { labelClass = '', switchClass = '', label, checked, small } = this.props;
|
||||
|
||||
const labelId = `check-${this.state.id}`;
|
||||
let labelClassName = `gf-form-label ${labelClass} pointer`;
|
||||
let switchClassName = `gf-form-switch ${switchClass}`;
|
||||
|
@ -176,6 +176,7 @@ export class DashboardGrid extends React.Component<DashboardGridProps, any> {
|
||||
|
||||
renderPanels() {
|
||||
const panelElements = [];
|
||||
console.log('render panels');
|
||||
|
||||
for (const panel of this.props.dashboard.panels) {
|
||||
const panelClasses = classNames({ panel: true, 'panel--fullscreen': panel.fullscreen });
|
||||
|
@ -4,6 +4,9 @@ import React, { Component } from 'react';
|
||||
// Services
|
||||
import { getDatasourceSrv } from 'app/features/plugins/datasource_srv';
|
||||
|
||||
// Utils
|
||||
import kbn from 'app/core/utils/kbn';
|
||||
|
||||
// Types
|
||||
import { TimeRange, LoadingState, DataQueryOptions, DataQueryResponse, TimeSeries } from 'app/types';
|
||||
|
||||
@ -21,6 +24,8 @@ export interface Props {
|
||||
timeRange?: TimeRange;
|
||||
widthPixels: number;
|
||||
refreshCounter: number;
|
||||
minInterval?: string;
|
||||
maxDataPoints?: number;
|
||||
children: (r: RenderProps) => JSX.Element;
|
||||
}
|
||||
|
||||
@ -52,7 +57,7 @@ export class DataPanel extends Component<Props, State> {
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
console.log('DataPanel mount');
|
||||
this.issueQueries();
|
||||
}
|
||||
|
||||
async componentDidUpdate(prevProps: Props) {
|
||||
@ -64,12 +69,11 @@ export class DataPanel extends Component<Props, State> {
|
||||
}
|
||||
|
||||
hasPropsChanged(prevProps: Props) {
|
||||
return this.props.refreshCounter !== prevProps.refreshCounter || this.props.isVisible !== prevProps.isVisible;
|
||||
return this.props.refreshCounter !== prevProps.refreshCounter;
|
||||
}
|
||||
|
||||
issueQueries = async () => {
|
||||
const { isVisible, queries, datasource, panelId, dashboardId, timeRange } = this.props;
|
||||
console.log('issueQueries', this.props);
|
||||
const { isVisible, queries, datasource, panelId, dashboardId, timeRange, widthPixels, maxDataPoints } = this.props;
|
||||
|
||||
if (!isVisible) {
|
||||
return;
|
||||
@ -84,16 +88,21 @@ export class DataPanel extends Component<Props, State> {
|
||||
|
||||
try {
|
||||
const ds = await this.dataSourceSrv.get(datasource);
|
||||
|
||||
// TODO interpolate variables
|
||||
const minInterval = this.props.minInterval || ds.interval;
|
||||
const intervalRes = kbn.calculateInterval(timeRange, widthPixels, minInterval);
|
||||
|
||||
const queryOptions: DataQueryOptions = {
|
||||
timezone: 'browser',
|
||||
panelId: panelId,
|
||||
dashboardId: dashboardId,
|
||||
range: timeRange,
|
||||
rangeRaw: timeRange.raw,
|
||||
interval: '1s',
|
||||
intervalMs: 60000,
|
||||
interval: intervalRes.interval,
|
||||
intervalMs: intervalRes.intervalMs,
|
||||
targets: queries,
|
||||
maxDataPoints: 500,
|
||||
maxDataPoints: maxDataPoints || widthPixels,
|
||||
scopedVars: {},
|
||||
cacheTimeout: null,
|
||||
};
|
||||
@ -114,17 +123,10 @@ export class DataPanel extends Component<Props, State> {
|
||||
};
|
||||
|
||||
render() {
|
||||
const { response, loading, isFirstLoad } = this.state;
|
||||
console.log('data panel render');
|
||||
const { response, loading } = this.state;
|
||||
const timeSeries = response.data;
|
||||
|
||||
// if (isFirstLoad && (loading === LoadingState.Loading || loading === LoadingState.NotStarted)) {
|
||||
// return (
|
||||
// <div className="loading">
|
||||
// <p>Loading</p>
|
||||
// </div>
|
||||
// );
|
||||
// }
|
||||
console.log('data panel render');
|
||||
|
||||
return (
|
||||
<>
|
||||
@ -142,7 +144,7 @@ export class DataPanel extends Component<Props, State> {
|
||||
|
||||
if (loading === LoadingState.Loading) {
|
||||
return (
|
||||
<div className="panel__loading">
|
||||
<div className="panel-loading">
|
||||
<i className="fa fa-spinner fa-spin" />
|
||||
</div>
|
||||
);
|
||||
|
@ -88,16 +88,14 @@ export class PanelChrome extends PureComponent<Props, State> {
|
||||
|
||||
console.log('panelChrome render');
|
||||
return (
|
||||
<div className="panel-container">
|
||||
<AutoSizer>
|
||||
{({ width, height }) => {
|
||||
// console.log('SizeMe', size);
|
||||
console.log('autosizer width', width);
|
||||
if (width === 0) {
|
||||
return null;
|
||||
}
|
||||
<AutoSizer>
|
||||
{({ width, height }) => {
|
||||
if (width === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
return (
|
||||
<div className="panel-container panel-container--absolute">
|
||||
<DataPanel
|
||||
datasource={datasource}
|
||||
queries={targets}
|
||||
@ -125,10 +123,10 @@ export class PanelChrome extends PureComponent<Props, State> {
|
||||
);
|
||||
}}
|
||||
</DataPanel>
|
||||
);
|
||||
}}
|
||||
</AutoSizer>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}}
|
||||
</AutoSizer>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -89,4 +89,6 @@ export interface DataQueryOptions {
|
||||
export interface DataSourceApi {
|
||||
query(options: DataQueryOptions): Promise<DataQueryResponse>;
|
||||
testDatasource(): Promise<any>;
|
||||
|
||||
interval?: string;
|
||||
}
|
||||
|
@ -92,6 +92,7 @@ export class Graph extends PureComponent<GraphProps> {
|
||||
};
|
||||
|
||||
try {
|
||||
console.log('Graph render');
|
||||
$.plot(this.element, timeSeries, flotOptions);
|
||||
} catch (err) {
|
||||
console.log('Graph rendering error', err, flotOptions, timeSeries);
|
||||
|
@ -43,6 +43,7 @@ div.flot-text {
|
||||
position: relative;
|
||||
border-radius: 3px;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
|
||||
&.panel-transparent {
|
||||
background-color: transparent;
|
||||
@ -60,6 +61,10 @@ div.flot-text {
|
||||
&--is-editing {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
&--absolute {
|
||||
position: absolute;
|
||||
}
|
||||
}
|
||||
|
||||
.panel-content {
|
||||
|
Reference in New Issue
Block a user