Skip to content

Commit

Permalink
Various improvements regarding application logging. Fixes #313.
Browse files Browse the repository at this point in the history
In detail:
 - Made sure project settings in designer were up-to-date after saving them from the dialog. That required refactoring on the projectSettings service
 - Disabled 'Application Log' link according to the setting.
 - Updated server side endpoints so that they return 404 in case application logging was disabled
 - Updated client-side script in the application route so that proper warning appear.
  • Loading branch information
otsakir committed Jun 24, 2015
1 parent 1348048 commit 20c9c23
Show file tree
Hide file tree
Showing 10 changed files with 86 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
import org.mobicents.servlet.restcomm.rvd.model.ApiServerConfig;
import org.mobicents.servlet.restcomm.rvd.model.CallControlInfo;
import org.mobicents.servlet.restcomm.rvd.model.ModelMarshaler;
import org.mobicents.servlet.restcomm.rvd.model.ProjectSettings;
import org.mobicents.servlet.restcomm.rvd.model.callcontrol.CallControlAction;
import org.mobicents.servlet.restcomm.rvd.model.callcontrol.CallControlStatus;
import org.mobicents.servlet.restcomm.rvd.model.client.ProjectItem;
Expand Down Expand Up @@ -452,8 +453,13 @@ public Response appLog(@PathParam("appname") String appName) {
ProjectAwareRvdContext rvdContext;
try {
rvdContext = new ProjectAwareRvdContext(appName, request, servletContext);
init(rvdContext);

// make sure logging is enabled before allowing access to sensitive log information
ProjectSettings projectSettings = FsProjectStorage.loadProjectSettings(appName, workspaceStorage);
if (projectSettings == null || projectSettings.getLogging() == false)
return Response.status(Status.NOT_FOUND).build();

//init(new ProjectAwareRvdContext(appName, request, servletContext));
InputStream logStream;
try {
logStream = new FileInputStream(rvdContext.getProjectLogger().getLogFilePath());
Expand Down Expand Up @@ -482,6 +488,13 @@ public Response resetAppLog(@PathParam("appname") String appName) {
ProjectAwareRvdContext rvdContext;
try {
rvdContext = new ProjectAwareRvdContext(appName, request, servletContext);
init(rvdContext);

// make sure logging is enabled before allowing access to sensitive log information
ProjectSettings projectSettings = FsProjectStorage.loadProjectSettings(appName, workspaceStorage);
if (projectSettings == null || projectSettings.getLogging() == false)
return Response.status(Status.NOT_FOUND).build();

rvdContext.getProjectLogger().reset();
return Response.ok().build();
} catch (StorageException e) {
Expand Down
2 changes: 1 addition & 1 deletion restcomm/restcomm.rvd/src/main/webapp/WEB-INF/rvd.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
Relative path example:
workspace
-->
<workspaceLocation>workspace</workspaceLocation>
<workspaceLocation>/home/nando/RVDWorkspace</workspaceLocation>

<!-- Use a fixed ip address on the URL resources generated such as links to recorded .wav files etc. If not defined,
the destination ip of the request made by Restcomm to the RVD controller will be used.
Expand Down
5 changes: 3 additions & 2 deletions restcomm/restcomm.rvd/src/main/webapp/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ var App = angular.module('Rvd', [
'ui.sortable',
'basicDragdrop',
'pascalprecht.translate',
'ngSanitize'
'ngSanitize',
'ngResource'
]);

var rvdMod = App;
Expand All @@ -34,7 +35,7 @@ App.config([ '$routeProvider', '$translateProvider', function($routeProvider, $t
controller : 'designerCtrl',
resolve: {
authInfo: function (authentication) {return authentication.authResolver();},
projectSettings: function (projectSettingsService, $route) {return projectSettingsService.retrieve($route.current.params.projectName);},
//projectSettings: function (projectSettingsService, $route) {return projectSettingsService.retrieve($route.current.params.projectName);},
project: function(designerService, $route) { return designerService.openProject($route.current.params.projectName); },
bundledWavs: function(designerService) { return designerService.getBundledWavs()}
}
Expand Down
1 change: 1 addition & 0 deletions restcomm/restcomm.rvd/src/main/webapp/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@
<script src="js/lib/ui-bootstrap-tpls-0.10.0.js"></script>
<script src="js/lib/basic-dragdrop.js"></script>
<script src="js/lib/angular-sanitize.min.js"></script>
<script src="js/lib/angular-resource.min.js"></script>

<script src="app.js"></script>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,18 +47,28 @@ var loginCtrl = angular.module('Rvd')
App.controller('homeCtrl', function ($scope, authInfo) {
});

angular.module('Rvd').controller('projectLogCtrl', ['$scope', '$routeParams', 'projectLogService', function ($scope, $routeParams, projectLogService) {
angular.module('Rvd').controller('projectLogCtrl', ['$scope', '$routeParams', 'projectLogService', 'notifications', function ($scope, $routeParams, projectLogService, notifications) {
//console.log('in projectLogCtrl');
$scope.projectName = $routeParams.projectName;
$scope.logData = '';

function retrieveLog() {
projectLogService.retrieve().then(function (logData) {$scope.logData = logData;})
projectLogService.retrieve().then(
function (logData) {$scope.logData = logData;},
function (result) {
notifications.put({message:"Application log not available.", type:"warning"});
}
)
}
$scope.retrieveLog = retrieveLog;

function resetLog() {
projectLogService.reset().then(function () {$scope.logData = "";});
projectLogService.reset().then(
function () {$scope.logData = "";},
function () {
notifications.put({message:"Application log not available.", type:"warning"});
}
);
}
$scope.resetLog = resetLog;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
var designerCtrl = App.controller('designerCtrl', function($scope, $q, $routeParams, $location, stepService, $http, $timeout, $injector, stepRegistry, stepPacker, $modal, notifications, ModelBuilder, projectSettingsService, webTriggerService, nodeRegistry, editedNodes, project, designerService, $filter, bundledWavs) {

$scope.logger = function(s) {
console.log(s);
};

// console.log("routeParam:");
// console.log( $routeParams );


$scope.project = project;
$scope.visibleNodes = editedNodes.getEditedNodes();

$scope.getProjectSettings = function () {
return projectSettingsService.getProjectSettings(); // returns a $resource that will be filled up automatically
}
$scope.getActiveNodeName = function () {
var activeNode = editedNodes.getActiveNode();
return activeNode;
Expand Down Expand Up @@ -200,7 +197,7 @@ var designerCtrl = App.controller('designerCtrl', function($scope, $q, $routePar
$scope.nullValue = null;
$scope.rejectOptions = [{caption:"busy", value:"busy"}, {caption:"rejected", value:"rejected"}];


projectSettingsService.refresh($scope.projectName);

/*
* When targets change, broadcast an events so that all <select syncModel/>
Expand Down
33 changes: 26 additions & 7 deletions restcomm/restcomm.rvd/src/main/webapp/js/app/services.js
Original file line number Diff line number Diff line change
Expand Up @@ -125,16 +125,34 @@ angular.module('Rvd').service('authentication', ['$http', '$browser', '$q', func

}]);

angular.module('Rvd').service('projectSettingsService', ['$http','$q','$modal', function ($http,$q,$modal) {
angular.module('Rvd').service('projectSettingsService', ['$http','$q','$modal', '$resource', function ($http,$q,$modal,$resource) {
//console.log("Creating projectSettigsService");
var service = {};
var cachedProjectSettings = {};

// returns project settings from cache
service.getProjectSettings = function () {
return cachedProjectSettings;
}

// refreshes cachedProjectSettings asynchronously
service.refresh = function (name) {
var resource = $resource('services/projects/:projectName/settings');
cachedProjectSettings = resource.get({projectName:name});
}

service.retrieve = function (name) {
var deferred = $q.defer();
$http({method:'GET', url:'services/projects/'+name+'/settings'})
.success(function (data,status) {deferred.resolve(data)})
.success(function (data,status) {
cachedProjectSettings = data;
deferred.resolve(cachedProjectSettings);
})
.error(function (data,status) {
if (status == 404)
deferred.resolve({logging:false});
if (status == 404) {
cachedProjectSettings = {logging:false};
deferred.resolve(cachedProjectSettings);
}
else
deferred.reject("ERROR_RETRIEVING_PROJECT_SETTINGS");
});
Expand All @@ -149,7 +167,7 @@ angular.module('Rvd').service('projectSettingsService', ['$http','$q','$modal',
return deferred.promise;
}

function projectSettingsModelCtrl ($scope, projectSettings, projectName, $modalInstance, notifications) {
function projectSettingsModelCtrl ($scope, projectSettings, projectSettingsService, projectName, $modalInstance, notifications) {
//console.log("in projectSettingsModelCtrl");
$scope.projectSettings = projectSettings;
$scope.projectName = projectName;
Expand Down Expand Up @@ -191,7 +209,8 @@ angular.module('Rvd').service('projectSettingsService', ['$http','$q','$modal',
});

modalInstance.result.then(function (projectSettings) {
//console.log(projectSettings);
service.refresh(projectName);
console.log(projectSettings);
}, function () {});
}

Expand Down Expand Up @@ -334,7 +353,7 @@ angular.module('Rvd').service('projectLogService', ['$http','$q','$routeParams',
deferred.resolve();
})
.error(function (data,status) {
notifications.put({type:'danger',message:'Cannot reset '+$routeParams.projectName+' log'});
//notifications.put({type:'danger',message:'Cannot reset '+$routeParams.projectName+' log'});
deferred.reject();
});
return deferred.promise;
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 20c9c23

Please sign in to comment.