🎉 Init
This commit is contained in:
parent
a3db67696c
commit
25f44a2a9d
@ -8,8 +8,8 @@ import dev.dinauer.pingo.group.GroupService;
|
||||
import dev.dinauer.pingo.ping.PingResult;
|
||||
import dev.dinauer.pingo.config.Config;
|
||||
import dev.dinauer.pingo.config.Healthcheck;
|
||||
import dev.dinauer.pingo.target.HealthcheckEntity;
|
||||
import dev.dinauer.pingo.target.HealthcheckService;
|
||||
import dev.dinauer.pingo.healthcheck.HealthcheckEntity;
|
||||
import dev.dinauer.pingo.healthcheck.HealthcheckService;
|
||||
import io.quarkus.runtime.Startup;
|
||||
import io.smallrye.mutiny.Multi;
|
||||
import io.smallrye.mutiny.infrastructure.Infrastructure;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package dev.dinauer.pingo;
|
||||
|
||||
import dev.dinauer.pingo.group.GroupRepo;
|
||||
import dev.dinauer.pingo.target.*;
|
||||
import dev.dinauer.pingo.healthcheck.*;
|
||||
import dev.dinauer.pingo.ping.PingEntity;
|
||||
import dev.dinauer.pingo.ping.PingRepo;
|
||||
import dev.dinauer.pingo.ping.PingResult;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package dev.dinauer.pingo.group;
|
||||
|
||||
import dev.dinauer.pingo.target.Healthcheck;
|
||||
import dev.dinauer.pingo.healthcheck.Healthcheck;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package dev.dinauer.pingo.group;
|
||||
|
||||
import dev.dinauer.pingo.target.HealthcheckEntity;
|
||||
import dev.dinauer.pingo.healthcheck.HealthcheckEntity;
|
||||
import jakarta.persistence.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package dev.dinauer.pingo.group;
|
||||
|
||||
import dev.dinauer.pingo.target.HealthcheckService;
|
||||
import dev.dinauer.pingo.healthcheck.HealthcheckService;
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.transaction.Transactional;
|
||||
|
||||
18
src/main/java/dev/dinauer/pingo/healthcheck/Healthcheck.java
Normal file
18
src/main/java/dev/dinauer/pingo/healthcheck/Healthcheck.java
Normal file
@ -0,0 +1,18 @@
|
||||
package dev.dinauer.pingo.healthcheck;
|
||||
|
||||
import dev.dinauer.pingo.ping.PingEntity;
|
||||
import dev.dinauer.pingo.ping.PingResult;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public record Healthcheck(String key, String displayName, List<PingEntity> pings, Double last1Hour, Double last24Hour, PingResult status)
|
||||
{
|
||||
public PingResult getStatus()
|
||||
{
|
||||
if (!pings.isEmpty())
|
||||
{
|
||||
return pings.getFirst().getResult();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,71 @@
|
||||
package dev.dinauer.pingo.healthcheck;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import dev.dinauer.pingo.group.GroupEntity;
|
||||
import dev.dinauer.pingo.ping.PingEntity;
|
||||
import jakarta.persistence.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Entity
|
||||
@Table(name = "target")
|
||||
public class HealthcheckEntity
|
||||
{
|
||||
@Id
|
||||
private String id;
|
||||
|
||||
@Column(name = "display_name")
|
||||
private String displayName;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "target_group_id")
|
||||
@JsonIgnore
|
||||
private GroupEntity group;
|
||||
|
||||
@OneToMany(mappedBy = "target", fetch = FetchType.LAZY)
|
||||
private List<PingEntity> pings = new ArrayList<>();
|
||||
|
||||
public String getId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
public HealthcheckEntity setId(String id)
|
||||
{
|
||||
this.id = id;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getDisplayName()
|
||||
{
|
||||
return displayName;
|
||||
}
|
||||
|
||||
public HealthcheckEntity setDisplayName(String display)
|
||||
{
|
||||
this.displayName = display;
|
||||
return this;
|
||||
}
|
||||
|
||||
public GroupEntity getGroup()
|
||||
{
|
||||
return group;
|
||||
}
|
||||
|
||||
public HealthcheckEntity setGroup(GroupEntity group)
|
||||
{
|
||||
this.group = group;
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<PingEntity> getPings()
|
||||
{
|
||||
return pings;
|
||||
}
|
||||
|
||||
public HealthcheckEntity setPings(List<PingEntity> pings)
|
||||
{
|
||||
this.pings = pings;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
package dev.dinauer.pingo.healthcheck;
|
||||
|
||||
import dev.dinauer.pingo.group.GroupEntity;
|
||||
import io.quarkus.hibernate.orm.panache.PanacheRepositoryBase;
|
||||
import io.quarkus.panache.common.Parameters;
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ApplicationScoped
|
||||
public class HealthcheckRepo implements PanacheRepositoryBase<HealthcheckEntity, String>
|
||||
{
|
||||
public List<HealthcheckEntity> findByGroup(GroupEntity group)
|
||||
{
|
||||
return list("group = :group", Parameters.with("group", group));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
package dev.dinauer.pingo.healthcheck;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.ws.rs.GET;
|
||||
import jakarta.ws.rs.Path;
|
||||
import jakarta.ws.rs.PathParam;
|
||||
|
||||
@Path("/healthchecks")
|
||||
public class HealthcheckResource
|
||||
{
|
||||
@Inject
|
||||
HealthcheckService healthcheckService;
|
||||
|
||||
@GET
|
||||
@Path("/{key}")
|
||||
public Healthcheck getByKey(@PathParam("key") String key)
|
||||
{
|
||||
return healthcheckService.findByKey(key);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,51 @@
|
||||
package dev.dinauer.pingo.healthcheck;
|
||||
|
||||
import dev.dinauer.pingo.PingService;
|
||||
import dev.dinauer.pingo.group.GroupEntity;
|
||||
import dev.dinauer.pingo.ping.PingRepo;
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.transaction.Transactional;
|
||||
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@ApplicationScoped
|
||||
public class HealthcheckService
|
||||
{
|
||||
@Inject
|
||||
HealthcheckRepo healthcheckRepo;
|
||||
|
||||
@Inject
|
||||
PingService pingService;
|
||||
|
||||
@Inject
|
||||
PingRepo pingRepo;
|
||||
|
||||
public Healthcheck findByKey(String key)
|
||||
{
|
||||
return map(healthcheckRepo.findById(key));
|
||||
}
|
||||
|
||||
public List<Healthcheck> findByGroup(GroupEntity group)
|
||||
{
|
||||
return healthcheckRepo.findByGroup(group).stream().map(this::map).toList();
|
||||
}
|
||||
|
||||
private Healthcheck map(HealthcheckEntity entity)
|
||||
{
|
||||
ZonedDateTime now = ZonedDateTime.now();
|
||||
return new Healthcheck(entity.getId(), entity.getDisplayName(), pingRepo.findPageByTarget(entity, 0, 50), pingService.findUptimeRatio(entity, now.minusHours(1)), pingService.findUptimeRatio(entity, now.minusHours(24)), pingService.findResult(entity));
|
||||
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public HealthcheckEntity create(GroupEntity group, Map.Entry<String, dev.dinauer.pingo.config.Healthcheck> healthcheckEntry)
|
||||
{
|
||||
HealthcheckEntity target = healthcheckRepo.findByIdOptional(healthcheckEntry.getKey())
|
||||
.orElse(new HealthcheckEntity().setId(healthcheckEntry.getKey()).setDisplayName(healthcheckEntry.getValue().displayName())).setGroup(group);
|
||||
healthcheckRepo.persist(target);
|
||||
return target;
|
||||
}
|
||||
}
|
||||
@ -1,7 +1,7 @@
|
||||
package dev.dinauer.pingo.ping;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import dev.dinauer.pingo.target.HealthcheckEntity;
|
||||
import dev.dinauer.pingo.healthcheck.HealthcheckEntity;
|
||||
import jakarta.persistence.*;
|
||||
|
||||
import java.time.ZonedDateTime;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package dev.dinauer.pingo.ping;
|
||||
|
||||
import dev.dinauer.pingo.target.HealthcheckEntity;
|
||||
import dev.dinauer.pingo.healthcheck.HealthcheckEntity;
|
||||
import io.quarkus.hibernate.orm.panache.PanacheRepositoryBase;
|
||||
import io.quarkus.panache.common.Page;
|
||||
import io.quarkus.panache.common.Parameters;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user