Skip to content

Commit

Permalink
Lagt til logging av CallId i kall mot pensjon (#3438)
Browse files Browse the repository at this point in the history
* Refaktorert PensjonforvalterClient og PensjonforvalterConsumer, lagt til en del logging og callID i kallet
  • Loading branch information
stigus authored Apr 3, 2024
1 parent 336881c commit 75528ba
Show file tree
Hide file tree
Showing 12 changed files with 150 additions and 125 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -95,28 +95,6 @@ public class PensjonforvalterClient implements ClientRegister {
private final ObjectMapper objectMapper;
private final Norg2Consumer norg2Consumer;

public static PensjonforvalterResponse mergePensjonforvalterResponses(List<PensjonforvalterResponse> responser) {

var status = new HashMap<String, PensjonforvalterResponse.Response>();
responser.forEach(respons -> respons.getStatus()
.forEach(detalj -> {
if (detalj.getResponse().isResponse2xx()) {
status.putIfAbsent(detalj.getMiljo(), detalj.getResponse());
} else {
status.put(detalj.getMiljo(), detalj.getResponse());
}
}));

return PensjonforvalterResponse.builder()
.status(status.entrySet().stream()
.map(detalj -> PensjonforvalterResponse.ResponseEnvironment.builder()
.miljo(detalj.getKey())
.response(detalj.getValue())
.build())
.toList())
.build();
}

@Override
public Flux<ClientFuture> gjenopprett(RsDollyUtvidetBestilling bestilling, DollyPerson dollyPerson, BestillingProgress progress, boolean isOpprettEndre) {

Expand Down Expand Up @@ -216,13 +194,34 @@ public Flux<ClientFuture> gjenopprett(RsDollyUtvidetBestilling bestilling, Dolly
.map(status2 -> futurePersist(dollyPerson, progress, status2)));
}

private static Mono<List<PdlPersonBolk.PersonBolk>> getPdlPerson(Flux<PdlPersonBolk.Data> persondata) {
@Override
public void release(List<String> identer) {

return persondata
.map(PdlPersonBolk.Data::getHentPersonBolk)
.flatMap(Flux::fromIterable)
.filter(personBolk -> nonNull(personBolk.getPerson()))
.collectList();
// Pensjonforvalter / POPP støtter pt ikke sletting

pensjonforvalterConsumer.sletteTpForhold(identer);
}

public static PensjonforvalterResponse mergePensjonforvalterResponses(List<PensjonforvalterResponse> responser) {

var status = new HashMap<String, PensjonforvalterResponse.Response>();
responser.forEach(respons -> respons.getStatus()
.forEach(detalj -> {
if (detalj.getResponse().isResponse2xx()) {
status.putIfAbsent(detalj.getMiljo(), detalj.getResponse());
} else {
status.put(detalj.getMiljo(), detalj.getResponse());
}
}));

return PensjonforvalterResponse.builder()
.status(status.entrySet().stream()
.map(detalj -> PensjonforvalterResponse.ResponseEnvironment.builder()
.miljo(detalj.getKey())
.response(detalj.getValue())
.build())
.toList())
.build();
}

private Mono<String> getNavEnhetNr(Flux<PdlPersonBolk.Data> persondata, String ident) {
Expand Down Expand Up @@ -275,18 +274,13 @@ private Flux<PensjonforvalterResponse> annulerAlleSamboere(String ident, Set<Str
.map(PensjonSamboerResponse.Samboerforhold::getPidSamboer)
.flatMap(identSamboer -> pensjonforvalterConsumer.hentSamboer(identSamboer, miljoe)))
.flatMap(samboerResponse -> Flux.fromIterable(samboerResponse.getSamboerforhold())
.flatMap(samboer -> pensjonforvalterConsumer.annullerSamboer(samboer.getPidBruker(),
.flatMap(samboer -> pensjonforvalterConsumer.annullerSamboer(
getPeriodeId(samboer.get_links().getAnnuller().getHref()), miljoe)
.filter(response1 -> samboer.getPidBruker().equals(ident) &&
response1.getStatus().stream()
.noneMatch(status -> status.getResponse().getHttpStatus().getStatus() == 200))))));
}

private static String getPeriodeId(String lenke) {
return lenke.substring(lenke.indexOf(PERIODE) + PERIODE.length())
.replace("/annuller", "");
}

private String prepInitStatus(Set<String> miljoer) {

return PENSJON_FORVALTER +
Expand Down Expand Up @@ -344,14 +338,6 @@ private Flux<PdlPersonBolk.Data> getPersonData(List<String> identer) {
.map(PdlPersonBolk::getData);
}

@Override
public void release(List<String> identer) {

// Pensjonforvalter / POPP støtter pt ikke sletting

pensjonforvalterConsumer.sletteTpForhold(identer);
}

private Flux<PensjonforvalterResponse> opprettPersoner(String hovedperson, Set<String> miljoer,
List<PdlPersonBolk.PersonBolk> personer) {

Expand Down Expand Up @@ -418,43 +404,27 @@ private Flux<PensjonforvalterResponse> lagreUforetrygd(PensjonData pensjondata,

if (isOpprettEndre || !transaksjonMappingService.existAlready(PEN_UT, ident, miljoe, null)) {

var context = MappingContextUtils.getMappingContext();
context.setProperty(IDENT, ident);
context.setProperty(MILJOER, List.of(miljoe));
context.setProperty(NAV_ENHET, navEnhetNr);
return Flux.just(mapperFacade.map(uforetrygd, PensjonUforetrygdRequest.class, context))
.flatMap(request -> pensjonforvalterConsumer.lagreUforetrygd(request)
.map(response -> {
response.getStatus().stream()
.filter(status -> status.getResponse().isResponse2xx())
.forEach(status ->
saveAPTransaksjonId(ident, status.getMiljo(), bestillingId,
PEN_UT, new AtomicReference<>(request)));
return response;
}));
var context = MappingContextUtils.getMappingContext();
context.setProperty(IDENT, ident);
context.setProperty(MILJOER, List.of(miljoe));
context.setProperty(NAV_ENHET, navEnhetNr);
return Flux.just(mapperFacade.map(uforetrygd, PensjonUforetrygdRequest.class, context))
.flatMap(request -> pensjonforvalterConsumer.lagreUforetrygd(request)
.map(response -> {
response.getStatus().stream()
.filter(status -> status.getResponse().isResponse2xx())
.forEach(status ->
saveAPTransaksjonId(ident, status.getMiljo(), bestillingId,
PEN_UT, new AtomicReference<>(request)));
return response;
}));

} else {
return getStatus(miljoe, 200, "OK");
}
}));
}

private static Flux<PensjonforvalterResponse> getStatus(String miljoe, Integer status, String reasonPhrase) {

return Flux.just(PensjonforvalterResponse.builder()
.status(List.of(PensjonforvalterResponse.ResponseEnvironment.builder()
.miljo(miljoe)
.response(PensjonforvalterResponse.Response.builder()
.httpStatus(PensjonforvalterResponse.HttpStatus.builder()
.status(status)
.reasonPhrase(reasonPhrase)
.build())
.message(reasonPhrase)
.build())
.build()))
.build());
}

@SuppressWarnings("java:S3740")
private void saveAPTransaksjonId(String ident, String miljoe, Long bestillingId, SystemTyper
type, AtomicReference vedtak) {
Expand Down Expand Up @@ -531,24 +501,6 @@ private String decodeStatus(PensjonforvalterResponse response, String ident) {
.collect(Collectors.joining(","));
}

String getError(PensjonforvalterResponse.ResponseEnvironment entry) {

var response = entry.getResponse();
var httpStatus = response.getHttpStatus();

if (isNotBlank(response.getMessage())) {
if (response.getMessage().contains("{")) {
return ErrorStatusDecoder.encodeStatus(
"Feil: " + response.getMessage().split("\\{")[1].split("}")[0].replace("message\":", ""));
} else {
return ErrorStatusDecoder.encodeStatus("Feil: " + response.getMessage());
}

} else {
return errorStatusDecoder.getErrorText(HttpStatus.valueOf(httpStatus.getStatus()), httpStatus.getReasonPhrase());
}
}

private String toJson(Object object) {

try {
Expand All @@ -559,6 +511,36 @@ private String toJson(Object object) {
return null;
}

private static Mono<List<PdlPersonBolk.PersonBolk>> getPdlPerson(Flux<PdlPersonBolk.Data> persondata) {

return persondata
.map(PdlPersonBolk.Data::getHentPersonBolk)
.flatMap(Flux::fromIterable)
.filter(personBolk -> nonNull(personBolk.getPerson()))
.collectList();
}

private static String getPeriodeId(String lenke) {
return lenke.substring(lenke.indexOf(PERIODE) + PERIODE.length())
.replace("/annuller", "");
}

private static Flux<PensjonforvalterResponse> getStatus(String miljoe, Integer status, String reasonPhrase) {

return Flux.just(PensjonforvalterResponse.builder()
.status(List.of(PensjonforvalterResponse.ResponseEnvironment.builder()
.miljo(miljoe)
.response(PensjonforvalterResponse.Response.builder()
.httpStatus(PensjonforvalterResponse.HttpStatus.builder()
.status(status)
.reasonPhrase(reasonPhrase)
.build())
.message(reasonPhrase)
.build())
.build()))
.build());
}

private static String getGeografiskTilknytning(PdlPersonBolk.GeografiskTilknytning tilknytning) {

if (isNotBlank(tilknytning.getGtKommune())) {
Expand All @@ -571,4 +553,22 @@ private static String getGeografiskTilknytning(PdlPersonBolk.GeografiskTilknytni
return "030102";
}
}

String getError(PensjonforvalterResponse.ResponseEnvironment entry) {

var response = entry.getResponse();
var httpStatus = response.getHttpStatus();

if (isNotBlank(response.getMessage())) {
if (response.getMessage().contains("{")) {
return ErrorStatusDecoder.encodeStatus(
"Feil: " + response.getMessage().split("\\{")[1].split("}")[0].replace("message\":", ""));
} else {
return ErrorStatusDecoder.encodeStatus("Feil: " + response.getMessage());
}

} else {
return errorStatusDecoder.getErrorText(HttpStatus.valueOf(httpStatus.getStatus()), httpStatus.getReasonPhrase());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,83 +59,76 @@ public PensjonforvalterConsumer(
.build();
}

@Timed(name = "providers", tags = {"operation", "pen_getMiljoer"})
@Timed(name = "providers", tags = { "operation", "pen_getMiljoer" })
public Mono<Set<String>> getMiljoer() {

return tokenService.exchange(serverProperties)
.flatMap(token -> new HentMiljoerCommand(webClient, token.getTokenValue()).call());
}

@Timed(name = "providers", tags = {"operation", "popp_lagreInntekt"})
@Timed(name = "providers", tags = { "operation", "popp_lagreInntekt" })
public Flux<PensjonforvalterResponse> lagreInntekter(PensjonPoppInntektRequest pensjonPoppInntektRequest) {

log.info("Popp lagre inntekt {}", pensjonPoppInntektRequest);
return tokenService.exchange(serverProperties)
.flatMapMany(token -> new LagrePoppInntektCommand(webClient, token.getTokenValue(),
pensjonPoppInntektRequest).call());
pensjonPoppInntektRequest).call());
}

@Timed(name = "providers", tags = {"operation", "pen_opprettPerson"})
@Timed(name = "providers", tags = { "operation", "pen_opprettPerson" })
public Flux<PensjonforvalterResponse> opprettPerson(PensjonPersonRequest pensjonPersonRequest,
Set<String> miljoer) {

pensjonPersonRequest.setMiljoer(miljoer);
log.info("Pensjon opprett person {}", pensjonPersonRequest);
return tokenService.exchange(serverProperties)
.flatMapMany(token -> new OpprettPersonCommand(webClient, pensjonPersonRequest, token.getTokenValue()).call());
}

@Timed(name = "providers", tags = {"operation", "pen_hentSamboer"})
@Timed(name = "providers", tags = { "operation", "pen_hentSamboer" })
public Flux<PensjonSamboerResponse> hentSamboer(String ident, String miljoe) {

return tokenService.exchange(serverProperties)
.flatMapMany(token -> new HentSamboerCommand(webClient, ident, miljoe, token.getTokenValue()).call())
.doOnNext(response -> log.info("Pensjon samboer for {} i {} hentet {}", ident, miljoe, response));
}

@Timed(name = "providers", tags = {"operation", "pen_opprettSamboer"})
@Timed(name = "providers", tags = { "operation", "pen_opprettSamboer" })
public Flux<PensjonforvalterResponse> lagreSamboer(PensjonSamboerRequest pensjonSamboerRequest,
String miljoe) {

log.info("Pensjon samboer opprett i {} {}", miljoe, pensjonSamboerRequest);
return tokenService.exchange(serverProperties)
.flatMapMany(token -> new LagreSamboerCommand(webClient, pensjonSamboerRequest, miljoe, token.getTokenValue()).call());
}

@Timed(name = "providers", tags = {"operation", "pen_opprettSamboer"})
public Flux<PensjonforvalterResponse> annullerSamboer(String ident, String periodeId, String miljoe) {
@Timed(name = "providers", tags = { "operation", "pen_opprettSamboer" })
public Flux<PensjonforvalterResponse> annullerSamboer(String periodeId, String miljoe) {

log.info("Pensjon samboer annuller {} periodeId {}", ident, periodeId);
return tokenService.exchange(serverProperties)
.flatMapMany(token -> new AnnullerSamboerCommand(webClient, periodeId, miljoe, token.getTokenValue()).call());
}

@Timed(name = "providers", tags = {"operation", "pen_lagreAlderspensjon"})
@Timed(name = "providers", tags = { "operation", "pen_lagreAlderspensjon" })
public Flux<PensjonforvalterResponse> lagreAlderspensjon(AlderspensjonRequest request) {

log.info("Pensjon lagre alderspensjon {}", request);
return tokenService.exchange(serverProperties)
.flatMapMany(token ->
new LagreAlderspensjonCommand(webClient, token.getTokenValue(), request).call());
}

@Timed(name = "providers", tags = {"operation", "pen_lagreUforetrygd"})
@Timed(name = "providers", tags = { "operation", "pen_lagreUforetrygd" })
public Flux<PensjonforvalterResponse> lagreUforetrygd(PensjonUforetrygdRequest request) {

log.info("Pensjon lagre uforetrygd {}", request);
return tokenService.exchange(serverProperties)
.flatMapMany(token -> new LagreUforetrygdCommand(webClient, token.getTokenValue(), request).call());
}

@Timed(name = "providers", tags = {"operation", "pen_lagreTpForhold"})
@Timed(name = "providers", tags = { "operation", "pen_lagreTpForhold" })
public Flux<PensjonforvalterResponse> lagreTpForhold(PensjonTpForholdRequest pensjonTpForholdRequest) {

log.info("Pensjon lagre TP-forhold {}", pensjonTpForholdRequest);
return tokenService.exchange(serverProperties)
.flatMapMany(token -> new LagreTpForholdCommand(webClient, token.getTokenValue(), pensjonTpForholdRequest).call());
}

@Timed(name = "providers", tags = {"operation", "pen_sletteTpForhold"})
@Timed(name = "providers", tags = { "operation", "pen_sletteTpForhold" })
public void sletteTpForhold(List<String> identer) {

tokenService.exchange(serverProperties)
Expand All @@ -147,10 +140,9 @@ public void sletteTpForhold(List<String> identer) {
.subscribe(response -> log.info("Slettet mot PESYS (tp) i alle miljoer"));
}

@Timed(name = "providers", tags = {"operation", "pen_lagreTpYtelse"})
@Timed(name = "providers", tags = { "operation", "pen_lagreTpYtelse" })
public Flux<PensjonforvalterResponse> lagreTpYtelse(PensjonTpYtelseRequest pensjonTpYtelseRequest) {

log.info("Pensjon lagre TP-ytelse {}", pensjonTpYtelseRequest);
return tokenService.exchange(serverProperties)
.flatMapMany(token -> new LagreTpYtelseCommand(webClient, token.getTokenValue(), pensjonTpYtelseRequest).call());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,17 @@ public class AnnullerSamboerCommand implements Callable<Mono<PensjonforvalterRes
private final String token;

public Mono<PensjonforvalterResponse> call() {

var callId = generateCallId();
log.info("Pensjon samboer annuller periodeId {}, callId: {}", periodeId, callId);

return webClient
.put()
.uri(uriBuilder -> uriBuilder
.path(PEN_SAMBOER_URL)
.build(miljoe, periodeId))
.header(AUTHORIZATION, "Bearer " + token)
.header(HEADER_NAV_CALL_ID, generateCallId())
.header(HEADER_NAV_CALL_ID, callId)
.header(HEADER_NAV_CONSUMER_ID, CONSUMER)
.retrieve()
.toBodilessEntity()
Expand Down Expand Up @@ -75,7 +79,7 @@ private static PensjonforvalterResponse pensjonforvalterResponseFromError(String
.reasonPhrase(WebClientFilter.getStatus(error).getReasonPhrase())
.build())
.message(WebClientFilter.getMessage(error))
.path(PEN_SAMBOER_URL.replace("{miljoe}", miljoe).replace("{periodeId}", periodeId))
.path(PEN_SAMBOER_URL.replace("{miljoe}", miljoe).replace("{periodeId}", periodeId))
.build())
.build();

Expand Down
Loading

0 comments on commit 75528ba

Please sign in to comment.