use of org.hisp.dhis.dxf2.synch.SystemInstance in project dhis2-core by dhis2.
the class DefaultSynchronizationManager method executeDataPush.
/**
* Executes a push of data values to the given remote instance.
*
* @param instance the remote system instance.
* @return an ImportSummary.
*/
private ImportSummary executeDataPush(SystemInstance instance) throws WebMessageParseException {
// ---------------------------------------------------------------------
// Set time for last success to start of process to make data saved
// subsequently part of next synch process without being ignored
// ---------------------------------------------------------------------
final Date startTime = new Date();
final Date lastSuccessTime = getLastDataSynchSuccessFallback();
final int lastUpdatedCount = dataValueService.getDataValueCountLastUpdatedAfter(lastSuccessTime, true);
log.info("Values: " + lastUpdatedCount + " since last synch success: " + lastSuccessTime);
if (lastUpdatedCount == 0) {
log.debug("Skipping synch, no new or updated data values");
return null;
}
log.info("Values: " + lastUpdatedCount + " since last synch success: " + lastSuccessTime);
log.info("Remote server POST URL: " + instance.getUrl());
final RequestCallback requestCallback = request -> {
request.getHeaders().setContentType(MediaType.APPLICATION_JSON);
request.getHeaders().add(HEADER_AUTHORIZATION, CodecUtils.getBasicAuthString(instance.getUsername(), instance.getPassword()));
dataValueSetService.writeDataValueSetJson(lastSuccessTime, request.getBody(), new IdSchemes());
};
ResponseExtractor<ImportSummary> responseExtractor = new ImportSummaryResponseExtractor();
ImportSummary summary = null;
try {
summary = restTemplate.execute(instance.getUrl(), HttpMethod.POST, requestCallback, responseExtractor);
} catch (HttpClientErrorException ex) {
String responseBody = ex.getResponseBodyAsString();
summary = WebMessageParseUtils.fromWebMessageResponse(responseBody, ImportSummary.class);
} catch (HttpServerErrorException ex) {
String responseBody = ex.getResponseBodyAsString();
log.error("Internal error happened during event data push: " + responseBody, ex);
throw ex;
} catch (ResourceAccessException ex) {
log.error("Exception during event data push: " + ex.getMessage(), ex);
throw ex;
}
log.info("Synch summary: " + summary);
if (summary != null && ImportStatus.SUCCESS.equals(summary.getStatus())) {
setLastDataSynchSuccess(startTime);
log.info("Synch successful, setting last success time: " + startTime);
} else {
log.warn("Sync failed: " + summary);
}
return summary;
}
use of org.hisp.dhis.dxf2.synch.SystemInstance in project dhis2-core by dhis2.
the class SyncUtils method getRemoteInstanceWithSyncImportStrategy.
static SystemInstance getRemoteInstanceWithSyncImportStrategy(SystemSettingManager systemSettingManager, SyncEndpoint syncEndpoint) {
SystemInstance systemInstance = getRemoteInstance(systemSettingManager, syncEndpoint);
systemInstance.setUrl(systemInstance.getUrl() + SyncUtils.IMPORT_STRATEGY_SYNC_SUFFIX);
return systemInstance;
}
use of org.hisp.dhis.dxf2.synch.SystemInstance in project dhis2-core by dhis2.
the class DefaultSynchronizationManager method executeDataValuePush.
/**
* Executes a push of data values to the given remote instance.
*
* @param instance the remote system instance.
* @return an ImportSummary.
*/
private ImportConflicts executeDataValuePush(SystemInstance instance) throws WebMessageParseException {
// ---------------------------------------------------------------------
// Set time for last success to start of process to make data saved
// subsequently part of next synch process without being ignored
// ---------------------------------------------------------------------
final Date startTime = new Date();
final Date lastSuccessTime = SyncUtils.getLastSyncSuccess(systemSettingManager, SettingKey.LAST_SUCCESSFUL_DATA_VALUE_SYNC);
final Date skipChangedBefore = systemSettingManager.getDateSetting(SettingKey.SKIP_SYNCHRONIZATION_FOR_DATA_CHANGED_BEFORE);
final Date lastUpdatedAfter = lastSuccessTime.after(skipChangedBefore) ? lastSuccessTime : skipChangedBefore;
final int objectsToSynchronize = dataValueService.getDataValueCountLastUpdatedAfter(lastUpdatedAfter, true);
log.info("DataValues last changed before " + skipChangedBefore + " will not be synchronized.");
if (objectsToSynchronize == 0) {
SyncUtils.setLastSyncSuccess(systemSettingManager, SettingKey.LAST_SUCCESSFUL_DATA_VALUE_SYNC, startTime);
log.debug("Skipping data values push, no new or updated data values");
ImportCount importCount = new ImportCount(0, 0, 0, 0);
return new ImportSummary(ImportStatus.SUCCESS, "No new or updated data values to push.", importCount);
}
log.info("Data Values: " + objectsToSynchronize + " to push since last synchronization success: " + lastSuccessTime);
log.info("Remote server POST URL: " + instance.getUrl());
final RequestCallback requestCallback = request -> {
request.getHeaders().setContentType(MediaType.APPLICATION_JSON);
request.getHeaders().add(HEADER_AUTHORIZATION, CodecUtils.getBasicAuthString(instance.getUsername(), instance.getPassword()));
dataValueSetService.exportDataValueSetJson(lastUpdatedAfter, request.getBody(), new IdSchemes());
};
final int maxSyncAttempts = systemSettingManager.getIntSetting(SettingKey.MAX_SYNC_ATTEMPTS);
Optional<AbstractWebMessageResponse> responseSummary = SyncUtils.runSyncRequest(restTemplate, requestCallback, SyncEndpoint.DATA_VALUE_SETS.getKlass(), instance.getUrl(), maxSyncAttempts);
ImportSummary summary = null;
if (responseSummary.isPresent()) {
summary = (ImportSummary) responseSummary.get();
if (ImportStatus.SUCCESS.equals(summary.getStatus())) {
log.info("Push successful: " + summary);
} else {
log.warn("Push failed: " + summary);
}
}
return summary;
}
use of org.hisp.dhis.dxf2.synch.SystemInstance in project dhis2-core by dhis2.
the class SyncUtilsTest method getRemoteInstanceWithSyncImportStrategyTest.
@Test
void getRemoteInstanceWithSyncImportStrategyTest() {
systemSettingManager.saveSystemSetting(SettingKey.REMOTE_INSTANCE_URL, URL);
SystemInstance systemInstance = SyncUtils.getRemoteInstanceWithSyncImportStrategy(systemSettingManager, SyncEndpoint.EVENTS);
assertThat(systemInstance.getUrl(), is(EVENTS_URL_WITH_SYNC_STRATEGY));
}
use of org.hisp.dhis.dxf2.synch.SystemInstance in project dhis2-core by dhis2.
the class SyncUtilsTest method getRemoteInstanceTest.
@Test
void getRemoteInstanceTest() {
systemSettingManager.saveSystemSetting(SettingKey.REMOTE_INSTANCE_USERNAME, USERNAME);
systemSettingManager.saveSystemSetting(SettingKey.REMOTE_INSTANCE_PASSWORD, PASSWORD);
systemSettingManager.saveSystemSetting(SettingKey.REMOTE_INSTANCE_URL, URL);
SystemInstance systemInstance = SyncUtils.getRemoteInstance(systemSettingManager, SyncEndpoint.EVENTS);
assertThat(systemInstance.getUsername(), is(USERNAME));
assertThat(systemInstance.getPassword(), is(PASSWORD));
assertThat(systemInstance.getUrl(), is(EVENTS_URL));
}
Aggregations