=== added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/MaintenanceModeException.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/MaintenanceModeException.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/MaintenanceModeException.java 2014-07-10 10:27:53 +0000 @@ -0,0 +1,41 @@ +package org.hisp.dhis.common; + +/* + * Copyright (c) 2004-2014, University of Oslo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * Neither the name of the HISP project nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @author Lars Helge Overland + */ +public class MaintenanceModeException + extends RuntimeException +{ + public MaintenanceModeException( String message ) + { + super( message ); + } +} === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SystemSettingManager.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SystemSettingManager.java 2014-06-26 14:38:54 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SystemSettingManager.java 2014-07-10 10:27:53 +0000 @@ -97,6 +97,7 @@ final String KEY_ANALYTICS_MAX_LIMIT = "keyAnalyticsMaxLimit"; final String KEY_CUSTOM_LOGIN_PAGE_LOGO = "keyCustomLoginPageLogo"; final String KEY_CUSTOM_TOP_MENU_LOGO = "keyCustomTopMenuLogo"; + final String KEY_ANALYTICS_MAINTENANCE_MODE = "keyAnalyticsMaintenanceMode"; final String DEFAULT_SCHEDULE_AGGREGATE_QUERY_BUILDER_TASK_STRATEGY = "lastMonth"; final String DEFAULT_FLAG = "dhis2"; === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/QueryPlanner.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/QueryPlanner.java 2014-04-14 08:42:46 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/QueryPlanner.java 2014-07-10 10:27:53 +0000 @@ -31,6 +31,7 @@ import java.util.List; import org.hisp.dhis.common.IllegalQueryException; +import org.hisp.dhis.common.MaintenanceModeException; /** * @author Lars Helge Overland @@ -62,6 +63,14 @@ throws IllegalQueryException; /** + * Checks whether the analytics engine is in maintenance mode. + * + * @throws MaintenanceModeException if analytics engine is in maintenance mode. + */ + void validateMaintenanceMode() + throws MaintenanceModeException; + + /** * Creates a DataQueryGroups object. It is mandatory to group the queries by * the following criteria: 1) partition / year 2) organisation unit level * 3) period type 4) aggregation type. The DataQueryGroups contains groups of === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultAnalyticsService.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultAnalyticsService.java 2014-07-02 11:08:10 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultAnalyticsService.java 2014-07-10 10:27:53 +0000 @@ -640,6 +640,8 @@ */ private Map getAggregatedValueMap( DataQueryParams params, String tableName ) { + queryPlanner.validateMaintenanceMode(); + int optimalQueries = MathUtils.getWithin( SystemUtils.getCpuCores(), 1, MAX_QUERIES ); Timer t = new Timer().start(); === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultQueryPlanner.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultQueryPlanner.java 2014-06-18 15:37:44 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultQueryPlanner.java 2014-07-10 10:27:53 +0000 @@ -69,6 +69,7 @@ import org.hisp.dhis.common.DimensionalObject; import org.hisp.dhis.common.IllegalQueryException; import org.hisp.dhis.common.ListMap; +import org.hisp.dhis.common.MaintenanceModeException; import org.hisp.dhis.common.NameableObject; import org.hisp.dhis.dataelement.DataElement; import org.hisp.dhis.dataelement.DataElementGroup; @@ -205,6 +206,17 @@ } } + public void validateMaintenanceMode() + throws MaintenanceModeException + { + boolean maintenance = (Boolean) systemSettingManager.getSystemSetting( SystemSettingManager.KEY_ANALYTICS_MAINTENANCE_MODE, false ); + + if ( maintenance ) + { + throw new MaintenanceModeException( "Analytics engine is in maintenanec mode, try again later" ); + } + } + public DataQueryGroups planQuery( DataQueryParams params, int optimalQueries, String tableName ) { validate( params ); === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/EventQueryPlanner.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/EventQueryPlanner.java 2014-04-19 07:47:34 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/EventQueryPlanner.java 2014-07-10 10:27:53 +0000 @@ -31,6 +31,7 @@ import java.util.List; import org.hisp.dhis.common.IllegalQueryException; +import org.hisp.dhis.common.MaintenanceModeException; /** * @author Lars Helge Overland @@ -38,8 +39,8 @@ public interface EventQueryPlanner { void validate( EventQueryParams params ) - throws IllegalQueryException; - + throws IllegalQueryException, MaintenanceModeException; + /** * Plans the given params and returns a list of params. * === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventQueryPlanner.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventQueryPlanner.java 2014-04-28 18:23:49 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventQueryPlanner.java 2014-07-10 10:27:53 +0000 @@ -44,6 +44,7 @@ import org.hisp.dhis.analytics.table.PartitionUtils; import org.hisp.dhis.common.DimensionalObject; import org.hisp.dhis.common.IllegalQueryException; +import org.hisp.dhis.common.MaintenanceModeException; import org.hisp.dhis.common.NameableObject; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitService; @@ -78,7 +79,7 @@ @Override public void validate( EventQueryParams params ) - throws IllegalQueryException + throws IllegalQueryException, MaintenanceModeException { String violation = null; @@ -87,6 +88,8 @@ throw new IllegalQueryException( "Params cannot be null" ); } + queryPlanner.validateMaintenanceMode(); + if ( !params.hasOrganisationUnits() ) { violation = "At least one organisation unit must be specified"; @@ -186,6 +189,12 @@ return params; } + public void validateMaintenanceMode() + throws MaintenanceModeException + { + queryPlanner.validateMaintenanceMode(); + } + // ------------------------------------------------------------------------- // Supportive methods // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/AnalyticsController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/AnalyticsController.java 2014-06-11 09:26:41 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/AnalyticsController.java 2014-07-10 10:27:53 +0000 @@ -28,11 +28,18 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import static org.hisp.dhis.analytics.AnalyticsService.NAMES_META_KEY; +import static org.hisp.dhis.common.DimensionalObjectUtils.getDimensionsFromParam; + +import java.util.Map; +import java.util.Set; + +import javax.servlet.http.HttpServletResponse; + import org.hisp.dhis.analytics.AggregationType; import org.hisp.dhis.analytics.AnalyticsService; import org.hisp.dhis.analytics.DataQueryParams; import org.hisp.dhis.common.Grid; -import org.hisp.dhis.common.IllegalQueryException; import org.hisp.dhis.i18n.I18nManager; import org.hisp.dhis.system.grid.GridUtils; import org.hisp.dhis.webapi.utils.ContextUtils; @@ -40,18 +47,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; -import javax.servlet.http.HttpServletResponse; -import java.util.Map; -import java.util.Set; - -import static org.hisp.dhis.analytics.AnalyticsService.NAMES_META_KEY; -import static org.hisp.dhis.common.DimensionalObjectUtils.getDimensionsFromParam; - /** * @author Lars Helge Overland */ @@ -233,22 +232,6 @@ } // ------------------------------------------------------------------------- - // Exception handling - // ------------------------------------------------------------------------- - - @ExceptionHandler( IllegalQueryException.class ) - public void handleError( IllegalQueryException ex, HttpServletResponse response ) - { - ContextUtils.conflictResponse( response, ex.getMessage() ); - } - - @ExceptionHandler( IllegalArgumentException.class ) - public void handleError( IllegalArgumentException ex, HttpServletResponse response ) - { - ContextUtils.conflictResponse( response, ex.getMessage() ); - } - - // ------------------------------------------------------------------------- // Supportive methods // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/CrudControllerAdvice.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/CrudControllerAdvice.java 2014-06-12 09:41:31 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/CrudControllerAdvice.java 2014-07-10 10:27:53 +0000 @@ -28,8 +28,11 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import javax.validation.ConstraintViolationException; + import org.hisp.dhis.common.DeleteNotAllowedException; import org.hisp.dhis.common.IllegalQueryException; +import org.hisp.dhis.common.MaintenanceModeException; import org.hisp.dhis.webapi.controller.exception.NotAuthenticatedException; import org.hisp.dhis.webapi.controller.exception.NotFoundException; import org.springframework.http.HttpHeaders; @@ -42,8 +45,6 @@ import org.springframework.web.client.HttpServerErrorException; import org.springframework.web.client.HttpStatusCodeException; -import javax.validation.ConstraintViolationException; - /** * @author Morten Olav Hansen */ @@ -53,54 +54,51 @@ @ExceptionHandler public ResponseEntity notAuthenticatedExceptionHandler( NotAuthenticatedException ex ) { - HttpHeaders headers = new HttpHeaders(); - headers.add( "Content-Type", MediaType.TEXT_PLAIN_VALUE ); - - return new ResponseEntity<>( ex.getMessage(), headers, HttpStatus.UNAUTHORIZED ); + return new ResponseEntity<>( ex.getMessage(), getHeaders(), HttpStatus.UNAUTHORIZED ); } @ExceptionHandler( { NotFoundException.class } ) public ResponseEntity notFoundExceptionHandler( Exception ex ) { - HttpHeaders headers = new HttpHeaders(); - headers.add( "Content-Type", MediaType.TEXT_PLAIN_VALUE ); - - return new ResponseEntity<>( ex.getMessage(), headers, HttpStatus.NOT_FOUND ); + return new ResponseEntity<>( ex.getMessage(), getHeaders(), HttpStatus.NOT_FOUND ); } @ExceptionHandler( { HttpClientErrorException.class, HttpServerErrorException.class } ) public ResponseEntity httpClient( HttpStatusCodeException ex ) { - HttpHeaders headers = new HttpHeaders(); - headers.add( "Content-Type", MediaType.TEXT_PLAIN_VALUE ); - - return new ResponseEntity<>( ex.getStatusText(), headers, ex.getStatusCode() ); + return new ResponseEntity<>( ex.getStatusText(), getHeaders(), ex.getStatusCode() ); } @ExceptionHandler( ConstraintViolationException.class ) public ResponseEntity constraintViolationExceptionHandler( ConstraintViolationException ex ) { - HttpHeaders headers = new HttpHeaders(); - headers.add( "Content-Type", MediaType.TEXT_PLAIN_VALUE ); - - return new ResponseEntity<>( ex.getMessage(), headers, HttpStatus.UNPROCESSABLE_ENTITY ); + return new ResponseEntity<>( ex.getMessage(), getHeaders(), HttpStatus.UNPROCESSABLE_ENTITY ); } @ExceptionHandler( DeleteNotAllowedException.class ) public ResponseEntity deleteNotAllowedExceptionHandler( DeleteNotAllowedException ex ) { - HttpHeaders headers = new HttpHeaders(); - headers.add( "Content-Type", MediaType.TEXT_PLAIN_VALUE ); - - return new ResponseEntity<>( ex.getMessage(), headers, HttpStatus.CONFLICT ); + return new ResponseEntity<>( ex.getMessage(), getHeaders(), HttpStatus.CONFLICT ); } @ExceptionHandler( { IllegalQueryException.class, IllegalArgumentException.class } ) - public ResponseEntity handleError( IllegalQueryException ex ) + public ResponseEntity illegalQueryArgumentExceptionHandler( IllegalQueryException ex ) + { + return new ResponseEntity<>( ex.getMessage(), getHeaders(), HttpStatus.CONFLICT ); + } + + @ExceptionHandler( { MaintenanceModeException.class } ) + public ResponseEntity maintenanceModeExceptionHandler( MaintenanceModeException ex ) + { + return new ResponseEntity<>( ex.getMessage(), getHeaders(), HttpStatus.SERVICE_UNAVAILABLE ); + } + + private HttpHeaders getHeaders() { HttpHeaders headers = new HttpHeaders(); - headers.add( "Content-Type", MediaType.TEXT_PLAIN_VALUE ); - - return new ResponseEntity<>( ex.getMessage(), headers, HttpStatus.CONFLICT ); + headers.setContentType( MediaType.TEXT_PLAIN ); + headers.setCacheControl( "max-age=0, no-cache, no-store" ); + return headers; } } + === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/EventAnalyticsController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/EventAnalyticsController.java 2014-06-11 19:35:22 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/EventAnalyticsController.java 2014-07-10 10:27:53 +0000 @@ -28,11 +28,17 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import static org.hisp.dhis.analytics.AnalyticsService.NAMES_META_KEY; + +import java.util.Map; +import java.util.Set; + +import javax.servlet.http.HttpServletResponse; + import org.hisp.dhis.analytics.SortOrder; import org.hisp.dhis.analytics.event.EventAnalyticsService; import org.hisp.dhis.analytics.event.EventQueryParams; import org.hisp.dhis.common.Grid; -import org.hisp.dhis.common.IllegalQueryException; import org.hisp.dhis.i18n.I18nManager; import org.hisp.dhis.system.grid.GridUtils; import org.hisp.dhis.webapi.utils.ContextUtils; @@ -40,18 +46,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; -import javax.servlet.http.HttpServletResponse; -import java.util.Map; -import java.util.Set; - -import static org.hisp.dhis.analytics.AnalyticsService.NAMES_META_KEY; - /** * @author Lars Helge Overland */ @@ -337,22 +336,6 @@ } // ------------------------------------------------------------------------- - // Exception handling - // ------------------------------------------------------------------------- - - @ExceptionHandler( IllegalQueryException.class ) - public void handleError( IllegalQueryException ex, HttpServletResponse response ) - { - ContextUtils.conflictResponse( response, ex.getMessage() ); - } - - @ExceptionHandler( IllegalArgumentException.class ) - public void handleError( IllegalArgumentException ex, HttpServletResponse response ) - { - ContextUtils.conflictResponse( response, ex.getMessage() ); - } - - // ------------------------------------------------------------------------- // Supportive methods // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/utils/ContextUtils.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/utils/ContextUtils.java 2014-07-08 19:02:06 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/utils/ContextUtils.java 2014-07-10 10:27:53 +0000 @@ -191,7 +191,7 @@ { setResponse( response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message ); } - + private static void setResponse( HttpServletResponse response, int statusCode, String message ) { response.setStatus( statusCode ); === modified file 'dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/interceptor/SystemSettingInterceptor.java' --- dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/interceptor/SystemSettingInterceptor.java 2014-06-26 14:38:54 +0000 +++ dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/interceptor/SystemSettingInterceptor.java 2014-07-10 10:27:53 +0000 @@ -117,6 +117,7 @@ map.put( KEY_ONLY_MANAGE_WITHIN_USER_GROUPS, systemSettingManager.getSystemSetting( KEY_ONLY_MANAGE_WITHIN_USER_GROUPS, false ) ); map.put( KEY_CUSTOM_LOGIN_PAGE_LOGO, systemSettingManager.getSystemSetting( KEY_CUSTOM_LOGIN_PAGE_LOGO, false ) ); map.put( KEY_CUSTOM_TOP_MENU_LOGO, systemSettingManager.getSystemSetting( KEY_CUSTOM_TOP_MENU_LOGO, false ) ); + map.put( KEY_ANALYTICS_MAINTENANCE_MODE, systemSettingManager.getSystemSetting( KEY_ANALYTICS_MAINTENANCE_MODE, false ) ); map.put( SYSPROP_PORTAL, defaultIfEmpty( System.getProperty( SYSPROP_PORTAL ), String.valueOf( false ) ) ); invocation.getStack().push( map ); === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-settings/src/main/java/org/hisp/dhis/settings/action/system/SetGeneralSettingsAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-settings/src/main/java/org/hisp/dhis/settings/action/system/SetGeneralSettingsAction.java 2014-07-07 08:05:58 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-settings/src/main/java/org/hisp/dhis/settings/action/system/SetGeneralSettingsAction.java 2014-07-10 10:27:53 +0000 @@ -175,6 +175,13 @@ this.multiOrganisationUnitForms = multiOrganisationUnitForms; } + private boolean analyticsMaintenanceMode; + + public void setAnalyticsMaintenanceMode( boolean analyticsMaintenanceMode ) + { + this.analyticsMaintenanceMode = analyticsMaintenanceMode; + } + private String calendar; public void setCalendar( String calendar ) @@ -218,6 +225,7 @@ systemSettingManager.saveSystemSetting( KEY_GOOGLE_ANALYTICS_UA, googleAnalyticsUA ); systemSettingManager.saveSystemSetting( KEY_CALENDAR, calendar ); systemSettingManager.saveSystemSetting( KEY_DATE_FORMAT, dateFormat ); + systemSettingManager.saveSystemSetting( KEY_ANALYTICS_MAINTENANCE_MODE, analyticsMaintenanceMode ); Configuration configuration = configurationService.getConfiguration(); === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-settings/src/main/resources/org/hisp/dhis/settings/i18n_module.properties' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-settings/src/main/resources/org/hisp/dhis/settings/i18n_module.properties 2014-07-08 16:14:10 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-settings/src/main/resources/org/hisp/dhis/settings/i18n_module.properties 2014-07-10 10:27:53 +0000 @@ -112,4 +112,6 @@ remote_server_username=Remote server username remote_server_password=Remote server password intro_data_synchronization = A data synchronization with remote server functionality -recommended=recommended \ No newline at end of file +recommended=recommended +put_analytics_in_maintenance_mode=Put analytics in maintenance mode +returns=returns === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-settings/src/main/webapp/dhis-web-maintenance-settings/systemGeneralSettings.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-settings/src/main/webapp/dhis-web-maintenance-settings/systemGeneralSettings.vm 2014-05-13 11:15:35 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-settings/src/main/webapp/dhis-web-maintenance-settings/systemGeneralSettings.vm 2014-07-10 10:27:53 +0000 @@ -12,7 +12,8 @@ factorDeviation: getFieldValue('factorDeviation'), phoneNumberAreaCode: getFieldValue('phoneNumberAreaCode'), googleAnalyticsUA: getFieldValue('googleAnalyticsUA'), - multiOrganisationUnitForms: jQuery('#multiOrganisationUnitForms').is(':checked') + multiOrganisationUnitForms: jQuery('#multiOrganisationUnitForms').is(':checked'), + analyticsMaintenanceMode: jQuery('#analyticsMaintenanceMode').is(':checked') }, function( json ) { if( json.response == "success" ) { setHeaderDelayMessage(json.message); @@ -116,4 +117,9 @@ +
+ + +
+