diff options
author | Vitaly Takmazov | 2023-11-11 02:24:01 +0300 |
---|---|---|
committer | Vitaly Takmazov | 2023-11-11 03:06:39 +0300 |
commit | 4d51f184da68cf8b70bdd406f0b90f3e758f1607 (patch) | |
tree | 65ec8dc1a1cc5372a525e76128c1d0127155d81e /src/main/java/com/juick/www/api | |
parent | 6312fe07447c7a28704632e30902d55db52ecd63 (diff) |
Stats cache
Diffstat (limited to 'src/main/java/com/juick/www/api')
6 files changed, 18 insertions, 40 deletions
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<String, String> 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<String> inbound; private List<String> 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; |