=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/RelativePeriods.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/RelativePeriods.java 2011-11-14 12:19:36 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/RelativePeriods.java 2011-11-24 16:04:56 +0000 @@ -482,8 +482,8 @@ } /** - * Creates an instance of RelativePeriods based on the scheduledPeriodTypes - * set from Configuration. + * Creates an instance of RelativePeriods based on given set of PeriodType + * names. * * @param config the Configuration object. * @return a RelativePeriods instance. === modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/scheduling/SchedulingManager.java' --- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/scheduling/SchedulingManager.java 2011-11-24 13:19:36 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/scheduling/SchedulingManager.java 2011-11-24 16:04:56 +0000 @@ -35,6 +35,8 @@ public interface SchedulingManager { final String TASK_DATAMART_LAST_12_MONTHS = "dataMartLast12MonthsTask"; + final String TASK_DATAMART_LAST_6_MONTS = "dataMartLast6MonthsTask"; + final String TASK_DATAMART_FROM_6_TO_12_MONTS = "dataMartFrom6To12MonthsTask"; void scheduleTasks(); === modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-services/dhis-service-reporting/src/main/resources/META-INF/dhis/beans.xml 2011-11-24 13:19:36 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/resources/META-INF/dhis/beans.xml 2011-11-24 16:04:56 +0000 @@ -277,6 +277,8 @@ + + @@ -286,10 +288,19 @@ + + + + + + + + + === modified file 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/scheduling/DataMartTask.java' --- dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/scheduling/DataMartTask.java 2011-11-24 10:38:05 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/scheduling/DataMartTask.java 2011-11-24 16:04:56 +0000 @@ -30,10 +30,14 @@ import static org.hisp.dhis.options.SystemSettingManager.DEFAULT_SCHEDULED_PERIOD_TYPES; import static org.hisp.dhis.options.SystemSettingManager.KEY_SCHEDULED_PERIOD_TYPES; +import java.util.Calendar; import java.util.Collection; -import java.util.HashSet; +import java.util.Date; +import java.util.List; import java.util.Set; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.hisp.dhis.completeness.DataSetCompletenessService; import org.hisp.dhis.dataelement.DataElement; import org.hisp.dhis.dataelement.DataElementService; @@ -45,8 +49,13 @@ import org.hisp.dhis.options.SystemSettingManager; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitService; +import org.hisp.dhis.period.Cal; +import org.hisp.dhis.period.Period; +import org.hisp.dhis.period.PeriodService; import org.hisp.dhis.period.RelativePeriods; import org.hisp.dhis.system.util.ConversionUtils; +import org.hisp.dhis.system.util.Filter; +import org.hisp.dhis.system.util.FilterUtils; /** * @author Lars Helge Overland @@ -54,6 +63,8 @@ public class DataMartTask implements Runnable { + private static final Log log = LogFactory.getLog( DataMartTask.class ); + private DataMartService dataMartService; private DataSetCompletenessService completenessService; @@ -61,21 +72,38 @@ private DataElementService dataElementService; private IndicatorService indicatorService; + + private PeriodService periodService; private OrganisationUnitService organisationUnitService; private DataSetService dataSetService; private SystemSettingManager systemSettingManager; + + private boolean last6Months; + + public void setLast6Months( boolean last6Months ) + { + this.last6Months = last6Months; + } + + private boolean from6To12Months; + public void setFrom6To12Months( boolean from6To12Months ) + { + this.from6To12Months = from6To12Months; + } + public DataMartTask( DataMartService dataMartService, DataSetCompletenessService completenessService, - DataElementService dataElementService, IndicatorService indicatorService, + DataElementService dataElementService, IndicatorService indicatorService, PeriodService periodService, OrganisationUnitService organisationUnitService, DataSetService dataSetService, SystemSettingManager systemSettingManager ) { this.dataMartService = dataMartService; this.completenessService = completenessService; this.dataElementService = dataElementService; this.indicatorService = indicatorService; + this.periodService = periodService; this.organisationUnitService = organisationUnitService; this.dataSetService = dataSetService; this.systemSettingManager = systemSettingManager; @@ -91,10 +119,37 @@ Collection dataSetIds = ConversionUtils.getIdentifiers( DataSet.class, dataSetService.getAllDataSets() ); Set periodTypes = (Set) systemSettingManager.getSystemSetting( KEY_SCHEDULED_PERIOD_TYPES, DEFAULT_SCHEDULED_PERIOD_TYPES ); - - RelativePeriods relatives = new RelativePeriods().getRelativePeriods( periodTypes ); - - dataMartService.export( dataElementIds, indicatorIds, new HashSet(), organisationUnitIds, relatives, true ); - completenessService.exportDataSetCompleteness( dataSetIds, relatives, organisationUnitIds ); + + List periods = new RelativePeriods().getRelativePeriods( periodTypes ).getRelativePeriods(); + + final Date date = new Cal().now().subtract( Calendar.MONTH, 6 ).time(); + + if ( last6Months ) + { + FilterUtils.filter( periods, new Filter() + { + public boolean retain( Period period ) + { + return period != null && period.getStartDate().compareTo( date ) > 0; + } + } ); + } + else if ( from6To12Months ) + { + FilterUtils.filter( periods, new Filter() + { + public boolean retain( Period period ) + { + return period != null && period.getStartDate().compareTo( date ) <= 0; + } + } ); + } + + log.info( "Using periods: " + periods ); + + Collection periodIds = ConversionUtils.getIdentifiers( Period.class, periodService.reloadPeriods( periods ) ); + + dataMartService.export( dataElementIds, indicatorIds, periodIds, organisationUnitIds, null, true ); + completenessService.exportDataSetCompleteness( dataSetIds, periodIds, organisationUnitIds ); } } === modified file 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/scheduling/Scheduler.java' --- dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/scheduling/Scheduler.java 2011-11-24 13:19:36 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/scheduling/Scheduler.java 2011-11-24 16:04:56 +0000 @@ -32,8 +32,10 @@ */ public interface Scheduler { - final String CRON_NIGHTLY_0AM = "0 0 0 * * ?"; - final String CRON_NIGHTLY_1AM = "0 0 1 * * ?"; + final String CRON_DAILY_0AM = "0 0 0 * * ?"; + final String CRON_DAILY_1AM = "0 0 1 * * ?"; + final String CRON_DAILY_0AM_EXCEPT_SUNDAY = "0 0 0 ? * 2-7"; + final String CRON_WEEKLY_SUNDAY_0AM = "0 0 0 ? * 1"; final String CRON_TEST = "0 * * * * ?"; final String STATUS_RUNNING = "running"; === modified file 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/scheduling/SpringScheduler.java' --- dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/scheduling/SpringScheduler.java 2011-11-24 13:19:36 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/scheduling/SpringScheduler.java 2011-11-24 16:04:56 +0000 @@ -28,6 +28,7 @@ */ import java.util.HashMap; +import java.util.Iterator; import java.util.Map; import java.util.concurrent.ScheduledFuture; @@ -82,7 +83,7 @@ futures.put( key, future ); - log.info( "Scheduled task with key: " + key ); + log.info( "Scheduled task with key: " + key + " and cron: " + cronExpr ); return true; } @@ -100,7 +101,7 @@ futures.remove( key ); - log.info( "Stopped task with key: " + key ); + log.info( "Stopped task with key: " + key + " successfully: " + result ); return result; } @@ -110,9 +111,19 @@ public void stopAllTasks() { - for ( String key : futures.keySet() ) + Iterator keys = futures.keySet().iterator(); + + while ( keys.hasNext() ) { - stopTask( key ); + String key = keys.next(); + + ScheduledFuture future = futures.get( key ); + + boolean result = future != null ? future.cancel( true ) : false; + + keys.remove(); + + log.info( "Stopped task with key: " + key + " successfully: " + result ); } } === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/scheduling/ScheduleTasksAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/scheduling/ScheduleTasksAction.java 2011-11-24 13:19:36 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/scheduling/ScheduleTasksAction.java 2011-11-24 16:04:56 +0000 @@ -47,8 +47,9 @@ public class ScheduleTasksAction implements Action { - private static final String STRATEGY_DATAMART_LAST_12_MONTHS_DAILY = "dataMartLast12MonthsDaily"; - + private static final String STRATEGY_LAST_12_DAILY = "last12Daily"; + private static final String STRATEGY_LAST_6_DAILY_6_TO_12_WEEKLY = "last6Daily6To12Weekly"; + // ------------------------------------------------------------------------- // Dependencies // ------------------------------------------------------------------------- @@ -94,6 +95,11 @@ private String dataMartStrategy; + public String getDataMartStrategy() + { + return dataMartStrategy; + } + public void setDataMartStrategy( String dataMartStrategy ) { this.dataMartStrategy = dataMartStrategy; @@ -147,14 +153,24 @@ { Map keyCronMap = new HashMap(); - if ( STRATEGY_DATAMART_LAST_12_MONTHS_DAILY.equals( dataMartStrategy ) ) - { - keyCronMap.put( SchedulingManager.TASK_DATAMART_LAST_12_MONTHS, Scheduler.CRON_NIGHTLY_0AM ); + if ( STRATEGY_LAST_12_DAILY.equals( dataMartStrategy ) ) + { + keyCronMap.put( SchedulingManager.TASK_DATAMART_LAST_12_MONTHS, Scheduler.CRON_DAILY_0AM ); + } + else if ( STRATEGY_LAST_6_DAILY_6_TO_12_WEEKLY.equals( dataMartStrategy ) ) + { + keyCronMap.put( SchedulingManager.TASK_DATAMART_LAST_6_MONTS, Scheduler.CRON_DAILY_0AM_EXCEPT_SUNDAY ); + keyCronMap.put( SchedulingManager.TASK_DATAMART_FROM_6_TO_12_MONTS, Scheduler.CRON_WEEKLY_SUNDAY_0AM ); } schedulingManager.scheduleTasks( keyCronMap ); } } + else + { + dataMartStrategy = schedulingManager.getScheduledTasks().containsKey( SchedulingManager.TASK_DATAMART_LAST_12_MONTHS ) ? + STRATEGY_LAST_12_DAILY : STRATEGY_LAST_6_DAILY_6_TO_12_WEEKLY; + } status = schedulingManager.getTaskStatus(); running = Scheduler.STATUS_RUNNING.equals( status ); === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/resources/org/hisp/dhis/dataadmin/i18n_module.properties' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/resources/org/hisp/dhis/dataadmin/i18n_module.properties 2011-11-02 14:39:42 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/resources/org/hisp/dhis/dataadmin/i18n_module.properties 2011-11-24 16:04:56 +0000 @@ -369,4 +369,8 @@ not_started = not started running = running done = done -stopped = stopped \ No newline at end of file +stopped = stopped +datamart_task_strategy = Data mart task strategy +never = Never +last_12_months_daily = Last 12 months daily +last_6_months_daily_6_to_12_months_weekly = Last 6 months daily + 6 to 12 months weekly \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/viewScheduledTasks.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/viewScheduledTasks.vm 2011-11-24 13:19:36 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/viewScheduledTasks.vm 2011-11-24 16:04:56 +0000 @@ -5,8 +5,6 @@
- - @@ -22,6 +20,21 @@ + + + + + + + + +
$i18n.getString( "aggregation_period_types" )
$i18n.getString( "datamart_task_strategy" )
+ +