package dev.dinauer.monitoring; import java.io.IOException; import java.util.List; import java.util.Map; import java.util.UUID; import jakarta.inject.Inject; import jakarta.transaction.Transactional; import jakarta.ws.rs.GET; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; import com.fasterxml.jackson.core.JsonProcessingException; import dev.dinauer.monitoring.entity.MonitoringConfig; import dev.dinauer.monitoring.entity.MonitoringType; import dev.dinauer.monitoring.entity.TargetConfig; import dev.dinauer.monitoring.entity.VolumeConfig; import dev.dinauer.monitoring.entity.creation.MonitoringConfigCreation; import dev.dinauer.monitoring.entity.repo.MonitoringRepo; @Path("/monitorings") public class MonitoringResource { @Inject MonitoringRepo monitoringRepo; @Inject MonitoringJobRunner jobRunner; @GET public List get() throws JsonProcessingException { return monitoringRepo.listAll(); } @POST @Transactional public void create(MonitoringConfigCreation configCreation) { MonitoringConfig config = new MonitoringConfig(); config.setId(UUID.randomUUID().toString()); config.setConfigName(configCreation.configName()); config.setInterval(configCreation.interval()); config.setType(configCreation.type()); TargetConfig targetConfig = new TargetConfig(); targetConfig.setId(UUID.randomUUID().toString()); targetConfig.setNamespace(configCreation.targetConfig().namespace()); targetConfig.setType(configCreation.targetConfig().type()); targetConfig.setLabels(Map.ofEntries(Map.entry(configCreation.targetConfig().labelKey(), configCreation.targetConfig().labelValue()))); targetConfig.setConfig(config); config.setTargetConfig(targetConfig); switch (configCreation.type()) { case MonitoringType.VOLUME: { VolumeConfig volumeConfig = new VolumeConfig(); volumeConfig.setId(UUID.randomUUID().toString()); volumeConfig.setMountPath(configCreation.volumeConfig().mountPath()); volumeConfig.setContainerName(configCreation.volumeConfig().containerName()); volumeConfig.setConfig(config); config.setVolumeConfig(volumeConfig); monitoringRepo.persist(config); try { jobRunner.run(config); } catch (IOException | InterruptedException e) { throw new RuntimeException(e); } } } } }