mirror of
https://github.com/grafana/grafana.git
synced 2024-12-30 10:47:30 -06:00
parent
83662b5195
commit
e5970e83ff
@ -16,4 +16,5 @@ define([
|
||||
'./graphiteImportCtrl',
|
||||
'./dynamicDashboardSrv',
|
||||
'./importCtrl',
|
||||
'./impressions',
|
||||
], function () {});
|
||||
|
@ -5,8 +5,9 @@ define([
|
||||
'jquery',
|
||||
'app/core/utils/kbn',
|
||||
'app/core/utils/datemath',
|
||||
'./impressions',
|
||||
],
|
||||
function (angular, moment, _, $, kbn, dateMath) {
|
||||
function (angular, moment, _, $, kbn, dateMath, impressions) {
|
||||
'use strict';
|
||||
|
||||
var module = angular.module('grafana.services');
|
||||
@ -24,19 +25,27 @@ function (angular, moment, _, $, kbn, dateMath) {
|
||||
};
|
||||
|
||||
this.loadDashboard = function(type, slug) {
|
||||
if (type === 'script') {
|
||||
return this._loadScriptedDashboard(slug);
|
||||
}
|
||||
var promise;
|
||||
|
||||
if (type === 'snapshot') {
|
||||
return backendSrv.get('/api/snapshots/' + $routeParams.slug).catch(function() {
|
||||
if (type === 'script') {
|
||||
promise = this._loadScriptedDashboard(slug);
|
||||
} else if (type === 'snapshot') {
|
||||
promise = backendSrv.get('/api/snapshots/' + $routeParams.slug).catch(function() {
|
||||
return {meta:{isSnapshot: true, canSave: false, canEdit: false}, dashboard: {title: 'Snapshot not found'}};
|
||||
});
|
||||
} else {
|
||||
promise = backendSrv.getDashboard($routeParams.type, $routeParams.slug)
|
||||
.catch(function() {
|
||||
return self._dashboardLoadFailed("Not found");
|
||||
});
|
||||
}
|
||||
|
||||
return backendSrv.getDashboard($routeParams.type, $routeParams.slug).catch(function() {
|
||||
return self._dashboardLoadFailed("Not found");
|
||||
promise.then(function(result) {
|
||||
impressions.addImpression(slug);
|
||||
return result;
|
||||
});
|
||||
|
||||
return promise;
|
||||
};
|
||||
|
||||
this._loadScriptedDashboard = function(file) {
|
||||
|
7
public/app/features/dashboard/impressions.js
Normal file
7
public/app/features/dashboard/impressions.js
Normal file
@ -0,0 +1,7 @@
|
||||
define([
|
||||
'./impressions2'
|
||||
], function(impressions) {
|
||||
'use strict';
|
||||
// backward compatability hack;
|
||||
return impressions.impressions;
|
||||
});
|
41
public/app/features/dashboard/impressions2.ts
Normal file
41
public/app/features/dashboard/impressions2.ts
Normal file
@ -0,0 +1,41 @@
|
||||
///<reference path="../../headers/common.d.ts" />
|
||||
|
||||
import store from 'app/core/store';
|
||||
import _ from 'lodash';
|
||||
|
||||
export class Impressions {
|
||||
constructor() {}
|
||||
|
||||
addImpression(slug) {
|
||||
var impressions = [];
|
||||
if (store.exists("dashboard_impressions")) {
|
||||
impressions = JSON.parse(store.get("dashboard_impressions"));
|
||||
if (!_.isArray(impressions)) {
|
||||
impressions = [];
|
||||
}
|
||||
}
|
||||
|
||||
var exists = impressions.indexOf(slug);
|
||||
if (exists >= 0) {
|
||||
impressions.splice(exists, 1);
|
||||
}
|
||||
|
||||
impressions.unshift(slug);
|
||||
|
||||
if (impressions.length > 20) {
|
||||
impressions.shift();
|
||||
}
|
||||
store.set("dashboard_impressions", JSON.stringify(impressions));
|
||||
}
|
||||
|
||||
getImpressions() {
|
||||
var k = store.get("dashboard_impressions");
|
||||
return JSON.parse(k);
|
||||
}
|
||||
}
|
||||
|
||||
var impressions = new Impressions();
|
||||
|
||||
export {
|
||||
impressions
|
||||
};
|
@ -5,7 +5,7 @@
|
||||
{{dash.title}}
|
||||
</span>
|
||||
<span class="dashlist-star">
|
||||
<i class="fa" ng-class="{'fa-star': dash.isStarred, 'fa-star-o': !dash.isStarred}"></i>
|
||||
<i class="fa" ng-class="{'fa-star': dash.isStarred, 'fa-star-o': dash.isStarred === false}"></i>
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
|
@ -3,6 +3,7 @@
|
||||
import _ from 'lodash';
|
||||
import config from 'app/core/config';
|
||||
import {PanelCtrl} from 'app/plugins/sdk';
|
||||
import {impressions} from 'app/features/dashboard/impressions2';
|
||||
|
||||
// Set and populate defaults
|
||||
var panelDefaults = {
|
||||
@ -31,7 +32,7 @@ class DashListCtrl extends PanelCtrl {
|
||||
|
||||
initEditMode() {
|
||||
super.initEditMode();
|
||||
this.modes = ['starred', 'search'];
|
||||
this.modes = ['starred', 'search', 'last viewed'];
|
||||
this.icon = "fa fa-star";
|
||||
this.addEditorTab('Options', () => {
|
||||
return {templateUrl: 'public/app/plugins/panel/dashlist/editor.html'};
|
||||
@ -41,6 +42,19 @@ class DashListCtrl extends PanelCtrl {
|
||||
refresh() {
|
||||
var params: any = {limit: this.panel.limit};
|
||||
|
||||
if (this.panel.mode === 'last viewed') {
|
||||
var dashListNames = _.first(impressions.getImpressions(), this.panel.limit).map((dashboard) => {
|
||||
return {
|
||||
title: dashboard,
|
||||
uri: 'db/' + dashboard
|
||||
};
|
||||
});
|
||||
|
||||
this.dashList = dashListNames;
|
||||
this.renderingCompleted();
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.panel.mode === 'starred') {
|
||||
params.starred = "true";
|
||||
} else {
|
||||
|
@ -47,11 +47,11 @@
|
||||
{
|
||||
"id": 3,
|
||||
"limit": 10,
|
||||
"mode": "search",
|
||||
"mode": "last viewed",
|
||||
"query": "",
|
||||
"span": 6,
|
||||
"tags": [],
|
||||
"title": "Dashboards",
|
||||
"title": "Last 10 viewed dashboards",
|
||||
"type": "dashlist"
|
||||
}
|
||||
],
|
||||
|
Loading…
Reference in New Issue
Block a user