فهرست منبع

changed how size is calcualted and propagated and added proper interval calc to DataPanel

Torkel Ödegaard 7 سال پیش
والد
کامیت
90c41bb087

+ 1 - 0
public/app/core/components/Switch/Switch.tsx

@@ -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}`;

+ 1 - 0
public/app/features/dashboard/dashgrid/DashboardGrid.tsx

@@ -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 });

+ 19 - 17
public/app/features/dashboard/dashgrid/DataPanel.tsx

@@ -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>
       );

+ 12 - 14
public/app/features/dashboard/dashgrid/PanelChrome.tsx

@@ -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;
-            }
-
-            return (
+      <AutoSizer>
+        {({ width, height }) => {
+          if (width === 0) {
+            return null;
+          }
+
+          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>
     );
   }
 }

+ 2 - 0
public/app/types/series.ts

@@ -89,4 +89,6 @@ export interface DataQueryOptions {
 export interface DataSourceApi {
   query(options: DataQueryOptions): Promise<DataQueryResponse>;
   testDatasource(): Promise<any>;
+
+  interval?: string;
 }

+ 1 - 0
public/app/viz/Graph.tsx

@@ -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);

+ 5 - 0
public/sass/pages/_dashboard.scss

@@ -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 {