Fix?
This commit is contained in:
		
					parent
					
						
							
								9b528042b3
							
						
					
				
			
			
				commit
				
					
						0618794491
					
				
			
		
					 9 changed files with 56 additions and 12 deletions
				
			
		| 
						 | 
				
			
			@ -4,14 +4,23 @@ import eu.m724.mstats.api.service.PluginService;
 | 
			
		|||
import io.quarkus.runtime.StartupEvent;
 | 
			
		||||
import jakarta.enterprise.event.Observes;
 | 
			
		||||
import jakarta.inject.Inject;
 | 
			
		||||
import jakarta.transaction.Transactional;
 | 
			
		||||
import jakarta.persistence.EntityExistsException;
 | 
			
		||||
 | 
			
		||||
public class Startup {
 | 
			
		||||
    @Inject
 | 
			
		||||
    PluginService pluginService;
 | 
			
		||||
 | 
			
		||||
    @Transactional
 | 
			
		||||
    public void onStartup(@Observes StartupEvent event) {
 | 
			
		||||
        pluginService.createPlugin("ploogin");
 | 
			
		||||
        try {
 | 
			
		||||
            pluginService.createPlugin(1, "Tweaks724");
 | 
			
		||||
        } catch (EntityExistsException e) {
 | 
			
		||||
            System.out.println("exists1");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            pluginService.createPlugin(2, "Giants");
 | 
			
		||||
        } catch (EntityExistsException e) {
 | 
			
		||||
            System.out.println("exists2");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -63,7 +63,7 @@ public class PluginApiResource {
 | 
			
		|||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    class StatsResponse {
 | 
			
		||||
    static class StatsResponse {
 | 
			
		||||
        @JsonProperty("id")
 | 
			
		||||
        public Long id;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -80,7 +80,7 @@ public class PluginApiResource {
 | 
			
		|||
        public List<Version> pluginVersions;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    class Version {
 | 
			
		||||
    static class Version {
 | 
			
		||||
        public Version(String version, int servers) {
 | 
			
		||||
            this.version = version;
 | 
			
		||||
            this.servers = servers;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,6 +52,17 @@ public class ServerApiResource {
 | 
			
		|||
        return Response.ok(heartbeatResponse).build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Path("/remove")
 | 
			
		||||
    @POST
 | 
			
		||||
    public Response remove() {
 | 
			
		||||
        if (!identity.isAnonymous()) {
 | 
			
		||||
            Server server = identity.getAttribute("server");
 | 
			
		||||
            serverService.removeServer(server);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return Response.ok().build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static class HeartbeatRequest {
 | 
			
		||||
        /** List of registered plugins, this is sent only on boot */
 | 
			
		||||
        @JsonProperty("plugins")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,10 +7,11 @@ import jakarta.transaction.Transactional;
 | 
			
		|||
@ApplicationScoped
 | 
			
		||||
public class PluginService {
 | 
			
		||||
    @Transactional
 | 
			
		||||
    public Plugin createPlugin(String name) {
 | 
			
		||||
        return Plugin.createPlugin(name);
 | 
			
		||||
    public Plugin createPlugin(long id, String name) {
 | 
			
		||||
        return Plugin.createPlugin(id, name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @Transactional
 | 
			
		||||
    public Plugin getPlugin(long id) {
 | 
			
		||||
        return Plugin.findById(id);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,11 +1,14 @@
 | 
			
		|||
package eu.m724.mstats.api.service;
 | 
			
		||||
 | 
			
		||||
import eu.m724.mstats.api.resource.ServerApiResource;
 | 
			
		||||
import eu.m724.mstats.orm.Plugin;
 | 
			
		||||
import eu.m724.mstats.orm.Server;
 | 
			
		||||
import jakarta.enterprise.context.ApplicationScoped;
 | 
			
		||||
import jakarta.transaction.Transactional;
 | 
			
		||||
 | 
			
		||||
import java.time.Instant;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
@ApplicationScoped
 | 
			
		||||
public class ServerService {
 | 
			
		||||
| 
						 | 
				
			
			@ -19,17 +22,30 @@ public class ServerService {
 | 
			
		|||
        server.persistAndFlush();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Transactional
 | 
			
		||||
    public void removeServer(Server server) {
 | 
			
		||||
        server.delete();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Transactional
 | 
			
		||||
    public void heartbeat(Server server, ServerApiResource.HeartbeatRequest heartbeatRequest) {
 | 
			
		||||
        server = Server.findById(server.id); // this is necessary for some reason
 | 
			
		||||
        Set<Long> unknownPlugins = new HashSet<>();
 | 
			
		||||
 | 
			
		||||
        for (ServerApiResource.RunningPlugin plugin : heartbeatRequest.plugins) {
 | 
			
		||||
            server.addPlugin(plugin.id, plugin.version);
 | 
			
		||||
            Plugin p = server.addPlugin(plugin.id, plugin.version);
 | 
			
		||||
            if (p == null) {
 | 
			
		||||
                unknownPlugins.add(plugin.id);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (heartbeatRequest.serverVersion != null)
 | 
			
		||||
            server.serverVersion = heartbeatRequest.serverVersion;
 | 
			
		||||
 | 
			
		||||
        if (!unknownPlugins.isEmpty()) {
 | 
			
		||||
            // TODO
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        server.heartbeat = Instant.now();
 | 
			
		||||
        server.persistAndFlush();
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,6 +41,7 @@ public class MyHttpAuthenticationMechanism implements HttpAuthenticationMechanis
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            return QuarkusSecurityIdentity.builder()
 | 
			
		||||
                    .setPrincipal(new QuarkusPrincipal("Anonymous")) // this is to fix an error in logging
 | 
			
		||||
                    .setAnonymous(true)
 | 
			
		||||
                    .build();
 | 
			
		||||
        }).runSubscriptionOn(Infrastructure.getDefaultWorkerPool());
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,8 +19,14 @@ public class Plugin extends PanacheEntity {
 | 
			
		|||
    public List<Server> servers = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
    @Transactional
 | 
			
		||||
    public static Plugin createPlugin(String name) {
 | 
			
		||||
    public static Plugin createPlugin(long id, String name) {
 | 
			
		||||
        if (Plugin.find("name", name).firstResultOptional().isPresent()) throw new EntityExistsException();
 | 
			
		||||
 | 
			
		||||
        Plugin plugin = new Plugin();
 | 
			
		||||
        if (id != -1) {
 | 
			
		||||
            if (Plugin.findById(id) != null) throw new EntityExistsException();
 | 
			
		||||
            plugin.id = id;
 | 
			
		||||
        }
 | 
			
		||||
        plugin.name = name;
 | 
			
		||||
 | 
			
		||||
        plugin.persistAndFlush();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,7 +19,7 @@ public class Server extends PanacheEntity {
 | 
			
		|||
    @Column(nullable = false)
 | 
			
		||||
    public byte[] token;
 | 
			
		||||
 | 
			
		||||
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
 | 
			
		||||
    @ManyToMany(fetch = FetchType.EAGER)
 | 
			
		||||
    public List<PluginWithVersion> plugins = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
    public String serverVersion;
 | 
			
		||||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ public class Server extends PanacheEntity {
 | 
			
		|||
            return null;
 | 
			
		||||
 | 
			
		||||
        if (plugins.stream().anyMatch(pwv -> pwv.plugin.id == id))
 | 
			
		||||
            return null;
 | 
			
		||||
            return plugin;
 | 
			
		||||
 | 
			
		||||
        plugins.add(new PluginWithVersion(plugin, version));
 | 
			
		||||
        plugin.servers.add(this);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,5 +2,5 @@ quarkus.hibernate-orm.database.generation=update
 | 
			
		|||
 | 
			
		||||
quarkus.datasource.db-kind=h2
 | 
			
		||||
quarkus.datasource.username=username-default
 | 
			
		||||
quarkus.datasource.jdbc.url=jdbc:h2:mem:default
 | 
			
		||||
quarkus.datasource.jdbc.url=jdbc:h2:./db:default
 | 
			
		||||
quarkus.datasource.jdbc.max-size=13
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue