mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
heatmap: able to hide buckets with zero value #12080
This commit is contained in:
parent
a826c117e2
commit
9ee2a08def
@ -55,6 +55,7 @@ const panelDefaults = {
|
|||||||
showHistogram: false,
|
showHistogram: false,
|
||||||
},
|
},
|
||||||
highlightCards: true,
|
highlightCards: true,
|
||||||
|
hideZeroBuckets: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
const colorModes = ['opacity', 'spectrum'];
|
const colorModes = ['opacity', 'spectrum'];
|
||||||
@ -204,7 +205,7 @@ export class HeatmapCtrl extends MetricsPanelCtrl {
|
|||||||
yBucketSize = 1;
|
yBucketSize = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { cards, cardStats } = convertToCards(bucketsData);
|
const { cards, cardStats } = convertToCards(bucketsData, this.panel.hideZeroBuckets);
|
||||||
|
|
||||||
this.data = {
|
this.data = {
|
||||||
buckets: bucketsData,
|
buckets: bucketsData,
|
||||||
@ -246,7 +247,7 @@ export class HeatmapCtrl extends MetricsPanelCtrl {
|
|||||||
// Always let yBucketSize=1 in 'tsbuckets' mode
|
// Always let yBucketSize=1 in 'tsbuckets' mode
|
||||||
yBucketSize = 1;
|
yBucketSize = 1;
|
||||||
|
|
||||||
const { cards, cardStats } = convertToCards(bucketsData);
|
const { cards, cardStats } = convertToCards(bucketsData, this.panel.hideZeroBuckets);
|
||||||
|
|
||||||
this.data = {
|
this.data = {
|
||||||
buckets: bucketsData,
|
buckets: bucketsData,
|
||||||
|
@ -93,25 +93,43 @@ function parseHistogramLabel(label: string): number {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface HeatmapCard {
|
||||||
|
x: number;
|
||||||
|
y: number;
|
||||||
|
yBounds: {
|
||||||
|
top: number | null;
|
||||||
|
bottom: number | null;
|
||||||
|
};
|
||||||
|
values: number[];
|
||||||
|
count: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface HeatmapCardStats {
|
||||||
|
min: number;
|
||||||
|
max: number;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert buckets into linear array of "cards" - objects, represented heatmap elements.
|
* Convert buckets into linear array of "cards" - objects, represented heatmap elements.
|
||||||
* @param {Object} buckets
|
* @param {Object} buckets
|
||||||
* @return {Array} Array of "card" objects
|
* @return {Object} Array of "card" objects and stats
|
||||||
*/
|
*/
|
||||||
function convertToCards(buckets) {
|
function convertToCards(buckets: any, hideZero = false): { cards: HeatmapCard[]; cardStats: HeatmapCardStats } {
|
||||||
let min = 0,
|
let min = 0,
|
||||||
max = 0;
|
max = 0;
|
||||||
const cards = [];
|
const cards: HeatmapCard[] = [];
|
||||||
_.forEach(buckets, xBucket => {
|
_.forEach(buckets, xBucket => {
|
||||||
_.forEach(xBucket.buckets, yBucket => {
|
_.forEach(xBucket.buckets, yBucket => {
|
||||||
const card = {
|
const card: HeatmapCard = {
|
||||||
x: xBucket.x,
|
x: xBucket.x,
|
||||||
y: yBucket.y,
|
y: yBucket.y,
|
||||||
yBounds: yBucket.bounds,
|
yBounds: yBucket.bounds,
|
||||||
values: yBucket.values,
|
values: yBucket.values,
|
||||||
count: yBucket.count,
|
count: yBucket.count,
|
||||||
};
|
};
|
||||||
cards.push(card);
|
if (!hideZero || card.count !== 0) {
|
||||||
|
cards.push(card);
|
||||||
|
}
|
||||||
|
|
||||||
if (cards.length === 1) {
|
if (cards.length === 1) {
|
||||||
min = yBucket.count;
|
min = yBucket.count;
|
||||||
|
@ -63,6 +63,10 @@
|
|||||||
|
|
||||||
<div class="section gf-form-group">
|
<div class="section gf-form-group">
|
||||||
<h5 class="section-heading">Buckets</h5>
|
<h5 class="section-heading">Buckets</h5>
|
||||||
|
<gf-form-switch class="gf-form" label-class="width-8"
|
||||||
|
label="Hide zero"
|
||||||
|
checked="ctrl.panel.hideZeroBuckets" on-change="ctrl.render()">
|
||||||
|
</gf-form-switch>
|
||||||
<div class="gf-form">
|
<div class="gf-form">
|
||||||
<label class="gf-form-label width-8">Space</label>
|
<label class="gf-form-label width-8">Space</label>
|
||||||
<input type="number" class="gf-form-input width-5" placeholder="auto" data-placement="right" bs-tooltip="''" ng-model="ctrl.panel.cards.cardPadding" ng-change="ctrl.refresh()" ng-model-onblur>
|
<input type="number" class="gf-form-input width-5" placeholder="auto" data-placement="right" bs-tooltip="''" ng-model="ctrl.panel.cards.cardPadding" ng-change="ctrl.refresh()" ng-model-onblur>
|
||||||
|
Loading…
Reference in New Issue
Block a user