Skip to content

Commit fe62b05

Browse files
author
Peter Moser
committedMar 2, 2022
writer: add provenance info to each call from dc-interfaces
1 parent 8ea54bb commit fe62b05

File tree

4 files changed

+151
-70
lines changed

4 files changed

+151
-70
lines changed
 

‎calls.http

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ GET {{host}}/json/getDateOfLastRecord/MeteoStation?stationId=T0009&period=900
5959
Authorization: Bearer {{authtoken}}
6060

6161
### Post some data to the writer
62-
POST {{host}}/json/provenance
62+
POST {{host}}/json/provenance?prn=test&prv=11111
6363
Content-Type: application/json
6464
Authorization: Bearer {{authtoken}}
6565

‎dc-interface/src/main/java/it/bz/idm/bdp/json/JSONPusher.java

+67-46
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,16 @@
2727

2828
import javax.annotation.PostConstruct;
2929

30+
import org.springframework.http.HttpEntity;
31+
import org.springframework.http.HttpMethod;
32+
import org.springframework.http.ResponseEntity;
3033
import org.springframework.stereotype.Component;
3134
import org.springframework.web.client.RestTemplate;
3235

3336
import it.bz.idm.bdp.DataPusher;
3437
import it.bz.idm.bdp.dto.DataMapDto;
3538
import it.bz.idm.bdp.dto.DataTypeDto;
39+
import it.bz.idm.bdp.dto.ProvenanceDto;
3640
import it.bz.idm.bdp.dto.RecordDtoImpl;
3741
import it.bz.idm.bdp.dto.StationDto;
3842
import it.bz.idm.bdp.dto.StationList;
@@ -68,25 +72,36 @@ public void init() {
6872
public Object pushData(String datasourceName, DataMapDto<? extends RecordDtoImpl> dto) {
6973
this.pushProvenance();
7074
dto.setProvenance(this.provenance.getUuid());
71-
return restTemplate.postForObject(
72-
url + PUSH_RECORDS + "{datasourceName}?prn={}&prv={}",
73-
dto,
74-
Object.class,
75-
datasourceName,
76-
provenance.getDataCollector(),
77-
provenance.getDataCollectorVersion()
78-
);
75+
return restTemplate
76+
.exchange(
77+
url + PUSH_RECORDS + "{datasourceName}?prn={}&prv={}",
78+
HttpMethod.POST,
79+
new HttpEntity<DataMapDto<? extends RecordDtoImpl>>(dto),
80+
Object.class,
81+
datasourceName,
82+
provenance.getDataCollector(),
83+
provenance.getDataCollectorVersion()
84+
)
85+
.getBody();
7986
}
8087

8188
private void pushProvenance() {
82-
String provenanceUuid = restTemplate.postForObject(
89+
// We know that the provenance exist, and which UUID it has.
90+
// So we do not need to get that information again from the DB
91+
// This approach assumes, that the DB will not change from any
92+
// other caller.
93+
if (this.provenance.getUuid() != null) {
94+
return;
95+
}
96+
ResponseEntity<String> provenanceUuid = restTemplate.exchange(
8397
url + PROVENANCE + "?prn={}&prv={}",
84-
this.provenance,
98+
HttpMethod.POST,
99+
new HttpEntity<ProvenanceDto>(this.provenance),
85100
String.class,
86101
provenance.getDataCollector(),
87102
provenance.getDataCollectorVersion()
88103
);
89-
this.provenance.setUuid(provenanceUuid);
104+
this.provenance.setUuid(provenanceUuid.getBody());
90105
}
91106

92107
public Object pushData(DataMapDto<? extends RecordDtoImpl> dto) {
@@ -102,27 +117,33 @@ public Object syncStations(StationList data) {
102117
public Object syncStations(String datasourceName, StationList data) {
103118
if (data == null)
104119
return null;
105-
return restTemplate.postForObject(
106-
url + SYNC_STATIONS + "{datasourceName}?prn={}&prv={}",
107-
data,
108-
Object.class,
109-
datasourceName,
110-
provenance.getDataCollector(),
111-
provenance.getDataCollectorVersion()
112-
);
120+
return restTemplate
121+
.exchange(
122+
url + SYNC_STATIONS + "{datasourceName}?prn={}&prv={}",
123+
HttpMethod.POST,
124+
new HttpEntity<StationList>(data),
125+
Object.class,
126+
datasourceName,
127+
provenance.getDataCollector(),
128+
provenance.getDataCollectorVersion()
129+
)
130+
.getBody();
113131
}
114132

115133
@Override
116134
public Object syncDataTypes(String datasourceName, List<DataTypeDto> data) {
117135
if (data == null)
118136
return null;
119-
return restTemplate.postForObject(
120-
url + SYNC_DATA_TYPES + "?prn={}&prv={}",
121-
data,
122-
Object.class,
123-
provenance.getDataCollector(),
124-
provenance.getDataCollectorVersion()
125-
);
137+
return restTemplate
138+
.exchange(
139+
url + SYNC_DATA_TYPES + "?prn={}&prv={}",
140+
HttpMethod.POST,
141+
new HttpEntity<List<DataTypeDto>>(data),
142+
Object.class,
143+
provenance.getDataCollector(),
144+
provenance.getDataCollectorVersion()
145+
)
146+
.getBody();
126147
}
127148

128149
public Object syncDataTypes(List<DataTypeDto> data) {
@@ -131,16 +152,17 @@ public Object syncDataTypes(List<DataTypeDto> data) {
131152

132153
@Override
133154
public Object getDateOfLastRecord(String stationCode, String dataType, Integer period) {
134-
return restTemplate.getForObject(
135-
url + GET_DATE_OF_LAST_RECORD + "{datasourceName}/?stationId={stationId}&typeId={dataType}&period={period}&prn={}&prv={}",
136-
Date.class,
137-
this.integreenTypology,
138-
stationCode,
139-
dataType,
140-
period,
141-
provenance.getDataCollector(),
142-
provenance.getDataCollectorVersion()
143-
);
155+
return restTemplate
156+
.getForObject(
157+
url + GET_DATE_OF_LAST_RECORD + "{datasourceName}/?stationId={stationId}&typeId={dataType}&period={period}&prn={}&prv={}",
158+
Date.class,
159+
this.integreenTypology,
160+
stationCode,
161+
dataType,
162+
period,
163+
provenance.getDataCollector(),
164+
provenance.getDataCollectorVersion()
165+
);
144166
}
145167

146168
@Override
@@ -150,16 +172,15 @@ public void connectToDataCenterCollector() {
150172

151173
@Override
152174
public List<StationDto> fetchStations(String datasourceName, String origin) {
153-
if (datasourceName == null)
154-
datasourceName = this.integreenTypology;
155-
StationDto[] object = restTemplate.getForObject(
156-
url + STATIONS +"{datasourceName}/?origin={origin}&prn={}&prv={}",
157-
StationDto[].class,
158-
datasourceName,
159-
origin,
160-
provenance.getDataCollector(),
161-
provenance.getDataCollectorVersion()
162-
);
175+
StationDto[] object = restTemplate
176+
.getForObject(
177+
url + STATIONS +"{datasourceName}/?origin={origin}&prn={}&prv={}",
178+
StationDto[].class,
179+
datasourceName == null ? this.integreenTypology : datasourceName,
180+
origin,
181+
provenance.getDataCollector(),
182+
provenance.getDataCollectorVersion()
183+
);
163184
return Arrays.asList(object);
164185
}
165186

‎dc-interface/src/main/java/it/bz/idm/bdp/json/NonBlockingJSONPusher.java

+80-20
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,33 @@ public void init() {
7272
public Object pushData(String datasourceName, DataMapDto<? extends RecordDtoImpl> dto) {
7373
this.pushProvenance();
7474
dto.setProvenance(this.provenance.getUuid());
75-
return client.post().uri(PUSH_RECORDS + datasourceName).body(Mono.just(dto), Object.class).retrieve()
76-
.bodyToMono(Object.class).block();
75+
return client
76+
.post()
77+
.uri(uriBuilder -> uriBuilder
78+
.path(PUSH_RECORDS + datasourceName)
79+
.queryParam("prn", provenance.getDataCollector())
80+
.queryParam("prv", provenance.getDataCollectorVersion())
81+
.build()
82+
)
83+
.body(Mono.just(dto), Object.class)
84+
.retrieve()
85+
.bodyToMono(Object.class)
86+
.block();
7787
}
7888

7989
private void pushProvenance() {
80-
String provenanceUuid = client.post().uri(PROVENANCE).body(Mono.just(this.provenance), ProvenanceDto.class).retrieve()
81-
.bodyToMono(String.class).block();
90+
String provenanceUuid = client
91+
.post()
92+
.uri(uriBuilder -> uriBuilder
93+
.path(PROVENANCE)
94+
.queryParam("prn", provenance.getDataCollector())
95+
.queryParam("prv", provenance.getDataCollectorVersion())
96+
.build()
97+
)
98+
.body(Mono.just(this.provenance), ProvenanceDto.class)
99+
.retrieve()
100+
.bodyToMono(String.class)
101+
.block();
82102
this.provenance.setUuid(provenanceUuid);
83103
}
84104

@@ -95,16 +115,36 @@ public Object syncStations(StationList data) {
95115
public Object syncStations(String datasourceName, StationList data) {
96116
if (data == null)
97117
return null;
98-
return client.post().uri(SYNC_STATIONS + datasourceName).body(Mono.just(data), Object.class).retrieve()
99-
.bodyToMono(Object.class).block();
118+
return client
119+
.post()
120+
.uri(uriBuilder -> uriBuilder
121+
.path(SYNC_STATIONS + datasourceName)
122+
.queryParam("prn", provenance.getDataCollector())
123+
.queryParam("prv", provenance.getDataCollectorVersion())
124+
.build()
125+
)
126+
.body(Mono.just(data), Object.class)
127+
.retrieve()
128+
.bodyToMono(Object.class)
129+
.block();
100130
}
101131

102132
@Override
103133
public Object syncDataTypes(String datasourceName, List<DataTypeDto> data) {
104134
if (data == null)
105135
return null;
106-
return client.post().uri(SYNC_DATA_TYPES).body(Mono.just(data), Object.class).retrieve()
107-
.bodyToMono(Object.class).block();
136+
return client
137+
.post()
138+
.uri(uriBuilder -> uriBuilder
139+
.path(SYNC_DATA_TYPES)
140+
.queryParam("prn", provenance.getDataCollector())
141+
.queryParam("prv", provenance.getDataCollectorVersion())
142+
.build()
143+
)
144+
.body(Mono.just(data), Object.class)
145+
.retrieve()
146+
.bodyToMono(Object.class)
147+
.block();
108148
}
109149

110150
public Object syncDataTypes(List<DataTypeDto> data) {
@@ -113,12 +153,20 @@ public Object syncDataTypes(List<DataTypeDto> data) {
113153

114154
@Override
115155
public Object getDateOfLastRecord(String stationCode, String dataType, Integer period) {
116-
return client.get().uri(uriBuilder -> uriBuilder
117-
.path(GET_DATE_OF_LAST_RECORD + this.integreenTypology)
118-
.queryParam("stationId", stationCode)
119-
.queryParam("typeId", dataType)
120-
.queryParam("period", period).build())
121-
.retrieve().bodyToMono(Date.class).block();
156+
return client
157+
.get()
158+
.uri(uriBuilder -> uriBuilder
159+
.path(GET_DATE_OF_LAST_RECORD + this.integreenTypology)
160+
.queryParam("stationId", stationCode)
161+
.queryParam("typeId", dataType)
162+
.queryParam("period", period)
163+
.queryParam("prn", provenance.getDataCollector())
164+
.queryParam("prv", provenance.getDataCollectorVersion())
165+
.build()
166+
)
167+
.retrieve()
168+
.bodyToMono(Date.class)
169+
.block();
122170
}
123171

124172
@Override
@@ -128,11 +176,18 @@ public void connectToDataCenterCollector() {
128176

129177
@Override
130178
public List<StationDto> fetchStations(String datasourceName, String origin) {
131-
final String uri = STATIONS + datasourceName;
132-
if (datasourceName == null)
133-
datasourceName = this.integreenTypology;
134-
StationDto[] object = client.get().uri(uriBuilder->uriBuilder.path(uri).queryParam("origin", "{origin}").build(origin)).retrieve()
135-
.bodyToMono(StationDto[].class).block();
179+
StationDto[] object = client
180+
.get()
181+
.uri(uriBuilder->uriBuilder
182+
.path(datasourceName == null ? STATIONS + this.integreenTypology : STATIONS + datasourceName)
183+
.queryParam("origin", "{origin}")
184+
.queryParam("prn", provenance.getDataCollector())
185+
.queryParam("prv", provenance.getDataCollectorVersion())
186+
.build(origin)
187+
)
188+
.retrieve()
189+
.bodyToMono(StationDto[].class)
190+
.block();
136191
return Arrays.asList(object);
137192
}
138193

@@ -147,7 +202,12 @@ public Object addEvents(List<EventDto> dtos) {
147202
}
148203
return client
149204
.post()
150-
.uri(EVENTS)
205+
.uri(uriBuilder->uriBuilder
206+
.path(EVENTS)
207+
.queryParam("prn", provenance.getDataCollector())
208+
.queryParam("prv", provenance.getDataCollectorVersion())
209+
.build()
210+
)
151211
.body(Mono.just(dtos), Object.class)
152212
.retrieve()
153213
.bodyToMono(Object.class)

‎writer/src/main/java/it/bz/idm/bdp/writer/JsonController.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,8 @@ public ResponseEntity<Date> dateOfLastRecord(
100100
HttpServletRequest request,
101101
@PathVariable("integreenTypology") String stationType,
102102
@RequestParam("stationId") String stationId,
103-
@RequestParam(value="typeId", required=false) String typeId,
104-
@RequestParam(value="period", required=false) Integer period,
103+
@RequestParam(value = "typeId", required = false) String typeId,
104+
@RequestParam(value = "period", required = false) Integer period,
105105
@RequestParam(value = "prn", required = false) String proveanceName,
106106
@RequestParam(value = "prv", required = false) String provenanceVersion
107107
) {
@@ -113,7 +113,7 @@ public ResponseEntity<Date> dateOfLastRecord(
113113
public Object stationsGetList(
114114
HttpServletRequest request,
115115
@PathVariable("integreenTypology") String stationType,
116-
@RequestParam(value="origin", required=false) String origin,
116+
@RequestParam(value = "origin", required = false) String origin,
117117
@RequestParam(value = "prn", required = false) String proveanceName,
118118
@RequestParam(value = "prv", required = false) String provenanceVersion
119119
) {

0 commit comments

Comments
 (0)
Please sign in to comment.