From 4d51f184da68cf8b70bdd406f0b90f3e758f1607 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Sat, 11 Nov 2023 02:24:01 +0300 Subject: Stats cache --- .../java/com/juick/www/api/xnodeinfo2/Info.java | 40 +++------------------- .../juick/www/api/xnodeinfo2/model/NodeInfo.java | 3 +- .../com/juick/www/api/xnodeinfo2/model/Server.java | 4 ++- .../www/api/xnodeinfo2/model/ServiceInfo.java | 3 +- .../com/juick/www/api/xnodeinfo2/model/Usage.java | 4 ++- .../juick/www/api/xnodeinfo2/model/UserStats.java | 4 ++- 6 files changed, 18 insertions(+), 40 deletions(-) (limited to 'src/main/java/com/juick/www') diff --git a/src/main/java/com/juick/www/api/xnodeinfo2/Info.java b/src/main/java/com/juick/www/api/xnodeinfo2/Info.java index 9811cc4c..2af252ed 100644 --- a/src/main/java/com/juick/www/api/xnodeinfo2/Info.java +++ b/src/main/java/com/juick/www/api/xnodeinfo2/Info.java @@ -20,8 +20,10 @@ package com.juick.www.api.xnodeinfo2; import com.cliqset.xrd.Link; import com.cliqset.xrd.XRD; import com.fasterxml.jackson.annotation.JsonView; +import com.juick.service.InfoService; import com.juick.www.api.xnodeinfo2.model.*; import org.springframework.beans.factory.annotation.Value; +import org.springframework.cache.annotation.Cacheable; import org.springframework.http.MediaType; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.bind.annotation.GetMapping; @@ -42,45 +44,13 @@ public class Info { @Value("${ap_base_uri:http://localhost:8080/}") private String baseUri; @Inject - private JdbcTemplate jdbcTemplate; + InfoService infoService; - private NodeInfo getCurrentNodeInfo(String version) { - NodeInfo nodeInfo = new NodeInfo(); - nodeInfo.setVersion(version); - Server server = new Server(); - server.setBaseUrl(baseUri); - server.setName("Juick"); - server.setSoftware("Juick"); - server.setVersion("2.x"); - nodeInfo.setServer(server); - nodeInfo.setProtocols(Arrays.asList("xmpp", "activitypub", "smtp")); - Map metadata = new HashMap<>(); - metadata.put("email", "support@juick.com"); - nodeInfo.setMetadata(metadata); - ServiceInfo serviceInfo = new ServiceInfo(); - serviceInfo.setInbound(Arrays.asList("jabber", "mastodon", "email", "telegram")); - serviceInfo.setOutbound(Arrays.asList("jabber", "mastodon", "telegram", "twitter", "email", "rss")); - nodeInfo.setServices(serviceInfo); - UserStats userStats = new UserStats(); - userStats.setTotal(jdbcTemplate.queryForObject("SELECT COUNT(*) FROM users WHERE banned=0", Integer.class)); - userStats.setActiveMonth(jdbcTemplate.queryForObject("SELECT COUNT(*) FROM users WHERE banned=0 AND last_seen > ?", - Integer.class, ZonedDateTime.now().minus(1, ChronoUnit.MONTHS).toLocalDateTime())); - userStats.setActiveHalfyear(jdbcTemplate.queryForObject("SELECT COUNT(*) FROM users WHERE banned=0 AND last_seen > ?", - Integer.class, ZonedDateTime.now().minus(6, ChronoUnit.MONTHS).toLocalDateTime())); - Usage usage = new Usage(); - usage.setUsers(userStats); - usage.setLocalPosts(jdbcTemplate.queryForObject("SELECT COUNT(*) FROM messages", - Integer.class)); - usage.setLocalComments(jdbcTemplate.queryForObject("SELECT COUNT(*) FROM replies WHERE reply_uri IS NULL", - Integer.class)); - nodeInfo.setUsage(usage); - return nodeInfo; - } @GetMapping(value = "/.well-known/x-nodeinfo2", produces = MediaType.APPLICATION_JSON_VALUE) @JsonView(NodeInfo.XNodeInfoView.class) public NodeInfo showXNodeInfo() { - return getCurrentNodeInfo("1.0"); + return infoService.getCurrentNodeInfo("1.0"); } @GetMapping(value = "/.well-known/nodeinfo", produces = MediaType.APPLICATION_JSON_VALUE) @@ -98,6 +68,6 @@ public class Info { @GetMapping(value = "/api/nodeinfo/2.0", produces = MediaType.APPLICATION_JSON_VALUE) @JsonView(NodeInfo.NodeInfoView.class) public NodeInfo showNodeInfo() { - return getCurrentNodeInfo("2.0"); + return infoService.getCurrentNodeInfo("2.0"); } } diff --git a/src/main/java/com/juick/www/api/xnodeinfo2/model/NodeInfo.java b/src/main/java/com/juick/www/api/xnodeinfo2/model/NodeInfo.java index 8a48ed93..4c4705de 100644 --- a/src/main/java/com/juick/www/api/xnodeinfo2/model/NodeInfo.java +++ b/src/main/java/com/juick/www/api/xnodeinfo2/model/NodeInfo.java @@ -19,10 +19,11 @@ package com.juick.www.api.xnodeinfo2.model; import com.fasterxml.jackson.annotation.JsonView; +import java.io.Serializable; import java.util.List; import java.util.Map; -public class NodeInfo { +public class NodeInfo implements Serializable { private String version; diff --git a/src/main/java/com/juick/www/api/xnodeinfo2/model/Server.java b/src/main/java/com/juick/www/api/xnodeinfo2/model/Server.java index cc8d9e7d..6251d6ef 100644 --- a/src/main/java/com/juick/www/api/xnodeinfo2/model/Server.java +++ b/src/main/java/com/juick/www/api/xnodeinfo2/model/Server.java @@ -19,7 +19,9 @@ package com.juick.www.api.xnodeinfo2.model; import com.fasterxml.jackson.annotation.JsonView; -public class Server { +import java.io.Serializable; + +public class Server implements Serializable { private String baseUrl; private String name; private String software; diff --git a/src/main/java/com/juick/www/api/xnodeinfo2/model/ServiceInfo.java b/src/main/java/com/juick/www/api/xnodeinfo2/model/ServiceInfo.java index 65927928..fe2b196d 100644 --- a/src/main/java/com/juick/www/api/xnodeinfo2/model/ServiceInfo.java +++ b/src/main/java/com/juick/www/api/xnodeinfo2/model/ServiceInfo.java @@ -19,10 +19,11 @@ package com.juick.www.api.xnodeinfo2.model; import com.fasterxml.jackson.annotation.JsonView; +import java.io.Serializable; import java.util.List; @JsonView({NodeInfo.NodeInfoView.class, NodeInfo.XNodeInfoView.class}) -public class ServiceInfo { +public class ServiceInfo implements Serializable { private List inbound; private List outbound; diff --git a/src/main/java/com/juick/www/api/xnodeinfo2/model/Usage.java b/src/main/java/com/juick/www/api/xnodeinfo2/model/Usage.java index ccb86a05..1c4f4c35 100644 --- a/src/main/java/com/juick/www/api/xnodeinfo2/model/Usage.java +++ b/src/main/java/com/juick/www/api/xnodeinfo2/model/Usage.java @@ -19,8 +19,10 @@ package com.juick.www.api.xnodeinfo2.model; import com.fasterxml.jackson.annotation.JsonView; +import java.io.Serializable; + @JsonView({NodeInfo.NodeInfoView.class, NodeInfo.XNodeInfoView.class}) -public class Usage { +public class Usage implements Serializable { private UserStats users; private int localPosts; private int localComments; diff --git a/src/main/java/com/juick/www/api/xnodeinfo2/model/UserStats.java b/src/main/java/com/juick/www/api/xnodeinfo2/model/UserStats.java index c07a39cc..0f399d49 100644 --- a/src/main/java/com/juick/www/api/xnodeinfo2/model/UserStats.java +++ b/src/main/java/com/juick/www/api/xnodeinfo2/model/UserStats.java @@ -19,8 +19,10 @@ package com.juick.www.api.xnodeinfo2.model; import com.fasterxml.jackson.annotation.JsonView; +import java.io.Serializable; + @JsonView({NodeInfo.NodeInfoView.class, NodeInfo.XNodeInfoView.class}) -public class UserStats { +public class UserStats implements Serializable { private int total; private int activeHalfyear; private int activeMonth; -- cgit v1.2.3