heatmap: able to hide buckets with zero value #12080

This commit is contained in:
Alexander Zobnin 2019-03-12 10:59:55 +03:00
parent a826c117e2
commit 9ee2a08def
No known key found for this signature in database
GPG Key ID: E17E9ABACEFA59EB
3 changed files with 30 additions and 7 deletions

View File

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

View File

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

View File

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