backend/src/main/java/dev/dinauer/monitoring/MonitoringResource.java
2026-02-14 21:01:04 +01:00

79 lines
2.6 KiB
Java
Executable File

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<MonitoringConfig> 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);
}
}
}
}
}