🎉 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.ping.PingResult;
|
||||||
import dev.dinauer.pingo.config.Config;
|
import dev.dinauer.pingo.config.Config;
|
||||||
import dev.dinauer.pingo.config.Healthcheck;
|
import dev.dinauer.pingo.config.Healthcheck;
|
||||||
import dev.dinauer.pingo.target.HealthcheckEntity;
|
import dev.dinauer.pingo.healthcheck.HealthcheckEntity;
|
||||||
import dev.dinauer.pingo.target.HealthcheckService;
|
import dev.dinauer.pingo.healthcheck.HealthcheckService;
|
||||||
import io.quarkus.runtime.Startup;
|
import io.quarkus.runtime.Startup;
|
||||||
import io.smallrye.mutiny.Multi;
|
import io.smallrye.mutiny.Multi;
|
||||||
import io.smallrye.mutiny.infrastructure.Infrastructure;
|
import io.smallrye.mutiny.infrastructure.Infrastructure;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package dev.dinauer.pingo;
|
package dev.dinauer.pingo;
|
||||||
|
|
||||||
import dev.dinauer.pingo.group.GroupRepo;
|
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.PingEntity;
|
||||||
import dev.dinauer.pingo.ping.PingRepo;
|
import dev.dinauer.pingo.ping.PingRepo;
|
||||||
import dev.dinauer.pingo.ping.PingResult;
|
import dev.dinauer.pingo.ping.PingResult;
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
package dev.dinauer.pingo.group;
|
package dev.dinauer.pingo.group;
|
||||||
|
|
||||||
import dev.dinauer.pingo.target.Healthcheck;
|
import dev.dinauer.pingo.healthcheck.Healthcheck;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
package dev.dinauer.pingo.group;
|
package dev.dinauer.pingo.group;
|
||||||
|
|
||||||
import dev.dinauer.pingo.target.HealthcheckEntity;
|
import dev.dinauer.pingo.healthcheck.HealthcheckEntity;
|
||||||
import jakarta.persistence.*;
|
import jakarta.persistence.*;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
package dev.dinauer.pingo.group;
|
package dev.dinauer.pingo.group;
|
||||||
|
|
||||||
import dev.dinauer.pingo.target.HealthcheckService;
|
import dev.dinauer.pingo.healthcheck.HealthcheckService;
|
||||||
import jakarta.enterprise.context.ApplicationScoped;
|
import jakarta.enterprise.context.ApplicationScoped;
|
||||||
import jakarta.inject.Inject;
|
import jakarta.inject.Inject;
|
||||||
import jakarta.transaction.Transactional;
|
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;
|
package dev.dinauer.pingo.ping;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import dev.dinauer.pingo.target.HealthcheckEntity;
|
import dev.dinauer.pingo.healthcheck.HealthcheckEntity;
|
||||||
import jakarta.persistence.*;
|
import jakarta.persistence.*;
|
||||||
|
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
package dev.dinauer.pingo.ping;
|
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.hibernate.orm.panache.PanacheRepositoryBase;
|
||||||
import io.quarkus.panache.common.Page;
|
import io.quarkus.panache.common.Page;
|
||||||
import io.quarkus.panache.common.Parameters;
|
import io.quarkus.panache.common.Parameters;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user