Skip to content

Commit

Permalink
Merge branch 'ssb' into propagate-user-attributes
Browse files Browse the repository at this point in the history
  • Loading branch information
johnksv committed Apr 11, 2024
2 parents d2af05b + 3bf954b commit eae0375
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import fr.insee.onyxia.model.service.Service;
import fr.insee.onyxia.model.service.UninstallService;
import io.fabric8.kubernetes.api.model.Event;
import io.fabric8.kubernetes.client.Watch;
import io.fabric8.kubernetes.client.Watcher;
import io.fabric8.kubernetes.client.WatcherException;
import io.swagger.v3.oas.annotations.Operation;
Expand All @@ -24,9 +25,9 @@
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
Expand Down Expand Up @@ -206,29 +207,67 @@ public SseEmitter getEvents(

if (Service.ServiceType.KUBERNETES.equals(region.getServices().getType())) {
final SseEmitter emitter = new SseEmitter();

Watcher<Event> watcher =
new Watcher<Event>() {
final CustomWatcher watcher = new CustomWatcher(emitter, objectMapper);
final Watch watch =
helmAppsService.getEvents(
region, project, userProvider.getUser(region), watcher);
emitter.onCompletion(
new Runnable() {
@Override
public void eventReceived(Action action, Event event) {
try {
emitter.send(objectMapper.writeValueAsString(event));
} catch (IOException e) {
// Response is already commited
}
public void run() {
watch.close();
}

});
emitter.onError(
new Consumer<Throwable>() {
@Override
public void onClose(WatcherException e) {
emitter.complete();
public void accept(Throwable throwable) {
watch.close();
}
};
helmAppsService.getEvents(region, project, userProvider.getUser(region), watcher);
});
emitter.onTimeout(
new Runnable() {
@Override
public void run() {
watch.close();
}
});
return emitter;
}
return null;
}

public static class CustomWatcher implements Watcher<Event> {

private final SseEmitter emitter;

private final ObjectMapper objectMapper;

public CustomWatcher(SseEmitter emitter, ObjectMapper objectMapper) {
this.emitter = emitter;
this.objectMapper = objectMapper;
}

@Override
public void eventReceived(Action action, Event event) {
try {
emitter.send(objectMapper.writeValueAsString(event));
} catch (Exception ignored) {

}
}

@Override
public void onClose() {
emitter.complete();
}

@Override
public void onClose(WatcherException e) {
emitter.complete();
}
}

@Operation(
summary = "Delete an installed service(s) launched through Onyxia.",
description =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import fr.insee.onyxia.model.service.Service;
import fr.insee.onyxia.model.service.UninstallService;
import io.fabric8.kubernetes.api.model.Event;
import io.fabric8.kubernetes.client.Watch;
import io.fabric8.kubernetes.client.Watcher;
import io.github.inseefrlab.helmwrapper.service.HelmInstallService;
import java.io.IOException;
Expand Down Expand Up @@ -49,6 +50,6 @@ UninstallService destroyService(

String getLogs(Region region, Project project, User user, String serviceId, String taskId);

void getEvents(Region region, Project project, User user, Watcher<Event> watcher)
Watch getEvents(Region region, Project project, User user, Watcher<Event> watcher)
throws HelmInstallService.MultipleServiceFound, ParseException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import fr.insee.onyxia.model.region.Region;
import fr.insee.onyxia.model.service.*;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.Watch;
import io.fabric8.kubernetes.client.Watcher;
import io.github.inseefrlab.helmwrapper.configuration.HelmConfiguration;
import io.github.inseefrlab.helmwrapper.model.HelmInstaller;
Expand Down Expand Up @@ -291,13 +292,13 @@ public String getLogs(
}

@Override
public void getEvents(
public Watch getEvents(
Region region,
Project project,
User user,
Watcher<io.fabric8.kubernetes.api.model.Event> watcher) {
KubernetesClient client = kubernetesClientProvider.getUserClient(region, user);
client.v1()
return client.v1()
.events()
.inNamespace(
kubernetesService.determineNamespaceAndCreateIfNeeded(
Expand Down
2 changes: 1 addition & 1 deletion onyxia-api/src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,4 @@ springdoc.swagger-ui.oauth.clientSecret=
# Enable events logging
event.logging.enabled=true
# Response stream configuration
spring.mvc.async.request-timeout: 600000
spring.mvc.async.request-timeout=600000

0 comments on commit eae0375

Please sign in to comment.