Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
HAWKULAR-702 Drag range selections on charts.
Browse files Browse the repository at this point in the history
  • Loading branch information
mtho11 committed Oct 23, 2015
1 parent eb3cec8 commit a1c8056
Show file tree
Hide file tree
Showing 7 changed files with 306 additions and 256 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ module Topbar {
$rootScope.hkParams = $routeParams || [];

// default time period set to 24 hours
var defaultOffset = 1 * 60 * 60 * 1000;
let defaultOffset = 60 * 60 * 1000;

var init = (tenantId:string) => {
let init = (tenantId?:string) => {
HawkularInventory.Resource.query({environmentId: globalEnvironmentId}, (resourceList) => {
$rootScope.hkResources = resourceList;
for (var i = 0; i < resourceList.length; i++) {
Expand All @@ -45,19 +45,19 @@ module Topbar {
});

$rootScope.hkParams.timeOffset = $routeParams.timeOffset || defaultOffset;
$rootScope.hkEndTimestamp = $routeParams.endTimestamp || moment().valueOf();
$rootScope.hkEndTimestamp = $routeParams.endTimestamp || +moment();
$rootScope.hkStartTimestamp = moment().subtract($rootScope.hkParams.timeOffset, 'milliseconds').valueOf();

$rootScope.$on('$routeChangeSuccess', function (event, current, previous) {
$rootScope.$on('$routeChangeSuccess', (event, current, previous) => {
$rootScope.hkParams = current.params;

$rootScope.hkParams.timeOffset = $routeParams.timeOffset || defaultOffset;
$rootScope.hkEndTimestamp = $routeParams.endTimestamp || moment().valueOf();
$rootScope.hkEndTimestamp = $routeParams.endTimestamp || +moment();
$rootScope.hkStartTimestamp = moment().subtract($rootScope.hkParams.timeOffset, 'milliseconds').valueOf();

}, this);
};
var tenantId = this.$rootScope.currentPersona && this.$rootScope.currentPersona.id;
let tenantId = this.$rootScope.currentPersona && this.$rootScope.currentPersona.id;
if (tenantId) {
init(tenantId);
} else {
Expand All @@ -66,8 +66,20 @@ module Topbar {
}
}

public setTimestamp(offset, end) {
public setTimestamp(offset:number, end ?:number) {
this.$route.updateParams({timeOffset: offset, endTime: end});
this.$rootScope.hkParams.timeOffset = offset;
this.$rootScope.hkEndTimestamp = end;
this.$rootScope.hkStartTimestamp = moment().subtract(this.$rootScope.hkParams.timeOffset,
'milliseconds').valueOf();
}

public setTimestampStartEnd(start:number, end:number) {
let offset = end - start;
this.$route.updateParams({timeOffset: offset, endTime: end});
this.$rootScope.hkParams.timeOffset = offset;
this.$rootScope.hkEndTimestamp = end;
this.$rootScope.hkStartTimestamp = start;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@

module HawkularMetrics {

export class AppServerDatasourcesDetailsController {
export class AppServerDatasourcesDetailsController implements IRefreshable {

/// for minification only
public static $inject = ['$scope','$rootScope','$routeParams','$interval','$q','HawkularInventory',
'HawkularMetric', 'HawkularAlertsManager', 'MetricsService', '$log', '$modal'];
public static $inject = ['$scope', '$rootScope', '$routeParams', '$interval', '$q', 'HawkularInventory',
'HawkularMetric', 'HawkularNav', 'HawkularAlertsManager', 'MetricsService', '$log', '$modal'];

public static AVAILABLE_COLOR = '#1884c7'; /// blue
public static IN_USE_COLOR = '#49a547'; /// green
Expand All @@ -37,7 +37,7 @@ module HawkularMetrics {
public static DEFAULT_WAIT_THRESHOLD = 200; // > 200 ms average wait time
public static DEFAULT_CREA_THRESHOLD = 200; // > 200 ms average creatiion time

private autoRefreshPromise: ng.IPromise<number>;
private autoRefreshPromise:ng.IPromise<number>;
private resourceList;
///private expandedList;
public alertList;
Expand All @@ -49,21 +49,23 @@ module HawkularMetrics {
public resolvedAvailData = {};
public resolvedRespData = {};

public defaultEmail: string;

constructor(private $scope: any,
private $rootScope: any,
private $routeParams: any,
private $interval: ng.IIntervalService,
private $q: ng.IQService,
private HawkularInventory: any,
private HawkularMetric: any,
private HawkularAlertsManager: HawkularMetrics.IHawkularAlertsManager,
private MetricsService: any,
private $log: any,
private $modal: any,
public startTimeStamp:TimestampInMillis,
public endTimeStamp:TimestampInMillis) {
public defaultEmail:string;

public startTimeStamp:TimestampInMillis;
public endTimeStamp:TimestampInMillis;

constructor(private $scope:any,
private $rootScope:IHawkularRootScope,
private $routeParams:any,
private $interval:ng.IIntervalService,
private $q:ng.IQService,
private HawkularInventory:any,
private HawkularMetric:any,
private HawkularNav:any,
private HawkularAlertsManager:HawkularMetrics.IHawkularAlertsManager,
private MetricsService:IMetricsService,
private $log:ng.ILogService,
private $modal:any) {
$scope.vm = this;

this.startTimeStamp = +moment().subtract(($routeParams.timeOffset || 3600000), 'milliseconds');
Expand All @@ -73,6 +75,15 @@ module HawkularMetrics {

this.defaultEmail = this.$rootScope.userDetails.email || 'myemail@company.com';


// handle drag ranges on charts to change the time range
this.$scope.$on('ChartTimeRangeChanged', (event, data:Date[]) => {
this.startTimeStamp = data[0].getTime();
this.endTimeStamp = data[1].getTime();
this.HawkularNav.setTimestampStartEnd(this.startTimeStamp, this.endTimeStamp);
this.refresh();
});

if ($rootScope.currentPersona) {
this.getDatasources(this.$rootScope.currentPersona.id);
} else {
Expand All @@ -85,28 +96,32 @@ module HawkularMetrics {
}

private getAlerts(metricIdPrefix:string, startTime:TimestampInMillis, endTime:TimestampInMillis, res:any):void {
let connArray: any, respArray: any;
let connPromise = this.HawkularAlertsManager.queryAlerts({statuses: 'OPEN',
triggerIds: metricIdPrefix + '_ds_conn', startTime: startTime, endTime: endTime}).then((connData)=> {
_.forEach(connData.alertList, (item) => {
item['alertType']='DSCONN';
item['condition']=item['dataId'].substr(item['dataId'].lastIndexOf('~')+1);
});
connArray = connData.alertList;
}, (error) => {
//return this.ErrorsManager.errorHandler(error, 'Error fetching alerts.');
let connArray:any, respArray:any;
let connPromise = this.HawkularAlertsManager.queryAlerts({
statuses: 'OPEN',
triggerIds: metricIdPrefix + '_ds_conn', startTime: startTime, endTime: endTime
}).then((connData)=> {
_.forEach(connData.alertList, (item) => {
item['alertType'] = 'DSCONN';
item['condition'] = item['dataId'].substr(item['dataId'].lastIndexOf('~') + 1);
});
connArray = connData.alertList;
}, (error) => {
//return this.ErrorsManager.errorHandler(error, 'Error fetching alerts.');
});

let respPromise = this.HawkularAlertsManager.queryAlerts({statuses: 'OPEN',
triggerIds: metricIdPrefix + '_ds_resp', startTime: startTime, endTime: endTime}).then((respData)=> {
_.forEach(respData.alertList, (item) => {
item['alertType']='DSRESP';
item['condition']=item['dataId'].substr(item['dataId'].lastIndexOf('~')+1);
});
respArray = respData.alertList;
}, (error) => {
//return this.ErrorsManager.errorHandler(error, 'Error fetching alerts.');
let respPromise = this.HawkularAlertsManager.queryAlerts({
statuses: 'OPEN',
triggerIds: metricIdPrefix + '_ds_resp', startTime: startTime, endTime: endTime
}).then((respData)=> {
_.forEach(respData.alertList, (item) => {
item['alertType'] = 'DSRESP';
item['condition'] = item['dataId'].substr(item['dataId'].lastIndexOf('~') + 1);
});
respArray = respData.alertList;
}, (error) => {
//return this.ErrorsManager.errorHandler(error, 'Error fetching alerts.');
});


this.$q.all([connPromise, respPromise]).finally(()=> {
Expand Down Expand Up @@ -282,7 +297,7 @@ module HawkularMetrics {
});
}

public deleteDatasource(datasource: any): void {
public deleteDatasource(datasource:any):void {
/// create a new isolate scope for dialog inherited from current scope instead of default $rootScope
let datasourceDeleteDialog = this.$modal.open({
templateUrl: 'plugins/metrics/html/app-details/modals/detail-datasources-delete.html',
Expand All @@ -299,7 +314,11 @@ module HawkularMetrics {
});
}

public autoRefresh(intervalInSeconds: number): void {
public refresh():void {
this.getDatasources();
}

public autoRefresh(intervalInSeconds:number):void {
this.autoRefreshPromise = this.$interval(() => {
this.getDatasources();
}, intervalInSeconds * 1000);
Expand All @@ -309,7 +328,7 @@ module HawkularMetrics {
});
}

public getDatasources(currentTenantId?: TenantId): any {
public getDatasources(currentTenantId?:TenantId):void {
this.endTimeStamp = this.$routeParams.endTime || +moment();
this.startTimeStamp = this.endTimeStamp - (this.$routeParams.timeOffset || 3600000);

Expand All @@ -318,55 +337,58 @@ module HawkularMetrics {
let feedId = idParts[0];

this.HawkularInventory.ResourceOfTypeUnderFeed.query({
environmentId: globalEnvironmentId,
feedId: feedId,
resourceTypeId: 'Datasource'}, (aResourceList, getResponseHeaders) => {
let promises = [];
let tmpResourceList = [];
angular.forEach(aResourceList, (res:any) => {
if (res.id.startsWith(new RegExp(this.$routeParams.resourceId + '~/'))) {
tmpResourceList.push(res);
promises.push(this.HawkularMetric.GaugeMetricData(tenantId).queryMetrics({
gaugeId: 'MI~R~[' + res.id + ']~MT~Datasource Pool Metrics~Available Count',
distinct: true}, (data) => {
res.availableCount = data[0];
}).$promise);
promises.push(this.HawkularMetric.GaugeMetricData(tenantId).queryMetrics({
gaugeId: 'MI~R~[' + res.id + ']~MT~Datasource Pool Metrics~In Use Count',
distinct: true}, (data) => {
res.inUseCount = data[0];
}).$promise);
this.getAlerts(res.id, this.startTimeStamp, this.endTimeStamp, res);
environmentId: globalEnvironmentId,
feedId: feedId,
resourceTypeId: 'Datasource'
}, (aResourceList, getResponseHeaders) => {
let promises = [];
let tmpResourceList = [];
angular.forEach(aResourceList, (res:any) => {
if (res.id.startsWith(new RegExp(this.$routeParams.resourceId + '~/'))) {
tmpResourceList.push(res);
promises.push(this.HawkularMetric.GaugeMetricData(tenantId).queryMetrics({
gaugeId: 'MI~R~[' + res.id + ']~MT~Datasource Pool Metrics~Available Count',
distinct: true
}, (data) => {
res.availableCount = data[0];
}).$promise);
promises.push(this.HawkularMetric.GaugeMetricData(tenantId).queryMetrics({
gaugeId: 'MI~R~[' + res.id + ']~MT~Datasource Pool Metrics~In Use Count',
distinct: true
}, (data) => {
res.inUseCount = data[0];
}).$promise);
this.getAlerts(res.id, this.startTimeStamp, this.endTimeStamp, res);
}
}, this);
this.$q.all(promises).then(() => {
this.resourceList = tmpResourceList;
this.resourceList.$resolved = true;
this.getDatasourceChartData();
});
},
() => { // error
if (!this.resourceList) {
this.resourceList = [];
this.resourceList.$resolved = true;
this['lastUpdateTimestamp'] = new Date();
}
}, this);
this.$q.all(promises).then(() => {
this.resourceList = tmpResourceList;
this.resourceList.$resolved = true;
this.getDatasourceChartData();
});
},
() => { // error
if (!this.resourceList) {
this.resourceList = [];
this.resourceList.$resolved = true;
this['lastUpdateTimestamp'] = new Date();
}
});
}

public getDatasourceChartData(currentTenantId?: TenantId): any {
public getDatasourceChartData(currentTenantId?:TenantId):void {
this.endTimeStamp = this.$routeParams.endTime || +moment();
this.startTimeStamp = this.endTimeStamp - (this.$routeParams.timeOffset || 3600000);

let tenantId:TenantId = currentTenantId || this.$rootScope.currentPersona.id;
//let tenantId:TenantId = currentTenantId || this.$rootScope.currentPersona.id;

let availPromises = [];
let respPromises = [];

let tmpChartAvailData = {};
let tmpChartRespData = {};

_.forEach(this.resourceList, function(res: any, idx) {
_.forEach(this.resourceList, function (res:any) {

if (!this.skipChartData[res.id + '_Available Count']) {
let dsAvailPromise = this.MetricsService.retrieveGaugeMetrics(this.$rootScope.currentPersona.id,
Expand Down Expand Up @@ -450,7 +472,7 @@ module HawkularMetrics {
}, this);
}

public toggleChartData(name): void {
public toggleChartData(name):void {
this.skipChartData[name] = !this.skipChartData[name];
this.getDatasourceChartData();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
module HawkularMetrics {


export class AppServerDeploymentsDetailsController {
export class AppServerDeploymentsDetailsController implements IRefreshable {
/// this is for minification purposes
public static $inject = ['$scope', '$rootScope', '$interval', '$log', '$routeParams', '$filter',
'$modal', 'HawkularInventory', 'HawkularMetric', 'HawkularOps', 'HawkularAlertsManager',
Expand Down Expand Up @@ -103,8 +103,11 @@ module HawkularMetrics {
});
}

public refresh(): void {
this.getResourceList();
}

public getResourceList(currentTenantId?:TenantId):any {
public getResourceList(currentTenantId?:TenantId):void {
this.alertList = []; // FIXME: when we have alerts for app server
let tenantId:TenantId = currentTenantId || this.$rootScope.currentPersona.id;
let idParts = this.$routeParams.resourceId.split('~');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ module HawkularMetrics {
values: IChartDataPoint[];
}

export class AppServerJvmDetailsController {
export class AppServerJvmDetailsController implements IRefreshable {
/// this is for minification purposes
public static $inject = ['$location', '$scope', '$rootScope', '$interval', '$log', '$filter', '$routeParams',
'$modal', '$window', 'HawkularInventory', 'HawkularMetric','HawkularNav', 'HawkularAlertsManager',
'$modal', 'HawkularInventory', 'HawkularMetric','HawkularNav', 'HawkularAlertsManager',
'MetricsService', 'ErrorsManager', '$q', ];

public static USED_COLOR = '#1884c7'; /// blue
Expand All @@ -40,7 +40,7 @@ module HawkularMetrics {
public static MAX_HEAP = 1024 * 1024 * 1024;
public static BYTES2MB = 1 / 1024 / 1024;

public math = this.$window.Math;
public math = Math;

public alertList;
public chartHeapData:IMultiDataPoint[];
Expand All @@ -59,7 +59,6 @@ module HawkularMetrics {
private $filter:ng.IFilterService,
private $routeParams:any,
private $modal:any,
private $window:any,
private HawkularInventory:any,
private HawkularMetric:any,
private HawkularNav:any,
Expand All @@ -83,11 +82,10 @@ module HawkularMetrics {
}

// handle drag ranges on charts to change the time range
this.$scope.$on('ChartTimeRangeChanged', (event, data) => {
this.$log.info('Received ChartTimeRangeChanged: ' + data[0] + ' - ' + data[1]);
this.startTimeStamp = data[0];
this.endTimeStamp = data[1];
//this.HawkularNav.setTimestamp(this.endTimeStamp - this.endTimeStamp);
this.$scope.$on('ChartTimeRangeChanged', (event, data:Date[]) => {
this.startTimeStamp = data[0].getTime();
this.endTimeStamp = data[1].getTime();
this.HawkularNav.setTimestampStartEnd(this.startTimeStamp, this.endTimeStamp);
this.refresh();
});

Expand Down

0 comments on commit a1c8056

Please sign in to comment.